From c05405cf630b3271e07f3bd904c8f35a99ad7699 Mon Sep 17 00:00:00 2001 From: Branislav Kojic Date: Thu, 16 May 2024 15:31:34 +0200 Subject: [PATCH] Check `txpool_status` after every Load Test (#236) * Added `txpool status` after every Load Test * Minor fixes * load test fix * load test fixes * Change `txpool_timeout`; Remove unused files * Added MIXED Load Testing * Fix Load Test command * Increased ERC721 LT timeout --------- Co-authored-by: Goran Rojovic --- .github/workflows/load-test.yml | 30 +- .github/workflows/nightly.yml | 81 +++- .../workflows/notification-deploy-network.yml | 21 +- .../notification-destroy-network.yml | 4 - .github/workflows/notification-load-test.yml | 46 ++- .github/workflows/notification-nightly.yml | 69 +++- command/loadtest/load_test_run.go | 2 +- loadtest/contracts/ZexCoinERC20.json | 262 ------------ loadtest/contracts/ZexNFT.json | 376 ------------------ loadtest/helpers/init.js | 38 -- loadtest/runner/base_load_test_runner.go | 22 +- loadtest/runner/erc20_runner.go | 5 +- loadtest/runner/erc721_runner.go | 4 +- loadtest/scenarios/multiple_EOA.js | 108 ----- loadtest/scenarios/multiple_ERC20.js | 111 ------ loadtest/scenarios/simple.js | 51 --- 16 files changed, 214 insertions(+), 1016 deletions(-) delete mode 100644 loadtest/contracts/ZexCoinERC20.json delete mode 100644 loadtest/contracts/ZexNFT.json delete mode 100644 loadtest/helpers/init.js delete mode 100644 loadtest/scenarios/multiple_EOA.js delete mode 100644 loadtest/scenarios/multiple_ERC20.js delete mode 100644 loadtest/scenarios/simple.js diff --git a/.github/workflows/load-test.yml b/.github/workflows/load-test.yml index a056c0f29a..37874e529f 100644 --- a/.github/workflows/load-test.yml +++ b/.github/workflows/load-test.yml @@ -11,7 +11,7 @@ on: # yamllint disable-line rule:truthy type: description: The type of load test to run type: choice - options: [EOA, ERC20, ERC721] + options: [EOA, ERC20, ERC721, MIXED] dynamic: description: Indicates whether the load test should generate dynamic transactions type: boolean @@ -117,6 +117,12 @@ on: # yamllint disable-line rule:truthy max_gas_utilization: description: Maximum Gas Utilization value: ${{ jobs.load_test.outputs.max_gas_utilization }} + txpool_pending: + description: Pending Transactions Count + value: ${{ jobs.txpool_status.outputs.txpool_pending }} + txpool_queued: + description: Queued Transactions Count + value: ${{ jobs.txpool_status.outputs.txpool_queued }} secrets: AWS_ROLE_ARN: required: true @@ -239,9 +245,25 @@ jobs: if: success() id: load_test_results_success run: echo "test_output=true" >> $GITHUB_OUTPUT + txpool_status: + name: Check txpool status after Load Test + runs-on: ubuntu-latest + needs: [check_network, load_test] + outputs: + txpool_pending: ${{ steps.txpool_status_results.outputs.txpool_pending }} + txpool_queued: ${{ steps.txpool_status_results.outputs.txpool_queued }} + steps: + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + - name: Get txpool status + id: txpool_status_results + run: | + txpool_status=$(cast rpc --rpc-url "http://${{ needs.check_network.outputs.rpc_url }}" txpool_status | jq) + echo "txpool_pending=$(echo $txpool_status | jq -r '.pending')" >> $GITHUB_OUTPUT + echo "txpool_queued=$(echo $txpool_status | jq -r '.queued')" >> $GITHUB_OUTPUT notification: name: Load Test Notification - needs: load_test + needs: [load_test, txpool_status] uses: ./.github/workflows/notification-load-test.yml if: (always() && inputs.notification && needs.load_test.outputs.test_output_success == 'true') with: @@ -263,12 +285,14 @@ jobs: avg_gas_per_tx: ${{ needs.load_test.outputs.avg_gas_per_tx }} avg_gas_utilization: ${{ needs.load_test.outputs.avg_gas_utilization }} max_gas_utilization: ${{ needs.load_test.outputs.max_gas_utilization }} + txpool_pending: ${{ needs.txpool_status.outputs.txpool_pending }} + txpool_queued: ${{ needs.txpool_status.outputs.txpool_queued }} secrets: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} destroy_load_test_runner: name: Destroy Load Test Runner environment: ${{ inputs.environment }} - needs: [load_test_runner, load_test] + needs: [load_test_runner, load_test, txpool_status] if: always() runs-on: ubuntu-latest steps: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 596dc23499..c5ca471ed5 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -46,7 +46,7 @@ jobs: dynamic: true vus: "100" txs_per_user: "10000" - txpool_timeout: "60m0s" + txpool_timeout: "15m0s" wait_txpool: false receipts_timeout: "2m0s" batch_size: "10000" @@ -70,7 +70,7 @@ jobs: dynamic: true vus: "100" txs_per_user: "10000" - txpool_timeout: "60m0s" + txpool_timeout: "20m0s" wait_txpool: false receipts_timeout: "2m0s" batch_size: "10000" @@ -94,6 +94,30 @@ jobs: dynamic: true vus: "100" txs_per_user: "10000" + txpool_timeout: "55m0s" + wait_txpool: false + receipts_timeout: "2m0s" + batch_size: "10000" + notification: false + secrets: + AWS_ROLE_ARN: ${{ secrets.AWS_ROLE_ARN }} + AWS_S3_BLADE_BUCKET: ${{ secrets.AWS_S3_BLADE_BUCKET }} + AWS_LOADTESTRUNNER_AMI_ID: ${{ secrets.AWS_LOADTESTRUNNER_AMI_ID }} + AWS_LOADTESTRUNNER_SUBNET_ID: ${{ secrets.AWS_LOADTESTRUNNER_SUBNET_ID }} + AWS_LOADTESTRUNNER_SG_ID: ${{ secrets.AWS_LOADTESTRUNNER_SG_ID }} + AWS_LOADTESTRUNNER_MNEMONIC: ${{ secrets.AWS_LOADTESTRUNNER_MNEMONIC }} + PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + load_test_mixed: + name: Load Test MIXED + uses: ./.github/workflows/load-test.yml + needs: [deploy_network, load_test_eoa, load_test_erc20, load_test_erc721] + with: + environment: nightly + type: MIXED + dynamic: true + vus: "100" + txs_per_user: "10000" txpool_timeout: "60m0s" wait_txpool: false receipts_timeout: "2m0s" @@ -111,7 +135,7 @@ jobs: destroy_network: name: Destroy Network uses: ./.github/workflows/destroy-network.yml - needs: [deploy_network, load_test_eoa, load_test_erc20, load_test_erc721] + needs: [deploy_network, load_test_eoa, load_test_erc20, load_test_erc721, load_test_mixed] if: always() with: environment: nightly @@ -124,7 +148,7 @@ jobs: notification_nightly: name: Nightly Notification uses: ./.github/workflows/notification-nightly.yml - needs: [ci, deploy_network, load_test_eoa, load_test_erc20, load_test_erc721, destroy_network] + needs: [ci, deploy_network, load_test_eoa, load_test_erc20, load_test_erc721, load_test_mixed, destroy_network] if: success() || failure() with: environment: nightly @@ -147,8 +171,17 @@ jobs: deploy_network_terraform_output: ${{ needs.deploy_network.outputs.terraform_output }} deploy_network_ansible_output: ${{ needs.deploy_network.outputs.ansible_output }} load_test_eoa_output: ${{ needs.load_test_eoa.outputs.load_test_output }} + load_test_eoa_txpool_pending_output: ${{ needs.load_test_eoa.outputs.txpool_pending }} + load_test_eoa_txpool_queued_output: ${{ needs.load_test_eoa.outputs.txpool_queued }} load_test_erc20_output: ${{ needs.load_test_erc20.outputs.load_test_output }} + load_test_erc20_txpool_pending_output: ${{ needs.load_test_erc20.outputs.txpool_pending }} + load_test_erc20_txpool_queued_output: ${{ needs.load_test_erc20.outputs.txpool_queued }} load_test_erc721_output: ${{ needs.load_test_erc721.outputs.load_test_output }} + load_test_erc721_txpool_pending_output: ${{ needs.load_test_erc721.outputs.txpool_pending }} + load_test_erc721_txpool_queued_output: ${{ needs.load_test_erc721.outputs.txpool_queued }} + load_test_mixed_output: ${{ needs.load_test_mixed.outputs.load_test_output }} + load_test_mixed_txpool_pending_output: ${{ needs.load_test_mixed.outputs.txpool_pending }} + load_test_mixed_txpool_queued_output: ${{ needs.load_test_mixed.outputs.txpool_queued }} destroy_network_logs_output: ${{ needs.destroy_network.outputs.logs_output }} destroy_network_terraform_output: ${{ needs.destroy_network.outputs.terraform_output }} secrets: @@ -165,7 +198,7 @@ jobs: dynamic: true vus: "100" txs_per_user: "10000" - txpool_timeout: "60m0s" + txpool_timeout: "15m0s" wait_txpool: false receipts_timeout: "2m0s" batch_size: "10000" @@ -178,6 +211,8 @@ jobs: avg_gas_per_tx: ${{ needs.load_test_eoa.outputs.avg_gas_per_tx }} avg_gas_utilization: ${{ needs.load_test_eoa.outputs.avg_gas_utilization }} max_gas_utilization: ${{ needs.load_test_eoa.outputs.max_gas_utilization }} + txpool_pending: ${{ needs.load_test_eoa.outputs.txpool_pending }} + txpool_queued: ${{ needs.load_test_eoa.outputs.txpool_queued }} secrets: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} notification_load_test_erc20: @@ -191,7 +226,7 @@ jobs: dynamic: true vus: "100" txs_per_user: "10000" - txpool_timeout: "60m0s" + txpool_timeout: "20m0s" wait_txpool: false receipts_timeout: "2m0s" batch_size: "10000" @@ -204,6 +239,8 @@ jobs: avg_gas_per_tx: ${{ needs.load_test_erc20.outputs.avg_gas_per_tx }} avg_gas_utilization: ${{ needs.load_test_erc20.outputs.avg_gas_utilization }} max_gas_utilization: ${{ needs.load_test_erc20.outputs.max_gas_utilization }} + txpool_pending: ${{ needs.load_test_erc20.outputs.txpool_pending }} + txpool_queued: ${{ needs.load_test_erc20.outputs.txpool_queued }} secrets: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} notification_load_test_erc721: @@ -217,7 +254,7 @@ jobs: dynamic: true vus: "100" txs_per_user: "10000" - txpool_timeout: "60m0s" + txpool_timeout: "55m0s" wait_txpool: false receipts_timeout: "2m0s" batch_size: "10000" @@ -230,5 +267,35 @@ jobs: avg_gas_per_tx: ${{ needs.load_test_erc721.outputs.avg_gas_per_tx }} avg_gas_utilization: ${{ needs.load_test_erc721.outputs.avg_gas_utilization }} max_gas_utilization: ${{ needs.load_test_erc721.outputs.max_gas_utilization }} + txpool_pending: ${{ needs.load_test_erc721.outputs.txpool_pending }} + txpool_queued: ${{ needs.load_test_erc721.outputs.txpool_queued }} + secrets: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + notification_load_test_mixed: + name: Load Test MIXED Notification + uses: ./.github/workflows/notification-load-test.yml + needs: [load_test_mixed, notification_nightly, notification_load_test_eoa, notification_load_test_erc20, notification_load_test_erc721] + if: (always() && needs.load_test_mixed.outputs.load_test_output == 'true') + with: + environment: nightly + type: MIXED + dynamic: true + vus: "100" + txs_per_user: "10000" + txpool_timeout: "60m0s" + wait_txpool: false + receipts_timeout: "2m0s" + batch_size: "10000" + total_time: ${{ needs.load_test_mixed.outputs.total_time }} + total_txs: ${{ needs.load_test_mixed.outputs.total_txs }} + total_blocks: ${{ needs.load_test_mixed.outputs.total_blocks }} + avg_txs_per_second: ${{ needs.load_test_mixed.outputs.avg_txs_per_second }} + max_txs_per_second: ${{ needs.load_test_mixed.outputs.max_txs_per_second }} + total_gas_used: ${{ needs.load_test_mixed.outputs.total_gas_used }} + avg_gas_per_tx: ${{ needs.load_test_mixed.outputs.avg_gas_per_tx }} + avg_gas_utilization: ${{ needs.load_test_mixed.outputs.avg_gas_utilization }} + max_gas_utilization: ${{ needs.load_test_mixed.outputs.max_gas_utilization }} + txpool_pending: ${{ needs.load_test_mixed.outputs.txpool_pending }} + txpool_queued: ${{ needs.load_test_mixed.outputs.txpool_queued }} secrets: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/.github/workflows/notification-deploy-network.yml b/.github/workflows/notification-deploy-network.yml index 84a2c5a195..f6880bdcde 100644 --- a/.github/workflows/notification-deploy-network.yml +++ b/.github/workflows/notification-deploy-network.yml @@ -103,22 +103,10 @@ jobs: { "type": "context", "elements": [ - { - "type": "mrkdwn", - "text": "Triggered by: *${{ github.triggering_actor }}*" - }, { "type": "mrkdwn", "text": "Commit: **" - } - ] - }, - { - "type": "divider" - }, - { - "type": "context", - "elements": [ + }, { "type": "mrkdwn", "text": "Environment: *${{ inputs.environment }}*" @@ -129,6 +117,9 @@ jobs: } ] }, + { + "type": "divider" + }, { "type": "context", "elements": [ @@ -175,11 +166,11 @@ jobs: }, { "type": "mrkdwn", - "text": "Gossip Message Size: *${{ inputs.gossip_msg_size }}*" + "text": "Log Level: *${{ vars.LOG_LEVEL }}*" }, { "type": "mrkdwn", - "text": "Log Level: *${{ vars.LOG_LEVEL }}*" + "text": "Gossip Message Size: *${{ inputs.gossip_msg_size }}*" } ] } diff --git a/.github/workflows/notification-destroy-network.yml b/.github/workflows/notification-destroy-network.yml index b9b06b54e9..b9222222ee 100644 --- a/.github/workflows/notification-destroy-network.yml +++ b/.github/workflows/notification-destroy-network.yml @@ -74,10 +74,6 @@ jobs: { "type": "context", "elements": [ - { - "type": "mrkdwn", - "text": "Triggered by: *${{ github.triggering_actor }}*" - }, { "type": "mrkdwn", "text": "Environment: *${{ inputs.environment }}*" diff --git a/.github/workflows/notification-load-test.yml b/.github/workflows/notification-load-test.yml index 52e6a3361f..b7394daf0e 100644 --- a/.github/workflows/notification-load-test.yml +++ b/.github/workflows/notification-load-test.yml @@ -75,6 +75,14 @@ on: # yamllint disable-line rule:truthy description: Maximum Gas Utilization type: string required: true + txpool_pending: + description: Pending Transactions Count + type: string + required: true + txpool_queued: + description: Queued Transactions Count + type: string + required: true secrets: SLACK_WEBHOOK_URL: required: true @@ -94,6 +102,7 @@ jobs: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK succeed_bnt: 'primary' + failed_bnt: 'danger' with: payload: | { @@ -114,7 +123,7 @@ jobs: "type": "plain_text", "text": "Workflow Run" }, - "style": "${{ env.succeed_bnt }}", + "style": "${{ inputs.txpool_pending == '0' && inputs.txpool_queued == '0' && env.succeed_bnt || env.failed_bnt }}", "url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" } ] @@ -122,22 +131,10 @@ jobs: { "type": "context", "elements": [ - { - "type": "mrkdwn", - "text": "Triggered by: *${{ github.triggering_actor }}*" - }, { "type": "mrkdwn", "text": "Commit: **" - } - ] - }, - { - "type": "divider" - }, - { - "type": "context", - "elements": [ + }, { "type": "mrkdwn", "text": "Environment: *${{ inputs.environment }}*" @@ -148,6 +145,9 @@ jobs: } ] }, + { + "type": "divider" + }, { "type": "context", "elements": [ @@ -171,13 +171,29 @@ jobs: "type": "mrkdwn", "text": "Batch Size: *${{ inputs.batch_size }}*" }, + { + "type": "mrkdwn", + "text": "Receipts Timeout: *${{ inputs.receipts_timeout }}*" + }, { "type": "mrkdwn", "text": "Wait TX Pool To Empty: *${{ inputs.wait_txpool }}*" + } + ] + }, + { + "type": "divider" + }, + { + "type": "context", + "elements": [ + { + "type": "mrkdwn", + "text": "Pending TXs: *${{ inputs.txpool_pending }}*" }, { "type": "mrkdwn", - "text": "Receipts Timeout: *${{ inputs.receipts_timeout }}*" + "text": "Queued TXs: *${{ inputs.txpool_queued }}*" } ] }, diff --git a/.github/workflows/notification-nightly.yml b/.github/workflows/notification-nightly.yml index 395080140b..a1a11e7fd7 100644 --- a/.github/workflows/notification-nightly.yml +++ b/.github/workflows/notification-nightly.yml @@ -83,14 +83,50 @@ on: # yamllint disable-line rule:truthy description: Load Test EOA output type: string required: true + load_test_eoa_txpool_pending_output: + description: Load Test EOA txpool pending output + type: string + required: true + load_test_eoa_txpool_queued_output: + description: Load Test EOA txpool queued output + type: string + required: true load_test_erc20_output: description: Load Test ERC20 output type: string required: true + load_test_erc20_txpool_pending_output: + description: Load Test ERC20 txpool pending output + type: string + required: true + load_test_erc20_txpool_queued_output: + description: Load Test ERC20 txpool queued output + type: string + required: true load_test_erc721_output: description: Load Test ERC721 output type: string required: true + load_test_erc721_txpool_pending_output: + description: Load Test ERC721 txpool pending output + type: string + required: true + load_test_erc721_txpool_queued_output: + description: Load Test ERC721 txpool queued output + type: string + required: true + load_test_mixed_output: + description: Load Test MIXED output + type: string + required: true + load_test_mixed_txpool_pending_output: + description: Load Test MIXED txpool pending output + type: string + required: true + load_test_mixed_txpool_queued_output: + description: Load Test MIXED txpool queued output + type: string + required: true destroy_network_logs_output: description: Deploy Network - Logs output type: string @@ -143,7 +179,7 @@ jobs: "type": "plain_text", "text": "Workflow Run" }, - "style": "${{ inputs.build_blade_output == '' && inputs.lint_output == '' && inputs.unit_test_output == '' && inputs.e2e_polybft_test_output == '' && inputs.e2e_legacy_test_output == '' && inputs.property_polybft_test_output == '' && inputs.fuzz_test_output == '' && inputs.benchmark_test_output == '' && inputs.deploy_network_terraform_output == '' && inputs.deploy_network_ansible_output == '' && inputs.load_test_eoa_output == 'true' && inputs.load_test_erc20_output == 'true' && inputs.load_test_erc721_output == 'true' && inputs.destroy_network_logs_output == '' && inputs.destroy_network_terraform_output == '' && env.succeed_bnt || env.failed_bnt }}", + "style": "${{ inputs.build_blade_output == '' && inputs.lint_output == '' && inputs.unit_test_output == '' && inputs.e2e_polybft_test_output == '' && inputs.e2e_legacy_test_output == '' && inputs.property_polybft_test_output == '' && inputs.fuzz_test_output == '' && inputs.benchmark_test_output == '' && inputs.deploy_network_terraform_output == '' && inputs.deploy_network_ansible_output == '' && inputs.load_test_eoa_output == 'true' && inputs.load_test_eoa_txpool_pending_output == '0' && inputs.load_test_eoa_txpool_queued_output == '0' && inputs.load_test_erc20_output == 'true' && inputs.load_test_erc20_txpool_pending_output == '0' && inputs.load_test_erc20_txpool_queued_output == '0' && inputs.load_test_erc721_output == 'true' && inputs.load_test_erc721_txpool_pending_output == '0' && inputs.load_test_erc721_txpool_queued_output == '0' && inputs.load_test_mixed_output == 'true' && inputs.load_test_mixed_txpool_pending_output == '0' && inputs.load_test_mixed_txpool_queued_output == '0' && inputs.destroy_network_logs_output == '' && inputs.destroy_network_terraform_output == '' && env.succeed_bnt || env.failed_bnt }}", "url": "${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}" }, { @@ -160,22 +196,10 @@ jobs: { "type": "context", "elements": [ - { - "type": "mrkdwn", - "text": "Triggered by: *${{ github.triggering_actor }}*" - }, { "type": "mrkdwn", "text": "Commit: **" - } - ] - }, - { - "type": "divider" - }, - { - "type": "context", - "elements": [ + }, { "type": "mrkdwn", "text": "Environment: *${{ inputs.environment }}*" @@ -186,6 +210,9 @@ jobs: } ] }, + { + "type": "divider" + }, { "type": "context", "elements": [ @@ -232,11 +259,11 @@ jobs: }, { "type": "mrkdwn", - "text": "Gossip Message Size: *${{ inputs.gossip_msg_size }}*" + "text": "Log Level: *${{ vars.LOG_LEVEL }}*" }, { "type": "mrkdwn", - "text": "Log Level: *${{ vars.LOG_LEVEL }}*" + "text": "Gossip Message Size: *${{ inputs.gossip_msg_size }}*" } ] }, @@ -296,15 +323,19 @@ jobs: }, { "type": "mrkdwn", - "text": "${{ inputs.load_test_eoa_output == 'true' && env.succeed_job || env.failed_job }} *Load Test EOA*" + "text": "${{ inputs.load_test_eoa_output == 'true' && inputs.load_test_eoa_txpool_pending_output == '0' && inputs.load_test_eoa_txpool_queued_output == '0' && env.succeed_job || env.failed_job }} *Load Test EOA*" + }, + { + "type": "mrkdwn", + "text": "${{ inputs.load_test_erc20_output == 'true' && inputs.load_test_erc20_txpool_pending_output == '0' && inputs.load_test_erc20_txpool_queued_output == '0' && env.succeed_job || env.failed_job }} *Load Test ERC20*" }, { "type": "mrkdwn", - "text": "${{ inputs.load_test_erc20_output == 'true' && env.succeed_job || env.failed_job }} *Load Test ERC20*" + "text": "${{ inputs.load_test_erc721_output == 'true' && inputs.load_test_erc721_txpool_pending_output == '0' && inputs.load_test_erc721_txpool_queued_output == '0' && env.succeed_job || env.failed_job }} *Load Test ERC721*" }, { "type": "mrkdwn", - "text": "${{ inputs.load_test_erc721_output == 'true' && env.succeed_job || env.failed_job }} *Load Test ERC721*" + "text": "${{ inputs.load_test_mixed_output == 'true' && inputs.load_test_mixed_txpool_pending_output == '0' && inputs.load_test_mixed_txpool_queued_output == '0' && env.succeed_job || env.failed_job }} *Load Test MIXED*" } ] } diff --git a/command/loadtest/load_test_run.go b/command/loadtest/load_test_run.go index ba30bd3faa..3e75195374 100644 --- a/command/loadtest/load_test_run.go +++ b/command/loadtest/load_test_run.go @@ -46,7 +46,7 @@ func setFlags(cmd *cobra.Command) { ¶ms.loadTestType, loadTestTypeFlag, "eoa", - "the type of load test to run (supported types: eoa, erc20, erc721)", + "the type of load test to run (supported types: eoa, erc20, erc721, mixed)", ) cmd.Flags().StringVar( diff --git a/loadtest/contracts/ZexCoinERC20.json b/loadtest/contracts/ZexCoinERC20.json deleted file mode 100644 index 4d47e1b465..0000000000 --- a/loadtest/contracts/ZexCoinERC20.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ZexCoinERC20", - "sourceName": "contracts/Zex_erc20.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "uint256", - "name": "total", - "type": "uint256" - }, - { - "internalType": "string", - "name": "coinName", - "type": "string" - }, - { - "internalType": "string", - "name": "coinSymbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "tokenOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "tokens", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "stateMutability": "payable", - "type": "fallback" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "delegate", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "internalType": "uint256", - "name": "numTokens", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "tokenOwner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "receiver", - "type": "address" - }, - { - "internalType": "uint256", - "name": "numTokens", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "buyer", - "type": "address" - }, - { - "internalType": "uint256", - "name": "numTokens", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b506040516200146538038062001465833981810160405281019062000037919062000220565b81600090805190602001906200004f929190620000db565b50806001908051906020019062000068929190620000db565b506005600260006101000a81548160ff021916908360ff16021790555082600581905550600554600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505062000462565b828054620000e99062000359565b90600052602060002090601f0160209004810192826200010d576000855562000159565b82601f106200012857805160ff191683800117855562000159565b8280016001018555821562000159579182015b82811115620001585782518255916020019190600101906200013b565b5b5090506200016891906200016c565b5090565b5b80821115620001875760008160009055506001016200016d565b5090565b6000620001a26200019c84620002e3565b620002ba565b905082815260208101848484011115620001c157620001c062000428565b5b620001ce84828562000323565b509392505050565b600082601f830112620001ee57620001ed62000423565b5b8151620002008482602086016200018b565b91505092915050565b6000815190506200021a8162000448565b92915050565b6000806000606084860312156200023c576200023b62000432565b5b60006200024c8682870162000209565b935050602084015167ffffffffffffffff81111562000270576200026f6200042d565b5b6200027e86828701620001d6565b925050604084015167ffffffffffffffff811115620002a257620002a16200042d565b5b620002b086828701620001d6565b9150509250925092565b6000620002c6620002d9565b9050620002d482826200038f565b919050565b6000604051905090565b600067ffffffffffffffff821115620003015762000300620003f4565b5b6200030c8262000437565b9050602081019050919050565b6000819050919050565b60005b838110156200034357808201518184015260208101905062000326565b8381111562000353576000848401525b50505050565b600060028204905060018216806200037257607f821691505b60208210811415620003895762000388620003c5565b5b50919050565b6200039a8262000437565b810181811067ffffffffffffffff82111715620003bc57620003bb620003f4565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b620004538162000319565b81146200045f57600080fd5b50565b610ff380620004726000396000f3fe60806040526004361061008a5760003560e01c8063313ce56711610059578063313ce5671461016957806370a082311461019457806395d89b41146101d1578063a9059cbb146101fc578063dd62ed3e1461023957610094565b806306fdde0314610099578063095ea7b3146100c457806318160ddd1461010157806323b872dd1461012c57610094565b3661009457600080fd5b600080fd5b3480156100a557600080fd5b506100ae610276565b6040516100bb9190610c16565b60405180910390f35b3480156100d057600080fd5b506100eb60048036038101906100e69190610aec565b610304565b6040516100f89190610bfb565b60405180910390f35b34801561010d57600080fd5b506101166103f6565b6040516101239190610c98565b60405180910390f35b34801561013857600080fd5b50610153600480360381019061014e9190610a99565b610400565b6040516101609190610bfb565b60405180910390f35b34801561017557600080fd5b5061017e6106f2565b60405161018b9190610cb3565b60405180910390f35b3480156101a057600080fd5b506101bb60048036038101906101b69190610a2c565b610705565b6040516101c89190610c98565b60405180910390f35b3480156101dd57600080fd5b506101e661074e565b6040516101f39190610c16565b60405180910390f35b34801561020857600080fd5b50610223600480360381019061021e9190610aec565b6107dc565b6040516102309190610bfb565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190610a59565b61097b565b60405161026d9190610c98565b60405180910390f35b6000805461028390610dfc565b80601f01602080910402602001604051908101604052809291908181526020018280546102af90610dfc565b80156102fc5780601f106102d1576101008083540402835291602001916102fc565b820191906000526020600020905b8154815290600101906020018083116102df57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103e49190610c98565b60405180910390a36001905092915050565b6000600554905090565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047b90610c58565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053a90610c38565b60405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105929190610d40565b9250508190555081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106259190610d40565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461067b9190610cea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106df9190610c98565b60405180910390a3600190509392505050565b600260009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6001805461075b90610dfc565b80601f016020809104026020016040519081016040528092919081815260200182805461078790610dfc565b80156107d45780601f106107a9576101008083540402835291602001916107d4565b820191906000526020600020905b8154815290600101906020018083116107b757829003601f168201915b505050505081565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085790610c78565b60405180910390fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108af9190610d40565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109059190610cea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109699190610c98565b60405180910390a36001905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081359050610a1181610f8f565b92915050565b600081359050610a2681610fa6565b92915050565b600060208284031215610a4257610a41610e8c565b5b6000610a5084828501610a02565b91505092915050565b60008060408385031215610a7057610a6f610e8c565b5b6000610a7e85828601610a02565b9250506020610a8f85828601610a02565b9150509250929050565b600080600060608486031215610ab257610ab1610e8c565b5b6000610ac086828701610a02565b9350506020610ad186828701610a02565b9250506040610ae286828701610a17565b9150509250925092565b60008060408385031215610b0357610b02610e8c565b5b6000610b1185828601610a02565b9250506020610b2285828601610a17565b9150509250929050565b610b3581610d86565b82525050565b6000610b4682610cce565b610b508185610cd9565b9350610b60818560208601610dc9565b610b6981610e91565b840191505092915050565b6000610b81604083610cd9565b9150610b8c82610ea2565b604082019050919050565b6000610ba4603983610cd9565b9150610baf82610ef1565b604082019050919050565b6000610bc7603a83610cd9565b9150610bd282610f40565b604082019050919050565b610be681610db2565b82525050565b610bf581610dbc565b82525050565b6000602082019050610c106000830184610b2c565b92915050565b60006020820190508181036000830152610c308184610b3b565b905092915050565b60006020820190508181036000830152610c5181610b74565b9050919050565b60006020820190508181036000830152610c7181610b97565b9050919050565b60006020820190508181036000830152610c9181610bba565b9050919050565b6000602082019050610cad6000830184610bdd565b92915050565b6000602082019050610cc86000830184610bec565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610cf582610db2565b9150610d0083610db2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610d3557610d34610e2e565b5b828201905092915050565b6000610d4b82610db2565b9150610d5683610db2565b925082821015610d6957610d68610e2e565b5b828203905092915050565b6000610d7f82610d92565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610de7578082015181840152602081019050610dcc565b83811115610df6576000848401525b50505050565b60006002820490506001821680610e1457607f821691505b60208210811415610e2857610e27610e5d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5468652064656c656761746520646f73656e2774206861766520656e6f75676860008201527f20616c6c6f77616e636520746f206d616b6520746865207472616e7366657221602082015250565b7f546865206f776e657220646f65736e2774206861766520656e6f75676820667560008201527f6e647320746f206d616b6520746865207472616e736665722100000000000000602082015250565b7f5468652073656e64657220646f73656e2774206861766520656e6f756768206660008201527f756e647320746f206d616b6520746865207472616e7366657221000000000000602082015250565b610f9881610d74565b8114610fa357600080fd5b50565b610faf81610db2565b8114610fba57600080fd5b5056fea26469706673582212200e5255656b357df40d9b2f85e514df2c5ce154371a2e0849bd0dfde95ed02c0764736f6c63430008070033", - "deployedBytecode": "0x60806040526004361061008a5760003560e01c8063313ce56711610059578063313ce5671461016957806370a082311461019457806395d89b41146101d1578063a9059cbb146101fc578063dd62ed3e1461023957610094565b806306fdde0314610099578063095ea7b3146100c457806318160ddd1461010157806323b872dd1461012c57610094565b3661009457600080fd5b600080fd5b3480156100a557600080fd5b506100ae610276565b6040516100bb9190610c16565b60405180910390f35b3480156100d057600080fd5b506100eb60048036038101906100e69190610aec565b610304565b6040516100f89190610bfb565b60405180910390f35b34801561010d57600080fd5b506101166103f6565b6040516101239190610c98565b60405180910390f35b34801561013857600080fd5b50610153600480360381019061014e9190610a99565b610400565b6040516101609190610bfb565b60405180910390f35b34801561017557600080fd5b5061017e6106f2565b60405161018b9190610cb3565b60405180910390f35b3480156101a057600080fd5b506101bb60048036038101906101b69190610a2c565b610705565b6040516101c89190610c98565b60405180910390f35b3480156101dd57600080fd5b506101e661074e565b6040516101f39190610c16565b60405180910390f35b34801561020857600080fd5b50610223600480360381019061021e9190610aec565b6107dc565b6040516102309190610bfb565b60405180910390f35b34801561024557600080fd5b50610260600480360381019061025b9190610a59565b61097b565b60405161026d9190610c98565b60405180910390f35b6000805461028390610dfc565b80601f01602080910402602001604051908101604052809291908181526020018280546102af90610dfc565b80156102fc5780601f106102d1576101008083540402835291602001916102fc565b820191906000526020600020905b8154815290600101906020018083116102df57829003601f168201915b505050505081565b600081600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516103e49190610c98565b60405180910390a36001905092915050565b6000600554905090565b6000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047b90610c58565b60405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610543576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053a90610c38565b60405180910390fd5b81600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546105929190610d40565b9250508190555081600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546106259190610d40565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461067b9190610cea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516106df9190610c98565b60405180910390a3600190509392505050565b600260009054906101000a900460ff1681565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6001805461075b90610dfc565b80601f016020809104026020016040519081016040528092919081815260200182805461078790610dfc565b80156107d45780601f106107a9576101008083540402835291602001916107d4565b820191906000526020600020905b8154815290600101906020018083116107b757829003601f168201915b505050505081565b6000600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054821115610860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085790610c78565b60405180910390fd5b81600360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546108af9190610d40565b9250508190555081600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546109059190610cea565b925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516109699190610c98565b60405180910390a36001905092915050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600081359050610a1181610f8f565b92915050565b600081359050610a2681610fa6565b92915050565b600060208284031215610a4257610a41610e8c565b5b6000610a5084828501610a02565b91505092915050565b60008060408385031215610a7057610a6f610e8c565b5b6000610a7e85828601610a02565b9250506020610a8f85828601610a02565b9150509250929050565b600080600060608486031215610ab257610ab1610e8c565b5b6000610ac086828701610a02565b9350506020610ad186828701610a02565b9250506040610ae286828701610a17565b9150509250925092565b60008060408385031215610b0357610b02610e8c565b5b6000610b1185828601610a02565b9250506020610b2285828601610a17565b9150509250929050565b610b3581610d86565b82525050565b6000610b4682610cce565b610b508185610cd9565b9350610b60818560208601610dc9565b610b6981610e91565b840191505092915050565b6000610b81604083610cd9565b9150610b8c82610ea2565b604082019050919050565b6000610ba4603983610cd9565b9150610baf82610ef1565b604082019050919050565b6000610bc7603a83610cd9565b9150610bd282610f40565b604082019050919050565b610be681610db2565b82525050565b610bf581610dbc565b82525050565b6000602082019050610c106000830184610b2c565b92915050565b60006020820190508181036000830152610c308184610b3b565b905092915050565b60006020820190508181036000830152610c5181610b74565b9050919050565b60006020820190508181036000830152610c7181610b97565b9050919050565b60006020820190508181036000830152610c9181610bba565b9050919050565b6000602082019050610cad6000830184610bdd565b92915050565b6000602082019050610cc86000830184610bec565b92915050565b600081519050919050565b600082825260208201905092915050565b6000610cf582610db2565b9150610d0083610db2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115610d3557610d34610e2e565b5b828201905092915050565b6000610d4b82610db2565b9150610d5683610db2565b925082821015610d6957610d68610e2e565b5b828203905092915050565b6000610d7f82610d92565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b83811015610de7578082015181840152602081019050610dcc565b83811115610df6576000848401525b50505050565b60006002820490506001821680610e1457607f821691505b60208210811415610e2857610e27610e5d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f5468652064656c656761746520646f73656e2774206861766520656e6f75676860008201527f20616c6c6f77616e636520746f206d616b6520746865207472616e7366657221602082015250565b7f546865206f776e657220646f65736e2774206861766520656e6f75676820667560008201527f6e647320746f206d616b6520746865207472616e736665722100000000000000602082015250565b7f5468652073656e64657220646f73656e2774206861766520656e6f756768206660008201527f756e647320746f206d616b6520746865207472616e7366657221000000000000602082015250565b610f9881610d74565b8114610fa357600080fd5b50565b610faf81610db2565b8114610fba57600080fd5b5056fea26469706673582212200e5255656b357df40d9b2f85e514df2c5ce154371a2e0849bd0dfde95ed02c0764736f6c63430008070033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/loadtest/contracts/ZexNFT.json b/loadtest/contracts/ZexNFT.json deleted file mode 100644 index 8bb080520f..0000000000 --- a/loadtest/contracts/ZexNFT.json +++ /dev/null @@ -1,376 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "ZexNFTs", - "sourceName": "contracts/Zex_ERC721.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "tokenName", - "type": "string" - }, - { - "internalType": "string", - "name": "tokenSymbol", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "approved", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "ApprovalForAll", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "tokenURI", - "type": "string" - } - ], - "name": "createNFT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "getApproved", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "isApprovedForAll", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "ownerOf", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "safeTransferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bool", - "name": "approved", - "type": "bool" - } - ], - "name": "setApprovalForAll", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "tokenURI", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "tokenId", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x60806040523480156200001157600080fd5b5060405162002e9838038062002e988339818101604052810190620000379190620001a3565b818181600090805190602001906200005192919062000075565b5080600190805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b612adc80620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063da2ed03e146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611e39565b610307565b6040516101169190612208565b60405180910390f35b6101276103e9565b6040516101349190612223565b60405180910390f35b61015760048036038101906101529190611edc565b61047b565b60405161016491906121a1565b60405180910390f35b61018760048036038101906101829190611df9565b6104c1565b005b6101a3600480360381019061019e9190611ce3565b6105d9565b005b6101bf60048036038101906101ba9190611ce3565b610639565b005b6101db60048036038101906101d69190611edc565b610659565b6040516101e891906121a1565b60405180910390f35b61020b60048036038101906102069190611c76565b6106e0565b60405161021891906123c5565b60405180910390f35b610229610798565b6040516102369190612223565b60405180910390f35b61025960048036038101906102549190611db9565b61082a565b005b61027560048036038101906102709190611d36565b610840565b005b610291600480360381019061028c9190611edc565b6108a2565b60405161029e9190612223565b60405180910390f35b6102c160048036038101906102bc9190611e93565b6109b5565b6040516102ce91906123c5565b60405180910390f35b6102f160048036038101906102ec9190611ca3565b6109eb565b6040516102fe9190612208565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610a7f565b5b9050919050565b6060600080546103f8906125ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906125ea565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610ae9565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610659565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053490612385565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055c610b34565b73ffffffffffffffffffffffffffffffffffffffff16148061058b575061058a81610585610b34565b6109eb565b5b6105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c1906123a5565b60405180910390fd5b6105d48383610b3c565b505050565b6105ea6105e4610b34565b82610bf5565b610629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062090612245565b60405180910390fd5b610634838383610c8a565b505050565b61065483838360405180602001604052806000815250610840565b505050565b60008061066583610f84565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce90612365565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074890612305565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107a7906125ea565b80601f01602080910402602001604051908101604052809291908181526020018280546107d3906125ea565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b5050505050905090565b61083c610835610b34565b8383610fc1565b5050565b61085161084b610b34565b83610bf5565b610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088790612245565b60405180910390fd5b61089c8484848461112e565b50505050565b60606108ad82610ae9565b60006006600084815260200190815260200160002080546108cd906125ea565b80601f01602080910402602001604051908101604052809291908181526020018280546108f9906125ea565b80156109465780601f1061091b57610100808354040283529160200191610946565b820191906000526020600020905b81548152906001019060200180831161092957829003601f168201915b50505050509050600061095761118a565b905060008151141561096d5781925050506109b0565b6000825111156109a257808260405160200161098a92919061217d565b604051602081830303815290604052925050506109b0565b6109ab846111a1565b925050505b919050565b6000806109c26007611209565b90506109ce3382611217565b6109d88184611235565b6109e260076112a9565b80915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610af2816112bf565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890612365565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610baf83610659565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c0183610659565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c435750610c4281856109eb565b5b80610c8157508373ffffffffffffffffffffffffffffffffffffffff16610c698461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610caa82610659565b73ffffffffffffffffffffffffffffffffffffffff1614610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf790612285565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d67906122c5565b60405180910390fd5b610d7d8383836001611300565b8273ffffffffffffffffffffffffffffffffffffffff16610d9d82610659565b73ffffffffffffffffffffffffffffffffffffffff1614610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90612285565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f7f8383836001611426565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611030576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611027906122e5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111219190612208565b60405180910390a3505050565b611139848484610c8a565b6111458484848461142c565b611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90612265565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606111ac82610ae9565b60006111b661118a565b905060008151116111d65760405180602001604052806000815250611201565b806111e0846115c3565b6040516020016111f192919061217d565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b61123182826040518060200160405280600081525061169b565b5050565b61123e826112bf565b61127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490612325565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906112a4929190611a8a565b505050565b6001816000016000828254019250508190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166112e183610f84565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561142057600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146113945780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138c9190612500565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461141f5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141791906124aa565b925050819055505b5b50505050565b50505050565b600061144d8473ffffffffffffffffffffffffffffffffffffffff166116f6565b156115b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611476610b34565b8786866040518563ffffffff1660e01b815260040161149894939291906121bc565b602060405180830381600087803b1580156114b257600080fd5b505af19250505080156114e357506040513d601f19601f820116820180604052508101906114e09190611e66565b60015b611566573d8060008114611513576040519150601f19603f3d011682016040523d82523d6000602084013e611518565b606091505b5060008151141561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590612265565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115bb565b600190505b949350505050565b6060600060016115d284611719565b01905060008167ffffffffffffffff8111156115f1576115f06126da565b5b6040519080825280601f01601f1916602001820160405280156116235781602001600182028036833780820191505090505b509050600082602001820190505b600115611690578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161167a5761167961267c565b5b049450600085141561168b57611690565b611631565b819350505050919050565b6116a5838361186c565b6116b2600084848461142c565b6116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890612265565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611777577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161176d5761176c61267c565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106117b4576d04ee2d6d415b85acef810000000083816117aa576117a961267c565b5b0492506020810190505b662386f26fc1000083106117e357662386f26fc1000083816117d9576117d861267c565b5b0492506010810190505b6305f5e100831061180c576305f5e10083816118025761180161267c565b5b0492506008810190505b61271083106118315761271083816118275761182661267c565b5b0492506004810190505b60648310611854576064838161184a5761184961267c565b5b0492506002810190505b600a8310611863576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390612345565b60405180910390fd5b6118e5816112bf565b15611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c906122a5565b60405180910390fd5b611933600083836001611300565b61193c816112bf565b1561197c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611973906122a5565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a86600083836001611426565b5050565b828054611a96906125ea565b90600052602060002090601f016020900481019282611ab85760008555611aff565b82601f10611ad157805160ff1916838001178555611aff565b82800160010185558215611aff579182015b82811115611afe578251825591602001919060010190611ae3565b5b509050611b0c9190611b10565b5090565b5b80821115611b29576000816000905550600101611b11565b5090565b6000611b40611b3b84612405565b6123e0565b905082815260208101848484011115611b5c57611b5b61270e565b5b611b678482856125a8565b509392505050565b6000611b82611b7d84612436565b6123e0565b905082815260208101848484011115611b9e57611b9d61270e565b5b611ba98482856125a8565b509392505050565b600081359050611bc081612a4a565b92915050565b600081359050611bd581612a61565b92915050565b600081359050611bea81612a78565b92915050565b600081519050611bff81612a78565b92915050565b600082601f830112611c1a57611c19612709565b5b8135611c2a848260208601611b2d565b91505092915050565b600082601f830112611c4857611c47612709565b5b8135611c58848260208601611b6f565b91505092915050565b600081359050611c7081612a8f565b92915050565b600060208284031215611c8c57611c8b612718565b5b6000611c9a84828501611bb1565b91505092915050565b60008060408385031215611cba57611cb9612718565b5b6000611cc885828601611bb1565b9250506020611cd985828601611bb1565b9150509250929050565b600080600060608486031215611cfc57611cfb612718565b5b6000611d0a86828701611bb1565b9350506020611d1b86828701611bb1565b9250506040611d2c86828701611c61565b9150509250925092565b60008060008060808587031215611d5057611d4f612718565b5b6000611d5e87828801611bb1565b9450506020611d6f87828801611bb1565b9350506040611d8087828801611c61565b925050606085013567ffffffffffffffff811115611da157611da0612713565b5b611dad87828801611c05565b91505092959194509250565b60008060408385031215611dd057611dcf612718565b5b6000611dde85828601611bb1565b9250506020611def85828601611bc6565b9150509250929050565b60008060408385031215611e1057611e0f612718565b5b6000611e1e85828601611bb1565b9250506020611e2f85828601611c61565b9150509250929050565b600060208284031215611e4f57611e4e612718565b5b6000611e5d84828501611bdb565b91505092915050565b600060208284031215611e7c57611e7b612718565b5b6000611e8a84828501611bf0565b91505092915050565b600060208284031215611ea957611ea8612718565b5b600082013567ffffffffffffffff811115611ec757611ec6612713565b5b611ed384828501611c33565b91505092915050565b600060208284031215611ef257611ef1612718565b5b6000611f0084828501611c61565b91505092915050565b611f1281612534565b82525050565b611f2181612546565b82525050565b6000611f3282612467565b611f3c818561247d565b9350611f4c8185602086016125b7565b611f558161271d565b840191505092915050565b6000611f6b82612472565b611f75818561248e565b9350611f858185602086016125b7565b611f8e8161271d565b840191505092915050565b6000611fa482612472565b611fae818561249f565b9350611fbe8185602086016125b7565b80840191505092915050565b6000611fd7602d8361248e565b9150611fe28261272e565b604082019050919050565b6000611ffa60328361248e565b91506120058261277d565b604082019050919050565b600061201d60258361248e565b9150612028826127cc565b604082019050919050565b6000612040601c8361248e565b915061204b8261281b565b602082019050919050565b600061206360248361248e565b915061206e82612844565b604082019050919050565b600061208660198361248e565b915061209182612893565b602082019050919050565b60006120a960298361248e565b91506120b4826128bc565b604082019050919050565b60006120cc602e8361248e565b91506120d78261290b565b604082019050919050565b60006120ef60208361248e565b91506120fa8261295a565b602082019050919050565b600061211260188361248e565b915061211d82612983565b602082019050919050565b600061213560218361248e565b9150612140826129ac565b604082019050919050565b6000612158603d8361248e565b9150612163826129fb565b604082019050919050565b6121778161259e565b82525050565b60006121898285611f99565b91506121958284611f99565b91508190509392505050565b60006020820190506121b66000830184611f09565b92915050565b60006080820190506121d16000830187611f09565b6121de6020830186611f09565b6121eb604083018561216e565b81810360608301526121fd8184611f27565b905095945050505050565b600060208201905061221d6000830184611f18565b92915050565b6000602082019050818103600083015261223d8184611f60565b905092915050565b6000602082019050818103600083015261225e81611fca565b9050919050565b6000602082019050818103600083015261227e81611fed565b9050919050565b6000602082019050818103600083015261229e81612010565b9050919050565b600060208201905081810360008301526122be81612033565b9050919050565b600060208201905081810360008301526122de81612056565b9050919050565b600060208201905081810360008301526122fe81612079565b9050919050565b6000602082019050818103600083015261231e8161209c565b9050919050565b6000602082019050818103600083015261233e816120bf565b9050919050565b6000602082019050818103600083015261235e816120e2565b9050919050565b6000602082019050818103600083015261237e81612105565b9050919050565b6000602082019050818103600083015261239e81612128565b9050919050565b600060208201905081810360008301526123be8161214b565b9050919050565b60006020820190506123da600083018461216e565b92915050565b60006123ea6123fb565b90506123f6828261261c565b919050565b6000604051905090565b600067ffffffffffffffff8211156124205761241f6126da565b5b6124298261271d565b9050602081019050919050565b600067ffffffffffffffff821115612451576124506126da565b5b61245a8261271d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006124b58261259e565b91506124c08361259e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124f5576124f461264d565b5b828201905092915050565b600061250b8261259e565b91506125168361259e565b9250828210156125295761252861264d565b5b828203905092915050565b600061253f8261257e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156125d55780820151818401526020810190506125ba565b838111156125e4576000848401525b50505050565b6000600282049050600182168061260257607f821691505b60208210811415612616576126156126ab565b5b50919050565b6126258261271d565b810181811067ffffffffffffffff82111715612644576126436126da565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b612a5381612534565b8114612a5e57600080fd5b50565b612a6a81612546565b8114612a7557600080fd5b50565b612a8181612552565b8114612a8c57600080fd5b50565b612a988161259e565b8114612aa357600080fd5b5056fea26469706673582212203742ed7cadb31d3a818f72e6ea2e336c2bb8e9a5d924b44225b01dae9740066464736f6c63430008070033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c806370a082311161008c578063b88d4fde11610066578063b88d4fde1461025b578063c87b56dd14610277578063da2ed03e146102a7578063e985e9c5146102d7576100ea565b806370a08231146101f157806395d89b4114610221578063a22cb4651461023f576100ea565b8063095ea7b3116100c8578063095ea7b31461016d57806323b872dd1461018957806342842e0e146101a55780636352211e146101c1576100ea565b806301ffc9a7146100ef57806306fdde031461011f578063081812fc1461013d575b600080fd5b61010960048036038101906101049190611e39565b610307565b6040516101169190612208565b60405180910390f35b6101276103e9565b6040516101349190612223565b60405180910390f35b61015760048036038101906101529190611edc565b61047b565b60405161016491906121a1565b60405180910390f35b61018760048036038101906101829190611df9565b6104c1565b005b6101a3600480360381019061019e9190611ce3565b6105d9565b005b6101bf60048036038101906101ba9190611ce3565b610639565b005b6101db60048036038101906101d69190611edc565b610659565b6040516101e891906121a1565b60405180910390f35b61020b60048036038101906102069190611c76565b6106e0565b60405161021891906123c5565b60405180910390f35b610229610798565b6040516102369190612223565b60405180910390f35b61025960048036038101906102549190611db9565b61082a565b005b61027560048036038101906102709190611d36565b610840565b005b610291600480360381019061028c9190611edc565b6108a2565b60405161029e9190612223565b60405180910390f35b6102c160048036038101906102bc9190611e93565b6109b5565b6040516102ce91906123c5565b60405180910390f35b6102f160048036038101906102ec9190611ca3565b6109eb565b6040516102fe9190612208565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806103d257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806103e257506103e182610a7f565b5b9050919050565b6060600080546103f8906125ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906125ea565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b5050505050905090565b600061048682610ae9565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006104cc82610659565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561053d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161053490612385565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661055c610b34565b73ffffffffffffffffffffffffffffffffffffffff16148061058b575061058a81610585610b34565b6109eb565b5b6105ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c1906123a5565b60405180910390fd5b6105d48383610b3c565b505050565b6105ea6105e4610b34565b82610bf5565b610629576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062090612245565b60405180910390fd5b610634838383610c8a565b505050565b61065483838360405180602001604052806000815250610840565b505050565b60008061066583610f84565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ce90612365565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074890612305565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6060600180546107a7906125ea565b80601f01602080910402602001604051908101604052809291908181526020018280546107d3906125ea565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b5050505050905090565b61083c610835610b34565b8383610fc1565b5050565b61085161084b610b34565b83610bf5565b610890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088790612245565b60405180910390fd5b61089c8484848461112e565b50505050565b60606108ad82610ae9565b60006006600084815260200190815260200160002080546108cd906125ea565b80601f01602080910402602001604051908101604052809291908181526020018280546108f9906125ea565b80156109465780601f1061091b57610100808354040283529160200191610946565b820191906000526020600020905b81548152906001019060200180831161092957829003601f168201915b50505050509050600061095761118a565b905060008151141561096d5781925050506109b0565b6000825111156109a257808260405160200161098a92919061217d565b604051602081830303815290604052925050506109b0565b6109ab846111a1565b925050505b919050565b6000806109c26007611209565b90506109ce3382611217565b6109d88184611235565b6109e260076112a9565b80915050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610af2816112bf565b610b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2890612365565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610baf83610659565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600080610c0183610659565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480610c435750610c4281856109eb565b5b80610c8157508373ffffffffffffffffffffffffffffffffffffffff16610c698461047b565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16610caa82610659565b73ffffffffffffffffffffffffffffffffffffffff1614610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf790612285565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d67906122c5565b60405180910390fd5b610d7d8383836001611300565b8273ffffffffffffffffffffffffffffffffffffffff16610d9d82610659565b73ffffffffffffffffffffffffffffffffffffffff1614610df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dea90612285565b60405180910390fd5b6004600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4610f7f8383836001611426565b505050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611030576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611027906122e5565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111219190612208565b60405180910390a3505050565b611139848484610c8a565b6111458484848461142c565b611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90612265565b60405180910390fd5b50505050565b606060405180602001604052806000815250905090565b60606111ac82610ae9565b60006111b661118a565b905060008151116111d65760405180602001604052806000815250611201565b806111e0846115c3565b6040516020016111f192919061217d565b6040516020818303038152906040525b915050919050565b600081600001549050919050565b61123182826040518060200160405280600081525061169b565b5050565b61123e826112bf565b61127d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127490612325565b60405180910390fd5b806006600084815260200190815260200160002090805190602001906112a4929190611a8a565b505050565b6001816000016000828254019250508190555050565b60008073ffffffffffffffffffffffffffffffffffffffff166112e183610f84565b73ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600181111561142057600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16146113945780600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461138c9190612500565b925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461141f5780600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141791906124aa565b925050819055505b5b50505050565b50505050565b600061144d8473ffffffffffffffffffffffffffffffffffffffff166116f6565b156115b6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02611476610b34565b8786866040518563ffffffff1660e01b815260040161149894939291906121bc565b602060405180830381600087803b1580156114b257600080fd5b505af19250505080156114e357506040513d601f19601f820116820180604052508101906114e09190611e66565b60015b611566573d8060008114611513576040519150601f19603f3d011682016040523d82523d6000602084013e611518565b606091505b5060008151141561155e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155590612265565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506115bb565b600190505b949350505050565b6060600060016115d284611719565b01905060008167ffffffffffffffff8111156115f1576115f06126da565b5b6040519080825280601f01601f1916602001820160405280156116235781602001600182028036833780820191505090505b509050600082602001820190505b600115611690578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a858161167a5761167961267c565b5b049450600085141561168b57611690565b611631565b819350505050919050565b6116a5838361186c565b6116b2600084848461142c565b6116f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e890612265565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310611777577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161176d5761176c61267c565b5b0492506040810190505b6d04ee2d6d415b85acef810000000083106117b4576d04ee2d6d415b85acef810000000083816117aa576117a961267c565b5b0492506020810190505b662386f26fc1000083106117e357662386f26fc1000083816117d9576117d861267c565b5b0492506010810190505b6305f5e100831061180c576305f5e10083816118025761180161267c565b5b0492506008810190505b61271083106118315761271083816118275761182661267c565b5b0492506004810190505b60648310611854576064838161184a5761184961267c565b5b0492506002810190505b600a8310611863576001810190505b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d390612345565b60405180910390fd5b6118e5816112bf565b15611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c906122a5565b60405180910390fd5b611933600083836001611300565b61193c816112bf565b1561197c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611973906122a5565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a86600083836001611426565b5050565b828054611a96906125ea565b90600052602060002090601f016020900481019282611ab85760008555611aff565b82601f10611ad157805160ff1916838001178555611aff565b82800160010185558215611aff579182015b82811115611afe578251825591602001919060010190611ae3565b5b509050611b0c9190611b10565b5090565b5b80821115611b29576000816000905550600101611b11565b5090565b6000611b40611b3b84612405565b6123e0565b905082815260208101848484011115611b5c57611b5b61270e565b5b611b678482856125a8565b509392505050565b6000611b82611b7d84612436565b6123e0565b905082815260208101848484011115611b9e57611b9d61270e565b5b611ba98482856125a8565b509392505050565b600081359050611bc081612a4a565b92915050565b600081359050611bd581612a61565b92915050565b600081359050611bea81612a78565b92915050565b600081519050611bff81612a78565b92915050565b600082601f830112611c1a57611c19612709565b5b8135611c2a848260208601611b2d565b91505092915050565b600082601f830112611c4857611c47612709565b5b8135611c58848260208601611b6f565b91505092915050565b600081359050611c7081612a8f565b92915050565b600060208284031215611c8c57611c8b612718565b5b6000611c9a84828501611bb1565b91505092915050565b60008060408385031215611cba57611cb9612718565b5b6000611cc885828601611bb1565b9250506020611cd985828601611bb1565b9150509250929050565b600080600060608486031215611cfc57611cfb612718565b5b6000611d0a86828701611bb1565b9350506020611d1b86828701611bb1565b9250506040611d2c86828701611c61565b9150509250925092565b60008060008060808587031215611d5057611d4f612718565b5b6000611d5e87828801611bb1565b9450506020611d6f87828801611bb1565b9350506040611d8087828801611c61565b925050606085013567ffffffffffffffff811115611da157611da0612713565b5b611dad87828801611c05565b91505092959194509250565b60008060408385031215611dd057611dcf612718565b5b6000611dde85828601611bb1565b9250506020611def85828601611bc6565b9150509250929050565b60008060408385031215611e1057611e0f612718565b5b6000611e1e85828601611bb1565b9250506020611e2f85828601611c61565b9150509250929050565b600060208284031215611e4f57611e4e612718565b5b6000611e5d84828501611bdb565b91505092915050565b600060208284031215611e7c57611e7b612718565b5b6000611e8a84828501611bf0565b91505092915050565b600060208284031215611ea957611ea8612718565b5b600082013567ffffffffffffffff811115611ec757611ec6612713565b5b611ed384828501611c33565b91505092915050565b600060208284031215611ef257611ef1612718565b5b6000611f0084828501611c61565b91505092915050565b611f1281612534565b82525050565b611f2181612546565b82525050565b6000611f3282612467565b611f3c818561247d565b9350611f4c8185602086016125b7565b611f558161271d565b840191505092915050565b6000611f6b82612472565b611f75818561248e565b9350611f858185602086016125b7565b611f8e8161271d565b840191505092915050565b6000611fa482612472565b611fae818561249f565b9350611fbe8185602086016125b7565b80840191505092915050565b6000611fd7602d8361248e565b9150611fe28261272e565b604082019050919050565b6000611ffa60328361248e565b91506120058261277d565b604082019050919050565b600061201d60258361248e565b9150612028826127cc565b604082019050919050565b6000612040601c8361248e565b915061204b8261281b565b602082019050919050565b600061206360248361248e565b915061206e82612844565b604082019050919050565b600061208660198361248e565b915061209182612893565b602082019050919050565b60006120a960298361248e565b91506120b4826128bc565b604082019050919050565b60006120cc602e8361248e565b91506120d78261290b565b604082019050919050565b60006120ef60208361248e565b91506120fa8261295a565b602082019050919050565b600061211260188361248e565b915061211d82612983565b602082019050919050565b600061213560218361248e565b9150612140826129ac565b604082019050919050565b6000612158603d8361248e565b9150612163826129fb565b604082019050919050565b6121778161259e565b82525050565b60006121898285611f99565b91506121958284611f99565b91508190509392505050565b60006020820190506121b66000830184611f09565b92915050565b60006080820190506121d16000830187611f09565b6121de6020830186611f09565b6121eb604083018561216e565b81810360608301526121fd8184611f27565b905095945050505050565b600060208201905061221d6000830184611f18565b92915050565b6000602082019050818103600083015261223d8184611f60565b905092915050565b6000602082019050818103600083015261225e81611fca565b9050919050565b6000602082019050818103600083015261227e81611fed565b9050919050565b6000602082019050818103600083015261229e81612010565b9050919050565b600060208201905081810360008301526122be81612033565b9050919050565b600060208201905081810360008301526122de81612056565b9050919050565b600060208201905081810360008301526122fe81612079565b9050919050565b6000602082019050818103600083015261231e8161209c565b9050919050565b6000602082019050818103600083015261233e816120bf565b9050919050565b6000602082019050818103600083015261235e816120e2565b9050919050565b6000602082019050818103600083015261237e81612105565b9050919050565b6000602082019050818103600083015261239e81612128565b9050919050565b600060208201905081810360008301526123be8161214b565b9050919050565b60006020820190506123da600083018461216e565b92915050565b60006123ea6123fb565b90506123f6828261261c565b919050565b6000604051905090565b600067ffffffffffffffff8211156124205761241f6126da565b5b6124298261271d565b9050602081019050919050565b600067ffffffffffffffff821115612451576124506126da565b5b61245a8261271d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006124b58261259e565b91506124c08361259e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156124f5576124f461264d565b5b828201905092915050565b600061250b8261259e565b91506125168361259e565b9250828210156125295761252861264d565b5b828203905092915050565b600061253f8261257e565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156125d55780820151818401526020810190506125ba565b838111156125e4576000848401525b50505050565b6000600282049050600182168061260257607f821691505b60208210811415612616576126156126ab565b5b50919050565b6126258261271d565b810181811067ffffffffffffffff82111715612644576126436126da565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b612a5381612534565b8114612a5e57600080fd5b50565b612a6a81612546565b8114612a7557600080fd5b50565b612a8181612552565b8114612a8c57600080fd5b50565b612a988161259e565b8114612aa357600080fd5b5056fea26469706673582212203742ed7cadb31d3a818f72e6ea2e336c2bb8e9a5d924b44225b01dae9740066464736f6c63430008070033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/loadtest/helpers/init.js b/loadtest/helpers/init.js deleted file mode 100644 index cc12ed2947..0000000000 --- a/loadtest/helpers/init.js +++ /dev/null @@ -1,38 +0,0 @@ -import eth from 'k6/x/ethereum'; -import exec from 'k6/execution'; -import wallet from 'k6/x/ethereum/wallet'; - -export async function fundTestAccounts(client, root_address) { - var accounts = []; - var nonce = client.getNonce(root_address); - console.log(`nonce => ${nonce}`); - - // fund the VUs accounts - for (let i = 0; i < exec.instance.vusInitialized; i++) { - var tacc = wallet.generateKey(); - accounts[i] = { - private_key: tacc.private_key, - address: tacc.address, - nonce: 0, - }; - - // fund each account with some coins - var tx = { - to: tacc.address, - value: Number(10 * 1e18), - gas_price: client.gasPrice(), - nonce: nonce, - }; - - console.log(JSON.stringify(tx)); - var txh = client.sendRawTransaction(tx) - console.log(`txn hash => ${txh}`); - - var receipt = await client.waitForTransactionReceipt(txh); - console.log(`account funded => ${JSON.stringify(receipt)}`); - - nonce++; - } - - return accounts; -} diff --git a/loadtest/runner/base_load_test_runner.go b/loadtest/runner/base_load_test_runner.go index 8482518868..443c27b31b 100644 --- a/loadtest/runner/base_load_test_runner.go +++ b/loadtest/runner/base_load_test_runner.go @@ -255,7 +255,7 @@ func (r *BaseLoadTestRunner) waitForReceiptsParallel() { sequentialEmptyBlocks := 0 totalTxsExecuted := 0 - timer := time.NewTimer(30 * time.Minute) + timer := time.NewTimer(r.cfg.TxPoolTimeout) ticker := time.NewTicker(2 * time.Second) defer func() { @@ -587,9 +587,23 @@ func (r *BaseLoadTestRunner) calculateResults(blockInfos map[uint64]*BlockInfo, return infos[i].Number < infos[j].Number }) - avgTxsPerSecond := math.Ceil(float64(totalTxs) / totalTime) - avgGasPerTx := new(big.Int).Div(totalGasUsed, big.NewInt(int64(totalTxs))) - avgGasUtilization := totalGasUtilization / float64(len(blockInfos)) + var ( + avgTxsPerSecond float64 + avgGasUtilization float64 + avgGasPerTx = big.NewInt(0) + ) + + if totalTime > 0 { + avgTxsPerSecond = math.Ceil(float64(totalTxs) / totalTime) + } + + if totalTxs > 0 { + avgGasPerTx = new(big.Int).Div(totalGasUsed, big.NewInt(int64(totalTxs))) + } + + if len(blockInfos) > 0 { + avgGasUtilization = totalGasUtilization / float64(len(blockInfos)) + } if !r.cfg.ResultsToJSON { return printResults( diff --git a/loadtest/runner/erc20_runner.go b/loadtest/runner/erc20_runner.go index 783b0fabed..d3a1dc46de 100644 --- a/loadtest/runner/erc20_runner.go +++ b/loadtest/runner/erc20_runner.go @@ -120,7 +120,9 @@ func (e *ERC20Runner) deployERC20Token() error { types.WithFrom(e.loadTestAccount.key.Address()), )) - txRelayer, err := txrelayer.NewTxRelayer(txrelayer.WithClient(e.client)) + txRelayer, err := txrelayer.NewTxRelayer( + txrelayer.WithClient(e.client), + txrelayer.WithReceiptsTimeout(e.cfg.ReceiptsTimeout)) if err != nil { return err } @@ -171,6 +173,7 @@ func (e *ERC20Runner) mintERC20TokenToVUs() error { txRelayer, err := txrelayer.NewTxRelayer( txrelayer.WithClient(e.client), txrelayer.WithoutNonceGet(), + txrelayer.WithReceiptsTimeout(e.cfg.ReceiptsTimeout), ) if err != nil { return err diff --git a/loadtest/runner/erc721_runner.go b/loadtest/runner/erc721_runner.go index 16f9fac911..a556bf0f96 100644 --- a/loadtest/runner/erc721_runner.go +++ b/loadtest/runner/erc721_runner.go @@ -112,7 +112,9 @@ func (e *ERC721Runner) deployERC21Token() error { types.WithFrom(e.loadTestAccount.key.Address()), )) - txRelayer, err := txrelayer.NewTxRelayer(txrelayer.WithClient(e.client)) + txRelayer, err := txrelayer.NewTxRelayer( + txrelayer.WithClient(e.client), + txrelayer.WithReceiptsTimeout(e.cfg.ReceiptsTimeout)) if err != nil { return err } diff --git a/loadtest/scenarios/multiple_EOA.js b/loadtest/scenarios/multiple_EOA.js deleted file mode 100644 index d2b609ad0d..0000000000 --- a/loadtest/scenarios/multiple_EOA.js +++ /dev/null @@ -1,108 +0,0 @@ -import eth from 'k6/x/ethereum'; -import exec from 'k6/execution'; -import { fundTestAccounts } from '../helpers/init.js'; -import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js'; - -let setupTimeout = __ENV.SETUP_TIMEOUT; -if (setupTimeout == undefined) { - setupTimeout = "1800s" -} - -let rate = __ENV.RATE; -if (rate == undefined) { - rate = "3000" -} - -let timeUnit = __ENV.TIME_UNIT; -if (timeUnit == undefined) { - timeUnit = "1s" -} - -let duration = __ENV.DURATION; -if (duration == undefined) { - duration = "2m"; -} - -let preAllocatedVUs = __ENV.PREALLOCATED_VUS; -if (preAllocatedVUs == undefined) { - preAllocatedVUs = "60"; -} - -let maxVUs = __ENV.MAX_VUS; -if (maxVUs == undefined) { - maxVUs = "60"; -} - -export const options = { - setupTimeout: setupTimeout, - scenarios: { - constant_request_rate: { - executor: 'constant-arrival-rate', - rate: parseInt(rate), - timeUnit: timeUnit, - duration: duration, - preAllocatedVUs: parseInt(preAllocatedVUs), - maxVUs: parseInt(maxVUs), - }, - }, -}; - -// You can use an existing premined account -const root_address = "0x85da99c8a7c2c95964c8efd687e95e632fc533d6"; -const mnemonic = __ENV.LOADTEST_MNEMONIC; -let rpc_url = __ENV.RPC_URL; -if (rpc_url == undefined) { - rpc_url = "http://localhost:10002" -} - -export async function setup() { - const client = new eth.Client({ - url: rpc_url, - mnemonic: mnemonic, - }); - - var gas_price = client.gasPrice(); - - var accounts = await fundTestAccounts(client, root_address); - - return { accounts: accounts, gas_price: gas_price }; -} - -var clients = []; - -// VU client -export default function (data) { - var client = clients[exec.vu.idInInstance - 1]; - if (client == null) { - client = new eth.Client({ - url: rpc_url, - privateKey: data.accounts[exec.vu.idInInstance - 1].private_key - }); - - clients[exec.vu.idInInstance - 1] = client; - } - - const userData = data.accounts[exec.vu.idInInstance - 1] - - const tx = { - to: "0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF", - value: Number(0.00000001 * 1e18), - gas_price: data.gas_price*1.3, - nonce: userData.nonce, - }; - - const txh = client.sendRawTransaction(tx); - console.log("sender => " + userData.address + " tx hash => " + txh + " nonce => " + userData.nonce); - userData.nonce++; - - // client.waitForTransactionReceipt(txh).then((receipt) => { - // console.log("tx block hash => " + receipt.block_hash); - // }); -} - -export function handleSummary(data) { - return { - 'stdout': textSummary(data, { indent: ' ', enableColors: true }), // Show the text summary to stdout... - 'summary.json': JSON.stringify(data), - }; -} diff --git a/loadtest/scenarios/multiple_ERC20.js b/loadtest/scenarios/multiple_ERC20.js deleted file mode 100644 index c2a9797b01..0000000000 --- a/loadtest/scenarios/multiple_ERC20.js +++ /dev/null @@ -1,111 +0,0 @@ -import eth from 'k6/x/ethereum'; -import exec from 'k6/execution'; -import { fundTestAccounts } from '../helpers/init.js'; -import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js'; - -let setupTimeout = __ENV.SETUP_TIMEOUT; -if (setupTimeout == undefined) { - setupTimeout = "1800s" -} - -let rate = __ENV.RATE; -if (rate == undefined) { - rate = "1500" -} - -let timeUnit = __ENV.TIME_UNIT; -if (timeUnit == undefined) { - timeUnit = "1s" -} - -let duration = __ENV.DURATION; -if (duration == undefined) { - duration = "2m"; -} - -let preAllocatedVUs = __ENV.PREALLOCATED_VUS; -if (preAllocatedVUs == undefined) { - preAllocatedVUs = "60"; -} - -let maxVUs = __ENV.MAX_VUS; -if (maxVUs == undefined) { - maxVUs = "60"; -} - -export const options = { - setupTimeout: setupTimeout, - scenarios: { - constant_request_rate: { - executor: 'constant-arrival-rate', - rate: parseInt(rate), - timeUnit: timeUnit, - duration: duration, - preAllocatedVUs: parseInt(preAllocatedVUs), - maxVUs: parseInt(maxVUs), - }, - }, -}; - -// You can use an existing premined account -const root_address = "0x85da99c8a7c2c95964c8efd687e95e632fc533d6"; -const mnemonic = __ENV.LOADTEST_MNEMONIC; -let rpc_url = __ENV.RPC_URL; -if (rpc_url == undefined) { - rpc_url = "http://localhost:10002"; -} - -const ZexCoin = JSON.parse(open("../contracts/ZexCoinERC20.json")); - -export async function setup() { - let data = {}; - - const client = new eth.Client({ - url: rpc_url, - mnemonic: mnemonic, - }); - - const receipt = client.deployContract(JSON.stringify(ZexCoin.abi), ZexCoin.bytecode.substring(2), 500000000000, "ZexCoin", "ZEX") - - var gas_price = client.gasPrice(); - - var accounts = await fundTestAccounts(client, root_address); - - return { - accounts: accounts, - contract_address: data.contract_address, - gas_price: gas_price - }; -} - -var clients = []; - -// VU client -export default function (data) { - var client = clients[exec.vu.idInInstance - 1]; - if (client == null) { - client = new eth.Client({ - url: rpc_url, - privateKey: data.accounts[exec.vu.idInInstance - 1].private_key - }); - - clients[exec.vu.idInInstance - 1] = client; - } - - let acc = data.accounts[exec.vu.idInInstance - 1]; - - console.log(acc.address); - const con = client.newContract(data.contract_address, JSON.stringify(ZexCoin.abi)); - const res = con.txn("transfer", { gas_limit: 100000, nonce: acc.nonce, gas_price: data.gas_price*1.3 }, acc.address, 1); - console.log("sender => " + acc.address + " tx hash => " + res + " nonce => " + acc.nonce); - - acc.nonce++; - // console.log(JSON.stringify(con.call("balanceOf", acc.address))); -} - -export function handleSummary(data) { - return { - 'stdout': textSummary(data, { indent: ' ', enableColors: true }), // Show the text summary to stdout... - 'summary.json': JSON.stringify(data), - }; -} diff --git a/loadtest/scenarios/simple.js b/loadtest/scenarios/simple.js deleted file mode 100644 index 090bb4b116..0000000000 --- a/loadtest/scenarios/simple.js +++ /dev/null @@ -1,51 +0,0 @@ -import eth from 'k6/x/ethereum'; -import { textSummary } from 'https://jslib.k6.io/k6-summary/0.0.2/index.js'; - -let rpc_url = __ENV.RPC_URL -if (rpc_url == undefined) { - rpc_url = "http://localhost:10002" -} - -const client = new eth.Client({ - url: rpc_url, - mnemonic: __ENV.LOADTEST_MNEMONIC -}); - -// You can use an existing premined account -const root_address = "0x85da99c8a7c2c95964c8efd687e95e632fc533d6" - -export function setup() { - return { nonce: client.getNonce(root_address) }; -} - -export default function (data) { - console.log(`nonce => ${data.nonce}`); - const gas = client.gasPrice(); - console.log(`gas price => ${gas}`); - - const bal = client.getBalance(root_address, client.blockNumber()); - console.log(`bal => ${bal}`); - - const tx = { - to: "0xDEADBEEFDEADBEEFDEADBEEFDEADBEEFDEADBEEF", - value: Number(0.0001 * 1e18), - gas_price: gas, - nonce: data.nonce, - }; - - const txh = client.sendRawTransaction(tx) - console.log("tx hash => " + txh); - // Optional: wait for the transaction to be mined - // const receipt = client.waitForTransactionReceipt(txh).then((receipt) => { - // console.log("tx block hash => " + receipt.block_hash); - // console.log(typeof receipt.block_number); - // }); - data.nonce = data.nonce + 1; -} - -export function handleSummary(data) { - return { - 'stdout': textSummary(data, { indent: ' ', enableColors: true }), // Show the text summary to stdout... - 'summary.json': JSON.stringify(data), - }; -}