March 2nd 2022
Summary
This test was done to measure the SC ERC20 token transfers and SC ERC721 token minting functionality with heavy loads and speed of the transactions.
The goal was to check if everything was working as expected during heavy loads. That was also the reason we’ve introduced gas metrics in the loadbot output, which shows 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 not to strive to reach a maximum possible TPS, since block gas limit & block time are set to sane values that don't consume much system resources, and would allow this to run on commodity hardware.
Results ERC20
Metric | Value |
---|---|
Transaction type | ERC20 |
Transactions per second | 65 |
Transactions failed | 0 |
Transactions succeeded | 5000 |
ERC20 transaction run time | 76.681690s |
SC Deploy time | 4.048250s |
Results ERC721
Metric | Value |
---|---|
Transaction type | ERC721 |
Transactions per second | 20 |
Transactions failed | 0 |
Transactions succeeded | 2000 |
ERC721 transaction run time | 97.239920s |
SC Deploy time | 3.048970s |
Environment ERC20
Host Configuration
Cloud provider | AWS |
Instance size | t2.micro |
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 | Commit 8a033aa1afb191abdac04636d318f83f32511f3c on develop branch |
Validator nodes | 6 |
Non-validator nodes | 0 |
Consensus | IBFT PoA |
Block time | 2s |
Block gas limit | 5242880 |
Average block utilization | 95% |
Loadbot Configuration
Total Transactions | 5000 |
Transactions sent per second | 200 |
Type of transactions | ERC20 to ERC20 transfers |
Loadbot log
[COUNT DATA]
Transactions submitted = 5000
Transactions failed = 0
[APPROXIMATE TPS]
Approximate number of transactions per second = 65
[TURN AROUND DATA]
Average transaction turn around = 25.034950s
Fastest transaction turn around = 3.056460s
Slowest transaction turn around = 47.366220s
Total loadbot execution time = 76.681690s
[CONTRACT DEPLOYMENT DATA]
Contract address = 0x7224Dad537291bb6bA277d3e1cCD48cf87B208E7
Total execution time = 4.048250s
Blocks required = 1
Block #557781 = 1 txns (1055769 gasUsed / 5242880 gasLimit) utilization = 20%
Average utilization across all blocks: 20%
[BLOCK DATA]
Blocks required = 29
Block #557783 = 178 txns (5212100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557785 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557786 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557787 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557788 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557789 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557791 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557792 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557793 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557794 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557795 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557797 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557798 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557799 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557800 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557801 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557803 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557804 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557805 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557806 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557807 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557809 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557810 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557811 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557812 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557813 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557815 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557816 = 178 txns (5197100 gasUsed / 5242880 gasLimit) utilization = 99%
Block #557817 = 16 txns (474800 gasUsed / 5242880 gasLimit) utilization = 9%
Average utilization across all blocks: 95%
Environment ERC721
Host Configuration
Cloud provider | AWS |
Instance size | t2.micro |
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 | Commit 8a033aa1afb191abdac04636d318f83f32511f3c on develop branch |
Validator nodes | 6 |
Non-validator nodes | 0 |
Consensus | IBFT PoA |
Block time | 2s |
Block gas limit | 5242880 |
Average block utilization | 94% |
Loadbot Configuration
Total Transactions | 2000 |
Transactions sent per second | 200 |
Type of transactions | ERC721 token mint |
Loadbot log
[COUNT DATA]
Transactions submitted = 2000
Transactions failed = 0
[APPROXIMATE TPS]
Approximate number of transactions per second = 20
[TURN AROUND DATA]
Average transaction turn around = 43.034620s
Fastest transaction turn around = 4.007210s
Slowest transaction turn around = 84.184340s
Total loadbot execution time = 97.239920s
[CONTRACT DEPLOYMENT DATA]
Contract address = 0x79D9167FcCC5087D28B2D0cDA27ffAA23A731F51
Total execution time = 3.048970s
Blocks required = 1
Block #558955 = 1 txns (2528760 gasUsed / 5242880 gasLimit) utilization = 48%
Average utilization across all blocks: 48%
[BLOCK DATA]
Blocks required = 46
Block #558957 = 44 txns (5104824 gasUsed / 5242880 gasLimit) utilization = 97%
Block #558958 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558959 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558960 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558961 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558962 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558963 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558964 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558965 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558966 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558967 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558968 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558969 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558970 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558971 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558972 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558973 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558974 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558975 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558976 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558977 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558978 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558979 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558980 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558981 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558982 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558983 = 13 txns (1505298 gasUsed / 5242880 gasLimit) utilization = 28%
Block #558984 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558985 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558986 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558987 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558988 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558989 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558990 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558991 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558992 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558993 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558994 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558995 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558996 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558997 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558998 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #558999 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #559000 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #559001 = 45 txns (5189970 gasUsed / 5242880 gasLimit) utilization = 98%
Block #559002 = 8 txns (929568 gasUsed / 5242880 gasLimit) utilization = 17%
Average utilization across all blocks: 94%