{"id":42598993,"url":"https://github.com/nspcc-dev/neo-bench","last_synced_at":"2026-01-29T00:16:20.065Z","repository":{"id":38368103,"uuid":"241609254","full_name":"nspcc-dev/neo-bench","owner":"nspcc-dev","description":"Neo Blockchain Benchmark toolkit","archived":false,"fork":false,"pushed_at":"2026-01-22T13:20:18.000Z","size":9671,"stargazers_count":10,"open_issues_count":12,"forks_count":3,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-01-23T03:44:42.759Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nspcc-dev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-02-19T11:51:47.000Z","updated_at":"2026-01-22T13:20:22.000Z","dependencies_parsed_at":"2024-03-14T06:31:34.911Z","dependency_job_id":"b08101b0-825d-444e-9aab-d029e6dc4c4d","html_url":"https://github.com/nspcc-dev/neo-bench","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/nspcc-dev/neo-bench","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nspcc-dev%2Fneo-bench","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nspcc-dev%2Fneo-bench/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nspcc-dev%2Fneo-bench/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nspcc-dev%2Fneo-bench/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nspcc-dev","download_url":"https://codeload.github.com/nspcc-dev/neo-bench/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nspcc-dev%2Fneo-bench/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28857415,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T22:56:21.783Z","status":"ssl_error","status_checked_at":"2026-01-28T22:56:00.861Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-29T00:16:19.224Z","updated_at":"2026-01-29T00:16:20.049Z","avatar_url":"https://github.com/nspcc-dev.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Neo Blockchain benchmark (Neo 3 version)\n\n## Requirements\n\n- make\n- any Docker version that includes Compose V2 (for Mac, Windows and Linux desktop versions, see the [installation instructions](https://docs.docker.com/compose/install/?_gl=1*uflyxz*_ga*MTE3MDkzODg4Ny4xNzA5MDM4MDA0*_ga_XJWPQMJYHQ*MTcxMzgwNTA0MC4yMC4xLjE3MTM4MDY5MDQuNjAuMC4w#installation-scenarios))\n- Docker Compose V2 plugin (for Linux, if Docker Engine and Docker CLI are installed, see the [installation instructions](https://docs.docker.com/compose/install/?_gl=1*uflyxz*_ga*MTE3MDkzODg4Ny4xNzA5MDM4MDA0*_ga_XJWPQMJYHQ*MTcxMzgwNTA0MC4yMC4xLjE3MTM4MDY5MDQuNjAuMC4w#scenario-two-install-the-compose-plugin))\n- Golang 1.20+\n\n## Repository structure\n\n- .docker - contains docker files\n    - build - build folder for docker images\n    - ir - contains IR docker files\n    - rpc - contains RPC / Benchmark docker files\n- .make - contains makefile specific files\n- cmd - contains Benchmark source code\n    - bench - Benchmark command source code\n    - gen - Transaction generator source code \n    - internal - common code, that used in bench tool and generator\n    - go.mod - golang modules file\n    - go.sum - golang modules summary file\n- .gitignore\n- Makefile \n- README.md\n\n## Usage example (local benchmark + NeoGo single node)\n\n1. Build the benchmark images and binary file with the following command:\n```\n$ make build\n=\u003e Building Bench image registry.nspcc.ru/neo-bench/neo-bench:bench\nsha256:b08f9fd42198be6c351d725543ac1e451063d18018a738f2446678a0cdf8ee78\n=\u003e Building Go Node image registry.nspcc.ru/neo-bench/neo-go:bench\nsha256:2bf655747dfa06b85ced1ad7f0257128e7261e6d16b2c8087bc16fd27fcb3a6d\n=\u003e Building Sharp Node image registry.nspcc.ru/neo-bench/neo-sharp:bench\nsha256:a6ed753e8f81fedf8a9be556e60c6a41e385dd1ab2c90755ab44e2ceab92bca2\n=\u003e Building Bench binary file\n+ export GOGC=off\n+ GOGC=off\n+ export CGO_ENABLED=0\n+ CGO_ENABLED=0\n+ go -C cmd build -v -o bin/bench -trimpath ./bench\n```\n\n2. Run `test` target for a test run:\n```\n$ make test\n./runner.sh --validators 1 -d \"GoSingle\" -m wrk -w 30 -z 5m -t 30s\nmake[1]: Entering directory '/home/anna/Documents/GitProjects/nspcc-dev/neo-bench'\n=\u003e Stop environment\n=\u003e Generate configurations for single-node and four-nodes networks from templates\n+ cd ./cmd\n+ go run ./config/ --go-template go.protocol.template.yml --go-db leveldb --sharp-template sharp.protocol.template.yml --sharp-db LevelDBStore\ncreating: 3115231476/go.protocol.template.yml\ncreating: 3115231476/go.protocol.template.yml\ncreating: 3115231476/sharp.protocol.template.yml\ncreating: 3115231476/sharp.protocol.template.yml\nmake[1]: Leaving directory '/home/anna/Documents/GitProjects/nspcc-dev/neo-bench' \n[+] Creating 3/1\n ✔ Network neo_go_network  Created                                                                                                                                                                            0.1s \n ✔ Container ir-node-1     Created                                                                                                                                                                            0.1s \n ✔ Container ir-healthy-1  Created                                                                                                                                                                            0.0s \n[+] Running 2/2\n ✔ Container ir-node-1     Healthy                                                                                                                                                                            5.7s \n ✔ Container ir-healthy-1  Started                                                                                                                                                                            0.2s \n2024/04/22 17:03:33 Used [node:20331] rpc addresses\n2024/04/22 17:03:33 Run benchmark for GoSingle :: NEO-GO\n2024/04/22 17:03:34 Read 3000000 txs from /dump.txs\n2024/04/22 17:03:36 CPU: 0.025%, Mem: 23.242MB\n2024/04/22 17:03:38 CPU: 0.286%, Mem: 23.469MB\n2024/04/22 17:03:40 CPU: 0.031%, Mem: 23.781MB\n2024/04/22 17:03:41 Done 6.858495874s\n2024/04/22 17:03:41 Init 30 workers / 5m0s time limit (3000000 txs will try to send)\n2024/04/22 17:03:41 Prepare chain for benchmark\n2024/04/22 17:03:41 Determined validators count: 1\n2024/04/22 17:03:41 Sending NEO and GAS transfer tx\n2024/04/22 17:03:41 Contract hash: ceb508fc02abc2dc27228e21976699047bbbcce0\n2024/04/22 17:03:41 Sending contract deploy tx\n2024/04/22 17:03:41 Contract was persisted: false\n2024/04/22 17:03:42 Contract was persisted: false\n2024/04/22 17:03:42 CPU: 0.155%, Mem: 24.777MB\n2024/04/22 17:03:42 Contract was persisted: true\n2024/04/22 17:03:42 fetch current block count\n2024/04/22 17:03:42 Waiting for an empty block to be processed\n2024/04/22 17:03:43 Started test from block = 17 at unix time = 1713805423759\n2024/04/22 17:03:44 empty block: 17\n2024/04/22 17:03:44 CPU: 37.295%, Mem: 38.734MB\n2024/04/22 17:03:45 #18: 13690 transactions in 1011 ms - 13541.048467 tps\n2024/04/22 17:03:46 CPU: 64.889%, Mem: 131.801MB\n2024/04/22 17:03:46 #19: 13440 transactions in 1045 ms - 12861.244019 tps\n2024/04/22 17:03:48 #20: 13625 transactions in 1036 ms - 13151.544402 tps\n2024/04/22 17:03:48 CPU: 64.515%, Mem: 141.691MB\n2024/04/22 17:03:49 #21: 14820 transactions in 1036 ms - 14305.019305 tps\n2024/04/22 17:03:50 #22: 12248 transactions in 1042 ms - 11754.318618 tps\n2024/04/22 17:03:50 CPU: 55.543%, Mem: 165.152MB\n\n...\n\n2024/04/22 17:08:37 CPU: 84.711%, Mem: 703.641MB\n2024/04/22 17:08:38 #287: 10736 transactions in 1013 ms - 10598.223100 tps\n2024/04/22 17:08:39 #288: 8970 transactions in 1030 ms - 8708.737864 tps\n2024/04/22 17:08:39 CPU: 85.515%, Mem: 734.520MB\n2024/04/22 17:08:40 #289: 8333 transactions in 1032 ms - 8074.612403 tps\n2024/04/22 17:08:41 #290: 8100 transactions in 1029 ms - 7871.720117 tps\n2024/04/22 17:08:41 CPU: 82.350%, Mem: 802.832MB\n2024/04/22 17:08:42 #291: 8139 transactions in 1034 ms - 7871.373308 tps\n2024/04/22 17:08:43 #292: 6965 transactions in 1036 ms - 6722.972973 tps\n2024/04/22 17:08:43 CPU: 86.500%, Mem: 851.633MB\n2024/04/22 17:08:43 all request workers stopped\n2024/04/22 17:08:43 Sent 2429426 transactions in 5m0.004691002s\n2024/04/22 17:08:43 RPS: 8097.960\n2024/04/22 17:08:43 All transactions have been sent successfully\n2024/04/22 17:08:43 RPC Errors: 0 / 0.000%\n2024/04/22 17:08:43 sender worker stopped\n2024/04/22 17:08:44 #293: 8023 transactions in 1033 ms - 7766.698935 tps\n2024/04/22 17:08:44 #294: 3611 transactions in 1023 ms - 3529.814272 tps\n2024/04/22 17:08:44 parser worker stopped\n2024/04/22 17:08:44 try to write profile\nGoSingle :: NEO-GO / 30 wrk / 5m0s\n\nTXs ≈ 2429426\nRPS ≈ 8097.960\nRPC Errors  ≈ 0 / 0.000%\nTPS ≈ 8079.692\nDefaultMSPerBlock = 1000\n\nCPU ≈ 72.766%\nMem ≈ 518.845MB\n```\n\n3. Check the test run results:\n```\n$ cat .docker/rpc/out/GoSingle_wrk_30.log\nGoSingle :: NEO-GO / 30 wrk / 5m0s\n\nTXs ≈ 1000000\nRPS ≈ 12783.740\nRPC Errors  ≈ 0 / 0.000%\nTPS ≈ 12631.047\nDefaultMSPerBlock = 1000\n\nCPU ≈ 63.366%\nMem ≈ 275.360MB\n\nMillisecondsFromStart, CPU, Mem\n2005.115, 0.034%, 26.766MB\n4015.739, 0.348%, 27.668MB\n6027.083, 47.061%, 52.148MB\n8034.887, 72.988%, 187.363MB\n...\n\nDeltaTime, TransactionsCount, TPS\n1010, 16331, 16169.307\n1043, 20012, 19186.961\n1038, 18998, 18302.505\n1052, 19018, 18077.947\n...\n```\n\n4. Explore and run different benchmark configurations via the set of `make` boilerplate targets:\n```\n$ make start.GoFourNodes100wrk\n$ make start.GoFourNodes300rate\n$ make start.GoSingle30wrk\n$ make start.SharpFourNodes50rate\n$ make start.SharpFourNodesGoRPC30wrk\n$ make start.MixedFourNodesGoRPC50rate\n...\n```\n... or use the `runner.sh` script for custom benchmark setup:\n```\n$ ./runner.sh -h\n$ ./runner.sh -d \"Go4x1\" -m wrk -w 30 -z 5m -t 30s\n$ ./runner.sh --validators 1 --nodes sharp -d \"SharpSingle\" -m rate -q 25 -z 5m -t 30s\n$ ./runner.sh --nodes mixed -d \"MixedGoRPC4x1\" -m rate -q 50 -z 5m -t 30s\n...\n```\n## Usage example (local benchmark + external cluster)\n\nNeoBench can be run in a stand-alone mode (loader only) to benchmark some\nexternal network. NeoBench expects external network to be launched with the\nknown set of validators and committee (with wallets from `./docker/ir/`) and do\nnot contain any transactions in the network (to successfully perform initial\nNEO/GAS transfers). In this setup the loader will be launched as a system\nprocess, without Docker container. You have to provide endpoint(-s) of RPC\nnode(-s) from the external network to the loader instance on start. The loader\nwill use the provided RPC endpoints to send transactions to the network.\n\n1. Build the benchmark binary file with the following command:\n```\n$ make build\n=\u003e Building Bench image registry.nspcc.ru/neo-bench/neo-bench:bench\nsha256:b08f9fd42198be6c351d725543ac1e451063d18018a738f2446678a0cdf8ee78\n=\u003e Building Go Node image registry.nspcc.ru/neo-bench/neo-go:bench\nsha256:2bf655747dfa06b85ced1ad7f0257128e7261e6d16b2c8087bc16fd27fcb3a6d\n=\u003e Building Sharp Node image registry.nspcc.ru/neo-bench/neo-sharp:bench\nsha256:a6ed753e8f81fedf8a9be556e60c6a41e385dd1ab2c90755ab44e2ceab92bca2\n=\u003e Building Bench binary file\n+ export GOGC=off\n+ GOGC=off\n+ export CGO_ENABLED=0\n+ CGO_ENABLED=0\n+ go -C cmd build -v -o bin/bench -trimpath ./bench\n```\n\n2. Run benchmarks using the `runner.sh` script with RPC address(-es) of the\n   external network and `--external` flag set:\n```\n$ ./runner.sh -e -d \"Go4x1\" -m rate -q 1000 -z 5m -t 30s -a 192.168.1.100:20331 -a 192.168.1.101:20331\n```\n\n## Benchmark usage\n\n````\n  -h, --help                       Show usage message.\n  -d, --desc string                Benchmark description. (default \"unknown benchmark\")\n  -o, --out string                 Path where report would be written. (default \"report.log\")\n  -m, --mode                       Benchmark mode.\n                                   Example: -m wrk --mode rate (default \"rate\")\n  -w, --workers int                Number of used workers.\n                                   Example: -w 10 -w 15 -w 40 (default 30)\n  -z, --timeLimit duration         The time limit when an application can send requests.\n                                   When the time limit is reached, application stops send requests and wait for parsing transactions.\n                                   Examples: -z 10s -z 3m (default 30s)\n  -q, --rateLimit int              QPS - queries per second, rate limit (default 1000)\n  -c, --concurrent int             Number of used cpu cores.Example: -c 4 --concurrent 8 (default 4)\n  -a, --rpcAddress                 RPC addresses for RPC calls to test nodes.\n                                   You can specify multiple addresses.\n                                   Example -a 127.0.0.1:80 -a 127.0.0.2:8080 (default [127.0.0.1:20331])\n  -t, --request_timeout duration   Request timeout.\n                                   Used for RPC requests.\n                                   Example: -t 30s --request_timeout 15s (default 30s)\n  -i, --in                         Path to input file to load transactions.\n                                   Example: -i ./dump.txs --in /path/to/import/transactions\n      --vote                       Vote before the bench.\n      --disable-stats              Disable memory and CPU usage statistics collection.\n````\n\n## Makefile usage\n\n```\n  make \u003ctarget\u003e\n\n   Targets:\n   \n       build     Build all images\n       config    Generate configurations for single-node and four-nodes networks from templates\n       gen       Generate `dump.txs` (run it before any benchmarks)\n       help      Show this help prompt\n       prepare   Generate transactions and nodes configurations for four-nodes network\n       pull      Pull images from registry\n       push      Push all images to registry\n       start     Runs benchmark for all default single-node and four-nodes C# and Go networks. Use `make start.\u003coption\u003e` to run tests separately\n       stop      Stop all containers\n       test      Test local benchmark (go run) with Neo single node\n```\n\nThe following default configurations are available:\n\n| Make target | Configuration description |\n| --- | --- |\n| `start` | Runs benchmark for all default single-node and four-nodes C# and Go networks. |\n| `start.GoSingle10wrk` | Runs benchmark for single-node Go privat network under the load of 10 workers. |\n| `start.GoSingle30wrk` | Runs benchmark for single-node Go privat network under the load of 30 workers. |\n| `start.GoSingle100wrk` | Runs benchmark for single-node Go privat network under the load of 100 workers. |\n| `start.GoSingle25rate` | Runs benchmark for single-node Go privat network under the load of 25 requests per second. |\n| `start.GoSingle50rate` | Runs benchmark for single-node Go privat network under the load of 50 requests per second. |\n| `start.GoSingle60rate` | Runs benchmark for single-node Go privat network under the load of 60 requests per second. |\n| `start.GoSingle300rate` | Runs benchmark for single-node Go privat network under the load of 300 requests per second. |\n| `start.GoSingle1000rate` | Runs benchmark for single-node Go privat network under the load of 1000 requests per second. |\n| `start.GoFourNodes10wrk` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 10 workers. |\n| `start.GoFourNodes30wrk` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 30 workers. |\n| `start.GoFourNodes100wrk` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 100 workers. |\n| `start.GoFourNodes25rate` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 25 requests per second. |\n| `start.GoFourNodes50rate` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 50 requests per second. |\n| `start.GoFoutNodes60rate` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 60 requests per second. |\n| `start.GoFoutNodes300rate` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 300 requests per second. |\n| `start.GoFoutNodes1000rate` | Runs benchmark for four-nodes Go privat network with Go RPC node under the load of 1000 requests per second. |\n| `start.SharpSingle10wrk` | Runs benchmark for single-node C# privat network under the load of 10 workers. |\n| `start.SharpSingle30wrk` | Runs benchmark for single-node C# privat network under the load of 30 workers. |\n| `start.SharpSingle100wrk` | Runs benchmark for single-node C# privat network under the load of 100 workers. |\n| `start.SharpSingle25rate` | Runs benchmark for single-node C# privat network under the load of 25 requests per second. |\n| `start.SharpSingle50rate` | Runs benchmark for single-node C# privat network under the load of 50 requests per second. |\n| `start.SharpSingle60rate` | Runs benchmark for single-node C# privat network under the load of 60 requests per second. |\n| `start.SharpSingle300rate` | Runs benchmark for single-node C# privat network under the load of 300 requests per second. |\n| `start.SharpSingle1000rate` | Runs benchmark for single-node C# privat network under the load of 1000 requests per second. |\n| `start.SharpFourNodes10wrk` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 10 workers. |\n| `start.SharpFourNodes30wrk` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 30 workers. |\n| `start.SharpFourNodes100wrk` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 100 workers. |\n| `start.SharpFourNodes25rate` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 25 requests per second. |\n| `start.SharpFourNodes50rate` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 50 requests per second. |\n| `start.SharpFoutNodes60rate` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 60 requests per second. |\n| `start.SharpFoutNodes300rate` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 300 requests per second. |\n| `start.SharpFoutNodes1000rate` | Runs benchmark for four-nodes C# privat network with C# RPC node under the load of 1000 requests per second. |\n| `start.SharpFourNodesGoRPC10wrk` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 10 workers. |\n| `start.SharpFourNodesGoRPC30wrk` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 30 workers. |\n| `start.SharpFourNodesGoRPC100wrk` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 100 workers. |\n| `start.SharpFourNodesGoRPC25rate` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 25 requests per second. |\n| `start.SharpFourNodesGoRPC50rate` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 50 requests per second. |\n| `start.SharpFoutNodesGoRPC60rate` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 60 requests per second. |\n| `start.SharpFoutNodesGoRPC300rate` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 300 requests per second. |\n| `start.SharpFoutNodesGoRPC1000rate` | Runs benchmark for four-nodes C# privat network with Go RPC node under the load of 1000 requests per second. |\n\n## Runner usage (`./runner.sh`)\n\n```\n   -v, --validators                 Consensus node count.\n                                    Possible values: 1, 4 (default), 7.\n   -n, --nodes                      Consensus node type.\n                                    Possible values: go (default), mixed, sharp.\n   -r, --rpc                        RPC node type. Default is the same as --nodes.\n   -h, --help                       Show usage message.\n   -b, --benchmark                  Benchmark type.\n                                    Possible values: NEO (default) or GAS\n       --from                       Number of tx senders (default: 1)\n       --to                         Number of fund receivers (default: 1)\n       --vote                       Whether or not candidates should be voted for before the bench.\n   -d                               Benchmark description.\n   -m                               Benchmark mode. Possible values: rate, wrk. In rate mode, -q and -w flags should be specified. In wrk mode, only -w flag should be specified.\n                                    Example: -m wrk -m rate\n   -w                               Number of used workers.\n                                    Example: -w 10 -w 15 -w 40\n   -z                               The time limit when an application can send requests.\n                                    When the time limit is reached, application stops send requests and wait for parsing transactions.\n                                    Examples: -z 10s -z 3m\n   -q                               QPS - queries per second, rate limit\n   -c                               Number of used cpu cores.\n                                    Example: -c 4\n   -a                               RPC addresses for RPC calls to test nodes.\n                                    You can specify multiple addresses.\n                                    Example -a 127.0.0.1:80 -a 127.0.0.2:8080\n   -t                               Request timeout.\n                                    Used for RPC requests.\n                                    Example: -t 30s\n   -l, --log                        Container logging facility. Default value is none.\n                                    Example: -l journald -l syslog -l json-file\n       --tc                         Arguments to pass to 'tc qdisc netem' inside the container.\n                                    Example: 'delay 100ms'\n       --msPerBlock                 Protocol setting specifying the minimal (and targeted for) time interval between blocks. Must be an integer number of milliseconds.\n                                    The default value is set in configuration templates and is 1s and 5s for single node and multinode setup respectively.\n                                    Example: --msPerBlock 3000\n   -e, --external                   Use external network for benchmarking. Default is false. -a flag should be used to specify RPC addresses.\n\n```\n\n## Build options\n\nBy default, neo-bench uses released versions of Neo nodes to build Docker images.\nHowever, you can easily test non-released branches or even separate commits for both Go and C# Neo nodes.\n`--external` flag should be used for external network benchmarks to run the loader in a standalone mode without Docker container.\n\n### Build Go node image from sources\n\nTo test non-released version of Go Neo node:\n\n1. Set `ARG REV` variable of \n[Go node Dockerfile](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/build/Dockerfile.golang#L9)\nto the desired branch, tag or commit from the [neo-go github repository](https://github.com/nspcc-dev/neo-go).\nExample:\n```\nARG REV=\"v0.91.0\"\n```\n\n2. Build Go Neo node image with the following command:\n```\n$   make build\n```\n\n### Build C# node image from sources\n\nUse this way to test non-released version of C# node. Here we build all the neo, neo-vm, neo-node and neo-modules\nprojects with their MyGet dependencies from the source commit.\n\n1. Set `DF_SHARP` variable of [neo-bench Makefile](https://github.com/nspcc-dev/neo-bench/blob/master/Makefile#L18)\nto `.docker/build/Dockerfile.sharp.sources`.\n\n2. Set `REVISION` environmental variable of\n[C# node sources Dockerfile](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/build/Dockerfile.sharp.sources#L12)\nto the desired branch, tag or commit from the neo-project/neo GitHub repository.\n\n3. C# node image includes `LevelDBStore`, `DBFTPlugin` and `RpcServer` plugins by default. If you need to install other\nplugins, add desired plugin name to [`MODULES`](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/build/Dockerfile.sharp.sources#L19)\nvariable of C# node-sources Dockerfile. This will use `dotnet build` command to build the specified plugin.\n\n4. Build C# Neo node image with the following command:\n   ```\n   $   make build\n   ```\n   \n## Nodes configurations\n\nNodes configuration files are built from templates for better maintenance and flexibility.\nTemplate files describe application and protocol settings for single node, four nodes and RPC node which are used to run benchmarks.\n[go.protocol.template.yml](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/ir/go.protocol.template.yml)\nis a configuration template for Golang Neo nodes, [sharp.protocol.template.yml](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/ir/sharp.protocol.template.yml)\nis a template for C# Neo node and [template.data.yml](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/ir/template.data.yml)\ncontains a set of common data used by both Golang and C# node configurations.\n\nWe use [Yaml Templating Tool](https://github.com/k14s/ytt) to generate plain YAML and JSON files from the given templates.\nIt is quite intuitive, so if you'd like to change any node settings, just edit the corresponding configuration template and re-generate configuration files by using the following make command:\n```\n   $   make config\n```\n\nTo add one more node configuration, provide all necessary information to the `node_info` list of [template.data.yml](https://github.com/nspcc-dev/neo-bench/blob/master/.docker/ir/template.data.yml), e.g.:\n```\n- node_name: five\n    node_port: 20337\n    node_rpc_port: 30337\n    node_monitoring_port: 20005\n    node_pprof_port: 30005\n    node_prometheus_port: 40005\n    validator_hash: \"02a7bc55fe8684e0119768d104ba30795bdcc86619e864add26156723ed185cd62\"\n    wallet_password: \"five\"\n```\n\n## Environment variables\n\nName|Description| Default |Example\n---|---|---------|---\nNEOBENCH_LOGGER|Container logging facility| `none`  |`none`, `journald`, `syslog`,`json-file`\nNEOBENCH_TC|Parameters passed to the `tc qdisc` (netem discipline) on container startup|         |`delay 100ms`\nNEOBENCH_TYPE|Type of the load| `NEO`   |`NEO`, `GAS`\nNEOBENCH_FROM_COUNT|Number of tx senders| `1`     | `1`\nNEOBENCH_TO_COUNT|Number of fund receivers| `1`     | `1`\nNEOBENCH_VALIDATOR_COUNT|Number of validators| `4`     | `1`, `4`, `7`\nNEOBENCH_VOTE|Vote for validators before the bench| empty   |`1` or empty\n\nFor MacOS NEOBENCH_LOGGER should be set to `json-file` as `journald` and\n`syslog` are not supported by this architecture.\n\n## Benchmark results visualisation\n\nThere's a Python plotting script available for benchmark data visualisation. \nWe are mostly concerned about transactions per second (TPS), transactions per block (TPB), \nmilliseconds per block, CPU and Memory dependencies during benchmarking, so these are five types\nof plots to be visualised.\n\n### How to plot\n\n1. Check that all benchmark logs are placed into the `.docker/ir/out/` folder (that's a default location for log files).\n\n2. Edit `files_batch` variable in the [plot.py](https://github.com/nspcc-dev/neo-bench/blob/master/plot.py)\npython script in order to include desired benchmark logs from the step 1 with the corresponding names.\n   \n3. Run the command `$    python3 plot.py .docker/ir/out/` where `.docker/ir/out/` is the logs source folder from step 1.\n\nThe resulting images will be saved to `./img/` folder.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnspcc-dev%2Fneo-bench","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnspcc-dev%2Fneo-bench","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnspcc-dev%2Fneo-bench/lists"}