tokenbridge/oracle/docs/stress-testing.md
Przemyslaw Rzad d656025378
Update the token-bridge sub-repo (#19)
* Moved audit to root directory.

* Moved code of conduct, contributing and licence files.

* Removed travis config and badge.

* Updated repository links in CONTRIBUTING.

* Moved Gitter badge to main readme. Updated links to contributing and licence.

* Updated main readme.

* Moved references to main readme.

* Renamed token-bridge to oracle.

* Update README.md

Co-Authored-By: rzadp <rzadp@student.mini.pw.edu.pl>
2019-05-07 16:52:44 +02:00

2.7 KiB

Stress testing

Prerequisites

Geth (home) setup

In one terminal, initialize the geth chain using this genesis.json

{
    "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0,
        "eip160Block": 0,
        "byzantiumBlock": 0
    },
    "difficulty": "100000",
    "gasLimit": "0x1000000000",
    "alloc": {
        "0xaaB52d66283F7A1D5978bcFcB55721ACB467384b": { "balance": "1000000000000000000000" },
        "0xbb140FbA6242a1c3887A7823F7750a73101383e3": { "balance": "1000000000000000000000" }
    }
}

and run this command:

geth --datadir ./data init genesis.json

Then start the node:

geth --datadir ./data --networkid 15 --rpc --rpcapi eth,web3,net

After doing this, you can enable the mining mode by doing:

geth attach --datadir ./data --exec "miner.setEtherbase('0xaaB52d66283F7A1D5978bcFcB55721ACB467384b'); miner.start(1)"

And you can disable it by doing:

geth attach --datadir ./data --exec "miner.stop()"

Parity (foreign) setup

Start a parity node using the docker image in the e2e/parity directory. Assuming that this image has been built and that the image name is my-parity, run:

docker run -p 8546:8545 my-parity

Deploy contracts and start the bridge

Set the geth node in mining mode. Set http://localhost:8545 as the home RPC URL, http://localhost:8546 as the foreign RPC URL and 0xaaB52d66283F7A1D5978bcFcB55721ACB467384b as the deployer and validator. Deploy the contracts.

To start the bridge, you can do npm run dev, or you can start all the scripts separately.

Generate a block with several transactions

Stop the mining in the node. Then, generate 1000 transactions by doing node scripts/sendUserTxToHome.js 1000. After checking that the node received all the transactions, start the mining again.

This will generate a block with 1000 transactions that the bridge will process.

Generate statistics

After doing all of this, run node scripts/compute-stats.js. This will print some statistics about the processed transactions.

Statistics results

Signature Requests

Tests 1 2 3 4 5 AVG
count 1000 1000 1000 1000 1000 1000
mean 12112 17714 15377 16468 15745 15483
median 11968 17925 15518 16994 15931 15667
min 5584 6423 5803 6121 6090 6004
max 18685 27554 23844 25310 24198 23918

Collected Signatures

Tests 1 2 3 4 5 AVG
count 1000 1000 1000 1000 1000 1000
mean 8564 5399 6653 9684 9605 7981
median 8771 5971 7295 9854 10056 8389
min 7301 2783 3003 8331 7165 5716
max 9156 7453 9492 10889 10687 9535