Skip to content

Commit

Permalink
Merge pull request #11 from ElrondNetwork/development-07-08
Browse files Browse the repository at this point in the history
Decoupling / refactoring and new mocks
  • Loading branch information
andreibancioiu authored Aug 2, 2022
2 parents 5b31305 + 9b7aaed commit 11b77c8
Show file tree
Hide file tree
Showing 28 changed files with 654 additions and 196 deletions.
4 changes: 2 additions & 2 deletions checks/localnet/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,6 @@ rosetta --observer-actual-shard=0 --chain-id=localnet --native-currency=XeGLD --

```
rosetta-cli check:spec --configuration-file localnet-spec.json
rosetta-cli check:data --configuration-file localnet-data-001.json
rosetta-cli check:construction --configuration-file localnet-construction-001.json
rosetta-cli check:data --configuration-file localnet-data.json
rosetta-cli check:construction --configuration-file localnet-construction.json
```
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
},
"stale_depth": 10,
"broadcast_limit": 1,
"constructor_dsl_file": "localnet-construction-001.ros",
"constructor_dsl_file": "localnet-construction.ros",
"prefunded_accounts": [
{
"account_identifier": {
Expand Down
File renamed without changes.
2 changes: 1 addition & 1 deletion checks/localnet/localnet-data-continue.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
"coin_tracking_disabled": false,
"status_port": 9090,
"results_output_file": "",
"pruning_disabled": false,
"pruning_disabled": true,
"initial_balance_fetch_disabled": false,
"historical_balance_disabled": true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"coin_tracking_disabled": false,
"status_port": 9090,
"results_output_file": "",
"pruning_disabled": false,
"pruning_disabled": true,
"initial_balance_fetch_disabled": false,
"historical_balance_disabled": true
}
Expand Down
2 changes: 1 addition & 1 deletion checks/localnet/localnet-spec.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"offline_url": "http://localhost:8092",
"stale_depth": 10,
"broadcast_limit": 5,
"constructor_dsl_file": "localnet-construction-001.ros",
"constructor_dsl_file": "localnet-construction.ros",
"prefunded_accounts": [
{
"account_identifier": {
Expand Down
10 changes: 0 additions & 10 deletions checks/localnet/snippets/adder.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,6 @@ describe("adder snippet", async function () {

it("add", async function () {
this.timeout(FiveMinutesInMilliseconds);
// If the step fails, retry it (using a Mocha utility function).
this.retries(5);

await session.syncUsers([bob]);

Expand Down Expand Up @@ -221,12 +219,4 @@ describe("adder snippet", async function () {
const transactionHash = await provider.sendTransaction(transaction);
return { transaction, transactionHash };
}

it("generate report", async function () {
await session.generateReport();
});

it("destroy session", async function () {
await session.destroy();
});
});
83 changes: 83 additions & 0 deletions checks/localnet/snippets/partial.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
import { DefaultGasConfiguration, GasEstimator, TransactionFactory, TransactionWatcher } from "@elrondnetwork/erdjs";
import { ProxyNetworkProvider } from "@elrondnetwork/erdjs-network-providers/out";
import { FiveMinutesInMilliseconds, IAddress, INetworkConfig, ITestSession, ITestUser, ITransaction, TestSession } from "@elrondnetwork/erdjs-snippets";
import { assert } from "chai";
import { createAdderInteractor } from "./adderInteractor";

// For testing this scenario, a localnet should be used, with altered code (waits / time.Sleep() in processing).
describe("partial", async function () {
this.bail(true);

let session: ITestSession;
let networkProvider: ProxyNetworkProvider;
let networkConfig: INetworkConfig;
let transactionFactory: TransactionFactory;
let transactionWatcher: TransactionWatcher;

// shard(alice) = 1
// shard(bob) = 0
let whale: ITestUser;
let alice: ITestUser;
let bob: ITestUser;

this.beforeAll(async function () {
session = await TestSession.load("localnet", __dirname);
await session.syncNetworkConfig();

networkProvider = <ProxyNetworkProvider>session.networkProvider;
networkConfig = session.getNetworkConfig();
transactionFactory = new TransactionFactory(new GasEstimator(DefaultGasConfiguration));
transactionWatcher = new TransactionWatcher(networkProvider);

whale = session.users.getUser("whale");
alice = session.users.getUser("alice");
bob = session.users.getUser("bob");
});

this.beforeEach(async function () {
session.correlation.step = this.currentTest?.fullTitle() || "";
});

it("setup", async function () {
this.timeout(FiveMinutesInMilliseconds);

await session.syncUsers([alice, bob]);

let addressInShard0 = await deploy(bob);
await session.saveAddress({ name: "adderInShard0", address: addressInShard0 });

let addressInShard1 = await deploy(alice);
await session.saveAddress({ name: "adderInShard1", address: addressInShard1 });
});

async function deploy(deployer: ITestUser): Promise<IAddress> {
let interactor = await createAdderInteractor(session);
let { address, returnCode } = await interactor.deploy(deployer, 42);
assert.isTrue(returnCode.isSuccess());
return address;
}

it("execute many", async function () {
this.timeout(FiveMinutesInMilliseconds);

await session.syncUsers([alice, bob]);

const adderInShard0 = await session.loadAddress("adderInShard0");
const interactor0 = await createAdderInteractor(session, adderInShard0);

const transactions: ITransaction[] = [];

for (let i = 0; i < 10; i++) {
transactions.push(await interactor0.buildTransactionAdd(alice, 1, 30000000));
}

await sendTransactions(transactions);
});

async function sendTransactions(transactions: ITransaction[]): Promise<void> {
const sendableTransactions = transactions.map(item => item.toSendable());
const response = await networkProvider.doPostGeneric("transaction/send-multiple", sendableTransactions);
console.log("Sent transactions:", response.numOfSentTxs);
console.log(response);
}
});
8 changes: 0 additions & 8 deletions checks/localnet/snippets/refunds.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -188,12 +188,4 @@ describe("refunds", async function () {
console.log("Bob to DNS:", transactionHash)
await transactionWatcher.awaitCompleted(transactionBobToDNS);
});

it("generate report", async function () {
await session.generateReport();
});

it("destroy session", async function () {
await session.destroy();
});
});
6 changes: 2 additions & 4 deletions checks/localnet/snippets/scheduled.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ describe("scheduled", async function () {
}

await sendTransactions(transactions);

// TODO: Add some waits. E.g. for the last transaction.
});

it("setup", async function () {
Expand Down Expand Up @@ -151,10 +153,6 @@ describe("scheduled", async function () {
await sendTransactions(transactions);
});

it("destroy session", async function () {
await session.destroy();
});

async function sendTransactions(transactions: ITransaction[]): Promise<void> {
const sendableTransactions = transactions.map(item => item.toSendable());
const response = await networkProvider.doPostGeneric("transaction/send-multiple", sendableTransactions);
Expand Down
3 changes: 1 addition & 2 deletions cmd/rosetta/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"time"

"github.com/ElrondNetwork/rosetta/server/factory"
"github.com/ElrondNetwork/rosetta/server/provider"
"github.com/ElrondNetwork/rosetta/version"
"github.com/coinbase/rosetta-sdk-go/server"
"github.com/urfave/cli"
Expand Down Expand Up @@ -48,7 +47,7 @@ func startRosetta(ctx *cli.Context) error {

log.Info("Starting Rosetta...", "middleware", version.RosettaMiddlewareVersion, "specification", version.RosettaVersion, "node", version.NodeVersion)

networkProvider, err := provider.NewNetworkProvider(provider.ArgsNewNetworkProvider{
networkProvider, err := factory.CreateNetworkProvider(factory.ArgsCreateNetworkProvider{
IsOffline: cliFlags.offline,
NumShards: cliFlags.numShards,
ObservedActualShard: cliFlags.observerActualShard,
Expand Down
24 changes: 24 additions & 0 deletions server/factory/components/disabledExternalConnector.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package components

import (
"github.com/ElrondNetwork/elrond-proxy-go/data"
)

// DisabledExternalStorageConnector is a no-operation external storage connector
type DisabledExternalStorageConnector struct {
}

// GetTransactionsByAddress returns nothing
func (connector *DisabledExternalStorageConnector) GetTransactionsByAddress(address string) ([]data.DatabaseTransaction, error) {
return make([]data.DatabaseTransaction, 0), nil
}

// GetAtlasBlockByShardIDAndNonce returns nothing
func (connector *DisabledExternalStorageConnector) GetAtlasBlockByShardIDAndNonce(shardID uint32, nonce uint64) (data.AtlasBlock, error) {
return data.AtlasBlock{}, nil
}

// IsInterfaceNil returns true if there is no value under the interface
func (connector *DisabledExternalStorageConnector) IsInterfaceNil() bool {
return connector == nil
}
13 changes: 13 additions & 0 deletions server/factory/components/observerFacade.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package components

import (
"github.com/ElrondNetwork/elrond-proxy-go/facade"
"github.com/ElrondNetwork/elrond-proxy-go/process"
)

// ObserverFacade holds (embeds) several components implemented in elrond-proxy-go
type ObserverFacade struct {
process.Processor
facade.TransactionProcessor
facade.BlockProcessor
}
3 changes: 0 additions & 3 deletions server/factory/controllers.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
package factory

import (
logger "github.com/ElrondNetwork/elrond-go-logger"
"github.com/ElrondNetwork/rosetta/server/services"
"github.com/coinbase/rosetta-sdk-go/asserter"
"github.com/coinbase/rosetta-sdk-go/server"
"github.com/coinbase/rosetta-sdk-go/types"
)

var log = logger.GetOrCreate("server/factory")

func CreateControllers(networkProvider services.NetworkProvider) ([]server.Router, error) {
if networkProvider.IsOffline() {
return createOfflineControllers(networkProvider)
Expand Down
34 changes: 34 additions & 0 deletions server/factory/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package factory

import (
"math/big"

"github.com/ElrondNetwork/elrond-go-core/data/transaction"
"github.com/ElrondNetwork/elrond-proxy-go/data"
"github.com/ElrondNetwork/rosetta/server/resources"
)

type networkProvider interface {
IsOffline() bool
GetBlockchainName() string
GetChainID() string
GetNativeCurrency() resources.NativeCurrency
GetObserverPubkey() string
GetNetworkConfig() *resources.NetworkConfig
GetGenesisBlockSummary() *resources.BlockSummary
GetGenesisTimestamp() int64
GetGenesisBalances() ([]*resources.GenesisBalance, error)
GetLatestBlockSummary() (*resources.BlockSummary, error)
GetBlockByNonce(nonce uint64) (*data.Block, error)
GetBlockByHash(hash string) (*data.Block, error)
GetAccount(address string) (*data.AccountModel, error)
IsAddressObserved(address string) (bool, error)
ConvertPubKeyToAddress(pubkey []byte) string
ConvertAddressToPubKey(address string) ([]byte, error)
SendTransaction(tx *data.Transaction) (string, error)
ComputeTransactionHash(tx *data.Transaction) (string, error)
ComputeReceiptHash(apiReceipt *transaction.ApiReceipt) (string, error)
ComputeTransactionFeeForMoveBalance(tx *data.FullTransaction) *big.Int
GetMempoolTransactionByHash(hash string) (*data.FullTransaction, error)
LogDescription()
}
5 changes: 5 additions & 0 deletions server/factory/logging.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package factory

import logger "github.com/ElrondNetwork/elrond-go-logger"

var log = logger.GetOrCreate("server/factory")
Loading

0 comments on commit 11b77c8

Please sign in to comment.