July 4th 2022
Summary
This test was done to measure the SC ERC20 token transfers, SC ERC721 token minting and EOA to EOA transactions functionality with heavy loads and speed of the transactions on the nodes with higher hardware resources.
The goal was to check if everything is working as expected during heavy loads. That was also the reason we’ve introduced gas metrics in the loadbot output, which show us if the blocks are filled with transactions properly.
All transactions were sent to the single node via GRPC API, and the receipts were received via JSON-RPC API. After all transactions were done, gas information was read from each block, using the eth_getBlockByNumber JSON-RPC method.
Our aim was to strive to reach a maximum possible TPS on the hardware resources available. To acheive this, we've modified the block gas limit and block time parameters, to give us the best possible tps results and keep the system integrity and stability.
Production Environments
When configuring a production environment, you need to be carefull if you're trying to acheive high performance of the chain. If block gas limit parameter is set to a high value, block time is set to 1s, and there is a high transaction load on a single node, that node will consume a lot ( if not all available ) RAM and can cause server crash. Use the loadbot to test everything thoroughly, monitor the system resource utilization and set your configuration parameters accordingly.
Results of EOA to EOA transfers
Metric | Value |
---|---|
Transaction type | EOA to EOA |
Transactions per second | 1428 |
Transactions failed | 0 |
Transactions succeeded | 30000 |
Total blocks used | 15 |
Total run time | 21.374620s |
Results of ERC20 token transfers
Metric | Value |
---|---|
Transaction type | ERC20 |
Transactions per second | 1111 |
Transactions failed | 0 |
Transactions succeeded | 50000 |
Total blocks used | 38 |
ERC20 transaction run time | 45.906450s |
SC Deploy time | 2.006580s |
Results of ERC721 token minting
Metric | Value |
---|---|
Transaction type | ERC721 |
Transactions per second | 714 |
Transactions failed | 0 |
Transactions succeeded | 30000 |
Total blocks used | 39 |
ERC721 transaction run time | 42.864140s |
SC Deploy time | 2.005500s |
Environment EOA to EOA
Host Configuration
Cloud provider | AWS EC2 |
Instance size | c6a.48xlarge |
Networking | private subnet |
Operating system | Linux Ubuntu 20.04 LTS - Focal Fossa |
File descriptor limit | 65535 |
Max user processes | 65535 |
Blockchain Configuration
Polygon Edge version | Release v0.4.1 |
Validator nodes | 4 |
Non-validator nodes | 0 |
Consensus | IBFT PoA |
Block time | 1s |
Block gas limit | 70778880 |
Max slots | 276480 |
Average block utilization | 59.34% |
Loadbot Configuration
Total Transactions | 30000 |
Transactions sent per second | 1428 |
Type of transactions | EOA to EOA transfers |
Loadbot log
[COUNT DATA]
Transactions submitted = 30000
Transactions failed = 0
[APPROXIMATE TPS]
Approximate number of transactions per second = 1428
[TURN AROUND DATA]
Average transaction turn around = 4.394900s
Fastest transaction turn around = 1.133980s
Slowest transaction turn around = 7.258690s
Total loadbot execution time = 21.374620s
[BLOCK DATA]
Blocks required = 15
Block #110 = 1268 txns (26628000 gasUsed / 70778880 gasLimit) utilization = 37.62%
Block #111 = 2744 txns (57624000 gasUsed / 70778880 gasLimit) utilization = 81.41%
Block #112 = 2333 txns (48993000 gasUsed / 70778880 gasLimit) utilization = 69.22%
Block #113 = 1326 txns (27846000 gasUsed / 70778880 gasLimit) utilization = 39.34%
Block #114 = 1852 txns (38892000 gasUsed / 70778880 gasLimit) utilization = 54.95%
Block #115 = 2270 txns (47670000 gasUsed / 70778880 gasLimit) utilization = 67.35%
Block #116 = 559 txns (11739000 gasUsed / 70778880 gasLimit) utilization = 16.59%
Block #117 = 3370 txns (70770000 gasUsed / 70778880 gasLimit) utilization = 99.99%
Block #118 = 910 txns (19110000 gasUsed / 70778880 gasLimit) utilization = 27.00%
Block #119 = 3132 txns (65772000 gasUsed / 70778880 gasLimit) utilization = 92.93%
Block #120 = 1207 txns (25347000 gasUsed / 70778880 gasLimit) utilization = 35.81%
Block #121 = 3370 txns (70770000 gasUsed / 70778880 gasLimit) utilization = 99.99%
Block #122 = 2734 txns (57414000 gasUsed / 70778880 gasLimit) utilization = 81.12%
Block #123 = 2737 txns (57477000 gasUsed / 70778880 gasLimit) utilization = 81.21%
Block #124 = 188 txns (3948000 gasUsed / 70778880 gasLimit) utilization = 5.58%
[AVERAGE BLOCK UTILIZATION]
Average utilization across all blocks = 59.34%
Environment ERC20
Host Configuration
Cloud provider | AWS EC2 |
Instance size | c6a.48xlarge |
Networking | private subnet |
Operating system | Linux Ubuntu 20.04 LTS - Focal Fossa |
File descriptor limit | 65535 |
Max user processes | 65535 |
Blockchain Configuration
Polygon Edge version | Release v0.4.1 |
Validator nodes | 4 |
Non-validator nodes | 0 |
Consensus | IBFT PoA |
Block time | 1s |
Block gas limit | 47185920 |
Max slots | 184320 |
Average block utilization | 81.29% |
Loadbot Configuration
Total Transactions | 50000 |
Transactions sent per second | 1111 |
Type of transactions | ERC20 to ERC20 transfers |
Loadbot log
[COUNT DATA]
Transactions submitted = 50000
Transactions failed = 0
[APPROXIMATE TPS]
Approximate number of transactions per second = 1111
[CONTRACT DEPLOYMENT INFO]
Contract address = 0x33123b7a4420798b1D208ABBac657B7b103edbD9
Total execution time = 2.006580s
[CONTRACT DEPLOYMENT BLOCK DATA]
Blocks required = 1
Block #174 = 1 txns (1055757 gasUsed / 47185920 gasLimit) utilization = 2.24%
[TURN AROUND DATA]
Average transaction turn around = 8.856780s
Fastest transaction turn around = 2.006200s
Slowest transaction turn around = 15.977210s
Total loadbot execution time = 45.906450s
[BLOCK DATA]
Blocks required = 38
Block #176 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #177 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #178 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #179 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #180 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #181 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #182 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #183 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #184 = 688 txns (20055200 gasUsed / 47185920 gasLimit) utilization = 42.50%
Block #185 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #186 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #187 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #188 = 317 txns (9240550 gasUsed / 47185920 gasLimit) utilization = 19.58%
Block #189 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #190 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #191 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #192 = 89 txns (2594350 gasUsed / 47185920 gasLimit) utilization = 5.50%
Block #193 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #194 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #195 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #196 = 795 txns (23174250 gasUsed / 47185920 gasLimit) utilization = 49.11%
Block #197 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #198 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #199 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #200 = 594 txns (17315100 gasUsed / 47185920 gasLimit) utilization = 36.70%
Block #201 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #202 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #203 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #204 = 208 txns (6063200 gasUsed / 47185920 gasLimit) utilization = 12.85%
Block #205 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #206 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #207 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #208 = 30 txns (874500 gasUsed / 47185920 gasLimit) utilization = 1.85%
Block #209 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #210 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #211 = 1618 txns (47164700 gasUsed / 47185920 gasLimit) utilization = 99.96%
Block #212 = 177 txns (5159550 gasUsed / 47185920 gasLimit) utilization = 10.93%
Block #213 = 180 txns (5247000 gasUsed / 47185920 gasLimit) utilization = 11.12%
[AVERAGE BLOCK UTILIZATION]
Average utilization across all blocks = 81.29%
Environment ERC721
Host Configuration
Cloud provider | AWS EC2 |
Instance size | c6a.48xlarge |
Networking | private subnet |
Operating system | Linux Ubuntu 20.04 LTS - Focal Fossa |
File descriptor limit | 65535 |
Max user processes | 65535 |
Blockchain Configuration
Polygon Edge version | Release v0.4.1 |
Validator nodes | 4 |
Non-validator nodes | 0 |
Consensus | IBFT PoA |
Block time | 1s |
Block gas limit | 94371840 |
Max slots | 1000000 |
Average block utilization | 93.88% |
Loadbot Configuration
Total Transactions | 30000 |
Transactions sent per second | 714 |
Type of transactions | ERC721 token mint |
Loadbot log
[COUNT DATA]
Transactions submitted = 30000
Transactions failed = 0
[APPROXIMATE TPS]
Approximate number of transactions per second = 714
[CONTRACT DEPLOYMENT INFO]
Contract address = 0x4Ceff7F2f9fC9f150a42AfcabceEDABeB723E56f
Total execution time = 2.005500s
[CONTRACT DEPLOYMENT BLOCK DATA]
Blocks required = 1
Block #59 = 1 txns (2528772 gasUsed / 94371840 gasLimit) utilization = 2.68%
[TURN AROUND DATA]
Average transaction turn around = 13.191620s
Fastest transaction turn around = 2.034710s
Slowest transaction turn around = 23.686180s
Total loadbot execution time = 42.864140s
[BLOCK DATA]
Blocks required = 39
Block #61 = 818 txns (94237644 gasUsed / 94371840 gasLimit) utilization = 99.86%
Block #62 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #63 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #64 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #65 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #66 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #67 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #68 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #69 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #70 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #71 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #72 = 510 txns (58738980 gasUsed / 94371840 gasLimit) utilization = 62.24%
Block #73 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #74 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #75 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #76 = 674 txns (77624892 gasUsed / 94371840 gasLimit) utilization = 82.25%
Block #77 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #78 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #79 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #80 = 179 txns (20621682 gasUsed / 94371840 gasLimit) utilization = 21.85%
Block #81 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #82 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #83 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #84 = 231 txns (26609898 gasUsed / 94371840 gasLimit) utilization = 28.20%
Block #85 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #86 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #87 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #88 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #89 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #90 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #91 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #92 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #93 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #94 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #95 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #96 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #97 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #98 = 819 txns (94322802 gasUsed / 94371840 gasLimit) utilization = 99.95%
Block #99 = 561 txns (64612038 gasUsed / 94371840 gasLimit) utilization = 68.47%
[AVERAGE BLOCK UTILIZATION]
Average utilization across all blocks = 93.88%