From 1845699136637dd9f0febe82f16dc27c0c07d801 Mon Sep 17 00:00:00 2001 From: Bruno Valente <140794260+bruno-valante@users.noreply.github.com> Date: Mon, 22 Jul 2024 15:11:25 +0800 Subject: [PATCH] Remove contract abi submodule --- .github/workflows/abi.yml | 48 + .gitmodules | 3 - 0g-storage-contracts | 1 - common/contract-interface/src/lib.rs | 10 +- scripts/check_abis.sh | 12 + scripts/search_abi.sh | 15 + scripts/update_abis.sh | 65 ++ .../0g-storage-contracts-rev | 1 + storage-contracts-abis/DummyMarket.json | 34 + storage-contracts-abis/DummyReward.json | 77 ++ storage-contracts-abis/FixedPrice.json | 113 ++ storage-contracts-abis/FixedPriceFlow.json | 1035 +++++++++++++++++ storage-contracts-abis/Flow.json | 1014 ++++++++++++++++ storage-contracts-abis/OnePoolReward.json | 302 +++++ storage-contracts-abis/PoraMine.json | 737 ++++++++++++ storage-contracts-abis/PoraMineTest.json | 944 +++++++++++++++ storage-contracts-abis/README.md | 3 + tests/test_framework/blockchain_node.py | 2 +- tests/test_framework/contracts.py | 5 +- tests/test_framework/test_framework.py | 2 +- 20 files changed, 4406 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/abi.yml delete mode 160000 0g-storage-contracts create mode 100755 scripts/check_abis.sh create mode 100755 scripts/search_abi.sh create mode 100755 scripts/update_abis.sh create mode 100644 storage-contracts-abis/0g-storage-contracts-rev create mode 100644 storage-contracts-abis/DummyMarket.json create mode 100644 storage-contracts-abis/DummyReward.json create mode 100644 storage-contracts-abis/FixedPrice.json create mode 100644 storage-contracts-abis/FixedPriceFlow.json create mode 100644 storage-contracts-abis/Flow.json create mode 100644 storage-contracts-abis/OnePoolReward.json create mode 100644 storage-contracts-abis/PoraMine.json create mode 100644 storage-contracts-abis/PoraMineTest.json create mode 100644 storage-contracts-abis/README.md diff --git a/.github/workflows/abi.yml b/.github/workflows/abi.yml new file mode 100644 index 0000000..ccc0eb8 --- /dev/null +++ b/.github/workflows/abi.yml @@ -0,0 +1,48 @@ +name: abi-consistent-check + +on: + push: + branches: [ "main"] + pull_request: + branches: [ "main" ] + +jobs: + build-and-compare: + runs-on: ubuntu-latest + + steps: + - name: Clone current repository + uses: actions/checkout@v3 + + - name: Get the Git revision from the current repository + id: get-rev + run: echo "rev=$(cat ./storage-contracts-abis/0g-storage-contracts-rev)" >> $GITHUB_OUTPUT + + - name: Clone another repository + uses: actions/checkout@v3 + with: + repository: '0glabs/0g-storage-contracts' + path: '0g-storage-contracts' + + - name: Checkout specific revision + working-directory: ./0g-storage-contracts + run: | + git fetch --depth=1 origin ${{ steps.get-rev.outputs.rev }} + git checkout ${{ steps.get-rev.outputs.rev }} + + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '18.17' + cache: 'yarn' + cache-dependency-path: ./0g-storage-contracts + + - name: Run yarn in the cloned repository + working-directory: ./0g-storage-contracts + run: | + yarn + yarn build + + - name: Compare files + run: | + ./scripts/check_abis.sh ./0g-storage-contracts/artifacts/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 7e39815..e69de29 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +0,0 @@ -[submodule "0g-storage-contracts"] - path = 0g-storage-contracts - url = https://github.com/0glabs/0g-storage-contracts.git diff --git a/0g-storage-contracts b/0g-storage-contracts deleted file mode 160000 index 25bc14a..0000000 --- a/0g-storage-contracts +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 25bc14a27441e8fb26e4d42d7c8c885f92d6c74a diff --git a/common/contract-interface/src/lib.rs b/common/contract-interface/src/lib.rs index 10333c2..70a1adb 100644 --- a/common/contract-interface/src/lib.rs +++ b/common/contract-interface/src/lib.rs @@ -3,16 +3,10 @@ use ethers::prelude::abigen; // run `cargo doc -p contract-interface --open` to read struct definition #[cfg(not(feature = "dev"))] -abigen!( - ZgsFlow, - "../../0g-storage-contracts/artifacts/contracts/dataFlow/Flow.sol/Flow.json" -); +abigen!(ZgsFlow, "../../storage-contracts-abis/Flow.json"); #[cfg(not(feature = "dev"))] -abigen!( - PoraMine, - "../../0g-storage-contracts/artifacts/contracts/miner/Mine.sol/PoraMine.json" -); +abigen!(PoraMine, "../../storage-contracts-abis/PoraMine.json"); #[cfg(feature = "dev")] abigen!( diff --git a/scripts/check_abis.sh b/scripts/check_abis.sh new file mode 100755 index 0000000..b9429b4 --- /dev/null +++ b/scripts/check_abis.sh @@ -0,0 +1,12 @@ + +set -e + +artifacts_path="$1" + +check_abis() { + for contract_name in "$@"; do + diff $(./scripts/search_abi.sh "$artifacts_path" "$contract_name.json") "storage-contracts-abis/$contract_name.json" + done +} +check_abis DummyMarket DummyReward Flow PoraMine PoraMineTest FixedPrice OnePoolReward FixedPriceFlow + diff --git a/scripts/search_abi.sh b/scripts/search_abi.sh new file mode 100755 index 0000000..966f123 --- /dev/null +++ b/scripts/search_abi.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +directory="$1" # The directory to search in +filename="$2" # The filename to search for + +# Find the file in the directory +found_files=$(find "$directory" -type f -name "$filename") + +# Check if any files were found +if [ -z "$found_files" ]; then + echo "Error: No files named '$filename' found in directory '$directory'." >&2 + exit 1 +else + echo "$found_files" +fi \ No newline at end of file diff --git a/scripts/update_abis.sh b/scripts/update_abis.sh new file mode 100755 index 0000000..56d6ff5 --- /dev/null +++ b/scripts/update_abis.sh @@ -0,0 +1,65 @@ +#!/bin/bash + +set -e + +default_path="../0g-storage-contracts" +path="${1:-$default_path}" + +# Step 1: Check if the path is a valid Git directory with commits +if [ ! -d "$path/.git" ] || [ -z "$(git -C "$path" rev-parse HEAD 2> /dev/null)" ]; then + echo "Error: The specified path is not a valid Git repository with commits." + exit 1 +fi +if [ ! -z "$(git -C "$path" status --porcelain)" ]; then + echo "Error: There are uncommitted changes in the contract repository." + exit 1 +fi + +# Step 2: Build the contracts +build_contracts() { + local target_path="$path" + local original_path=$(pwd) # Save the current directory + + if cd "$target_path"; then + yarn + yarn build + cd "$original_path" + else + echo "Error: Failed to switch to directory $target_path." + exit 1 + fi +} + +build_contracts + +# Step 3: Copy the file from a specified sub-path +copy_file() { + local source_path="$1" + local destination_path="$2" + + # Check if the source file exists + if [ ! -f "$source_path" ]; then + echo "Error: The file $source_path does not exist." + exit 1 + fi + + # Copy the file to the destination + cp "$source_path" "$destination_path" + echo "File copied: $source_path -> $destination_path." +} + +copy_abis() { + for contract_name in "$@"; do + copy_file $(./scripts/search_abi.sh "$path/artifacts" "$contract_name.json") "storage-contracts-abis/$contract_name.json" + done +} + +copy_abis DummyMarket DummyReward Flow PoraMine PoraMineTest FixedPrice OnePoolReward FixedPriceFlow + + +# Step 4: Get the current Git revision and write it to a specified file +git_revision=$(git -C "$path" rev-parse HEAD) +revision_file="storage-contracts-abis/0g-storage-contracts-rev" +echo "$git_revision" > "$revision_file" + +echo "Write git rev $git_revision to $revision_file." diff --git a/storage-contracts-abis/0g-storage-contracts-rev b/storage-contracts-abis/0g-storage-contracts-rev new file mode 100644 index 0000000..d456758 --- /dev/null +++ b/storage-contracts-abis/0g-storage-contracts-rev @@ -0,0 +1 @@ +6ec57942cba3068d3373bcb2c88f8fd51d2322b1 diff --git a/storage-contracts-abis/DummyMarket.json b/storage-contracts-abis/DummyMarket.json new file mode 100644 index 0000000..bfc49fe --- /dev/null +++ b/storage-contracts-abis/DummyMarket.json @@ -0,0 +1,34 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DummyMarket", + "sourceName": "contracts/test/DummyMarket.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "uploadSectors", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paddingSectors", + "type": "uint256" + } + ], + "name": "chargeFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x6080604052348015600f57600080fd5b5060a08061001e6000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c8063da6eb36a14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b50508135936020830135935060409092013591905056fea264697066735822122054eb84b374e7eb5c57b284f82f977fe19500436ef4128d3e147969cefdd4cbcd64736f6c63430008100033", + "deployedBytecode": "0x6080604052348015600f57600080fd5b506004361060285760003560e01c8063da6eb36a14602d575b600080fd5b603d6038366004603f565b505050565b005b600080600060608486031215605357600080fd5b50508135936020830135935060409092013591905056fea264697066735822122054eb84b374e7eb5c57b284f82f977fe19500436ef4128d3e147969cefdd4cbcd64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/DummyReward.json b/storage-contracts-abis/DummyReward.json new file mode 100644 index 0000000..16f9b3b --- /dev/null +++ b/storage-contracts-abis/DummyReward.json @@ -0,0 +1,77 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "DummyReward", + "sourceName": "contracts/test/DummyReward.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DistributeReward", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "claimMineReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "uploadSectors", + "type": "uint256" + } + ], + "name": "fillReward", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060f18061001f6000396000f3fe60806040526004361060265760003560e01c806359e9670014602b578063b7a3c04c14603c575b600080fd5b603a60363660046058565b5050565b005b348015604757600080fd5b50603a60533660046079565b505050565b60008060408385031215606a57600080fd5b50508035926020909101359150565b600080600060608486031215608d57600080fd5b8335925060208401356001600160a01b038116811460aa57600080fd5b92959294505050604091909101359056fea264697066735822122031a993c3def9ed899c5b5a53bab495d498047e1a8ce262b61e700511cfb9adf164736f6c63430008100033", + "deployedBytecode": "0x60806040526004361060265760003560e01c806359e9670014602b578063b7a3c04c14603c575b600080fd5b603a60363660046058565b5050565b005b348015604757600080fd5b50603a60533660046079565b505050565b60008060408385031215606a57600080fd5b50508035926020909101359150565b600080600060608486031215608d57600080fd5b8335925060208401356001600160a01b038116811460aa57600080fd5b92959294505050604091909101359056fea264697066735822122031a993c3def9ed899c5b5a53bab495d498047e1a8ce262b61e700511cfb9adf164736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/FixedPrice.json b/storage-contracts-abis/FixedPrice.json new file mode 100644 index 0000000..d409f2c --- /dev/null +++ b/storage-contracts-abis/FixedPrice.json @@ -0,0 +1,113 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FixedPrice", + "sourceName": "contracts/market/FixedPrice.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "uploadSectors", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paddingSectors", + "type": "uint256" + } + ], + "name": "chargeFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "flow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "lifetimeMonthes", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flow_", + "type": "address" + }, + { + "internalType": "address", + "name": "reward_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pricePerSector", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5061057c806100206000396000f3fe6080604052600436106100595760003560e01c8063158ef93e14610065578063228cb73314610094578063343aad82146100cc57806361ec5082146100ec578063b4988fd014610110578063da6eb36a1461013257600080fd5b3661006057005b600080fd5b34801561007157600080fd5b5060005461007f9060ff1681565b60405190151581526020015b60405180910390f35b3480156100a057600080fd5b506035546100b4906001600160a01b031681565b6040516001600160a01b03909116815260200161008b565b3480156100d857600080fd5b506034546100b4906001600160a01b031681565b3480156100f857600080fd5b5061010260335481565b60405190815260200161008b565b34801561011c57600080fd5b5061013061012b36600461045b565b610152565b005b34801561013e57600080fd5b5061013061014d366004610497565b61024c565b60005460ff16156101b55760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b60648201526084015b60405180910390fd5b6000805460ff19166001179055600c6101d0610400806104d9565b6101dc906104006104d9565b670de0b6b3a76400006101f2600a6101006104d9565b6101fc91906104d9565b61020691906104f8565b61021091906104f8565b61021a90846104d9565b603355603480546001600160a01b039384166001600160a01b0319918216179091556035805492909316911617905550565b6034546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e0060448201526064016101ac565b60006102bb828461051a565b90506000836033546102cd91906104d9565b9050478111156103155760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820706169642066656560681b60448201526064016101ac565b60006103218247610533565b905060008361033086856104d9565b61033a91906104f8565b905060006103488285610533565b905085156103b7576035546040516259e96760e81b8152600481018a9052602481018890526001600160a01b03909116906359e967009084906044016000604051808303818588803b15801561039d57600080fd5b505af11580156103b1573d6000803e3d6000fd5b50505050505b6035546001600160a01b03166359e967006103d2838661051a565b6103dc898c61051a565b8a6040518463ffffffff1660e01b8152600401610403929190918252602082015260400190565b6000604051808303818588803b15801561041c57600080fd5b505af1158015610430573d6000803e3d6000fd5b50505050505050505050505050565b80356001600160a01b038116811461045657600080fd5b919050565b60008060006060848603121561047057600080fd5b833592506104806020850161043f565b915061048e6040850161043f565b90509250925092565b6000806000606084860312156104ac57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156104f3576104f36104c3565b500290565b60008261051557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561052d5761052d6104c3565b92915050565b8181038181111561052d5761052d6104c356fea26469706673582212207856f59ed7ef23f0c92ccfb266162bebd399dae56fd6a45b082c139f7e3b553064736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106100595760003560e01c8063158ef93e14610065578063228cb73314610094578063343aad82146100cc57806361ec5082146100ec578063b4988fd014610110578063da6eb36a1461013257600080fd5b3661006057005b600080fd5b34801561007157600080fd5b5060005461007f9060ff1681565b60405190151581526020015b60405180910390f35b3480156100a057600080fd5b506035546100b4906001600160a01b031681565b6040516001600160a01b03909116815260200161008b565b3480156100d857600080fd5b506034546100b4906001600160a01b031681565b3480156100f857600080fd5b5061010260335481565b60405190815260200161008b565b34801561011c57600080fd5b5061013061012b36600461045b565b610152565b005b34801561013e57600080fd5b5061013061014d366004610497565b61024c565b60005460ff16156101b55760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b60648201526084015b60405180910390fd5b6000805460ff19166001179055600c6101d0610400806104d9565b6101dc906104006104d9565b670de0b6b3a76400006101f2600a6101006104d9565b6101fc91906104d9565b61020691906104f8565b61021091906104f8565b61021a90846104d9565b603355603480546001600160a01b039384166001600160a01b0319918216179091556035805492909316911617905550565b6034546001600160a01b0316336001600160a01b0316146102af5760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e0060448201526064016101ac565b60006102bb828461051a565b90506000836033546102cd91906104d9565b9050478111156103155760405162461bcd60e51b81526020600482015260136024820152724e6f7420656e6f75676820706169642066656560681b60448201526064016101ac565b60006103218247610533565b905060008361033086856104d9565b61033a91906104f8565b905060006103488285610533565b905085156103b7576035546040516259e96760e81b8152600481018a9052602481018890526001600160a01b03909116906359e967009084906044016000604051808303818588803b15801561039d57600080fd5b505af11580156103b1573d6000803e3d6000fd5b50505050505b6035546001600160a01b03166359e967006103d2838661051a565b6103dc898c61051a565b8a6040518463ffffffff1660e01b8152600401610403929190918252602082015260400190565b6000604051808303818588803b15801561041c57600080fd5b505af1158015610430573d6000803e3d6000fd5b50505050505050505050505050565b80356001600160a01b038116811461045657600080fd5b919050565b60008060006060848603121561047057600080fd5b833592506104806020850161043f565b915061048e6040850161043f565b90509250925092565b6000806000606084860312156104ac57600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156104f3576104f36104c3565b500290565b60008261051557634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561052d5761052d6104c3565b92915050565b8181038181111561052d5761052d6104c356fea26469706673582212207856f59ed7ef23f0c92ccfb266162bebd399dae56fd6a45b082c139f7e3b553064736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/FixedPriceFlow.json b/storage-contracts-abis/FixedPriceFlow.json new file mode 100644 index 0000000..cecce31 --- /dev/null +++ b/storage-contracts-abis/FixedPriceFlow.json @@ -0,0 +1,1035 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "FixedPriceFlow", + "sourceName": "contracts/dataFlow/FixedPriceFlow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "blocksPerEpoch_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deployDelay_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidSubmission", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "paid", + "type": "uint256" + } + ], + "name": "NotEnoughFee", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "startMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "context", + "type": "bytes32" + } + ], + "name": "NewEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "identity", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startPos", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "indexed": false, + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "Submit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission[]", + "name": "submissions", + "type": "tuple[]" + } + ], + "name": "batchSubmit", + "outputs": [ + { + "internalType": "uint256[]", + "name": "indexes", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "digests", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "startIndexes", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lengths", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "commitRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currentLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochStartPosition", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getContext", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "name": "getEpochRange", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + } + ], + "internalType": "struct EpochRange", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "identifier", + "type": "bytes32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "market_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "makeContext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cnt", + "type": "uint256" + } + ], + "name": "makeContextFixedTimes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "makeContextWithResult", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "market", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_length", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "alignExp", + "type": "uint256" + } + ], + "name": "nextAlign", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_length", + "type": "uint256" + } + ], + "name": "nextPow2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "numSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint128", + "name": "targetPosition", + "type": "uint128" + } + ], + "name": "queryContextAtPosition", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct EpochRangeWithContextDigest", + "name": "range", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "root", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rootHistory", + "outputs": [ + { + "internalType": "contract IDigestHistory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submissionIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "submit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unstagedHeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "name": "zeros", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x60e06040523480156200001157600080fd5b506040516200418b3803806200418b8339810160408190526200003491620000b0565b6000805460ff1916905560a0829052604051829082906014906200005890620000a2565b908152602001604051809103906000f0801580156200007b573d6000803e3d6000fd5b506001600160a01b0316608052620000948143620000d5565b60c05250620000fd92505050565b6106708062003b1b83390190565b60008060408385031215620000c457600080fd5b505080516020909101519092909150565b80820180821115620000f757634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516139af6200016c600039600081816103190152818161089b01528181610b5b01528181610cf801528181610f5501528181611d7d01528181611f1101526123cf0152600081816107dd0152611ee90152600081816106ca0152611f7801526139af6000f3fe6080604052600436106102305760003560e01c8063900cf0cf1161012e578063c4d66de8116100ab578063e63ab1e91161006f578063e63ab1e914610741578063e829558814610763578063ebf0c71714610783578063ef3e12dc14610798578063f0682054146107cb57600080fd5b8063c4d66de814610698578063c7dd5221146106b8578063ca15c873146106ec578063d34353c91461070c578063d547741f1461072157600080fd5b80639e62a38e116100f25780639e62a38e1461061f578063a217fddf14610642578063a3d35f3614610657578063b464b53e1461066d578063b8a409ac1461068257600080fd5b8063900cf0cf146105935780639010d07c146105a957806391d14854146105c957806393e405a0146105e95780639498bd71146105ff57600080fd5b806336568abe116101bc5780635c975abb116101805780635c975abb1461048a57806377e19824146104a25780637d590708146104b757806380f55605146105465780638456cb591461057e57600080fd5b806336568abe1461040057806338d45e10146104205780633d75d9c2146104355780633f4ba83a14610455578063555430a11461046a57600080fd5b8063231b026811610203578063231b026814610307578063248a9ca3146103495780632f2ff15d1461037a57806331bae1741461039a578063364800ec146103ea57600080fd5b806301ffc9a714610235578063127f0f071461026a578063158ef93e146102cb57806318a641ef146102e5575b600080fd5b34801561024157600080fd5b5061025561025036600461318e565b6107ff565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f61082a565b6040516102619190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156102d757600080fd5b506003546102559060ff1681565b3480156102f157600080fd5b506103056103003660046131b8565b610899565b005b34801561031357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610261565b34801561035557600080fd5b5061033b6103643660046131b8565b6000908152600160208190526040909120015490565b34801561038657600080fd5b506103056103953660046131e8565b610911565b3480156103a657600080fd5b506103ba6103b5366004613214565b61093c565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610261565b3480156103f657600080fd5b5061033b60385481565b34801561040c57600080fd5b5061030561041b3660046131e8565b610adf565b34801561042c57600080fd5b50610305610b59565b34801561044157600080fd5b5061033b6104503660046131b8565b610ba8565b34801561046157600080fd5b50610305610bf4565b34801561047657600080fd5b5061033b61048536600461323d565b610c14565b34801561049657600080fd5b5060005460ff16610255565b3480156104ae57600080fd5b50606c5461033b565b3480156104c357600080fd5b5061051f6104d23660046131b8565b6040805180820190915260008082526020820152506000908152607560209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610261565b34801561055257600080fd5b50606b54610566906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561058a57600080fd5b50610305610c4c565b34801561059f57600080fd5b5061033b606d5481565b3480156105b557600080fd5b506105666105c436600461323d565b610c6c565b3480156105d557600080fd5b506102556105e43660046131e8565b610c84565b3480156105f557600080fd5b5061033b606e5481565b34801561060b57600080fd5b5061030561061a3660046131b8565b610caf565b61063261062d366004613472565b610ce8565b604051610261949392919061355e565b34801561064e57600080fd5b5061033b600081565b34801561066357600080fd5b5061033b60365481565b34801561067957600080fd5b5061027f610f21565b34801561068e57600080fd5b5061033b606c5481565b3480156106a457600080fd5b506103056106b33660046135dd565b610fa8565b3480156106c457600080fd5b506105667f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061033b6107073660046131b8565b610fe1565b34801561071857600080fd5b50610305610ff8565b34801561072d57600080fd5b5061030561073c3660046131e8565b61110f565b34801561074d57600080fd5b5061033b60008051602061395a83398151915281565b34801561076f57600080fd5b5061033b61077e3660046131b8565b611135565b34801561078f57600080fd5b5061033b611d39565b6107ab6107a63660046135f8565b611d6d565b604080519485526020850193909352918301526060820152608001610261565b3480156107d757600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216635a05180f60e01b1480610824575061082482611eaf565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252606f5481526070546020820152607154918101919091526072546060820152607354608082015260745460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156108e25760405162461bcd60e51b81526004016108d990613635565b60405180910390fd5b60005b81811161090c576108f4611ee4565b6108fc575050565b61090581613682565b90506108e5565b505b50565b6000828152600160208190526040909120015461092d81612206565b6109378383612210565b505050565b6040805160608101825260008082526020820181905291810191909152610961610b59565b603654826001600160801b0316106109c75760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016108d9565b6076546000905b81811115610a9757600060026109e4848461369b565b6109ee91906136c4565b905060768181548110610a0357610a036136d8565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b909104811694840185905260019091015491830191909152909550861610610a6857610a6181600161369b565b9250610a91565b83600001516001600160801b0316856001600160801b031610610a8d57505050919050565b8091505b506109ce565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016108d9565b6001600160a01b0381163314610b4f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108d9565b61090c8282612232565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b995760405162461bcd60e51b81526004016108d990613635565b610ba1611ee4565b610b99575b565b600081808203610bbb5750600092915050565b600181811c909117600281901c17600481901c17600881901c17601081901c17602081901c1790610bed90829061369b565b9392505050565b60008051602061395a833981519152610c0c81612206565b61090e612254565b600082808203610c28576000915050610824565b610c336001826136ee565b831c9050610c4260018261369b565b90921b9392505050565b60008051602061395a833981519152610c6481612206565b61090e6122a6565b6000828152600260205260408120610bed90836122e3565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60035460ff1615610cd25760405162461bcd60e51b81526004016108d990613701565b6003805460ff1916600117905561090e816122ef565b606080606080610cf661234e565b7f0000000000000000000000000000000000000000000000000000000000000000431015610d365760405162461bcd60e51b81526004016108d990613635565b84518067ffffffffffffffff811115610d5157610d5161325f565b604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b5094508067ffffffffffffffff811115610d9657610d9661325f565b604051908082528060200260200182016040528015610dbf578160200160208202803683370190505b5093508067ffffffffffffffff811115610ddb57610ddb61325f565b604051908082528060200260200182016040528015610e04578160200160208202803683370190505b5092508067ffffffffffffffff811115610e2057610e2061325f565b604051908082528060200260200182016040528015610e49578160200160208202803683370190505b50915060005b81811015610f1857600080600080610e7f8b8681518110610e7257610e726136d8565b6020026020010151611d6d565b9350935093509350838a8681518110610e9a57610e9a6136d8565b60200260200101818152505082898681518110610eb957610eb96136d8565b60200260200101818152505081888681518110610ed857610ed86136d8565b60200260200101818152505080878681518110610ef757610ef76136d8565b6020026020010181815250505050505080610f1190613682565b9050610e4f565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610f935760405162461bcd60e51b81526004016108d990613635565b610f9b610b59565b610fa361082a565b905090565b60035460ff1615610fcb5760405162461bcd60e51b81526004016108d990613701565b6003805460ff1916600117905561090e81612394565b600081815260026020526040812061082490612486565b6037546038540361100557565b60378054603854909160009161101d906001906136ee565b8154811061102d5761102d6136d8565b90600052602060002001549050600061104e600160385461077e91906136ee565b6038549091505b83811015611107576040805160208082018690528183018590528251808303840181526060909201909252805191012060365461109690600290841c613743565b6000036110d0578093506110a982611135565b925080603783815481106110bf576110bf6136d8565b6000918252602090912001556110f4565b603782815481106110e3576110e36136d8565b906000526020600020015493508092505b50806110ff81613682565b915050611055565b505050603855565b6000828152600160208190526040909120015461112b81612206565b6109378383612232565b60008160000361116657507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b8160010361119557507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b816002036111c457507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b816003036111f357507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b8160040361122257507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b8160050361125157507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b8160060361128057507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b816007036112af57507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b816008036112de57507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361130d57507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361133c57507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361136b57507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c0361139a57507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036113c957507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e036113f857507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361142757507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361145657507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b8160110361148557507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036114b457507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b816013036114e357507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361151257507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361154157507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361157057507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b8160170361159f57507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036115ce57507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b816019036115fd57507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361162c57507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361165b57507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c0361168a57507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036116b957507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e036116e857507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361171757507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361174657507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361177557507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036117a457507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036117d357507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361180257507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361183157507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361186057507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b8160270361188f57507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036118be57507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b816029036118ed57507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361191c57507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361194b57507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361197a57507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036119a957507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036119d857507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f03611a0757507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b81603003611a3657507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b81603103611a6557507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b81603203611a9457507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b81603303611ac357507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b81603403611af257507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b81603503611b2157507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b81603603611b5057507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b81603703611b7f57507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b81603803611bae57507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b81603903611bdd57507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a03611c0c57507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b03611c3b57507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c03611c6a57507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d03611c9957507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e03611cc857507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03611cf757507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016108d9565b919050565b6037805460009190611d4d906001906136ee565b81548110611d5d57611d5d6136d8565b9060005260206000200154905090565b600080600080611d7b61234e565b7f0000000000000000000000000000000000000000000000000000000000000000431015611dbb5760405162461bcd60e51b81526004016108d990613635565b611dc485612490565b611e055760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016108d9565b6000611e10866126a7565b9050611e1b81612705565b611e23610b59565b6000611e2e876127f7565b90506000611e3b8861291c565b606c80549192506001906000611e51838561369b565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051611e9894939291906137e2565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061082457506301ffc9a760e01b6001600160e01b0319831614610824565b6000807f0000000000000000000000000000000000000000000000000000000000000000606d54600101027f0000000000000000000000000000000000000000000000000000000000000000019050438110611f4257600091505090565b611f4a610ff8565b6000611f54611d39565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af1158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe59190613843565b9050606d548114611ff857611ff861385c565b600080436120088661010061369b565b101561203857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470905080612147565b506036546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120606e80546036805487870187526001600160801b039283168089529083168689018181526000878152607589528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526076805460018101825599529051965196831696909216909402949094177fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed460029096029586015592517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed59094019390935554905591505b6001606d600082825461215a919061369b565b90915550506040805160c081018252606d5480825260208083018990528284018890526036546060808501829052608080860188905260a0909501889052606f84905560708b905560718a9055607282905560738790556074889055606c5486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61090e8133612950565b61221a82826129a9565b60008281526002602052604090206109379082612a14565b61223c8282612a29565b60008281526002602052604090206109379082612a90565b61225c612aa5565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6122ae61234e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122893390565b6000610bed8383612aee565b600160365560408051600081526020810191829052516123119160379161312e565b5060378054600181810183556000929092527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae0191909155603855565b60005460ff1615610ba65760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108d9565b61239e60006122ef565b606b80546001600160a01b0319166001600160a01b0383161790556000606d8190556040805160c0810182529182527f0000000000000000000000000000000000000000000000000000000000000000602083015281016123fd611d39565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351606f5590830151607055820151607155810151607255608081015160735560a0015160745561246e600033612b18565b61090e60008051602061395a83398151915233612b18565b6000610824825490565b60008160400151516000036124a757506000919050565b60408201518051600491906124be906001906136ee565b815181106124ce576124ce6136d8565b60200260200101516020015183604001516000815181106124f1576124f16136d8565b60200260200101516020015161250791906136ee565b1061251457506000919050565b6040826040015160008151811061252d5761252d6136d8565b6020026020010151602001511061254657506000919050565b60005b600183604001515161255b91906136ee565b8110156125d25782604001518181518110612578576125786136d8565b6020026020010151602001518360400151826001612596919061369b565b815181106125a6576125a66136d8565b602002602001015160200151106125c05750600092915050565b806125ca81613682565b915050612549565b5060006125de836126a7565b90506125ec61010082613872565b835111156125fd5750600092915050565b6000601082101561261a576126136001836136ee565b9050612680565b83604001515160010361263557612613600483901c836136ee565b6004846040015160008151811061264e5761264e6136d8565b60200260200101516020015161266491906136ee565b61266f90600161369b565b61267d906001901b836136ee565b90505b61268c61010082613872565b84511161269d575060009392505050565b5060019392505050565b600080805b8360400151518110156126fe57836040015181815181106126cf576126cf6136d8565b6020026020010151602001516001901b826126ea919061369b565b9150806126f681613682565b9150506126ac565b5092915050565b606b54604080516330f6284160e11b815290516000926001600160a01b0316916361ec50829160048083019260209291908290030181865afa15801561274f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127739190613843565b905060006127818284613872565b905047478211156127b657604051637c2e324160e11b81526004810184905260248101859052604481018290526064016108d9565b606b546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156127f0573d6000803e3d6000fd5b5050505050565b603654600090815b83604001515181101561288857600084604001518281518110612824576128246136d8565b602002602001015160000151905060008560400151838151811061284a5761284a6136d8565b602002602001015160200151905060006128648383612b22565b905083600003612872578095505b505050808061288090613682565b9150506127ff565b50600061289582846136ee565b90506000836036546128a791906136ee565b606b54604051636d3759b560e11b81526004810186905260248101839052604481018590529192506001600160a01b03169063da6eb36a90606401600060405180830381600087803b1580156128fc57600080fd5b505af1158015612910573d6000803e3d6000fd5b50505050505050919050565b600081604001516040516020016129339190613891565b604051602081830303815290604052805190602001209050919050565b61295a8282610c84565b61090c5761296781612c92565b612972836020612ca4565b6040516020016129839291906138a4565b60408051601f198184030181529082905262461bcd60e51b82526108d991600401613919565b6129b38282610c84565b61090c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bed836001600160a01b038416612e40565b612a338282610c84565b1561090c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bed836001600160a01b038416612e8f565b60005460ff16610ba65760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108d9565b6000826000018281548110612b0557612b056136d8565b9060005260206000200154905092915050565b61090c8282612210565b600080612b3160365484610c14565b90506000612b426001851b8361369b565b603754909150612b54906001906136ee565b6001901b811115612b9d57612b67610ff8565b612b6f612f82565b603754612b7e906001906136ee565b6001901b811115612b9657612b91612f82565b612b6f565b6037546038555b603754612ba985613010565b60008087875b84811015612c7457612bc4600288831c613743565b600003612c0a578160378281548110612bdf57612bdf6136d8565b600091825260209091200155612bf681600161369b565b603855612c046001866136ee565b50612c74565b60378181548110612c1d57612c1d6136d8565b906000526020600020015493508192508383604051602001612c49929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080612c6c90613682565b915050612baf565b50612c826001891b8761369b565b6036555093979650505050505050565b60606108246001600160a01b03831660145b60606000612cb3836002613872565b612cbe90600261369b565b67ffffffffffffffff811115612cd657612cd661325f565b6040519080825280601f01601f191660200182016040528015612d00576020820181803683370190505b509050600360fc1b81600081518110612d1b57612d1b6136d8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d4a57612d4a6136d8565b60200101906001600160f81b031916908160001a9053506000612d6e846002613872565b612d7990600161369b565b90505b6001811115612df1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dad57612dad6136d8565b1a60f81b828281518110612dc357612dc36136d8565b60200101906001600160f81b031916908160001a90535060049490941c93612dea8161392c565b9050612d7c565b508315610bed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108d9565b6000818152600183016020526040812054612e8757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610824565b506000610824565b60008181526001830160205260408120548015612f78576000612eb36001836136ee565b8554909150600090612ec7906001906136ee565b9050818114612f2c576000866000018281548110612ee757612ee76136d8565b9060005260206000200154905080876000018481548110612f0a57612f0a6136d8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f3d57612f3d613943565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610824565b6000915050610824565b6037805490600090612f956001846136ee565b81548110612fa557612fa56136d8565b60009182526020822001549150612fc061077e6001856136ee565b905060378282604051602001612fe0929190918252602082015260400190565b60408051601f19818403018152919052805160209182012082546001810184556000938452919092200155505050565b80603854111561301d5750565b603780546038549091600091613035906001906136ee565b81548110613045576130456136d8565b906000526020600020015490506000613066600160385461077e91906136ee565b6038549091505b838110156127f057604080516020808201869052818301859052825180830384018152606090920190925280519101206036546130ae90600290841c613743565b6000036130f7578093506130c182611135565b92508582106130f25780603783815481106130de576130de6136d8565b600091825260209091200155505050505050565b61311b565b6037828154811061310a5761310a6136d8565b906000526020600020015493508092505b508061312681613682565b91505061306d565b828054828255906000526020600020908101928215613169579160200282015b8281111561316957825182559160200191906001019061314e565b50613175929150613179565b5090565b5b80821115613175576000815560010161317a565b6000602082840312156131a057600080fd5b81356001600160e01b031981168114610bed57600080fd5b6000602082840312156131ca57600080fd5b5035919050565b80356001600160a01b0381168114611d3457600080fd5b600080604083850312156131fb57600080fd5b8235915061320b602084016131d1565b90509250929050565b60006020828403121561322657600080fd5b81356001600160801b0381168114610bed57600080fd5b6000806040838503121561325057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156132985761329861325f565b60405290565b6040516060810167ffffffffffffffff811182821017156132985761329861325f565b604051601f8201601f1916810167ffffffffffffffff811182821017156132ea576132ea61325f565b604052919050565b600067ffffffffffffffff82111561330c5761330c61325f565b5060051b60200190565b600082601f83011261332757600080fd5b8135602061333c613337836132f2565b6132c1565b82815260069290921b8401810191818101908684111561335b57600080fd5b8286015b8481101561339a57604081890312156133785760008081fd5b613380613275565b81358152848201358582015283529183019160400161335f565b509695505050505050565b6000606082840312156133b757600080fd5b6133bf61329e565b90508135815260208083013567ffffffffffffffff808211156133e157600080fd5b818501915085601f8301126133f557600080fd5b8135818111156134075761340761325f565b613419601f8201601f191685016132c1565b818152878583860101111561342d57600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561345857600080fd5b505061346684828501613316565b60408301525092915050565b6000602080838503121561348557600080fd5b823567ffffffffffffffff8082111561349d57600080fd5b818501915085601f8301126134b157600080fd5b81356134bf613337826132f2565b81815260059190911b830184019084810190888311156134de57600080fd5b8585015b83811015613516578035858111156134fa5760008081fd5b6135088b89838a01016133a5565b8452509186019186016134e2565b5098975050505050505050565b600081518084526020808501945080840160005b8381101561355357815187529582019590820190600101613537565b509495945050505050565b6080815260006135716080830187613523565b82810360208481019190915286518083528782019282019060005b818110156135a85784518352938301939183019160010161358c565b505084810360408601526135bc8188613523565b9250505082810360608401526135d28185613523565b979650505050505050565b6000602082840312156135ef57600080fd5b610bed826131d1565b60006020828403121561360a57600080fd5b813567ffffffffffffffff81111561362157600080fd5b61362d848285016133a5565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016136945761369461366c565b5060010190565b808201808211156108245761082461366c565b634e487b7160e01b600052601260045260246000fd5b6000826136d3576136d36136ae565b500490565b634e487b7160e01b600052603260045260246000fd5b818103818111156108245761082461366c565b60208082526022908201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604082015261195960f21b606082015260800190565b600082613752576137526136ae565b500690565b60005b8381101561377257818101518382015260200161375a565b50506000910152565b60008151808452613793816020860160208601613757565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156135535781518051885283015183880152604090960195908201906001016137bb565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261381a60e084018261377b565b90506040840151607f198483030160c085015261383782826137a7565b98975050505050505050565b60006020828403121561385557600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b600081600019048311821515161561388c5761388c61366c565b500290565b602081526000610bed60208301846137a7565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516138dc816017850160208801613757565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161390d816028840160208801613757565b01602801949350505050565b602081526000610bed602083018461377b565b60008161393b5761393b61366c565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220b411df868bd424ae7f2848b8887610aebf40ee7dd6e582791a3b4a1bbc21234864736f6c63430008100033608060405234801561001057600080fd5b5060405161067038038061067083398101604081905261002f9161014a565b6100383361009a565b806001600160401b0381111561005057610050610163565b604051908082528060200260200182016040528015610079578160200160208202803683370190505b50805161008e916001916020909101906100ea565b50506000600255610179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610125579160200282015b8281111561012557825182559160200191906001019061010a565b50610131929150610135565b5090565b5b808211156101315760008155600101610136565b60006020828403121561015c57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6104e8806101886000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d557806396e494e8146100f0578063e0886f9014610103578063f2fde38b1461011657600080fd5b80631d1a696d146100825780632d287e43146100aa578063715018a6146100cb575b600080fd5b6100956100903660046103e3565b610129565b60405190151581526020015b60405180910390f35b6100bd6100b83660046103e3565b610194565b6040519081526020016100a1565b6100d36101ee565b005b6000546040516001600160a01b0390911681526020016100a1565b6100956100fe3660046103e3565b610202565b6100bd6101113660046103e3565b610237565b6100d36101243660046103fc565b610297565b60008061013d600254600180549050610310565b905060005b8181101561018a57836001828154811061015e5761015e610425565b906000526020600020015403610178575060019392505050565b8061018281610451565b915050610142565b5060009392505050565b6002546001546000919082906101aa908361046a565b905083600182815481106101c0576101c0610425565b90600052602060002001819055506001600260008282546101e1919061048c565b9091555091949350505050565b6101f661032a565b6102006000610384565b565b6001546002546000919083108015610230575080610222600254836103d4565b61022c919061049f565b8310155b9392505050565b600061024282610202565b6102675760405163b52d71f360e01b8152600481018390526024015b60405180910390fd5b60018054610275908461046a565b8154811061028557610285610425565b90600052602060002001549050919050565b61029f61032a565b6001600160a01b0381166103045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161025e565b61030d81610384565b50565b600081831061031f5781610321565b825b90505b92915050565b6000546001600160a01b031633146102005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161025e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081831161031f5781610321565b6000602082840312156103f557600080fd5b5035919050565b60006020828403121561040e57600080fd5b81356001600160a01b038116811461023057600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016104635761046361043b565b5060010190565b60008261048757634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156103245761032461043b565b818103818111156103245761032461043b56fea2646970667358221220c90d957d44891f095d986848fabf130f05541c1afde790c7f687700f7785710764736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106102305760003560e01c8063900cf0cf1161012e578063c4d66de8116100ab578063e63ab1e91161006f578063e63ab1e914610741578063e829558814610763578063ebf0c71714610783578063ef3e12dc14610798578063f0682054146107cb57600080fd5b8063c4d66de814610698578063c7dd5221146106b8578063ca15c873146106ec578063d34353c91461070c578063d547741f1461072157600080fd5b80639e62a38e116100f25780639e62a38e1461061f578063a217fddf14610642578063a3d35f3614610657578063b464b53e1461066d578063b8a409ac1461068257600080fd5b8063900cf0cf146105935780639010d07c146105a957806391d14854146105c957806393e405a0146105e95780639498bd71146105ff57600080fd5b806336568abe116101bc5780635c975abb116101805780635c975abb1461048a57806377e19824146104a25780637d590708146104b757806380f55605146105465780638456cb591461057e57600080fd5b806336568abe1461040057806338d45e10146104205780633d75d9c2146104355780633f4ba83a14610455578063555430a11461046a57600080fd5b8063231b026811610203578063231b026814610307578063248a9ca3146103495780632f2ff15d1461037a57806331bae1741461039a578063364800ec146103ea57600080fd5b806301ffc9a714610235578063127f0f071461026a578063158ef93e146102cb57806318a641ef146102e5575b600080fd5b34801561024157600080fd5b5061025561025036600461318e565b6107ff565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f61082a565b6040516102619190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156102d757600080fd5b506003546102559060ff1681565b3480156102f157600080fd5b506103056103003660046131b8565b610899565b005b34801561031357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610261565b34801561035557600080fd5b5061033b6103643660046131b8565b6000908152600160208190526040909120015490565b34801561038657600080fd5b506103056103953660046131e8565b610911565b3480156103a657600080fd5b506103ba6103b5366004613214565b61093c565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610261565b3480156103f657600080fd5b5061033b60385481565b34801561040c57600080fd5b5061030561041b3660046131e8565b610adf565b34801561042c57600080fd5b50610305610b59565b34801561044157600080fd5b5061033b6104503660046131b8565b610ba8565b34801561046157600080fd5b50610305610bf4565b34801561047657600080fd5b5061033b61048536600461323d565b610c14565b34801561049657600080fd5b5060005460ff16610255565b3480156104ae57600080fd5b50606c5461033b565b3480156104c357600080fd5b5061051f6104d23660046131b8565b6040805180820190915260008082526020820152506000908152607560209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610261565b34801561055257600080fd5b50606b54610566906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561058a57600080fd5b50610305610c4c565b34801561059f57600080fd5b5061033b606d5481565b3480156105b557600080fd5b506105666105c436600461323d565b610c6c565b3480156105d557600080fd5b506102556105e43660046131e8565b610c84565b3480156105f557600080fd5b5061033b606e5481565b34801561060b57600080fd5b5061030561061a3660046131b8565b610caf565b61063261062d366004613472565b610ce8565b604051610261949392919061355e565b34801561064e57600080fd5b5061033b600081565b34801561066357600080fd5b5061033b60365481565b34801561067957600080fd5b5061027f610f21565b34801561068e57600080fd5b5061033b606c5481565b3480156106a457600080fd5b506103056106b33660046135dd565b610fa8565b3480156106c457600080fd5b506105667f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061033b6107073660046131b8565b610fe1565b34801561071857600080fd5b50610305610ff8565b34801561072d57600080fd5b5061030561073c3660046131e8565b61110f565b34801561074d57600080fd5b5061033b60008051602061395a83398151915281565b34801561076f57600080fd5b5061033b61077e3660046131b8565b611135565b34801561078f57600080fd5b5061033b611d39565b6107ab6107a63660046135f8565b611d6d565b604080519485526020850193909352918301526060820152608001610261565b3480156107d757600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216635a05180f60e01b1480610824575061082482611eaf565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252606f5481526070546020820152607154918101919091526072546060820152607354608082015260745460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156108e25760405162461bcd60e51b81526004016108d990613635565b60405180910390fd5b60005b81811161090c576108f4611ee4565b6108fc575050565b61090581613682565b90506108e5565b505b50565b6000828152600160208190526040909120015461092d81612206565b6109378383612210565b505050565b6040805160608101825260008082526020820181905291810191909152610961610b59565b603654826001600160801b0316106109c75760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016108d9565b6076546000905b81811115610a9757600060026109e4848461369b565b6109ee91906136c4565b905060768181548110610a0357610a036136d8565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b909104811694840185905260019091015491830191909152909550861610610a6857610a6181600161369b565b9250610a91565b83600001516001600160801b0316856001600160801b031610610a8d57505050919050565b8091505b506109ce565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016108d9565b6001600160a01b0381163314610b4f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108d9565b61090c8282612232565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b995760405162461bcd60e51b81526004016108d990613635565b610ba1611ee4565b610b99575b565b600081808203610bbb5750600092915050565b600181811c909117600281901c17600481901c17600881901c17601081901c17602081901c1790610bed90829061369b565b9392505050565b60008051602061395a833981519152610c0c81612206565b61090e612254565b600082808203610c28576000915050610824565b610c336001826136ee565b831c9050610c4260018261369b565b90921b9392505050565b60008051602061395a833981519152610c6481612206565b61090e6122a6565b6000828152600260205260408120610bed90836122e3565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60035460ff1615610cd25760405162461bcd60e51b81526004016108d990613701565b6003805460ff1916600117905561090e816122ef565b606080606080610cf661234e565b7f0000000000000000000000000000000000000000000000000000000000000000431015610d365760405162461bcd60e51b81526004016108d990613635565b84518067ffffffffffffffff811115610d5157610d5161325f565b604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b5094508067ffffffffffffffff811115610d9657610d9661325f565b604051908082528060200260200182016040528015610dbf578160200160208202803683370190505b5093508067ffffffffffffffff811115610ddb57610ddb61325f565b604051908082528060200260200182016040528015610e04578160200160208202803683370190505b5092508067ffffffffffffffff811115610e2057610e2061325f565b604051908082528060200260200182016040528015610e49578160200160208202803683370190505b50915060005b81811015610f1857600080600080610e7f8b8681518110610e7257610e726136d8565b6020026020010151611d6d565b9350935093509350838a8681518110610e9a57610e9a6136d8565b60200260200101818152505082898681518110610eb957610eb96136d8565b60200260200101818152505081888681518110610ed857610ed86136d8565b60200260200101818152505080878681518110610ef757610ef76136d8565b6020026020010181815250505050505080610f1190613682565b9050610e4f565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610f935760405162461bcd60e51b81526004016108d990613635565b610f9b610b59565b610fa361082a565b905090565b60035460ff1615610fcb5760405162461bcd60e51b81526004016108d990613701565b6003805460ff1916600117905561090e81612394565b600081815260026020526040812061082490612486565b6037546038540361100557565b60378054603854909160009161101d906001906136ee565b8154811061102d5761102d6136d8565b90600052602060002001549050600061104e600160385461077e91906136ee565b6038549091505b83811015611107576040805160208082018690528183018590528251808303840181526060909201909252805191012060365461109690600290841c613743565b6000036110d0578093506110a982611135565b925080603783815481106110bf576110bf6136d8565b6000918252602090912001556110f4565b603782815481106110e3576110e36136d8565b906000526020600020015493508092505b50806110ff81613682565b915050611055565b505050603855565b6000828152600160208190526040909120015461112b81612206565b6109378383612232565b60008160000361116657507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b8160010361119557507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b816002036111c457507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b816003036111f357507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b8160040361122257507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b8160050361125157507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b8160060361128057507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b816007036112af57507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b816008036112de57507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361130d57507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361133c57507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361136b57507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c0361139a57507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036113c957507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e036113f857507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361142757507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361145657507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b8160110361148557507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036114b457507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b816013036114e357507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361151257507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361154157507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361157057507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b8160170361159f57507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036115ce57507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b816019036115fd57507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361162c57507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361165b57507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c0361168a57507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036116b957507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e036116e857507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361171757507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361174657507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361177557507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036117a457507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036117d357507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361180257507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361183157507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361186057507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b8160270361188f57507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036118be57507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b816029036118ed57507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361191c57507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361194b57507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361197a57507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036119a957507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036119d857507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f03611a0757507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b81603003611a3657507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b81603103611a6557507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b81603203611a9457507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b81603303611ac357507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b81603403611af257507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b81603503611b2157507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b81603603611b5057507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b81603703611b7f57507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b81603803611bae57507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b81603903611bdd57507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a03611c0c57507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b03611c3b57507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c03611c6a57507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d03611c9957507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e03611cc857507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03611cf757507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016108d9565b919050565b6037805460009190611d4d906001906136ee565b81548110611d5d57611d5d6136d8565b9060005260206000200154905090565b600080600080611d7b61234e565b7f0000000000000000000000000000000000000000000000000000000000000000431015611dbb5760405162461bcd60e51b81526004016108d990613635565b611dc485612490565b611e055760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016108d9565b6000611e10866126a7565b9050611e1b81612705565b611e23610b59565b6000611e2e876127f7565b90506000611e3b8861291c565b606c80549192506001906000611e51838561369b565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051611e9894939291906137e2565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061082457506301ffc9a760e01b6001600160e01b0319831614610824565b6000807f0000000000000000000000000000000000000000000000000000000000000000606d54600101027f0000000000000000000000000000000000000000000000000000000000000000019050438110611f4257600091505090565b611f4a610ff8565b6000611f54611d39565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af1158015611fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe59190613843565b9050606d548114611ff857611ff861385c565b600080436120088661010061369b565b101561203857507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470905080612147565b506036546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120606e80546036805487870187526001600160801b039283168089529083168689018181526000878152607589528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526076805460018101825599529051965196831696909216909402949094177fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed460029096029586015592517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed59094019390935554905591505b6001606d600082825461215a919061369b565b90915550506040805160c081018252606d5480825260208083018990528284018890526036546060808501829052608080860188905260a0909501889052606f84905560708b905560718a9055607282905560738790556074889055606c5486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61090e8133612950565b61221a82826129a9565b60008281526002602052604090206109379082612a14565b61223c8282612a29565b60008281526002602052604090206109379082612a90565b61225c612aa5565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6122ae61234e565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122893390565b6000610bed8383612aee565b600160365560408051600081526020810191829052516123119160379161312e565b5060378054600181810183556000929092527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae0191909155603855565b60005460ff1615610ba65760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108d9565b61239e60006122ef565b606b80546001600160a01b0319166001600160a01b0383161790556000606d8190556040805160c0810182529182527f0000000000000000000000000000000000000000000000000000000000000000602083015281016123fd611d39565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351606f5590830151607055820151607155810151607255608081015160735560a0015160745561246e600033612b18565b61090e60008051602061395a83398151915233612b18565b6000610824825490565b60008160400151516000036124a757506000919050565b60408201518051600491906124be906001906136ee565b815181106124ce576124ce6136d8565b60200260200101516020015183604001516000815181106124f1576124f16136d8565b60200260200101516020015161250791906136ee565b1061251457506000919050565b6040826040015160008151811061252d5761252d6136d8565b6020026020010151602001511061254657506000919050565b60005b600183604001515161255b91906136ee565b8110156125d25782604001518181518110612578576125786136d8565b6020026020010151602001518360400151826001612596919061369b565b815181106125a6576125a66136d8565b602002602001015160200151106125c05750600092915050565b806125ca81613682565b915050612549565b5060006125de836126a7565b90506125ec61010082613872565b835111156125fd5750600092915050565b6000601082101561261a576126136001836136ee565b9050612680565b83604001515160010361263557612613600483901c836136ee565b6004846040015160008151811061264e5761264e6136d8565b60200260200101516020015161266491906136ee565b61266f90600161369b565b61267d906001901b836136ee565b90505b61268c61010082613872565b84511161269d575060009392505050565b5060019392505050565b600080805b8360400151518110156126fe57836040015181815181106126cf576126cf6136d8565b6020026020010151602001516001901b826126ea919061369b565b9150806126f681613682565b9150506126ac565b5092915050565b606b54604080516330f6284160e11b815290516000926001600160a01b0316916361ec50829160048083019260209291908290030181865afa15801561274f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127739190613843565b905060006127818284613872565b905047478211156127b657604051637c2e324160e11b81526004810184905260248101859052604481018290526064016108d9565b606b546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156127f0573d6000803e3d6000fd5b5050505050565b603654600090815b83604001515181101561288857600084604001518281518110612824576128246136d8565b602002602001015160000151905060008560400151838151811061284a5761284a6136d8565b602002602001015160200151905060006128648383612b22565b905083600003612872578095505b505050808061288090613682565b9150506127ff565b50600061289582846136ee565b90506000836036546128a791906136ee565b606b54604051636d3759b560e11b81526004810186905260248101839052604481018590529192506001600160a01b03169063da6eb36a90606401600060405180830381600087803b1580156128fc57600080fd5b505af1158015612910573d6000803e3d6000fd5b50505050505050919050565b600081604001516040516020016129339190613891565b604051602081830303815290604052805190602001209050919050565b61295a8282610c84565b61090c5761296781612c92565b612972836020612ca4565b6040516020016129839291906138a4565b60408051601f198184030181529082905262461bcd60e51b82526108d991600401613919565b6129b38282610c84565b61090c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bed836001600160a01b038416612e40565b612a338282610c84565b1561090c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bed836001600160a01b038416612e8f565b60005460ff16610ba65760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108d9565b6000826000018281548110612b0557612b056136d8565b9060005260206000200154905092915050565b61090c8282612210565b600080612b3160365484610c14565b90506000612b426001851b8361369b565b603754909150612b54906001906136ee565b6001901b811115612b9d57612b67610ff8565b612b6f612f82565b603754612b7e906001906136ee565b6001901b811115612b9657612b91612f82565b612b6f565b6037546038555b603754612ba985613010565b60008087875b84811015612c7457612bc4600288831c613743565b600003612c0a578160378281548110612bdf57612bdf6136d8565b600091825260209091200155612bf681600161369b565b603855612c046001866136ee565b50612c74565b60378181548110612c1d57612c1d6136d8565b906000526020600020015493508192508383604051602001612c49929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080612c6c90613682565b915050612baf565b50612c826001891b8761369b565b6036555093979650505050505050565b60606108246001600160a01b03831660145b60606000612cb3836002613872565b612cbe90600261369b565b67ffffffffffffffff811115612cd657612cd661325f565b6040519080825280601f01601f191660200182016040528015612d00576020820181803683370190505b509050600360fc1b81600081518110612d1b57612d1b6136d8565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612d4a57612d4a6136d8565b60200101906001600160f81b031916908160001a9053506000612d6e846002613872565b612d7990600161369b565b90505b6001811115612df1576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612dad57612dad6136d8565b1a60f81b828281518110612dc357612dc36136d8565b60200101906001600160f81b031916908160001a90535060049490941c93612dea8161392c565b9050612d7c565b508315610bed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108d9565b6000818152600183016020526040812054612e8757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610824565b506000610824565b60008181526001830160205260408120548015612f78576000612eb36001836136ee565b8554909150600090612ec7906001906136ee565b9050818114612f2c576000866000018281548110612ee757612ee76136d8565b9060005260206000200154905080876000018481548110612f0a57612f0a6136d8565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f3d57612f3d613943565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610824565b6000915050610824565b6037805490600090612f956001846136ee565b81548110612fa557612fa56136d8565b60009182526020822001549150612fc061077e6001856136ee565b905060378282604051602001612fe0929190918252602082015260400190565b60408051601f19818403018152919052805160209182012082546001810184556000938452919092200155505050565b80603854111561301d5750565b603780546038549091600091613035906001906136ee565b81548110613045576130456136d8565b906000526020600020015490506000613066600160385461077e91906136ee565b6038549091505b838110156127f057604080516020808201869052818301859052825180830384018152606090920190925280519101206036546130ae90600290841c613743565b6000036130f7578093506130c182611135565b92508582106130f25780603783815481106130de576130de6136d8565b600091825260209091200155505050505050565b61311b565b6037828154811061310a5761310a6136d8565b906000526020600020015493508092505b508061312681613682565b91505061306d565b828054828255906000526020600020908101928215613169579160200282015b8281111561316957825182559160200191906001019061314e565b50613175929150613179565b5090565b5b80821115613175576000815560010161317a565b6000602082840312156131a057600080fd5b81356001600160e01b031981168114610bed57600080fd5b6000602082840312156131ca57600080fd5b5035919050565b80356001600160a01b0381168114611d3457600080fd5b600080604083850312156131fb57600080fd5b8235915061320b602084016131d1565b90509250929050565b60006020828403121561322657600080fd5b81356001600160801b0381168114610bed57600080fd5b6000806040838503121561325057600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156132985761329861325f565b60405290565b6040516060810167ffffffffffffffff811182821017156132985761329861325f565b604051601f8201601f1916810167ffffffffffffffff811182821017156132ea576132ea61325f565b604052919050565b600067ffffffffffffffff82111561330c5761330c61325f565b5060051b60200190565b600082601f83011261332757600080fd5b8135602061333c613337836132f2565b6132c1565b82815260069290921b8401810191818101908684111561335b57600080fd5b8286015b8481101561339a57604081890312156133785760008081fd5b613380613275565b81358152848201358582015283529183019160400161335f565b509695505050505050565b6000606082840312156133b757600080fd5b6133bf61329e565b90508135815260208083013567ffffffffffffffff808211156133e157600080fd5b818501915085601f8301126133f557600080fd5b8135818111156134075761340761325f565b613419601f8201601f191685016132c1565b818152878583860101111561342d57600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561345857600080fd5b505061346684828501613316565b60408301525092915050565b6000602080838503121561348557600080fd5b823567ffffffffffffffff8082111561349d57600080fd5b818501915085601f8301126134b157600080fd5b81356134bf613337826132f2565b81815260059190911b830184019084810190888311156134de57600080fd5b8585015b83811015613516578035858111156134fa5760008081fd5b6135088b89838a01016133a5565b8452509186019186016134e2565b5098975050505050505050565b600081518084526020808501945080840160005b8381101561355357815187529582019590820190600101613537565b509495945050505050565b6080815260006135716080830187613523565b82810360208481019190915286518083528782019282019060005b818110156135a85784518352938301939183019160010161358c565b505084810360408601526135bc8188613523565b9250505082810360608401526135d28185613523565b979650505050505050565b6000602082840312156135ef57600080fd5b610bed826131d1565b60006020828403121561360a57600080fd5b813567ffffffffffffffff81111561362157600080fd5b61362d848285016133a5565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016136945761369461366c565b5060010190565b808201808211156108245761082461366c565b634e487b7160e01b600052601260045260246000fd5b6000826136d3576136d36136ae565b500490565b634e487b7160e01b600052603260045260246000fd5b818103818111156108245761082461366c565b60208082526022908201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604082015261195960f21b606082015260800190565b600082613752576137526136ae565b500690565b60005b8381101561377257818101518382015260200161375a565b50506000910152565b60008151808452613793816020860160208601613757565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b838110156135535781518051885283015183880152604090960195908201906001016137bb565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261381a60e084018261377b565b90506040840151607f198483030160c085015261383782826137a7565b98975050505050505050565b60006020828403121561385557600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b600081600019048311821515161561388c5761388c61366c565b500290565b602081526000610bed60208301846137a7565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516138dc816017850160208801613757565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835161390d816028840160208801613757565b01602801949350505050565b602081526000610bed602083018461377b565b60008161393b5761393b61366c565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220b411df868bd424ae7f2848b8887610aebf40ee7dd6e582791a3b4a1bbc21234864736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/Flow.json b/storage-contracts-abis/Flow.json new file mode 100644 index 0000000..01dca09 --- /dev/null +++ b/storage-contracts-abis/Flow.json @@ -0,0 +1,1014 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Flow", + "sourceName": "contracts/dataFlow/Flow.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "blocksPerEpoch_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deployDelay_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "InvalidSubmission", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "startMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes32", + "name": "context", + "type": "bytes32" + } + ], + "name": "NewEpoch", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "identity", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "submissionIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startPos", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "indexed": false, + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "Submit", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission[]", + "name": "submissions", + "type": "tuple[]" + } + ], + "name": "batchSubmit", + "outputs": [ + { + "internalType": "uint256[]", + "name": "indexes", + "type": "uint256[]" + }, + { + "internalType": "bytes32[]", + "name": "digests", + "type": "bytes32[]" + }, + { + "internalType": "uint256[]", + "name": "startIndexes", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "lengths", + "type": "uint256[]" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "blocksPerEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "commitRoot", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currentLength", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "epochStartPosition", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "firstBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getContext", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "name": "getEpochRange", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + } + ], + "internalType": "struct EpochRange", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "identifier", + "type": "bytes32" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "market_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "makeContext", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cnt", + "type": "uint256" + } + ], + "name": "makeContextFixedTimes", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "makeContextWithResult", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "market", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_length", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "alignExp", + "type": "uint256" + } + ], + "name": "nextAlign", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_length", + "type": "uint256" + } + ], + "name": "nextPow2", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "numSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint128", + "name": "targetPosition", + "type": "uint128" + } + ], + "name": "queryContextAtPosition", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "start", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "end", + "type": "uint128" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct EpochRangeWithContextDigest", + "name": "range", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "root", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rootHistory", + "outputs": [ + { + "internalType": "contract IDigestHistory", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "submissionIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "length", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "tags", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "bytes32", + "name": "root", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "internalType": "struct SubmissionNode[]", + "name": "nodes", + "type": "tuple[]" + } + ], + "internalType": "struct Submission", + "name": "submission", + "type": "tuple" + } + ], + "name": "submit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unstagedHeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "height", + "type": "uint256" + } + ], + "name": "zeros", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x60e06040523480156200001157600080fd5b5060405162004091380380620040918339810160408190526200003491620000aa565b6000805460ff1916905560a082905260405160149062000054906200009c565b908152602001604051809103906000f08015801562000077573d6000803e3d6000fd5b506001600160a01b0316608052620000908143620000cf565b60c05250620000f79050565b6106708062003a2183390190565b60008060408385031215620000be57600080fd5b505080516020909101519092909150565b80820180821115620000f157634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c0516138bb62000166600039600081816103190152818161089b01528181610b5b01528181610cf801528181610f5501528181611d7d01528181611f0801526123c60152600081816107dd0152611ee00152600081816106ca0152611f6f01526138bb6000f3fe6080604052600436106102305760003560e01c8063900cf0cf1161012e578063c4d66de8116100ab578063e63ab1e91161006f578063e63ab1e914610741578063e829558814610763578063ebf0c71714610783578063ef3e12dc14610798578063f0682054146107cb57600080fd5b8063c4d66de814610698578063c7dd5221146106b8578063ca15c873146106ec578063d34353c91461070c578063d547741f1461072157600080fd5b80639e62a38e116100f25780639e62a38e1461061f578063a217fddf14610642578063a3d35f3614610657578063b464b53e1461066d578063b8a409ac1461068257600080fd5b8063900cf0cf146105935780639010d07c146105a957806391d14854146105c957806393e405a0146105e95780639498bd71146105ff57600080fd5b806336568abe116101bc5780635c975abb116101805780635c975abb1461048a57806377e19824146104a25780637d590708146104b757806380f55605146105465780638456cb591461057e57600080fd5b806336568abe1461040057806338d45e10146104205780633d75d9c2146104355780633f4ba83a14610455578063555430a11461046a57600080fd5b8063231b026811610203578063231b026814610307578063248a9ca3146103495780632f2ff15d1461037a57806331bae1741461039a578063364800ec146103ea57600080fd5b806301ffc9a714610235578063127f0f071461026a578063158ef93e146102cb57806318a641ef146102e5575b600080fd5b34801561024157600080fd5b5061025561025036600461309a565b6107ff565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f61082a565b6040516102619190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156102d757600080fd5b506003546102559060ff1681565b3480156102f157600080fd5b506103056103003660046130c4565b610899565b005b34801561031357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610261565b34801561035557600080fd5b5061033b6103643660046130c4565b6000908152600160208190526040909120015490565b34801561038657600080fd5b506103056103953660046130f4565b610911565b3480156103a657600080fd5b506103ba6103b5366004613120565b61093c565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610261565b3480156103f657600080fd5b5061033b60385481565b34801561040c57600080fd5b5061030561041b3660046130f4565b610adf565b34801561042c57600080fd5b50610305610b59565b34801561044157600080fd5b5061033b6104503660046130c4565b610ba8565b34801561046157600080fd5b50610305610bf4565b34801561047657600080fd5b5061033b610485366004613149565b610c14565b34801561049657600080fd5b5060005460ff16610255565b3480156104ae57600080fd5b50606c5461033b565b3480156104c357600080fd5b5061051f6104d23660046130c4565b6040805180820190915260008082526020820152506000908152607560209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610261565b34801561055257600080fd5b50606b54610566906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561058a57600080fd5b50610305610c4c565b34801561059f57600080fd5b5061033b606d5481565b3480156105b557600080fd5b506105666105c4366004613149565b610c6c565b3480156105d557600080fd5b506102556105e43660046130f4565b610c84565b3480156105f557600080fd5b5061033b606e5481565b34801561060b57600080fd5b5061030561061a3660046130c4565b610caf565b61063261062d36600461337e565b610ce8565b604051610261949392919061346a565b34801561064e57600080fd5b5061033b600081565b34801561066357600080fd5b5061033b60365481565b34801561067957600080fd5b5061027f610f21565b34801561068e57600080fd5b5061033b606c5481565b3480156106a457600080fd5b506103056106b33660046134e9565b610fa8565b3480156106c457600080fd5b506105667f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061033b6107073660046130c4565b610fe1565b34801561071857600080fd5b50610305610ff8565b34801561072d57600080fd5b5061030561073c3660046130f4565b61110f565b34801561074d57600080fd5b5061033b60008051602061386683398151915281565b34801561076f57600080fd5b5061033b61077e3660046130c4565b611135565b34801561078f57600080fd5b5061033b611d39565b6107ab6107a6366004613504565b611d6d565b604080519485526020850193909352918301526060820152608001610261565b3480156107d757600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216635a05180f60e01b1480610824575061082482611ea6565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252606f5481526070546020820152607154918101919091526072546060820152607354608082015260745460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156108e25760405162461bcd60e51b81526004016108d990613541565b60405180910390fd5b60005b81811161090c576108f4611edb565b6108fc575050565b6109058161358e565b90506108e5565b505b50565b6000828152600160208190526040909120015461092d816121fd565b6109378383612207565b505050565b6040805160608101825260008082526020820181905291810191909152610961610b59565b603654826001600160801b0316106109c75760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016108d9565b6076546000905b81811115610a9757600060026109e484846135a7565b6109ee91906135d0565b905060768181548110610a0357610a036135e4565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b909104811694840185905260019091015491830191909152909550861610610a6857610a618160016135a7565b9250610a91565b83600001516001600160801b0316856001600160801b031610610a8d57505050919050565b8091505b506109ce565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016108d9565b6001600160a01b0381163314610b4f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108d9565b61090c8282612229565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b995760405162461bcd60e51b81526004016108d990613541565b610ba1611edb565b610b99575b565b600081808203610bbb5750600092915050565b600181811c909117600281901c17600481901c17600881901c17601081901c17602081901c1790610bed9082906135a7565b9392505050565b600080516020613866833981519152610c0c816121fd565b61090e61224b565b600082808203610c28576000915050610824565b610c336001826135fa565b831c9050610c426001826135a7565b90921b9392505050565b600080516020613866833981519152610c64816121fd565b61090e61229d565b6000828152600260205260408120610bed90836122da565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60035460ff1615610cd25760405162461bcd60e51b81526004016108d99061360d565b6003805460ff1916600117905561090e816122e6565b606080606080610cf6612345565b7f0000000000000000000000000000000000000000000000000000000000000000431015610d365760405162461bcd60e51b81526004016108d990613541565b84518067ffffffffffffffff811115610d5157610d5161316b565b604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b5094508067ffffffffffffffff811115610d9657610d9661316b565b604051908082528060200260200182016040528015610dbf578160200160208202803683370190505b5093508067ffffffffffffffff811115610ddb57610ddb61316b565b604051908082528060200260200182016040528015610e04578160200160208202803683370190505b5092508067ffffffffffffffff811115610e2057610e2061316b565b604051908082528060200260200182016040528015610e49578160200160208202803683370190505b50915060005b81811015610f1857600080600080610e7f8b8681518110610e7257610e726135e4565b6020026020010151611d6d565b9350935093509350838a8681518110610e9a57610e9a6135e4565b60200260200101818152505082898681518110610eb957610eb96135e4565b60200260200101818152505081888681518110610ed857610ed86135e4565b60200260200101818152505080878681518110610ef757610ef76135e4565b6020026020010181815250505050505080610f119061358e565b9050610e4f565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610f935760405162461bcd60e51b81526004016108d990613541565b610f9b610b59565b610fa361082a565b905090565b60035460ff1615610fcb5760405162461bcd60e51b81526004016108d99061360d565b6003805460ff1916600117905561090e8161238b565b60008181526002602052604081206108249061247d565b6037546038540361100557565b60378054603854909160009161101d906001906135fa565b8154811061102d5761102d6135e4565b90600052602060002001549050600061104e600160385461077e91906135fa565b6038549091505b83811015611107576040805160208082018690528183018590528251808303840181526060909201909252805191012060365461109690600290841c61364f565b6000036110d0578093506110a982611135565b925080603783815481106110bf576110bf6135e4565b6000918252602090912001556110f4565b603782815481106110e3576110e36135e4565b906000526020600020015493508092505b50806110ff8161358e565b915050611055565b505050603855565b6000828152600160208190526040909120015461112b816121fd565b6109378383612229565b60008160000361116657507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b8160010361119557507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b816002036111c457507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b816003036111f357507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b8160040361122257507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b8160050361125157507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b8160060361128057507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b816007036112af57507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b816008036112de57507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361130d57507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361133c57507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361136b57507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c0361139a57507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036113c957507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e036113f857507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361142757507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361145657507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b8160110361148557507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036114b457507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b816013036114e357507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361151257507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361154157507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361157057507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b8160170361159f57507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036115ce57507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b816019036115fd57507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361162c57507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361165b57507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c0361168a57507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036116b957507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e036116e857507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361171757507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361174657507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361177557507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036117a457507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036117d357507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361180257507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361183157507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361186057507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b8160270361188f57507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036118be57507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b816029036118ed57507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361191c57507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361194b57507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361197a57507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036119a957507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036119d857507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f03611a0757507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b81603003611a3657507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b81603103611a6557507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b81603203611a9457507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b81603303611ac357507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b81603403611af257507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b81603503611b2157507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b81603603611b5057507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b81603703611b7f57507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b81603803611bae57507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b81603903611bdd57507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a03611c0c57507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b03611c3b57507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c03611c6a57507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d03611c9957507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e03611cc857507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03611cf757507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016108d9565b919050565b6037805460009190611d4d906001906135fa565b81548110611d5d57611d5d6135e4565b9060005260206000200154905090565b600080600080611d7b612345565b7f0000000000000000000000000000000000000000000000000000000000000000431015611dbb5760405162461bcd60e51b81526004016108d990613541565b611dc485612487565b611e055760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016108d9565b6000611e108661269e565b9050611e1a610b59565b6000611e25876126fc565b90506000611e3288612821565b606c80549192506001906000611e4883856135a7565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051611e8f94939291906136ee565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061082457506301ffc9a760e01b6001600160e01b0319831614610824565b6000807f0000000000000000000000000000000000000000000000000000000000000000606d54600101027f0000000000000000000000000000000000000000000000000000000000000000019050438110611f3957600091505090565b611f41610ff8565b6000611f4b611d39565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af1158015611fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdc919061374f565b9050606d548114611fef57611fef613768565b60008043611fff866101006135a7565b101561202f57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090508061213e565b506036546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120606e80546036805487870187526001600160801b039283168089529083168689018181526000878152607589528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526076805460018101825599529051965196831696909216909402949094177fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed460029096029586015592517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed59094019390935554905591505b6001606d600082825461215191906135a7565b90915550506040805160c081018252606d5480825260208083018990528284018890526036546060808501829052608080860188905260a0909501889052606f84905560708b905560718a9055607282905560738790556074889055606c5486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61090e8133612855565b61221182826128ae565b60008281526002602052604090206109379082612919565b612233828261292e565b60008281526002602052604090206109379082612995565b6122536129aa565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6122a5612345565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122803390565b6000610bed83836129f3565b600160365560408051600081526020810191829052516123089160379161303a565b5060378054600181810183556000929092527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae0191909155603855565b60005460ff1615610ba65760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108d9565b61239560006122e6565b606b80546001600160a01b0319166001600160a01b0383161790556000606d8190556040805160c0810182529182527f0000000000000000000000000000000000000000000000000000000000000000602083015281016123f4611d39565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351606f5590830151607055820151607155810151607255608081015160735560a00151607455612465600033612a1d565b61090e60008051602061386683398151915233612a1d565b6000610824825490565b600081604001515160000361249e57506000919050565b60408201518051600491906124b5906001906135fa565b815181106124c5576124c56135e4565b60200260200101516020015183604001516000815181106124e8576124e86135e4565b6020026020010151602001516124fe91906135fa565b1061250b57506000919050565b60408260400151600081518110612524576125246135e4565b6020026020010151602001511061253d57506000919050565b60005b600183604001515161255291906135fa565b8110156125c9578260400151818151811061256f5761256f6135e4565b602002602001015160200151836040015182600161258d91906135a7565b8151811061259d5761259d6135e4565b602002602001015160200151106125b75750600092915050565b806125c18161358e565b915050612540565b5060006125d58361269e565b90506125e36101008261377e565b835111156125f45750600092915050565b600060108210156126115761260a6001836135fa565b9050612677565b83604001515160010361262c5761260a600483901c836135fa565b60048460400151600081518110612645576126456135e4565b60200260200101516020015161265b91906135fa565b6126669060016135a7565b612674906001901b836135fa565b90505b6126836101008261377e565b845111612694575060009392505050565b5060019392505050565b600080805b8360400151518110156126f557836040015181815181106126c6576126c66135e4565b6020026020010151602001516001901b826126e191906135a7565b9150806126ed8161358e565b9150506126a3565b5092915050565b603654600090815b83604001515181101561278d57600084604001518281518110612729576127296135e4565b602002602001015160000151905060008560400151838151811061274f5761274f6135e4565b602002602001015160200151905060006127698383612a27565b905083600003612777578095505b50505080806127859061358e565b915050612704565b50600061279a82846135fa565b90506000836036546127ac91906135fa565b606b54604051636d3759b560e11b81526004810186905260248101839052604481018590529192506001600160a01b03169063da6eb36a90606401600060405180830381600087803b15801561280157600080fd5b505af1158015612815573d6000803e3d6000fd5b50505050505050919050565b60008160400151604051602001612838919061379d565b604051602081830303815290604052805190602001209050919050565b61285f8282610c84565b61090c5761286c81612b97565b612877836020612ba9565b6040516020016128889291906137b0565b60408051601f198184030181529082905262461bcd60e51b82526108d991600401613825565b6128b88282610c84565b61090c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bed836001600160a01b038416612d45565b6129388282610c84565b1561090c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bed836001600160a01b038416612d94565b60005460ff16610ba65760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108d9565b6000826000018281548110612a0a57612a0a6135e4565b9060005260206000200154905092915050565b61090c8282612207565b600080612a3660365484610c14565b90506000612a476001851b836135a7565b603754909150612a59906001906135fa565b6001901b811115612aa257612a6c610ff8565b612a74612e87565b603754612a83906001906135fa565b6001901b811115612a9b57612a96612e87565b612a74565b6037546038555b603754612aae85612f15565b60008087875b84811015612b7957612ac9600288831c61364f565b600003612b0f578160378281548110612ae457612ae46135e4565b600091825260209091200155612afb8160016135a7565b603855612b096001866135fa565b50612b79565b60378181548110612b2257612b226135e4565b906000526020600020015493508192508383604051602001612b4e929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080612b719061358e565b915050612ab4565b50612b876001891b876135a7565b6036555093979650505050505050565b60606108246001600160a01b03831660145b60606000612bb883600261377e565b612bc39060026135a7565b67ffffffffffffffff811115612bdb57612bdb61316b565b6040519080825280601f01601f191660200182016040528015612c05576020820181803683370190505b509050600360fc1b81600081518110612c2057612c206135e4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c4f57612c4f6135e4565b60200101906001600160f81b031916908160001a9053506000612c7384600261377e565b612c7e9060016135a7565b90505b6001811115612cf6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612cb257612cb26135e4565b1a60f81b828281518110612cc857612cc86135e4565b60200101906001600160f81b031916908160001a90535060049490941c93612cef81613838565b9050612c81565b508315610bed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108d9565b6000818152600183016020526040812054612d8c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610824565b506000610824565b60008181526001830160205260408120548015612e7d576000612db86001836135fa565b8554909150600090612dcc906001906135fa565b9050818114612e31576000866000018281548110612dec57612dec6135e4565b9060005260206000200154905080876000018481548110612e0f57612e0f6135e4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e4257612e4261384f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610824565b6000915050610824565b6037805490600090612e9a6001846135fa565b81548110612eaa57612eaa6135e4565b60009182526020822001549150612ec561077e6001856135fa565b905060378282604051602001612ee5929190918252602082015260400190565b60408051601f19818403018152919052805160209182012082546001810184556000938452919092200155505050565b806038541115612f225750565b603780546038549091600091612f3a906001906135fa565b81548110612f4a57612f4a6135e4565b906000526020600020015490506000612f6b600160385461077e91906135fa565b6038549091505b838110156130335760408051602080820186905281830185905282518083038401815260609092019092528051910120603654612fb390600290841c61364f565b600003612ffc57809350612fc682611135565b9250858210612ff7578060378381548110612fe357612fe36135e4565b600091825260209091200155505050505050565b613020565b6037828154811061300f5761300f6135e4565b906000526020600020015493508092505b508061302b8161358e565b915050612f72565b5050505050565b828054828255906000526020600020908101928215613075579160200282015b8281111561307557825182559160200191906001019061305a565b50613081929150613085565b5090565b5b808211156130815760008155600101613086565b6000602082840312156130ac57600080fd5b81356001600160e01b031981168114610bed57600080fd5b6000602082840312156130d657600080fd5b5035919050565b80356001600160a01b0381168114611d3457600080fd5b6000806040838503121561310757600080fd5b82359150613117602084016130dd565b90509250929050565b60006020828403121561313257600080fd5b81356001600160801b0381168114610bed57600080fd5b6000806040838503121561315c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131a4576131a461316b565b60405290565b6040516060810167ffffffffffffffff811182821017156131a4576131a461316b565b604051601f8201601f1916810167ffffffffffffffff811182821017156131f6576131f661316b565b604052919050565b600067ffffffffffffffff8211156132185761321861316b565b5060051b60200190565b600082601f83011261323357600080fd5b81356020613248613243836131fe565b6131cd565b82815260069290921b8401810191818101908684111561326757600080fd5b8286015b848110156132a657604081890312156132845760008081fd5b61328c613181565b81358152848201358582015283529183019160400161326b565b509695505050505050565b6000606082840312156132c357600080fd5b6132cb6131aa565b90508135815260208083013567ffffffffffffffff808211156132ed57600080fd5b818501915085601f83011261330157600080fd5b8135818111156133135761331361316b565b613325601f8201601f191685016131cd565b818152878583860101111561333957600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561336457600080fd5b505061337284828501613222565b60408301525092915050565b6000602080838503121561339157600080fd5b823567ffffffffffffffff808211156133a957600080fd5b818501915085601f8301126133bd57600080fd5b81356133cb613243826131fe565b81815260059190911b830184019084810190888311156133ea57600080fd5b8585015b83811015613422578035858111156134065760008081fd5b6134148b89838a01016132b1565b8452509186019186016133ee565b5098975050505050505050565b600081518084526020808501945080840160005b8381101561345f57815187529582019590820190600101613443565b509495945050505050565b60808152600061347d608083018761342f565b82810360208481019190915286518083528782019282019060005b818110156134b457845183529383019391830191600101613498565b505084810360408601526134c8818861342f565b9250505082810360608401526134de818561342f565b979650505050505050565b6000602082840312156134fb57600080fd5b610bed826130dd565b60006020828403121561351657600080fd5b813567ffffffffffffffff81111561352d57600080fd5b613539848285016132b1565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016135a0576135a0613578565b5060010190565b8082018082111561082457610824613578565b634e487b7160e01b600052601260045260246000fd5b6000826135df576135df6135ba565b500490565b634e487b7160e01b600052603260045260246000fd5b8181038181111561082457610824613578565b60208082526022908201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604082015261195960f21b606082015260800190565b60008261365e5761365e6135ba565b500690565b60005b8381101561367e578181015183820152602001613666565b50506000910152565b6000815180845261369f816020860160208601613663565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561345f5781518051885283015183880152604090960195908201906001016136c7565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261372660e0840182613687565b90506040840151607f198483030160c085015261374382826136b3565b98975050505050505050565b60006020828403121561376157600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b600081600019048311821515161561379857613798613578565b500290565b602081526000610bed60208301846136b3565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516137e8816017850160208801613663565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613819816028840160208801613663565b01602801949350505050565b602081526000610bed6020830184613687565b60008161384757613847613578565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220cdfa1bc5344f54dfca490a933edf5b190bbc70ddb6e63ae7de0df692f3125f5964736f6c63430008100033608060405234801561001057600080fd5b5060405161067038038061067083398101604081905261002f9161014a565b6100383361009a565b806001600160401b0381111561005057610050610163565b604051908082528060200260200182016040528015610079578160200160208202803683370190505b50805161008e916001916020909101906100ea565b50506000600255610179565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b828054828255906000526020600020908101928215610125579160200282015b8281111561012557825182559160200191906001019061010a565b50610131929150610135565b5090565b5b808211156101315760008155600101610136565b60006020828403121561015c57600080fd5b5051919050565b634e487b7160e01b600052604160045260246000fd5b6104e8806101886000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c80638da5cb5b1161005b5780638da5cb5b146100d557806396e494e8146100f0578063e0886f9014610103578063f2fde38b1461011657600080fd5b80631d1a696d146100825780632d287e43146100aa578063715018a6146100cb575b600080fd5b6100956100903660046103e3565b610129565b60405190151581526020015b60405180910390f35b6100bd6100b83660046103e3565b610194565b6040519081526020016100a1565b6100d36101ee565b005b6000546040516001600160a01b0390911681526020016100a1565b6100956100fe3660046103e3565b610202565b6100bd6101113660046103e3565b610237565b6100d36101243660046103fc565b610297565b60008061013d600254600180549050610310565b905060005b8181101561018a57836001828154811061015e5761015e610425565b906000526020600020015403610178575060019392505050565b8061018281610451565b915050610142565b5060009392505050565b6002546001546000919082906101aa908361046a565b905083600182815481106101c0576101c0610425565b90600052602060002001819055506001600260008282546101e1919061048c565b9091555091949350505050565b6101f661032a565b6102006000610384565b565b6001546002546000919083108015610230575080610222600254836103d4565b61022c919061049f565b8310155b9392505050565b600061024282610202565b6102675760405163b52d71f360e01b8152600481018390526024015b60405180910390fd5b60018054610275908461046a565b8154811061028557610285610425565b90600052602060002001549050919050565b61029f61032a565b6001600160a01b0381166103045760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161025e565b61030d81610384565b50565b600081831061031f5781610321565b825b90505b92915050565b6000546001600160a01b031633146102005760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161025e565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600081831161031f5781610321565b6000602082840312156103f557600080fd5b5035919050565b60006020828403121561040e57600080fd5b81356001600160a01b038116811461023057600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016104635761046361043b565b5060010190565b60008261048757634e487b7160e01b600052601260045260246000fd5b500690565b808201808211156103245761032461043b565b818103818111156103245761032461043b56fea2646970667358221220c90d957d44891f095d986848fabf130f05541c1afde790c7f687700f7785710764736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106102305760003560e01c8063900cf0cf1161012e578063c4d66de8116100ab578063e63ab1e91161006f578063e63ab1e914610741578063e829558814610763578063ebf0c71714610783578063ef3e12dc14610798578063f0682054146107cb57600080fd5b8063c4d66de814610698578063c7dd5221146106b8578063ca15c873146106ec578063d34353c91461070c578063d547741f1461072157600080fd5b80639e62a38e116100f25780639e62a38e1461061f578063a217fddf14610642578063a3d35f3614610657578063b464b53e1461066d578063b8a409ac1461068257600080fd5b8063900cf0cf146105935780639010d07c146105a957806391d14854146105c957806393e405a0146105e95780639498bd71146105ff57600080fd5b806336568abe116101bc5780635c975abb116101805780635c975abb1461048a57806377e19824146104a25780637d590708146104b757806380f55605146105465780638456cb591461057e57600080fd5b806336568abe1461040057806338d45e10146104205780633d75d9c2146104355780633f4ba83a14610455578063555430a11461046a57600080fd5b8063231b026811610203578063231b026814610307578063248a9ca3146103495780632f2ff15d1461037a57806331bae1741461039a578063364800ec146103ea57600080fd5b806301ffc9a714610235578063127f0f071461026a578063158ef93e146102cb57806318a641ef146102e5575b600080fd5b34801561024157600080fd5b5061025561025036600461309a565b6107ff565b60405190151581526020015b60405180910390f35b34801561027657600080fd5b5061027f61082a565b6040516102619190600060c082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015292915050565b3480156102d757600080fd5b506003546102559060ff1681565b3480156102f157600080fd5b506103056103003660046130c4565b610899565b005b34801561031357600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610261565b34801561035557600080fd5b5061033b6103643660046130c4565b6000908152600160208190526040909120015490565b34801561038657600080fd5b506103056103953660046130f4565b610911565b3480156103a657600080fd5b506103ba6103b5366004613120565b61093c565b6040805182516001600160801b039081168252602080850151909116908201529181015190820152606001610261565b3480156103f657600080fd5b5061033b60385481565b34801561040c57600080fd5b5061030561041b3660046130f4565b610adf565b34801561042c57600080fd5b50610305610b59565b34801561044157600080fd5b5061033b6104503660046130c4565b610ba8565b34801561046157600080fd5b50610305610bf4565b34801561047657600080fd5b5061033b610485366004613149565b610c14565b34801561049657600080fd5b5060005460ff16610255565b3480156104ae57600080fd5b50606c5461033b565b3480156104c357600080fd5b5061051f6104d23660046130c4565b6040805180820190915260008082526020820152506000908152607560209081526040918290208251808401909352546001600160801b038082168452600160801b909104169082015290565b6040805182516001600160801b039081168252602093840151169281019290925201610261565b34801561055257600080fd5b50606b54610566906001600160a01b031681565b6040516001600160a01b039091168152602001610261565b34801561058a57600080fd5b50610305610c4c565b34801561059f57600080fd5b5061033b606d5481565b3480156105b557600080fd5b506105666105c4366004613149565b610c6c565b3480156105d557600080fd5b506102556105e43660046130f4565b610c84565b3480156105f557600080fd5b5061033b606e5481565b34801561060b57600080fd5b5061030561061a3660046130c4565b610caf565b61063261062d36600461337e565b610ce8565b604051610261949392919061346a565b34801561064e57600080fd5b5061033b600081565b34801561066357600080fd5b5061033b60365481565b34801561067957600080fd5b5061027f610f21565b34801561068e57600080fd5b5061033b606c5481565b3480156106a457600080fd5b506103056106b33660046134e9565b610fa8565b3480156106c457600080fd5b506105667f000000000000000000000000000000000000000000000000000000000000000081565b3480156106f857600080fd5b5061033b6107073660046130c4565b610fe1565b34801561071857600080fd5b50610305610ff8565b34801561072d57600080fd5b5061030561073c3660046130f4565b61110f565b34801561074d57600080fd5b5061033b60008051602061386683398151915281565b34801561076f57600080fd5b5061033b61077e3660046130c4565b611135565b34801561078f57600080fd5b5061033b611d39565b6107ab6107a6366004613504565b611d6d565b604080519485526020850193909352918301526060820152608001610261565b3480156107d757600080fd5b5061033b7f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216635a05180f60e01b1480610824575061082482611ea6565b92915050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c081018252606f5481526070546020820152607154918101919091526072546060820152607354608082015260745460a082015290565b7f00000000000000000000000000000000000000000000000000000000000000004310156108e25760405162461bcd60e51b81526004016108d990613541565b60405180910390fd5b60005b81811161090c576108f4611edb565b6108fc575050565b6109058161358e565b90506108e5565b505b50565b6000828152600160208190526040909120015461092d816121fd565b6109378383612207565b505050565b6040805160608101825260008082526020820181905291810191909152610961610b59565b603654826001600160801b0316106109c75760405162461bcd60e51b8152602060048201526024808201527f5175657269656420706f736974696f6e206578636565647320757070657220626044820152631bdd5b9960e21b60648201526084016108d9565b6076546000905b81811115610a9757600060026109e484846135a7565b6109ee91906135d0565b905060768181548110610a0357610a036135e4565b600091825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b909104811694840185905260019091015491830191909152909550861610610a6857610a618160016135a7565b9250610a91565b83600001516001600160801b0316856001600160801b031610610a8d57505050919050565b8091505b506109ce565b60405162461bcd60e51b815260206004820152601b60248201527f43616e206e6f742066696e642070726f70657220636f6e74657874000000000060448201526064016108d9565b6001600160a01b0381163314610b4f5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084016108d9565b61090c8282612229565b7f0000000000000000000000000000000000000000000000000000000000000000431015610b995760405162461bcd60e51b81526004016108d990613541565b610ba1611edb565b610b99575b565b600081808203610bbb5750600092915050565b600181811c909117600281901c17600481901c17600881901c17601081901c17602081901c1790610bed9082906135a7565b9392505050565b600080516020613866833981519152610c0c816121fd565b61090e61224b565b600082808203610c28576000915050610824565b610c336001826135fa565b831c9050610c426001826135a7565b90921b9392505050565b600080516020613866833981519152610c64816121fd565b61090e61229d565b6000828152600260205260408120610bed90836122da565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60035460ff1615610cd25760405162461bcd60e51b81526004016108d99061360d565b6003805460ff1916600117905561090e816122e6565b606080606080610cf6612345565b7f0000000000000000000000000000000000000000000000000000000000000000431015610d365760405162461bcd60e51b81526004016108d990613541565b84518067ffffffffffffffff811115610d5157610d5161316b565b604051908082528060200260200182016040528015610d7a578160200160208202803683370190505b5094508067ffffffffffffffff811115610d9657610d9661316b565b604051908082528060200260200182016040528015610dbf578160200160208202803683370190505b5093508067ffffffffffffffff811115610ddb57610ddb61316b565b604051908082528060200260200182016040528015610e04578160200160208202803683370190505b5092508067ffffffffffffffff811115610e2057610e2061316b565b604051908082528060200260200182016040528015610e49578160200160208202803683370190505b50915060005b81811015610f1857600080600080610e7f8b8681518110610e7257610e726135e4565b6020026020010151611d6d565b9350935093509350838a8681518110610e9a57610e9a6135e4565b60200260200101818152505082898681518110610eb957610eb96135e4565b60200260200101818152505081888681518110610ed857610ed86135e4565b60200260200101818152505080878681518110610ef757610ef76135e4565b6020026020010181815250505050505080610f119061358e565b9050610e4f565b50509193509193565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091527f0000000000000000000000000000000000000000000000000000000000000000431015610f935760405162461bcd60e51b81526004016108d990613541565b610f9b610b59565b610fa361082a565b905090565b60035460ff1615610fcb5760405162461bcd60e51b81526004016108d99061360d565b6003805460ff1916600117905561090e8161238b565b60008181526002602052604081206108249061247d565b6037546038540361100557565b60378054603854909160009161101d906001906135fa565b8154811061102d5761102d6135e4565b90600052602060002001549050600061104e600160385461077e91906135fa565b6038549091505b83811015611107576040805160208082018690528183018590528251808303840181526060909201909252805191012060365461109690600290841c61364f565b6000036110d0578093506110a982611135565b925080603783815481106110bf576110bf6135e4565b6000918252602090912001556110f4565b603782815481106110e3576110e36135e4565b906000526020600020015493508092505b50806110ff8161358e565b915050611055565b505050603855565b6000828152600160208190526040909120015461112b816121fd565b6109378383612229565b60008160000361116657507fd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5919050565b8160010361119557507ff73e6947d7d1628b9976a6e40d7b278a8a16405e96324a68df45b12a51b7cfde919050565b816002036111c457507fa1520264ae93cac619e22e8718fc4fa7ebdd23f493cad602434d2a58ff4868fb919050565b816003036111f357507fde5747106ac1194a1fa9071dbd6cf19dc2bc7964497ef0afec7e4bdbcf08c47e919050565b8160040361122257507f09c7082879180d28c789c05fafe7030871c76cedbe82c948b165d6a1d66ac15b919050565b8160050361125157507faa7a02bcf29fba687f84123c808b5b48834ff5395abe98e622fadc14e4180c95919050565b8160060361128057507f7608fd46b710b589e0f2ee5a13cd9c41d432858a30d524f84c6d5db37f66273a919050565b816007036112af57507fa5d9a2f7f3573ac9a1366bc484688b4daf934b87ea9b3bf2e703da8fd9f09708919050565b816008036112de57507f6c1779477f4c3fca26b4607398859a43b90a286ce8062500744bd4949981757f919050565b8160090361130d57507f45c22df3d952c33d5edce122eed85e5cda3fd61939e7ad7b3e03b6927bb598ea919050565b81600a0361133c57507fe68d02859bb6211cec64f52368b77d422de3b8eac34bf615942b814b643301b5919050565b81600b0361136b57507f62d78399b954d51cb9728601738ad13ddc43b2300064660716bb661d2f4d686f919050565b81600c0361139a57507f6e250d9abdbbb3993fce08de0395cdb56f0483e67d8762a798de011f6a50866a919050565b81600d036113c957507f1d1a3a74062fd94078617e33eb901eaf16a830f67c387d8eed342db2ac5e2cc5919050565b81600e036113f857507f19b3b3886526917eae8650223d0be20a0301be960eb339696e673ad8a804440f919050565b81600f0361142757507fee9e05df53f10e62a897e5140a3f58732dd849e69cd1d62b21ed80ead711a014919050565b8160100361145657507f2cc7aa6e611a113a34505dc1c96b220f14909b70e2c2c7b1a74655da21013c5e919050565b8160110361148557507f949b52dfece7ca3bad3cb27f7750ecaee64cedb6243a275c35984e92956c530a919050565b816012036114b457507fb2680d060b763b932c150434c3812ba9fbc50937e0ebcf5758de884be81bab65919050565b816013036114e357507f523aebf4a085edbc9c8cdc99c83f46262e5f029b395ff7bf561a48a3f387e6b8919050565b8160140361151257507fc9ab73827ab33c0cedb7ecf0ed2e6e32583c0fe887133a7f381ea4ba84d95b76919050565b8160150361154157507f23eb397dec7e564ebe97f160a5e1081a77d9861f316807079b6be4731beb331e919050565b8160160361157057507fdfa44a274c60f090df034aaf75539fd40e94cfd6362dd53d26ed20c8ad529563919050565b8160170361159f57507f15b13ee358e1044a53381243c094e54bf7aceb9b5325a0313d6b85fd44e8b3a5919050565b816018036115ce57507f1a7a93871e2daa0f1860aa91d4ece4ccd012dac5fe581176a21b155cfeca6d40919050565b816019036115fd57507fb12665fd0b884a7c7d1e0294d369170d7e672d9e125eb87784556305f98292df919050565b81601a0361162c57507f2a5543b0b2f8cf550524390291774f4d6c8c0a25ff5393b09c44d75c92a5bd8e919050565b81601b0361165b57507ff9df1841a6e7164b67a1242f1c74975137085ffd9721831f6c469d3a4d5ba42e919050565b81601c0361168a57507fba24736b1b48246c1f7803be967be43ca0dddc9c2c0687a2957952249bc89371919050565b81601d036116b957507ff3f706b73790c73ca0a8f0460ac3a2a102e280415586b520e70cd5e8264388b4919050565b81601e036116e857507fc1f5a9a9f357e1c37814688cf7290c87a264ed3d6174a12b978da1c586f53825919050565b81601f0361171757507f766f7702e19ce23d426cdad03e4292a5a42c4669420101fed74400ec7cda3ac6919050565b8160200361174657507f070fec213e105b3e4d9b0434ac2fc7ca721d35093dc741fb9419797003e2394a919050565b8160210361177557507f9a7aade05b49e43f5fd3782571cc8c90eadacd5d660b53842b4e5b63d675ae0c919050565b816022036117a457507fb27b35a8236d0f9b6692820429c025ed58ed378dc98d316b762f0c865c68be6f919050565b816023036117d357507fdc567ad38d9b90cc9bea4e0f82ec05eca10b3aa94eddc7b63c4fd20c001bb53b919050565b8160240361180257507fb208dfc457c8b30661ae49544c8e57399818095aab8dd7a426fb8dd56bb8c559919050565b8160250361183157507fc4a72e1ff84f7a22631f3f95c61c392f98f52050360215a9d7e75d79b0bcd2ca919050565b8160260361186057507fbb093ec8c0d7defb1de668b5b5dd4f2619e5cd92d29cc144862364a83ab993a8919050565b8160270361188f57507fe341796f2fe3975012c1e6badfa2e9c4523e43f911dc845082c3f4d7b4ff871d919050565b816028036118be57507f42d356a11a0b39243eca3c3263299cb6f8c3e9728af6d9d8b0ddb6d354f1890d919050565b816029036118ed57507f0ce506e834e3a50a33f80074bc7fa16cf3c0712b36a41b69699177ea25de6c30919050565b81602a0361191c57507fd8fa5bf130aeb7756b1ed09090cc80ed78dae0617978540f0fabd06dfb978938919050565b81602b0361194b57507feed69a20fe36eb604f2153efa3b01c0e143cdf02229a1b8f741c9c2719059eb0919050565b81602c0361197a57507f303c9c566ebf5bfe252796e5c131a99801226152a514688b5ca6883e99031d88919050565b81602d036119a957507fc7c3765ba96cfbccf3ae718393fa89791070cc8cd85f280b6ac46aea10d96042919050565b81602e036119d857507f1ca65b0a2b8034ee6bfb1fa4526832304e393af835c2c42b4dace58048746800919050565b81602f03611a0757507f957add5e02350fd47de3a8e1da38fd774ceb31214d5897ed6315740a83cd634a919050565b81603003611a3657507f787892cb439d5d358870774e163557cf02ec3cb87be6fde11abf1acee14eeaa4919050565b81603103611a6557507f047c0962d4f5c8f60692c587de07739528c4d2059240d61dd34d2a547a438ee6919050565b81603203611a9457507fc18727efc9e4df63020dcd90edc17dfd2ad14f02328c912b13898e0b53735556919050565b81603303611ac357507fe38b9218987e451effe1648c3c9851ad03b64b052a5a3f5ca30f4d7b1ecf7120919050565b81603403611af257507f0e48ecb1a5418e6218289acc8cf723e67ac6eae3ecb80f644336ab4365a2f2b2919050565b81603503611b2157507fd60e66f5b8cd08d71a1a4d7798952a7afa5a6e93a886c587a46a5500ebef4a60919050565b81603603611b5057507f5162aa9c31d9105f689cf6e71e19548bc9f0218b7d0f99ff7fa8bc2f19c68462919050565b81603703611b7f57507f6fa8519b4b0e8fb97a9b618e97627d97b9b9d29d04521fd96472e9c502700568919050565b81603803611bae57507f41f5dcf0cdee270a2ad9a5f8130aaaab94b237463e09757c28b0321f09e24eb0919050565b81603903611bdd57507f87a119239fa90732197108adfd029938b4743874d959d3da79b3a30f4832899e919050565b81603a03611c0c57507f8e96dbaa5c72e84a5297b040ccc1a60750a3201166e3b7740d352837233608a1919050565b81603b03611c3b57507f01605058d167ce967af8c475d2f6c341c3e0b437babf899c9da73a520aa4ecb5919050565b81603c03611c6a57507f04529eb80532c5118949d700d8dfd2aa86850b1c6479b26276b9486784a145ff919050565b81603d03611c9957507fd191814ad13f27361ae20a46cbac8f6e76c10ebe9af0806d6720492ee2f296f0919050565b81603e03611cc857507fa28df63f78821060570da371c0be1312188346b92a7965cc4b980b26c134a4d7919050565b81603f03611cf757507fb48a92d40b61dc995ceecee4cded6415050dcece448b1e0b5e5b6a0e6981f3ef919050565b60405162461bcd60e51b8152602060048201526012602482015271125b99195e081bdd5d081bd988189bdd5b9960721b60448201526064016108d9565b919050565b6037805460009190611d4d906001906135fa565b81548110611d5d57611d5d6135e4565b9060005260206000200154905090565b600080600080611d7b612345565b7f0000000000000000000000000000000000000000000000000000000000000000431015611dbb5760405162461bcd60e51b81526004016108d990613541565b611dc485612487565b611e055760405162461bcd60e51b815260206004820152601260248201527124b73b30b634b21039bab136b4b9b9b4b7b760711b60448201526064016108d9565b6000611e108661269e565b9050611e1a610b59565b6000611e25876126fc565b90506000611e3288612821565b606c80549192506001906000611e4883856135a7565b9250508190555081336001600160a01b03167f167ce04d2aa1981994d3a31695da0d785373335b1078cec239a1a3a2c76755558386888e604051611e8f94939291906136ee565b60405180910390a396509450925090509193509193565b60006001600160e01b03198216637965db0b60e01b148061082457506301ffc9a760e01b6001600160e01b0319831614610824565b6000807f0000000000000000000000000000000000000000000000000000000000000000606d54600101027f0000000000000000000000000000000000000000000000000000000000000000019050438110611f3957600091505090565b611f41610ff8565b6000611f4b611d39565b604051632d287e4360e01b8152600481018290529091506000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632d287e43906024016020604051808303816000875af1158015611fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdc919061374f565b9050606d548114611fef57611fef613768565b60008043611fff866101006135a7565b101561202f57507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090508061213e565b506036546040805186406020820181905291810186905260608101929092529060800160408051808303601f190181528282528051602091820120606e80546036805487870187526001600160801b039283168089529083168689018181526000878152607589528981209a519151918616600160801b928716830217909a558851606081018a529283529682019081529681018581526076805460018101825599529051965196831696909216909402949094177fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed460029096029586015592517fb5732705f5241370a28908c2fe1303cb223f03b90d857fd0573f003f79fefed59094019390935554905591505b6001606d600082825461215191906135a7565b90915550506040805160c081018252606d5480825260208083018990528284018890526036546060808501829052608080860188905260a0909501889052606f84905560708b905560718a9055607282905560738790556074889055606c5486518b815293840152948201529283018590529133917fbc8a3fd82465d43f1709e44ed882f7e1af0147274196ef1ec009f5d52ff4e993910160405180910390a360019550505050505090565b61090e8133612855565b61221182826128ae565b60008281526002602052604090206109379082612919565b612233828261292e565b60008281526002602052604090206109379082612995565b6122536129aa565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6122a5612345565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586122803390565b6000610bed83836129f3565b600160365560408051600081526020810191829052516123089160379161303a565b5060378054600181810183556000929092527f42a7b7dd785cd69714a189dffb3fd7d7174edc9ece837694ce50f7078f7c31ae0191909155603855565b60005460ff1615610ba65760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016108d9565b61239560006122e6565b606b80546001600160a01b0319166001600160a01b0383161790556000606d8190556040805160c0810182529182527f0000000000000000000000000000000000000000000000000000000000000000602083015281016123f4611d39565b815260016020808301919091527fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060408084018290526060938401919091528351606f5590830151607055820151607155810151607255608081015160735560a00151607455612465600033612a1d565b61090e60008051602061386683398151915233612a1d565b6000610824825490565b600081604001515160000361249e57506000919050565b60408201518051600491906124b5906001906135fa565b815181106124c5576124c56135e4565b60200260200101516020015183604001516000815181106124e8576124e86135e4565b6020026020010151602001516124fe91906135fa565b1061250b57506000919050565b60408260400151600081518110612524576125246135e4565b6020026020010151602001511061253d57506000919050565b60005b600183604001515161255291906135fa565b8110156125c9578260400151818151811061256f5761256f6135e4565b602002602001015160200151836040015182600161258d91906135a7565b8151811061259d5761259d6135e4565b602002602001015160200151106125b75750600092915050565b806125c18161358e565b915050612540565b5060006125d58361269e565b90506125e36101008261377e565b835111156125f45750600092915050565b600060108210156126115761260a6001836135fa565b9050612677565b83604001515160010361262c5761260a600483901c836135fa565b60048460400151600081518110612645576126456135e4565b60200260200101516020015161265b91906135fa565b6126669060016135a7565b612674906001901b836135fa565b90505b6126836101008261377e565b845111612694575060009392505050565b5060019392505050565b600080805b8360400151518110156126f557836040015181815181106126c6576126c66135e4565b6020026020010151602001516001901b826126e191906135a7565b9150806126ed8161358e565b9150506126a3565b5092915050565b603654600090815b83604001515181101561278d57600084604001518281518110612729576127296135e4565b602002602001015160000151905060008560400151838151811061274f5761274f6135e4565b602002602001015160200151905060006127698383612a27565b905083600003612777578095505b50505080806127859061358e565b915050612704565b50600061279a82846135fa565b90506000836036546127ac91906135fa565b606b54604051636d3759b560e11b81526004810186905260248101839052604481018590529192506001600160a01b03169063da6eb36a90606401600060405180830381600087803b15801561280157600080fd5b505af1158015612815573d6000803e3d6000fd5b50505050505050919050565b60008160400151604051602001612838919061379d565b604051602081830303815290604052805190602001209050919050565b61285f8282610c84565b61090c5761286c81612b97565b612877836020612ba9565b6040516020016128889291906137b0565b60408051601f198184030181529082905262461bcd60e51b82526108d991600401613825565b6128b88282610c84565b61090c5760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b6000610bed836001600160a01b038416612d45565b6129388282610c84565b1561090c5760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000610bed836001600160a01b038416612d94565b60005460ff16610ba65760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b60448201526064016108d9565b6000826000018281548110612a0a57612a0a6135e4565b9060005260206000200154905092915050565b61090c8282612207565b600080612a3660365484610c14565b90506000612a476001851b836135a7565b603754909150612a59906001906135fa565b6001901b811115612aa257612a6c610ff8565b612a74612e87565b603754612a83906001906135fa565b6001901b811115612a9b57612a96612e87565b612a74565b6037546038555b603754612aae85612f15565b60008087875b84811015612b7957612ac9600288831c61364f565b600003612b0f578160378281548110612ae457612ae46135e4565b600091825260209091200155612afb8160016135a7565b603855612b096001866135fa565b50612b79565b60378181548110612b2257612b226135e4565b906000526020600020015493508192508383604051602001612b4e929190918252602082015260400190565b6040516020818303038152906040528051906020012091508080612b719061358e565b915050612ab4565b50612b876001891b876135a7565b6036555093979650505050505050565b60606108246001600160a01b03831660145b60606000612bb883600261377e565b612bc39060026135a7565b67ffffffffffffffff811115612bdb57612bdb61316b565b6040519080825280601f01601f191660200182016040528015612c05576020820181803683370190505b509050600360fc1b81600081518110612c2057612c206135e4565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612c4f57612c4f6135e4565b60200101906001600160f81b031916908160001a9053506000612c7384600261377e565b612c7e9060016135a7565b90505b6001811115612cf6576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110612cb257612cb26135e4565b1a60f81b828281518110612cc857612cc86135e4565b60200101906001600160f81b031916908160001a90535060049490941c93612cef81613838565b9050612c81565b508315610bed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016108d9565b6000818152600183016020526040812054612d8c57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610824565b506000610824565b60008181526001830160205260408120548015612e7d576000612db86001836135fa565b8554909150600090612dcc906001906135fa565b9050818114612e31576000866000018281548110612dec57612dec6135e4565b9060005260206000200154905080876000018481548110612e0f57612e0f6135e4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612e4257612e4261384f565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610824565b6000915050610824565b6037805490600090612e9a6001846135fa565b81548110612eaa57612eaa6135e4565b60009182526020822001549150612ec561077e6001856135fa565b905060378282604051602001612ee5929190918252602082015260400190565b60408051601f19818403018152919052805160209182012082546001810184556000938452919092200155505050565b806038541115612f225750565b603780546038549091600091612f3a906001906135fa565b81548110612f4a57612f4a6135e4565b906000526020600020015490506000612f6b600160385461077e91906135fa565b6038549091505b838110156130335760408051602080820186905281830185905282518083038401815260609092019092528051910120603654612fb390600290841c61364f565b600003612ffc57809350612fc682611135565b9250858210612ff7578060378381548110612fe357612fe36135e4565b600091825260209091200155505050505050565b613020565b6037828154811061300f5761300f6135e4565b906000526020600020015493508092505b508061302b8161358e565b915050612f72565b5050505050565b828054828255906000526020600020908101928215613075579160200282015b8281111561307557825182559160200191906001019061305a565b50613081929150613085565b5090565b5b808211156130815760008155600101613086565b6000602082840312156130ac57600080fd5b81356001600160e01b031981168114610bed57600080fd5b6000602082840312156130d657600080fd5b5035919050565b80356001600160a01b0381168114611d3457600080fd5b6000806040838503121561310757600080fd5b82359150613117602084016130dd565b90509250929050565b60006020828403121561313257600080fd5b81356001600160801b0381168114610bed57600080fd5b6000806040838503121561315c57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156131a4576131a461316b565b60405290565b6040516060810167ffffffffffffffff811182821017156131a4576131a461316b565b604051601f8201601f1916810167ffffffffffffffff811182821017156131f6576131f661316b565b604052919050565b600067ffffffffffffffff8211156132185761321861316b565b5060051b60200190565b600082601f83011261323357600080fd5b81356020613248613243836131fe565b6131cd565b82815260069290921b8401810191818101908684111561326757600080fd5b8286015b848110156132a657604081890312156132845760008081fd5b61328c613181565b81358152848201358582015283529183019160400161326b565b509695505050505050565b6000606082840312156132c357600080fd5b6132cb6131aa565b90508135815260208083013567ffffffffffffffff808211156132ed57600080fd5b818501915085601f83011261330157600080fd5b8135818111156133135761331361316b565b613325601f8201601f191685016131cd565b818152878583860101111561333957600080fd5b8185850186830137600085838301015280858701525050604085013592508083111561336457600080fd5b505061337284828501613222565b60408301525092915050565b6000602080838503121561339157600080fd5b823567ffffffffffffffff808211156133a957600080fd5b818501915085601f8301126133bd57600080fd5b81356133cb613243826131fe565b81815260059190911b830184019084810190888311156133ea57600080fd5b8585015b83811015613422578035858111156134065760008081fd5b6134148b89838a01016132b1565b8452509186019186016133ee565b5098975050505050505050565b600081518084526020808501945080840160005b8381101561345f57815187529582019590820190600101613443565b509495945050505050565b60808152600061347d608083018761342f565b82810360208481019190915286518083528782019282019060005b818110156134b457845183529383019391830191600101613498565b505084810360408601526134c8818861342f565b9250505082810360608401526134de818561342f565b979650505050505050565b6000602082840312156134fb57600080fd5b610bed826130dd565b60006020828403121561351657600080fd5b813567ffffffffffffffff81111561352d57600080fd5b613539848285016132b1565b949350505050565b6020808252601a908201527f436f6e747261637420686173206e6f74206c61756e636865642e000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000600182016135a0576135a0613578565b5060010190565b8082018082111561082457610824613578565b634e487b7160e01b600052601260045260246000fd5b6000826135df576135df6135ba565b500490565b634e487b7160e01b600052603260045260246000fd5b8181038181111561082457610824613578565b60208082526022908201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604082015261195960f21b606082015260800190565b60008261365e5761365e6135ba565b500690565b60005b8381101561367e578181015183820152602001613666565b50506000910152565b6000815180845261369f816020860160208601613663565b601f01601f19169290920160200192915050565b600081518084526020808501945080840160005b8381101561345f5781518051885283015183880152604090960195908201906001016136c7565b848152836020820152826040820152608060608201528151608082015260006020830151606060a084015261372660e0840182613687565b90506040840151607f198483030160c085015261374382826136b3565b98975050505050505050565b60006020828403121561376157600080fd5b5051919050565b634e487b7160e01b600052600160045260246000fd5b600081600019048311821515161561379857613798613578565b500290565b602081526000610bed60208301846136b3565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516137e8816017850160208801613663565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613819816028840160208801613663565b01602801949350505050565b602081526000610bed6020830184613687565b60008161384757613847613578565b506000190190565b634e487b7160e01b600052603160045260246000fdfe65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862aa2646970667358221220cdfa1bc5344f54dfca490a933edf5b190bbc70ddb6e63ae7de0df692f3125f5964736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/OnePoolReward.json b/storage-contracts-abis/OnePoolReward.json new file mode 100644 index 0000000..3a989c1 --- /dev/null +++ b/storage-contracts-abis/OnePoolReward.json @@ -0,0 +1,302 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "OnePoolReward", + "sourceName": "contracts/reward/OnePoolReward.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "lifetimeMonthes", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "DistributeReward", + "type": "event" + }, + { + "inputs": [], + "name": "accumulatedReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "activeDonation", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "pricingIndex", + "type": "uint256" + }, + { + "internalType": "address payable", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "claimMineReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "claimedReward", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "beforeLength", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardSectors", + "type": "uint256" + } + ], + "name": "fillReward", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "firstValidChunk", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "market_", + "type": "address" + }, + { + "internalType": "address", + "name": "mine_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastUpdateTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastValidChunk", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lifetimeInSeconds", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "market", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mine", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "nextChunkDonation", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "refresh", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "timeoutHead", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "timeoutRecords", + "outputs": [ + { + "internalType": "uint64", + "name": "numPriceChunks", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "timeoutTimestamp", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "donation", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "0x60a060405234801561001057600080fd5b50604051610cee380380610cee83398101604081905261002f91610050565b61003d601f62015180610069565b6100479082610069565b60805250610096565b60006020828403121561006257600080fd5b5051919050565b600081600019048311821515161561009157634e487b7160e01b600052601160045260246000fd5b500290565b608051610c2f6100bf600039600081816102fe0152818161056b0152610a2f0152610c2f6000f3fe6080604052600436106101025760003560e01c806359e967001161009557806380fad3251161006457806380fad325146102b657806399f4b251146102cc578063b7375ddb146102ec578063b7a3c04c14610320578063f8ac93e81461034057600080fd5b806359e967001461023a5780636baff3d31461024d57806377bd602b1461026357806380f556051461027957600080fd5b806322ee4cb8116100d157806322ee4cb8146101d657806328fedefe146101ec578063485cc95514610202578063514ccef01461022457600080fd5b80630dbbe0a21461012657806314bcec9f14610172578063158ef93e1461019657806318ca1b2b146101c057600080fd5b366101215734600960008282546101199190610ab5565b925050819055005b600080fd5b34801561013257600080fd5b50610146610141366004610ace565b610355565b6040805167ffffffffffffffff9485168152939092166020840152908201526060015b60405180910390f35b34801561017e57600080fd5b5061018860085481565b604051908152602001610169565b3480156101a257600080fd5b506000546101b09060ff1681565b6040519015158152602001610169565b3480156101cc57600080fd5b5061018860055481565b3480156101e257600080fd5b5061018860045481565b3480156101f857600080fd5b5061018860035481565b34801561020e57600080fd5b5061022261021d366004610afc565b61039a565b005b34801561023057600080fd5b5061018860075481565b610222610248366004610b35565b61043c565b34801561025957600080fd5b5061018860095481565b34801561026f57600080fd5b50610188600a5481565b34801561028557600080fd5b5060005461029e9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610169565b3480156102c257600080fd5b5061018860065481565b3480156102d857600080fd5b5060015461029e906001600160a01b031681565b3480156102f857600080fd5b506101887f000000000000000000000000000000000000000000000000000000000000000081565b34801561032c57600080fd5b5061022261033b366004610b57565b610667565b34801561034c57600080fd5b50610222610788565b6002818154811061036557600080fd5b60009182526020909120600290910201805460019091015467ffffffffffffffff8083169350600160401b9092049091169083565b60005460ff16156103fd5760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b60648201526084015b60405180910390fd5b600080546001600160a81b0319166101006001600160a01b039485160217600190811790915580546001600160a01b0319169190921617905542600855565b60005461010090046001600160a01b0316336001600160a01b0316146104a45760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e0060448201526064016103f4565b6104ac610788565b60006104b88284610ab5565b905060006101006104cb61040080610b8f565b6104d790610400610b8f565b6104e2906008610b8f565b6104ec9190610bae565b6104f69085610bae565b9050600061010061050961040080610b8f565b61051590610400610b8f565b610520906008610b8f565b61052a9190610bae565b6105349084610bae565b905081811115610660576000604051806060016040528084846105579190610bd0565b67ffffffffffffffff1681526020016105907f000000000000000000000000000000000000000000000000000000000000000042610ab5565b67ffffffffffffffff9081168252600980546020938401526002805460018101825560008281528651919092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054968801518616600160401b026001600160801b031990971692909516919091179490941790925560408401517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf9093019290925560058590559054600a80549394509092909190610654908490610ab5565b90915550506000600955505b5050505050565b6001546001600160a01b0316336001600160a01b0316146106ca5760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e0060448201526064016103f4565b6004548310156106d957505050565b6106e1610788565b60006007546006546106f39190610bd0565b9050478111156107005750475b8015610782576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505015801561073c573d6000803e3d6000fd5b50826001600160a01b0316847f83617a1b0f847971f005bd162dde513cfe93df96e6293c3bbb5fe9c40629dd4c8360405161077991815260200190565b60405180910390a35b50505050565b60025460008190036107a6574260088190556107a390610963565b50565b426002600354815481106107bc576107bc610be3565b6000918252602090912060029091020154600160401b900467ffffffffffffffff161161095e576108226002600354815481106107fb576107fb610be3565b6000918252602090912060029091020154600160401b900467ffffffffffffffff16610963565b60026003548154811061083757610837610be3565b600091825260208220600290910201546004805467ffffffffffffffff909216929091610865908490610ab5565b9250508190555060026003548154811061088157610881610be3565b906000526020600020906002020160010154600a60008282546108a49190610bd0565b925050819055506040518060600160405280600067ffffffffffffffff168152602001600067ffffffffffffffff16815260200160008152506002600354815481106108f2576108f2610be3565b60009182526020808320845160029093020180549185015167ffffffffffffffff908116600160401b026001600160801b03199093169316929092171781556040909201516001928301556003805490919061094f908490610ab5565b909155505060035481036107a6575b6107a3425b600854811161096f5750565b600061097d601f600c610b8f565b61098a9062015180610b8f565b61099661040080610b8f565b6109a290610400610b8f565b670de0b6b3a7640000600a6109b961040080610b8f565b6109c590610400610b8f565b6109d0906008610b8f565b6004546005546109e09190610bd0565b6008546109ed9089610bd0565b6109f79190610b8f565b610a019190610b8f565b610a0b9190610b8f565b610a159190610b8f565b610a1f9190610bae565b610a299190610bae565b905060007f000000000000000000000000000000000000000000000000000000000000000060085484610a5c9190610bd0565b600a54610a699190610b8f565b610a739190610bae565b9050610a7f8183610ab5565b60066000828254610a909190610ab5565b90915550505060089190915550565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ac857610ac8610a9f565b92915050565b600060208284031215610ae057600080fd5b5035919050565b6001600160a01b03811681146107a357600080fd5b60008060408385031215610b0f57600080fd5b8235610b1a81610ae7565b91506020830135610b2a81610ae7565b809150509250929050565b60008060408385031215610b4857600080fd5b50508035926020909101359150565b600080600060608486031215610b6c57600080fd5b833592506020840135610b7e81610ae7565b929592945050506040919091013590565b6000816000190483118215151615610ba957610ba9610a9f565b500290565b600082610bcb57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ac857610ac8610a9f565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220621c542b85b6dbf17c53edcf1485b2df56304d74304d582cac0f8d9daf46655264736f6c63430008100033", + "deployedBytecode": "0x6080604052600436106101025760003560e01c806359e967001161009557806380fad3251161006457806380fad325146102b657806399f4b251146102cc578063b7375ddb146102ec578063b7a3c04c14610320578063f8ac93e81461034057600080fd5b806359e967001461023a5780636baff3d31461024d57806377bd602b1461026357806380f556051461027957600080fd5b806322ee4cb8116100d157806322ee4cb8146101d657806328fedefe146101ec578063485cc95514610202578063514ccef01461022457600080fd5b80630dbbe0a21461012657806314bcec9f14610172578063158ef93e1461019657806318ca1b2b146101c057600080fd5b366101215734600960008282546101199190610ab5565b925050819055005b600080fd5b34801561013257600080fd5b50610146610141366004610ace565b610355565b6040805167ffffffffffffffff9485168152939092166020840152908201526060015b60405180910390f35b34801561017e57600080fd5b5061018860085481565b604051908152602001610169565b3480156101a257600080fd5b506000546101b09060ff1681565b6040519015158152602001610169565b3480156101cc57600080fd5b5061018860055481565b3480156101e257600080fd5b5061018860045481565b3480156101f857600080fd5b5061018860035481565b34801561020e57600080fd5b5061022261021d366004610afc565b61039a565b005b34801561023057600080fd5b5061018860075481565b610222610248366004610b35565b61043c565b34801561025957600080fd5b5061018860095481565b34801561026f57600080fd5b50610188600a5481565b34801561028557600080fd5b5060005461029e9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610169565b3480156102c257600080fd5b5061018860065481565b3480156102d857600080fd5b5060015461029e906001600160a01b031681565b3480156102f857600080fd5b506101887f000000000000000000000000000000000000000000000000000000000000000081565b34801561032c57600080fd5b5061022261033b366004610b57565b610667565b34801561034c57600080fd5b50610222610788565b6002818154811061036557600080fd5b60009182526020909120600290910201805460019091015467ffffffffffffffff8083169350600160401b9092049091169083565b60005460ff16156103fd5760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b60648201526084015b60405180910390fd5b600080546001600160a81b0319166101006001600160a01b039485160217600190811790915580546001600160a01b0319169190921617905542600855565b60005461010090046001600160a01b0316336001600160a01b0316146104a45760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e0060448201526064016103f4565b6104ac610788565b60006104b88284610ab5565b905060006101006104cb61040080610b8f565b6104d790610400610b8f565b6104e2906008610b8f565b6104ec9190610bae565b6104f69085610bae565b9050600061010061050961040080610b8f565b61051590610400610b8f565b610520906008610b8f565b61052a9190610bae565b6105349084610bae565b905081811115610660576000604051806060016040528084846105579190610bd0565b67ffffffffffffffff1681526020016105907f000000000000000000000000000000000000000000000000000000000000000042610ab5565b67ffffffffffffffff9081168252600980546020938401526002805460018101825560008281528651919092027f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace81018054968801518616600160401b026001600160801b031990971692909516919091179490941790925560408401517f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5acf9093019290925560058590559054600a80549394509092909190610654908490610ab5565b90915550506000600955505b5050505050565b6001546001600160a01b0316336001600160a01b0316146106ca5760405162461bcd60e51b815260206004820152601f60248201527f53656e64657220646f6573206e6f742068617665207065726d697373696f6e0060448201526064016103f4565b6004548310156106d957505050565b6106e1610788565b60006007546006546106f39190610bd0565b9050478111156107005750475b8015610782576040516001600160a01b0384169082156108fc029083906000818181858888f1935050505015801561073c573d6000803e3d6000fd5b50826001600160a01b0316847f83617a1b0f847971f005bd162dde513cfe93df96e6293c3bbb5fe9c40629dd4c8360405161077991815260200190565b60405180910390a35b50505050565b60025460008190036107a6574260088190556107a390610963565b50565b426002600354815481106107bc576107bc610be3565b6000918252602090912060029091020154600160401b900467ffffffffffffffff161161095e576108226002600354815481106107fb576107fb610be3565b6000918252602090912060029091020154600160401b900467ffffffffffffffff16610963565b60026003548154811061083757610837610be3565b600091825260208220600290910201546004805467ffffffffffffffff909216929091610865908490610ab5565b9250508190555060026003548154811061088157610881610be3565b906000526020600020906002020160010154600a60008282546108a49190610bd0565b925050819055506040518060600160405280600067ffffffffffffffff168152602001600067ffffffffffffffff16815260200160008152506002600354815481106108f2576108f2610be3565b60009182526020808320845160029093020180549185015167ffffffffffffffff908116600160401b026001600160801b03199093169316929092171781556040909201516001928301556003805490919061094f908490610ab5565b909155505060035481036107a6575b6107a3425b600854811161096f5750565b600061097d601f600c610b8f565b61098a9062015180610b8f565b61099661040080610b8f565b6109a290610400610b8f565b670de0b6b3a7640000600a6109b961040080610b8f565b6109c590610400610b8f565b6109d0906008610b8f565b6004546005546109e09190610bd0565b6008546109ed9089610bd0565b6109f79190610b8f565b610a019190610b8f565b610a0b9190610b8f565b610a159190610b8f565b610a1f9190610bae565b610a299190610bae565b905060007f000000000000000000000000000000000000000000000000000000000000000060085484610a5c9190610bd0565b600a54610a699190610b8f565b610a739190610bae565b9050610a7f8183610ab5565b60066000828254610a909190610ab5565b90915550505060089190915550565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ac857610ac8610a9f565b92915050565b600060208284031215610ae057600080fd5b5035919050565b6001600160a01b03811681146107a357600080fd5b60008060408385031215610b0f57600080fd5b8235610b1a81610ae7565b91506020830135610b2a81610ae7565b809150509250929050565b60008060408385031215610b4857600080fd5b50508035926020909101359150565b600080600060608486031215610b6c57600080fd5b833592506020840135610b7e81610ae7565b929592945050506040919091013590565b6000816000190483118215151615610ba957610ba9610a9f565b500290565b600082610bcb57634e487b7160e01b600052601260045260246000fd5b500490565b81810381811115610ac857610ac8610a9f565b634e487b7160e01b600052603260045260246000fdfea2646970667358221220621c542b85b6dbf17c53edcf1485b2df56304d74304d582cac0f8d9daf46655264736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/PoraMine.json b/storage-contracts-abis/PoraMine.json new file mode 100644 index 0000000..57fe71a --- /dev/null +++ b/storage-contracts-abis/PoraMine.json @@ -0,0 +1,737 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PoraMine", + "sourceName": "contracts/miner/Mine.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "settings", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "NewMinerId", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + } + ], + "name": "NewSubmission", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "UpdateMinerId", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + } + ], + "name": "basicCheck", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "beneficiaries", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "canSubmit", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currentSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dataProofEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "difficultyAdjustRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fixedDifficulty", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficulty", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flow_", + "type": "address" + }, + { + "internalType": "address", + "name": "reward_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastMinedEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "pora", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poraTarget", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint64", + "name": "seed", + "type": "uint64" + } + ], + "name": "requestMinerId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sealDataEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficultyAdjustRatio_", + "type": "uint256" + } + ], + "name": "setDifficultyAdjustRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetMineBlocks_", + "type": "uint256" + } + ], + "name": "setTargetMineBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetSubmissions_", + "type": "uint256" + } + ], + "name": "setTargetSubmissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "submit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "targetMineBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissionsNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "transferBeneficial", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60e06040526064600355600a600455600a6005556014600655600060075560006008553480156200002f57600080fd5b5060405162002aba38038062002aba8339810160408190526200005291620000d4565b6200005d336200007b565b6001811615608052600281161560a052600416151560c052620000ee565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600060208284031215620000e757600080fd5b5051919050565b60805160a05160c0516129806200013a600039600081816102ce01528181610c2f0152610f9a0152600081816102fe01526109f101526000818161034401526109b401526129806000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80637bba7d61116100f9578063aed7522411610097578063b776a51211610071578063b776a512146103b2578063dddc61a8146103bb578063f2fde38b146103c4578063ffbc9bd0146103d757600080fd5b8063aed7522414610379578063b0628ee01461038c578063b4988fd01461039f57600080fd5b80638da5cb5b116100d35780638da5cb5b14610320578063a827918214610336578063adaa7a0f1461033f578063ae722e821461036657600080fd5b80637bba7d61146102c95780637eca5688146102f057806382975fe7146102f957600080fd5b8063343aad821161016657806348f614411161014057806348f61441146102925780635bdca8551461029b578063704d3c96146102ae578063715018a6146102c157600080fd5b8063343aad821461024357806339cd53ee146102565780633baebb751461027f57600080fd5b8063047c13f5146101ae578063158ef93e146101c35780631600c624146101e5578063228cb733146101f857806331223ba714610223578063331f3b9c1461023a575b600080fd5b6101c16101bc36600461231c565b6103df565b005b6000546101d09060ff1681565b60405190151581526020015b60405180910390f35b6101c16101f336600461234f565b6104fb565b60025461020b906001600160a01b031681565b6040516001600160a01b0390911681526020016101dc565b61022c60075481565b6040519081526020016101dc565b61022c60035481565b60015461020b906001600160a01b031681565b61020b61026436600461234f565b600a602052600090815260409020546001600160a01b031681565b6101c161028d3660046125e5565b610508565b61022c60095481565b6101c16102a936600461234f565b61079f565b6101c16102bc36600461234f565b6107bf565b6101c16107cc565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b61022c60055481565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b60005461010090046001600160a01b031661020b565b61022c60085481565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b6101c161037436600461267d565b6107e0565b61022c61038736600461267d565b610c5b565b6101c161039a3660046126b9565b610e5e565b6101c16103ad3660046126e3565b610f1e565b61022c60045481565b61022c60065481565b6101c16103d236600461271f565b610ff4565b6101d061106a565b60006103ec600143612750565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600a9093529120549091506001600160a01b0316156104a15760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600a602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b610503611105565b600355565b815160a08201511461055c5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610498565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036105cf5760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610498565b600454600854106106225760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610498565b600061010061063361040082612763565b61063d9190612798565b61010061064c61040082612763565b6106569190612798565b83606001516106659190612798565b61066f9190612763565b60608401519091506106819082611165565b60015460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906127c3565b905060006101006107086104006004612763565b6107129190612798565b8560800151610721919061281d565b90508082600001516001600160801b031610801561074c57508082602001516001600160801b031610155b6107985760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610498565b5050505050565b6107a7611105565b60058190556007546000036107bc5760048190555b50565b6107c7611105565b600655565b6107d4611105565b6107de60006113a9565b565b604081015161082a5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610498565b6040808201516000908152600a60205220546001600160a01b0316806108925760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610498565b60015460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af11580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612830565b9050600754816000015110156109675760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610498565b600754815111801561097b57506000600754115b156109a057600454600854101561099457610994611402565b60006008556005546004555b6109aa8382610508565b6109b26122b1565b7f0000000000000000000000000000000000000000000000000000000000000000156109e8576109e184611412565b90506109ef565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610a78576000610a218583611526565b905082604001518114610a765760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610498565b505b610a806122b1565b90506000610a8d85610c5b565b9050610a9c856060015161179b565b600954610aa99190612798565b811115610af85760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610498565b6002546001600160a01b031663b7a3c04c610100610b1861040080612763565b610b2490610400612763565b610b2f906008612763565b610b399190612798565b8760800151610b489190612798565b60408089015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03881660248301526044820152606401600060405180830381600087803b158015610b9a57600080fd5b505af1158015610bae573d6000803e3d6000fd5b505050604080870151855160085460808a015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a382516007556008805460019190600090610c1590849061281d565b90915550506004546008541015610c2d575050505050565b7f000000000000000000000000000000000000000000000000000000000000000061079857610798836117e5565b6040810151600090610caf5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610498565b60006040518060800160405280846040015181526020018460200151815260200184600001518152602001610ce7856060015161181e565b905290506000610cf682611886565b90506000610d076104006040612763565b610d15610400610100612763565b610d1f9190612798565b610d2c6104006004612763565b610d3a610400610100612763565b610d449190612798565b610d4e9190612798565b8560a00151610d5d91906128a9565b9050610d676122b1565b610d6f6122d0565b610d7e8760e0015184866118fe565b92509050610100610d926104006004612763565b610d9c9190612798565b8760a00151610dab9190612763565b610de882604051602001610dbf91906128bd565b604051602081830303815290604052805190602001208960600151611af490919063ffffffff16565b610df2919061281d565b876080015114610e445760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610498565b610e538760a001518584611bfa565b979650505050505050565b6000818152600a60205260409020546001600160a01b03163314610ec45760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610498565b6000818152600a602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615610f7c5760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b6064820152608401610498565b6000805460ff19166001179055610f9583600019612798565b6009557f000000000000000000000000000000000000000000000000000000000000000015610fc5576000196009555b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550565b610ffc611105565b6001600160a01b0381166110615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610498565b6107bc816113a9565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af11580156110c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e69190612830565b9050600754816000015111806110ff5750600454600854105b91505090565b6000546001600160a01b036101009091041633146107de5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610498565b61010061117461040080612763565b61118090610400612763565b61118b906008612763565b6111959190612798565b82516111a191906128a9565b156111ee5760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610498565b6020820151825182916112009161281d565b11156112465760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610498565b60006112518361179b565b61010061126061040080612763565b61126c90610400612763565b61127890610400612763565b611283906008612763565b61128d9190612798565b6112979190612763565b905080836020015111156112e55760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610498565b60006112f18383611e7e565b905080846020015110156113405760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610498565b83606001518460400151166001600160401b03166000146113a35760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610498565b50505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6107de6001600160f01b03611e94565b61141a6122b1565b60408083015160c08401516080850151925161144a93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b602061147d6104006004612763565b6114879190612798565b8110156115205760e083015161149e600183612750565b608081106114ae576114ae6128ee565b60200201516040516020016114c591815260200190565b604051602081830303815290604052805190602001208360e0015182608081106114f1576114f16128ee565b602002015118828260808110611509576115096128ee565b602002015261151960018261281d565b905061146e565b50919050565b6000805b60206115396104006004612763565b6115439190612798565b811015611591576101006020820284012080848360808110611567576115676128ee565b6020020181815250505060206101006115809190612798565b61158a908261281d565b905061152a565b5060006115a16020610100612798565b90505b60206115b36104006004612763565b6115bd9190612798565b8110156116905760005b60206115d66104006004612763565b6115e09190612798565b8110156116875760008482608081106115fb576115fb6128ee565b6020020151905060008561160f858561281d565b6080811061161f5761161f6128ee565b602002015190508181604051602001611642929190918252602082015260400190565b6040516020818303038152906040528051906020012086846080811061166a5761166a6128ee565b6020020152506116809050600183901b8261281d565b90506115c7565b5060011b6115a4565b50815161169b6122b1565b925060006101006116af6104006004612763565b6116b99190612798565b85608001516116c89190612798565b905060005b8561010001515181101561178f576000806116e96002856128a9565b60000361171957849150876101000151838151811061170a5761170a6128ee565b6020026020010151905061173e565b8761010001518381518110611730576117306128ee565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846117779190612798565b93505050600181611788919061281d565b90506116cd565b50909150505b92915050565b606081015160009019815b6001600160401b038216156117d6576117c0600183612904565b90911690806117ce8161292b565b9150506117a6565b600160ff9091161b9392505050565b60008160200151436117f79190612750565b905060006010600954901c905060006118138284600354611f34565b90506113a381611e94565b60008160000151826020015183604001518460600151604051602001611869949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b61188e6122d0565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516117959385939092909160806001611fe3565b6119066122d0565b61190e6122b1565b60005b8481101561196c5760005b604061192b6104006004612763565b6119359190612798565b81101561195957611945856120a2565b945061195260018261281d565b905061191c565b5061196560018261281d565b9050611911565b5060005b602061197f6104006004612763565b6119899190612798565b811015611a2957611999846120a2565b93508581608081106119ad576119ad6128ee565b60200201518451188282608081106119c7576119c76128ee565b6020020152856119d882600161281d565b608081106119e8576119e86128ee565b602002015184600160200201511882611a0283600161281d565b60808110611a1257611a126128ee565b6020020152611a2260028261281d565b9050611970565b506000611a3785600161281d565b90505b611a476104006040612763565b611a55610400610100612763565b611a5f9190612798565b611a6c6104006004612763565b611a7a610400610100612763565b611a849190612798565b611a8e9190612798565b811015611ae85760005b6040611aa76104006004612763565b611ab19190612798565b811015611ad557611ac1856120a2565b9450611ace60018261281d565b9050611a98565b50611ae160018261281d565b9050611a3a565b50829150935093915050565b600080610100611b0661040082612763565b611b109190612798565b8460200151611b1f9190612798565b611b2990846128a9565b60408501516060860151602087015192935083161790610100611b4e61040082612763565b611b589190612798565b611b6b906001600160401b038416612763565b1115611bb95760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610498565b610100611bc861040082612763565b611bd29190612798565b611be5906001600160401b038316612763565b8551611bf1919061281d565b95945050505050565b6000611c046122d0565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152845190850151611c6a9183918891906000608081611fe3565b905060005b60046020611c7f61040083612763565b611c899190612798565b611c939190612750565b811015611d44576000816004016020026080019050611d2e83868460808110611cbe57611cbe6128ee565b602002015187611ccf86600161281d565b60808110611cdf57611cdf6128ee565b602002015188611cf087600261281d565b60808110611d0057611d006128ee565b602002015189611d1188600361281d565b60808110611d2157611d216128ee565b6020020151866000611fe3565b9250611d3d905060048261281d565b9050611c6f565b50611e72818460046020611d5a61040083612763565b611d649190612798565b611d6e9190612750565b60808110611d7e57611d7e6128ee565b602002015185600360206104006004611d979190612763565b611da19190612798565b611dab9190612750565b60808110611dbb57611dbb6128ee565b602002015186600260206104006004611dd49190612763565b611dde9190612798565b611de89190612750565b60808110611df857611df86128ee565b602002015187600160206104006004611e119190612763565b611e1b9190612798565b611e259190612750565b60808110611e3557611e356128ee565b602002015160206104006004611e4b9190612763565b611e559190612798565b611e60906020612763565b611e6b90608061281d565b6001611fe3565b519150505b9392505050565b6000818310611e8d5781611e77565b5090919050565b60095460065460109190911c9060008184611eb0600183612750565b611eba9086612763565b611ec4919061281d565b611ece9190612798565b9050611edb836002612763565b811115611ef057611eed836002612763565b90505b611efb600284612798565b811015611f1057611f0d600284612798565b90505b6001600160f01b03811115611f2957506001600160f01b035b60101b600955505050565b6000808060001985870985870292508281108382030391505080600003611f6e57838281611f6457611f64612782565b0492505050611e77565b808411611f7a57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b611feb6122d0565b600c6000611ff88561210f565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61209457600080fd5b505050979650505050505050565b6120aa6122d0565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915282519083015161179591839160008060406001611fe3565b6121176122d0565b6201000082101561215b57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b64010000000082101561219b57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612143565b680100000000000000008210156121b5576121438261224b565b600160801b821015612205576001600160401b038216604083901c6121d98261224b565b6001600160c01b03191683526121ee8161224b565b6001600160c01b0319166020840152506122469050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610498565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461224657600080fd5b80356001600160401b038116811461224657600080fd5b6000806040838503121561232f57600080fd5b612338836122ee565b915061234660208401612305565b90509250929050565b60006020828403121561236157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123a1576123a1612368565b60405290565b60405160c081016001600160401b03811182821017156123a1576123a1612368565b6000608082840312156123db57600080fd5b604051608081018181106001600160401b03821117156123fd576123fd612368565b8060405250809150823581526020830135602082015261241f60408401612305565b604082015261243060608401612305565b60608201525092915050565b600082601f83011261244d57600080fd5b6040516110008082018281106001600160401b038211171561247157612471612368565b6040528301818582111561248457600080fd5b845b8281101561249e578035825260209182019101612486565b509195945050505050565b600082601f8301126124ba57600080fd5b813560206001600160401b03808311156124d6576124d6612368565b8260051b604051601f19603f830116810181811084821117156124fb576124fb612368565b60405293845285810183019383810192508785111561251957600080fd5b83870191505b84821015610e535781358352918301919083019061251f565b6000611160828403121561254b57600080fd5b61255361237e565b905081358152602082013560208201526040820135604082015261257a83606084016123c9565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526125ae84610140850161243c565b60e08301526111408301356001600160401b038111156125cd57600080fd5b6125d9858286016124a9565b82840152505092915050565b60008082840360e08112156125f957600080fd5b83356001600160401b0381111561260f57600080fd5b61261b86828701612538565b93505060c0601f198201121561263057600080fd5b506126396123a7565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561268f57600080fd5b81356001600160401b038111156126a557600080fd5b6126b184828501612538565b949350505050565b600080604083850312156126cc57600080fd5b6126d5836122ee565b946020939093013593505050565b6000806000606084860312156126f857600080fd5b83359250612708602085016122ee565b9150612716604085016122ee565b90509250925092565b60006020828403121561273157600080fd5b611e77826122ee565b634e487b7160e01b600052601160045260246000fd5b818103818111156117955761179561273a565b600081600019048311821515161561277d5761277d61273a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127a7576127a7612782565b500490565b80516001600160801b038116811461224657600080fd5b6000604082840312156127d557600080fd5b604051604081018181106001600160401b03821117156127f7576127f7612368565b604052612803836127ac565b8152612811602084016127ac565b60208201529392505050565b808201808211156117955761179561273a565b600060c0828403121561284257600080fd5b60405160c081018181106001600160401b038211171561286457612864612368565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826128b8576128b8612782565b500690565b60408101818360005b60028110156128e55781518352602092830192909101906001016128c6565b50505092915050565b634e487b7160e01b600052603260045260246000fd5b6001600160401b038281168282160390808211156129245761292461273a565b5092915050565b600060ff821660ff81036129415761294161273a565b6001019291505056fea2646970667358221220a7ebe4d45aface1c050e3575a083f5502eb41924a9a375dd36342247acb8552364736f6c63430008100033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101a95760003560e01c80637bba7d61116100f9578063aed7522411610097578063b776a51211610071578063b776a512146103b2578063dddc61a8146103bb578063f2fde38b146103c4578063ffbc9bd0146103d757600080fd5b8063aed7522414610379578063b0628ee01461038c578063b4988fd01461039f57600080fd5b80638da5cb5b116100d35780638da5cb5b14610320578063a827918214610336578063adaa7a0f1461033f578063ae722e821461036657600080fd5b80637bba7d61146102c95780637eca5688146102f057806382975fe7146102f957600080fd5b8063343aad821161016657806348f614411161014057806348f61441146102925780635bdca8551461029b578063704d3c96146102ae578063715018a6146102c157600080fd5b8063343aad821461024357806339cd53ee146102565780633baebb751461027f57600080fd5b8063047c13f5146101ae578063158ef93e146101c35780631600c624146101e5578063228cb733146101f857806331223ba714610223578063331f3b9c1461023a575b600080fd5b6101c16101bc36600461231c565b6103df565b005b6000546101d09060ff1681565b60405190151581526020015b60405180910390f35b6101c16101f336600461234f565b6104fb565b60025461020b906001600160a01b031681565b6040516001600160a01b0390911681526020016101dc565b61022c60075481565b6040519081526020016101dc565b61022c60035481565b60015461020b906001600160a01b031681565b61020b61026436600461234f565b600a602052600090815260409020546001600160a01b031681565b6101c161028d3660046125e5565b610508565b61022c60095481565b6101c16102a936600461234f565b61079f565b6101c16102bc36600461234f565b6107bf565b6101c16107cc565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b61022c60055481565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b60005461010090046001600160a01b031661020b565b61022c60085481565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b6101c161037436600461267d565b6107e0565b61022c61038736600461267d565b610c5b565b6101c161039a3660046126b9565b610e5e565b6101c16103ad3660046126e3565b610f1e565b61022c60045481565b61022c60065481565b6101c16103d236600461271f565b610ff4565b6101d061106a565b60006103ec600143612750565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600a9093529120549091506001600160a01b0316156104a15760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600a602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b610503611105565b600355565b815160a08201511461055c5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610498565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a00151036105cf5760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610498565b600454600854106106225760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610498565b600061010061063361040082612763565b61063d9190612798565b61010061064c61040082612763565b6106569190612798565b83606001516106659190612798565b61066f9190612763565b60608401519091506106819082611165565b60015460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa1580156106d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106f491906127c3565b905060006101006107086104006004612763565b6107129190612798565b8560800151610721919061281d565b90508082600001516001600160801b031610801561074c57508082602001516001600160801b031610155b6107985760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610498565b5050505050565b6107a7611105565b60058190556007546000036107bc5760048190555b50565b6107c7611105565b600655565b6107d4611105565b6107de60006113a9565b565b604081015161082a5760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610498565b6040808201516000908152600a60205220546001600160a01b0316806108925760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610498565b60015460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af11580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612830565b9050600754816000015110156109675760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610498565b600754815111801561097b57506000600754115b156109a057600454600854101561099457610994611402565b60006008556005546004555b6109aa8382610508565b6109b26122b1565b7f0000000000000000000000000000000000000000000000000000000000000000156109e8576109e184611412565b90506109ef565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610a78576000610a218583611526565b905082604001518114610a765760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610498565b505b610a806122b1565b90506000610a8d85610c5b565b9050610a9c856060015161179b565b600954610aa99190612798565b811115610af85760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610498565b6002546001600160a01b031663b7a3c04c610100610b1861040080612763565b610b2490610400612763565b610b2f906008612763565b610b399190612798565b8760800151610b489190612798565b60408089015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03881660248301526044820152606401600060405180830381600087803b158015610b9a57600080fd5b505af1158015610bae573d6000803e3d6000fd5b505050604080870151855160085460808a015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a382516007556008805460019190600090610c1590849061281d565b90915550506004546008541015610c2d575050505050565b7f000000000000000000000000000000000000000000000000000000000000000061079857610798836117e5565b6040810151600090610caf5760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610498565b60006040518060800160405280846040015181526020018460200151815260200184600001518152602001610ce7856060015161181e565b905290506000610cf682611886565b90506000610d076104006040612763565b610d15610400610100612763565b610d1f9190612798565b610d2c6104006004612763565b610d3a610400610100612763565b610d449190612798565b610d4e9190612798565b8560a00151610d5d91906128a9565b9050610d676122b1565b610d6f6122d0565b610d7e8760e0015184866118fe565b92509050610100610d926104006004612763565b610d9c9190612798565b8760a00151610dab9190612763565b610de882604051602001610dbf91906128bd565b604051602081830303815290604052805190602001208960600151611af490919063ffffffff16565b610df2919061281d565b876080015114610e445760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610498565b610e538760a001518584611bfa565b979650505050505050565b6000818152600a60205260409020546001600160a01b03163314610ec45760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610498565b6000818152600a602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff1615610f7c5760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b6064820152608401610498565b6000805460ff19166001179055610f9583600019612798565b6009557f000000000000000000000000000000000000000000000000000000000000000015610fc5576000196009555b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550565b610ffc611105565b6001600160a01b0381166110615760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610498565b6107bc816113a9565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af11580156110c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e69190612830565b9050600754816000015111806110ff5750600454600854105b91505090565b6000546001600160a01b036101009091041633146107de5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610498565b61010061117461040080612763565b61118090610400612763565b61118b906008612763565b6111959190612798565b82516111a191906128a9565b156111ee5760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610498565b6020820151825182916112009161281d565b11156112465760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610498565b60006112518361179b565b61010061126061040080612763565b61126c90610400612763565b61127890610400612763565b611283906008612763565b61128d9190612798565b6112979190612763565b905080836020015111156112e55760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610498565b60006112f18383611e7e565b905080846020015110156113405760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610498565b83606001518460400151166001600160401b03166000146113a35760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610498565b50505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6107de6001600160f01b03611e94565b61141a6122b1565b60408083015160c08401516080850151925161144a93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b602061147d6104006004612763565b6114879190612798565b8110156115205760e083015161149e600183612750565b608081106114ae576114ae6128ee565b60200201516040516020016114c591815260200190565b604051602081830303815290604052805190602001208360e0015182608081106114f1576114f16128ee565b602002015118828260808110611509576115096128ee565b602002015261151960018261281d565b905061146e565b50919050565b6000805b60206115396104006004612763565b6115439190612798565b811015611591576101006020820284012080848360808110611567576115676128ee565b6020020181815250505060206101006115809190612798565b61158a908261281d565b905061152a565b5060006115a16020610100612798565b90505b60206115b36104006004612763565b6115bd9190612798565b8110156116905760005b60206115d66104006004612763565b6115e09190612798565b8110156116875760008482608081106115fb576115fb6128ee565b6020020151905060008561160f858561281d565b6080811061161f5761161f6128ee565b602002015190508181604051602001611642929190918252602082015260400190565b6040516020818303038152906040528051906020012086846080811061166a5761166a6128ee565b6020020152506116809050600183901b8261281d565b90506115c7565b5060011b6115a4565b50815161169b6122b1565b925060006101006116af6104006004612763565b6116b99190612798565b85608001516116c89190612798565b905060005b8561010001515181101561178f576000806116e96002856128a9565b60000361171957849150876101000151838151811061170a5761170a6128ee565b6020026020010151905061173e565b8761010001518381518110611730576117306128ee565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846117779190612798565b93505050600181611788919061281d565b90506116cd565b50909150505b92915050565b606081015160009019815b6001600160401b038216156117d6576117c0600183612904565b90911690806117ce8161292b565b9150506117a6565b600160ff9091161b9392505050565b60008160200151436117f79190612750565b905060006010600954901c905060006118138284600354611f34565b90506113a381611e94565b60008160000151826020015183604001518460600151604051602001611869949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b61188e6122d0565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151604084015160608501516117959385939092909160806001611fe3565b6119066122d0565b61190e6122b1565b60005b8481101561196c5760005b604061192b6104006004612763565b6119359190612798565b81101561195957611945856120a2565b945061195260018261281d565b905061191c565b5061196560018261281d565b9050611911565b5060005b602061197f6104006004612763565b6119899190612798565b811015611a2957611999846120a2565b93508581608081106119ad576119ad6128ee565b60200201518451188282608081106119c7576119c76128ee565b6020020152856119d882600161281d565b608081106119e8576119e86128ee565b602002015184600160200201511882611a0283600161281d565b60808110611a1257611a126128ee565b6020020152611a2260028261281d565b9050611970565b506000611a3785600161281d565b90505b611a476104006040612763565b611a55610400610100612763565b611a5f9190612798565b611a6c6104006004612763565b611a7a610400610100612763565b611a849190612798565b611a8e9190612798565b811015611ae85760005b6040611aa76104006004612763565b611ab19190612798565b811015611ad557611ac1856120a2565b9450611ace60018261281d565b9050611a98565b50611ae160018261281d565b9050611a3a565b50829150935093915050565b600080610100611b0661040082612763565b611b109190612798565b8460200151611b1f9190612798565b611b2990846128a9565b60408501516060860151602087015192935083161790610100611b4e61040082612763565b611b589190612798565b611b6b906001600160401b038416612763565b1115611bb95760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610498565b610100611bc861040082612763565b611bd29190612798565b611be5906001600160401b038316612763565b8551611bf1919061281d565b95945050505050565b6000611c046122d0565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152845190850151611c6a9183918891906000608081611fe3565b905060005b60046020611c7f61040083612763565b611c899190612798565b611c939190612750565b811015611d44576000816004016020026080019050611d2e83868460808110611cbe57611cbe6128ee565b602002015187611ccf86600161281d565b60808110611cdf57611cdf6128ee565b602002015188611cf087600261281d565b60808110611d0057611d006128ee565b602002015189611d1188600361281d565b60808110611d2157611d216128ee565b6020020151866000611fe3565b9250611d3d905060048261281d565b9050611c6f565b50611e72818460046020611d5a61040083612763565b611d649190612798565b611d6e9190612750565b60808110611d7e57611d7e6128ee565b602002015185600360206104006004611d979190612763565b611da19190612798565b611dab9190612750565b60808110611dbb57611dbb6128ee565b602002015186600260206104006004611dd49190612763565b611dde9190612798565b611de89190612750565b60808110611df857611df86128ee565b602002015187600160206104006004611e119190612763565b611e1b9190612798565b611e259190612750565b60808110611e3557611e356128ee565b602002015160206104006004611e4b9190612763565b611e559190612798565b611e60906020612763565b611e6b90608061281d565b6001611fe3565b519150505b9392505050565b6000818310611e8d5781611e77565b5090919050565b60095460065460109190911c9060008184611eb0600183612750565b611eba9086612763565b611ec4919061281d565b611ece9190612798565b9050611edb836002612763565b811115611ef057611eed836002612763565b90505b611efb600284612798565b811015611f1057611f0d600284612798565b90505b6001600160f01b03811115611f2957506001600160f01b035b60101b600955505050565b6000808060001985870985870292508281108382030391505080600003611f6e57838281611f6457611f64612782565b0492505050611e77565b808411611f7a57600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b611feb6122d0565b600c6000611ff88561210f565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61209457600080fd5b505050979650505050505050565b6120aa6122d0565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b60208083019190915282519083015161179591839160008060406001611fe3565b6121176122d0565b6201000082101561215b57600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b64010000000082101561219b57600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612143565b680100000000000000008210156121b5576121438261224b565b600160801b821015612205576001600160401b038216604083901c6121d98261224b565b6001600160c01b03191683526121ee8161224b565b6001600160c01b0319166020840152506122469050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610498565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461224657600080fd5b80356001600160401b038116811461224657600080fd5b6000806040838503121561232f57600080fd5b612338836122ee565b915061234660208401612305565b90509250929050565b60006020828403121561236157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156123a1576123a1612368565b60405290565b60405160c081016001600160401b03811182821017156123a1576123a1612368565b6000608082840312156123db57600080fd5b604051608081018181106001600160401b03821117156123fd576123fd612368565b8060405250809150823581526020830135602082015261241f60408401612305565b604082015261243060608401612305565b60608201525092915050565b600082601f83011261244d57600080fd5b6040516110008082018281106001600160401b038211171561247157612471612368565b6040528301818582111561248457600080fd5b845b8281101561249e578035825260209182019101612486565b509195945050505050565b600082601f8301126124ba57600080fd5b813560206001600160401b03808311156124d6576124d6612368565b8260051b604051601f19603f830116810181811084821117156124fb576124fb612368565b60405293845285810183019383810192508785111561251957600080fd5b83870191505b84821015610e535781358352918301919083019061251f565b6000611160828403121561254b57600080fd5b61255361237e565b905081358152602082013560208201526040820135604082015261257a83606084016123c9565b606082015260e082013560808201526101008083013560a083015261012083013560c08301526125ae84610140850161243c565b60e08301526111408301356001600160401b038111156125cd57600080fd5b6125d9858286016124a9565b82840152505092915050565b60008082840360e08112156125f957600080fd5b83356001600160401b0381111561260f57600080fd5b61261b86828701612538565b93505060c0601f198201121561263057600080fd5b506126396123a7565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561268f57600080fd5b81356001600160401b038111156126a557600080fd5b6126b184828501612538565b949350505050565b600080604083850312156126cc57600080fd5b6126d5836122ee565b946020939093013593505050565b6000806000606084860312156126f857600080fd5b83359250612708602085016122ee565b9150612716604085016122ee565b90509250925092565b60006020828403121561273157600080fd5b611e77826122ee565b634e487b7160e01b600052601160045260246000fd5b818103818111156117955761179561273a565b600081600019048311821515161561277d5761277d61273a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826127a7576127a7612782565b500490565b80516001600160801b038116811461224657600080fd5b6000604082840312156127d557600080fd5b604051604081018181106001600160401b03821117156127f7576127f7612368565b604052612803836127ac565b8152612811602084016127ac565b60208201529392505050565b808201808211156117955761179561273a565b600060c0828403121561284257600080fd5b60405160c081018181106001600160401b038211171561286457612864612368565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b6000826128b8576128b8612782565b500690565b60408101818360005b60028110156128e55781518352602092830192909101906001016128c6565b50505092915050565b634e487b7160e01b600052603260045260246000fd5b6001600160401b038281168282160390808211156129245761292461273a565b5092915050565b600060ff821660ff81036129415761294161273a565b6001019291505056fea2646970667358221220a7ebe4d45aface1c050e3575a083f5502eb41924a9a375dd36342247acb8552364736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/PoraMineTest.json b/storage-contracts-abis/PoraMineTest.json new file mode 100644 index 0000000..02019dc --- /dev/null +++ b/storage-contracts-abis/PoraMineTest.json @@ -0,0 +1,944 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PoraMineTest", + "sourceName": "contracts/test/PoraMineTest.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "settings", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "NewMinerId", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "epochIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + } + ], + "name": "NewSubmission", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "UpdateMinerId", + "type": "event" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "epoch", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineStart", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "flowRoot", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "flowLength", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "blockDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "digest", + "type": "bytes32" + } + ], + "internalType": "struct MineContext", + "name": "context", + "type": "tuple" + } + ], + "name": "basicCheck", + "outputs": [], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "beneficiaries", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "canSubmit", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "currentSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "dataProofEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "difficultyAdjustRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "fixedDifficulty", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "flow", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficulty", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flow_", + "type": "address" + }, + { + "internalType": "address", + "name": "reward_", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "initialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "lastMinedEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "pora", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "poraTarget", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + }, + { + "internalType": "bytes32[128]", + "name": "unsealedData", + "type": "bytes32[128]" + } + ], + "name": "recoverMerkleRoot", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint64", + "name": "seed", + "type": "uint64" + } + ], + "name": "requestMinerId", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "reward", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "sealDataEnabled", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "difficultyAdjustRatio_", + "type": "uint256" + } + ], + "name": "setDifficultyAdjustRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "setMiner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_targetQuality", + "type": "uint256" + } + ], + "name": "setQuality", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetMineBlocks_", + "type": "uint256" + } + ], + "name": "setTargetMineBlocks", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "targetSubmissions_", + "type": "uint256" + } + ], + "name": "setTargetSubmissions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "submit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "targetMineBlocks", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissions", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "targetSubmissionsNextEpoch", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + } + ], + "name": "transferBeneficial", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "bytes32", + "name": "contextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "nonce", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "minerId", + "type": "bytes32" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "startPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mineLength", + "type": "uint256" + }, + { + "internalType": "uint64", + "name": "shardId", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "shardMask", + "type": "uint64" + } + ], + "internalType": "struct RecallRange", + "name": "range", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "recallPosition", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "sealOffset", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "sealedContextDigest", + "type": "bytes32" + }, + { + "internalType": "bytes32[128]", + "name": "sealedData", + "type": "bytes32[128]" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct MineLib.PoraAnswer", + "name": "answer", + "type": "tuple" + } + ], + "name": "unseal", + "outputs": [ + { + "internalType": "bytes32[128]", + "name": "unsealedData", + "type": "bytes32[128]" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": "0x60e06040526064600355600a600455600a6005556014600655600060075560006008553480156200002f57600080fd5b5060405162002c0438038062002c048339810160408190526200005291620000d9565b60048117620000613362000080565b6001811615608052600281161560a052600416151560c05250620000f3565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b600060208284031215620000ec57600080fd5b5051919050565b60805160a05160c051612ac56200013f6000396000818161033d01528181610d09015261107401526000818161036d0152610acb0152600081816103b30152610a8e0152612ac56000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c80637bba7d611161010f578063b0628ee0116100a2578063dddc61a811610071578063dddc61a814610458578063e1498cf914610461578063f2fde38b14610474578063ffbc9bd01461048757600080fd5b8063b0628ee0146103fb578063b4988fd01461040e578063b51e039714610421578063b776a5121461044f57600080fd5b8063a8279182116100de578063a8279182146103a5578063adaa7a0f146103ae578063ae722e82146103d5578063aed75224146103e857600080fd5b80637bba7d61146103385780637eca56881461035f57806382975fe7146103685780638da5cb5b1461038f57600080fd5b806339cd53ee116101875780635bdca855116101565780635bdca855146102f75780636e9bb60b1461030a578063704d3c961461031d578063715018a61461033057600080fd5b806339cd53ee146102925780633baebb75146102bb57806348f61441146102ce57806359e7b5be146102d757600080fd5b8063228cb733116101c3578063228cb7331461023457806331223ba71461025f578063331f3b9c14610276578063343aad821461027f57600080fd5b8063047c13f5146101ea578063158ef93e146101ff5780631600c62414610221575b600080fd5b6101fd6101f83660046123f2565b61048f565b005b60005461020c9060ff1681565b60405190151581526020015b60405180910390f35b6101fd61022f366004612425565b6105ab565b600254610247906001600160a01b031681565b6040516001600160a01b039091168152602001610218565b61026860075481565b604051908152602001610218565b61026860035481565b600154610247906001600160a01b031681565b6102476102a0366004612425565b600a602052600090815260409020546001600160a01b031681565b6101fd6102c93660046126bb565b6105b8565b61026860095481565b6102ea6102e5366004612753565b61084f565b604051610218919061278f565b6101fd610305366004612425565b610866565b6102686103183660046127c1565b610886565b6101fd61032b366004612425565b610899565b6101fd6108a6565b61020c7f000000000000000000000000000000000000000000000000000000000000000081565b61026860055481565b61020c7f000000000000000000000000000000000000000000000000000000000000000081565b60005461010090046001600160a01b0316610247565b61026860085481565b61020c7f000000000000000000000000000000000000000000000000000000000000000081565b6101fd6103e3366004612753565b6108ba565b6102686103f6366004612753565b610d35565b6101fd610409366004612807565b610f38565b6101fd61041c366004612831565b610ff8565b6101fd61042f366004612425565b6000908152600a6020526040902080546001600160a01b03191633179055565b61026860045481565b61026860065481565b6101fd61046f366004612425565b600955565b6101fd61048236600461286d565b6110ce565b61020c611144565b600061049c60014361289e565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600a9093529120549091506001600160a01b0316156105515760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600a602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b6105b36111df565b600355565b815160a08201511461060c5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610548565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a001510361067f5760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610548565b600454600854106106d25760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610548565b60006101006106e3610400826128b1565b6106ed91906128e6565b6101006106fc610400826128b1565b61070691906128e6565b836060015161071591906128e6565b61071f91906128b1565b6060840151909150610731908261123f565b60015460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190612911565b905060006101006107b861040060046128b1565b6107c291906128e6565b85608001516107d1919061296b565b90508082600001516001600160801b03161080156107fc57508082602001516001600160801b031610155b6108485760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610548565b5050505050565b610857612387565b61086082611483565b92915050565b61086e6111df565b60058190556007546000036108835760048190555b50565b60006108928383611597565b9392505050565b6108a16111df565b600655565b6108ae6111df565b6108b8600061180a565b565b60408101516109045760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610548565b6040808201516000908152600a60205220546001600160a01b03168061096c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610548565b60015460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db919061297e565b905060075481600001511015610a415760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610548565b6007548151118015610a5557506000600754115b15610a7a576004546008541015610a6e57610a6e611863565b60006008556005546004555b610a8483826105b8565b610a8c612387565b7f000000000000000000000000000000000000000000000000000000000000000015610ac257610abb84611483565b9050610ac9565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610b52576000610afb8583611597565b905082604001518114610b505760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610548565b505b610b5a612387565b90506000610b6785610d35565b9050610b768560600151611873565b600954610b8391906128e6565b811115610bd25760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610548565b6002546001600160a01b031663b7a3c04c610100610bf2610400806128b1565b610bfe906104006128b1565b610c099060086128b1565b610c1391906128e6565b8760800151610c2291906128e6565b60408089015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03881660248301526044820152606401600060405180830381600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b505050604080870151855160085460808a015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a382516007556008805460019190600090610cef90849061296b565b90915550506004546008541015610d07575050505050565b7f000000000000000000000000000000000000000000000000000000000000000061084857610848836118bd565b6040810151600090610d895760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610548565b60006040518060800160405280846040015181526020018460200151815260200184600001518152602001610dc185606001516118f6565b905290506000610dd08261195e565b90506000610de161040060406128b1565b610def6104006101006128b1565b610df991906128e6565b610e0661040060046128b1565b610e146104006101006128b1565b610e1e91906128e6565b610e2891906128e6565b8560a00151610e3791906129f7565b9050610e41612387565b610e496123a6565b610e588760e0015184866119d6565b92509050610100610e6c61040060046128b1565b610e7691906128e6565b8760a00151610e8591906128b1565b610ec282604051602001610e999190612a0b565b604051602081830303815290604052805190602001208960600151611bcc90919063ffffffff16565b610ecc919061296b565b876080015114610f1e5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610548565b610f2d8760a001518584611cd2565b979650505050505050565b6000818152600a60205260409020546001600160a01b03163314610f9e5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610548565b6000818152600a602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156110565760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b6064820152608401610548565b6000805460ff1916600117905561106f836000196128e6565b6009557f00000000000000000000000000000000000000000000000000000000000000001561109f576000196009555b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550565b6110d66111df565b6001600160a01b03811661113b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610548565b6108838161180a565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c0919061297e565b9050600754816000015111806111d95750600454600854105b91505090565b6000546001600160a01b036101009091041633146108b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610548565b61010061124e610400806128b1565b61125a906104006128b1565b6112659060086128b1565b61126f91906128e6565b825161127b91906129f7565b156112c85760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610548565b6020820151825182916112da9161296b565b11156113205760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610548565b600061132b83611873565b61010061133a610400806128b1565b611346906104006128b1565b611352906104006128b1565b61135d9060086128b1565b61136791906128e6565b61137191906128b1565b905080836020015111156113bf5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610548565b60006113cb8383611f54565b9050808460200151101561141a5760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610548565b83606001518460400151166001600160401b031660001461147d5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610548565b50505050565b61148b612387565b60408083015160c0840151608085015192516114bb93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206114ee61040060046128b1565b6114f891906128e6565b8110156115915760e083015161150f60018361289e565b6080811061151f5761151f612a33565b602002015160405160200161153691815260200190565b604051602081830303815290604052805190602001208360e00151826080811061156257611562612a33565b60200201511882826080811061157a5761157a612a33565b602002015261158a60018261296b565b90506114df565b50919050565b6000805b60206115aa61040060046128b1565b6115b491906128e6565b8110156116025761010060208202840120808483608081106115d8576115d8612a33565b6020020181815250505060206101006115f191906128e6565b6115fb908261296b565b905061159b565b50600061161260206101006128e6565b90505b602061162461040060046128b1565b61162e91906128e6565b8110156117015760005b602061164761040060046128b1565b61165191906128e6565b8110156116f857600084826080811061166c5761166c612a33565b60200201519050600085611680858561296b565b6080811061169057611690612a33565b6020020151905081816040516020016116b3929190918252602082015260400190565b604051602081830303815290604052805190602001208684608081106116db576116db612a33565b6020020152506116f19050600183901b8261296b565b9050611638565b5060011b611615565b50815161170c612387565b9250600061010061172061040060046128b1565b61172a91906128e6565b856080015161173991906128e6565b905060005b856101000151518110156118005760008061175a6002856129f7565b60000361178a57849150876101000151838151811061177b5761177b612a33565b602002602001015190506117af565b87610100015183815181106117a1576117a1612a33565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846117e891906128e6565b935050506001816117f9919061296b565b905061173e565b5090949350505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6108b86001600160f01b03611f6a565b606081015160009019815b6001600160401b038216156118ae57611898600183612a49565b90911690806118a681612a70565b91505061187e565b600160ff9091161b9392505050565b60008160200151436118cf919061289e565b905060006010600954901c905060006118eb828460035461200a565b905061147d81611f6a565b60008160000151826020015183604001518460600151604051602001611941949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b6119666123a6565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161086093859390929091608060016120b9565b6119de6123a6565b6119e6612387565b60005b84811015611a445760005b6040611a0361040060046128b1565b611a0d91906128e6565b811015611a3157611a1d85612178565b9450611a2a60018261296b565b90506119f4565b50611a3d60018261296b565b90506119e9565b5060005b6020611a5761040060046128b1565b611a6191906128e6565b811015611b0157611a7184612178565b9350858160808110611a8557611a85612a33565b6020020151845118828260808110611a9f57611a9f612a33565b602002015285611ab082600161296b565b60808110611ac057611ac0612a33565b602002015184600160200201511882611ada83600161296b565b60808110611aea57611aea612a33565b6020020152611afa60028261296b565b9050611a48565b506000611b0f85600161296b565b90505b611b1f61040060406128b1565b611b2d6104006101006128b1565b611b3791906128e6565b611b4461040060046128b1565b611b526104006101006128b1565b611b5c91906128e6565b611b6691906128e6565b811015611bc05760005b6040611b7f61040060046128b1565b611b8991906128e6565b811015611bad57611b9985612178565b9450611ba660018261296b565b9050611b70565b50611bb960018261296b565b9050611b12565b50829150935093915050565b600080610100611bde610400826128b1565b611be891906128e6565b8460200151611bf791906128e6565b611c0190846129f7565b60408501516060860151602087015192935083161790610100611c26610400826128b1565b611c3091906128e6565b611c43906001600160401b0384166128b1565b1115611c915760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610548565b610100611ca0610400826128b1565b611caa91906128e6565b611cbd906001600160401b0383166128b1565b8551611cc9919061296b565b95945050505050565b6000611cdc6123a6565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152845190850151611d4291839188919060006080816120b9565b905060005b60046020611d57610400836128b1565b611d6191906128e6565b611d6b919061289e565b811015611e1c576000816004016020026080019050611e0683868460808110611d9657611d96612a33565b602002015187611da786600161296b565b60808110611db757611db7612a33565b602002015188611dc887600261296b565b60808110611dd857611dd8612a33565b602002015189611de988600361296b565b60808110611df957611df9612a33565b60200201518660006120b9565b9250611e15905060048261296b565b9050611d47565b50611f4a818460046020611e32610400836128b1565b611e3c91906128e6565b611e46919061289e565b60808110611e5657611e56612a33565b602002015185600360206104006004611e6f91906128b1565b611e7991906128e6565b611e83919061289e565b60808110611e9357611e93612a33565b602002015186600260206104006004611eac91906128b1565b611eb691906128e6565b611ec0919061289e565b60808110611ed057611ed0612a33565b602002015187600160206104006004611ee991906128b1565b611ef391906128e6565b611efd919061289e565b60808110611f0d57611f0d612a33565b602002015160206104006004611f2391906128b1565b611f2d91906128e6565b611f389060206128b1565b611f4390608061296b565b60016120b9565b5195945050505050565b6000818310611f635781610892565b5090919050565b60095460065460109190911c9060008184611f8660018361289e565b611f9090866128b1565b611f9a919061296b565b611fa491906128e6565b9050611fb18360026128b1565b811115611fc657611fc38360026128b1565b90505b611fd16002846128e6565b811015611fe657611fe36002846128e6565b90505b6001600160f01b03811115611fff57506001600160f01b035b60101b600955505050565b60008080600019858709858702925082811083820303915050806000036120445783828161203a5761203a6128d0565b0492505050610892565b80841161205057600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6120c16123a6565b600c60006120ce856121e5565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61216a57600080fd5b505050979650505050505050565b6121806123a6565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151610860918391600080604060016120b9565b6121ed6123a6565b6201000082101561223157600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b64010000000082101561227157600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612219565b6801000000000000000082101561228b5761221982612321565b600160801b8210156122db576001600160401b038216604083901c6122af82612321565b6001600160c01b03191683526122c481612321565b6001600160c01b03191660208401525061231c9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610548565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461231c57600080fd5b80356001600160401b038116811461231c57600080fd5b6000806040838503121561240557600080fd5b61240e836123c4565b915061241c602084016123db565b90509250929050565b60006020828403121561243757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156124775761247761243e565b60405290565b60405160c081016001600160401b03811182821017156124775761247761243e565b6000608082840312156124b157600080fd5b604051608081018181106001600160401b03821117156124d3576124d361243e565b806040525080915082358152602083013560208201526124f5604084016123db565b6040820152612506606084016123db565b60608201525092915050565b600082601f83011261252357600080fd5b6040516110008082018281106001600160401b03821117156125475761254761243e565b6040528301818582111561255a57600080fd5b845b8281101561257457803582526020918201910161255c565b509195945050505050565b600082601f83011261259057600080fd5b813560206001600160401b03808311156125ac576125ac61243e565b8260051b604051601f19603f830116810181811084821117156125d1576125d161243e565b6040529384528581018301938381019250878511156125ef57600080fd5b83870191505b84821015610f2d578135835291830191908301906125f5565b6000611160828403121561262157600080fd5b612629612454565b9050813581526020820135602082015260408201356040820152612650836060840161249f565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152612684846101408501612512565b60e08301526111408301356001600160401b038111156126a357600080fd5b6126af8582860161257f565b82840152505092915050565b60008082840360e08112156126cf57600080fd5b83356001600160401b038111156126e557600080fd5b6126f18682870161260e565b93505060c0601f198201121561270657600080fd5b5061270f61247d565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561276557600080fd5b81356001600160401b0381111561277b57600080fd5b6127878482850161260e565b949350505050565b6110008101818360005b60808110156127b8578151835260209283019290910190600101612799565b50505092915050565b60008061102083850312156127d557600080fd5b82356001600160401b038111156127eb57600080fd5b6127f78582860161260e565b92505061241c8460208501612512565b6000806040838503121561281a57600080fd5b612823836123c4565b946020939093013593505050565b60008060006060848603121561284657600080fd5b83359250612856602085016123c4565b9150612864604085016123c4565b90509250925092565b60006020828403121561287f57600080fd5b610892826123c4565b634e487b7160e01b600052601160045260246000fd5b8181038181111561086057610860612888565b60008160001904831182151516156128cb576128cb612888565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826128f5576128f56128d0565b500490565b80516001600160801b038116811461231c57600080fd5b60006040828403121561292357600080fd5b604051604081018181106001600160401b03821117156129455761294561243e565b604052612951836128fa565b815261295f602084016128fa565b60208201529392505050565b8082018082111561086057610860612888565b600060c0828403121561299057600080fd5b60405160c081018181106001600160401b03821117156129b2576129b261243e565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600082612a0657612a066128d0565b500690565b60408101818360005b60028110156127b8578151835260209283019290910190600101612a14565b634e487b7160e01b600052603260045260246000fd5b6001600160401b03828116828216039080821115612a6957612a69612888565b5092915050565b600060ff821660ff8103612a8657612a86612888565b6001019291505056fea2646970667358221220486bb9117f7c39fec3c79f64489850bca4287f500fab1577bdbcda1f53fec85f64736f6c63430008100033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101e55760003560e01c80637bba7d611161010f578063b0628ee0116100a2578063dddc61a811610071578063dddc61a814610458578063e1498cf914610461578063f2fde38b14610474578063ffbc9bd01461048757600080fd5b8063b0628ee0146103fb578063b4988fd01461040e578063b51e039714610421578063b776a5121461044f57600080fd5b8063a8279182116100de578063a8279182146103a5578063adaa7a0f146103ae578063ae722e82146103d5578063aed75224146103e857600080fd5b80637bba7d61146103385780637eca56881461035f57806382975fe7146103685780638da5cb5b1461038f57600080fd5b806339cd53ee116101875780635bdca855116101565780635bdca855146102f75780636e9bb60b1461030a578063704d3c961461031d578063715018a61461033057600080fd5b806339cd53ee146102925780633baebb75146102bb57806348f61441146102ce57806359e7b5be146102d757600080fd5b8063228cb733116101c3578063228cb7331461023457806331223ba71461025f578063331f3b9c14610276578063343aad821461027f57600080fd5b8063047c13f5146101ea578063158ef93e146101ff5780631600c62414610221575b600080fd5b6101fd6101f83660046123f2565b61048f565b005b60005461020c9060ff1681565b60405190151581526020015b60405180910390f35b6101fd61022f366004612425565b6105ab565b600254610247906001600160a01b031681565b6040516001600160a01b039091168152602001610218565b61026860075481565b604051908152602001610218565b61026860035481565b600154610247906001600160a01b031681565b6102476102a0366004612425565b600a602052600090815260409020546001600160a01b031681565b6101fd6102c93660046126bb565b6105b8565b61026860095481565b6102ea6102e5366004612753565b61084f565b604051610218919061278f565b6101fd610305366004612425565b610866565b6102686103183660046127c1565b610886565b6101fd61032b366004612425565b610899565b6101fd6108a6565b61020c7f000000000000000000000000000000000000000000000000000000000000000081565b61026860055481565b61020c7f000000000000000000000000000000000000000000000000000000000000000081565b60005461010090046001600160a01b0316610247565b61026860085481565b61020c7f000000000000000000000000000000000000000000000000000000000000000081565b6101fd6103e3366004612753565b6108ba565b6102686103f6366004612753565b610d35565b6101fd610409366004612807565b610f38565b6101fd61041c366004612831565b610ff8565b6101fd61042f366004612425565b6000908152600a6020526040902080546001600160a01b03191633179055565b61026860045481565b61026860065481565b6101fd61046f366004612425565b600955565b6101fd61048236600461286d565b6110ce565b61020c611144565b600061049c60014361289e565b60408051914060208301526bffffffffffffffffffffffff193360601b16908201526001600160c01b031960c084901b166054820152605c0160408051601f1981840301815291815281516020928301206000818152600a9093529120549091506001600160a01b0316156105515760405162461bcd60e51b8152602060048201526016602482015275135a5b995c9259081a185cc81c9959da5cdd195c995960521b60448201526064015b60405180910390fd5b6000818152600a602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051909183917fbfeb006f16aca8eb3d9953cf44db6b11b6f3041a313875dfa18f2e9d71bd309e9190a3505050565b6105b36111df565b600355565b815160a08201511461060c5760405162461bcd60e51b815260206004820152601a60248201527f496e636f6e73697374656e74206d696e696e67206469676573740000000000006044820152606401610548565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708160a001510361067f5760405162461bcd60e51b815260206004820152601960248201527f456d707479206469676573742063616e206e6f74206d696e65000000000000006044820152606401610548565b600454600854106106d25760405162461bcd60e51b815260206004820152601c60248201527f45706f63682068617320656e6f756768207375626d697373696f6e73000000006044820152606401610548565b60006101006106e3610400826128b1565b6106ed91906128e6565b6101006106fc610400826128b1565b61070691906128e6565b836060015161071591906128e6565b61071f91906128b1565b6060840151909150610731908261123f565b60015460c0840151604051630fab20e160e31b815260048101919091526000916001600160a01b031690637d590708906024016040805180830381865afa158015610780573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a49190612911565b905060006101006107b861040060046128b1565b6107c291906128e6565b85608001516107d1919061296b565b90508082600001516001600160801b03161080156107fc57508082602001516001600160801b031610155b6108485760405162461bcd60e51b815260206004820152601d60248201527f496e76616c6964207365616c656420636f6e74657874206469676573740000006044820152606401610548565b5050505050565b610857612387565b61086082611483565b92915050565b61086e6111df565b60058190556007546000036108835760048190555b50565b60006108928383611597565b9392505050565b6108a16111df565b600655565b6108ae6111df565b6108b8600061180a565b565b60408101516109045760405162461bcd60e51b81526020600482015260166024820152754d696e657249642063616e6e6f74206265207a65726f60501b6044820152606401610548565b6040808201516000908152600a60205220546001600160a01b03168061096c5760405162461bcd60e51b815260206004820152601b60248201527f4d696e6572496420646f6573206e6f74207265676973746572656400000000006044820152606401610548565b60015460408051635a325a9f60e11b815290516000926001600160a01b03169163b464b53e9160048083019260c0929190829003018187875af11580156109b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109db919061297e565b905060075481600001511015610a415760405162461bcd60e51b815260206004820152602560248201527f496e7465726e616c206572726f723a2065706f6368206e756d62657220646563604482015264726561736560d81b6064820152608401610548565b6007548151118015610a5557506000600754115b15610a7a576004546008541015610a6e57610a6e611863565b60006008556005546004555b610a8483826105b8565b610a8c612387565b7f000000000000000000000000000000000000000000000000000000000000000015610ac257610abb84611483565b9050610ac9565b5060e08301515b7f000000000000000000000000000000000000000000000000000000000000000015610b52576000610afb8583611597565b905082604001518114610b505760405162461bcd60e51b815260206004820152601860248201527f496e636f6e73697374656e74206d65726b6c6520726f6f7400000000000000006044820152606401610548565b505b610b5a612387565b90506000610b6785610d35565b9050610b768560600151611873565b600954610b8391906128e6565b811115610bd25760405162461bcd60e51b815260206004820152601b60248201527f446f206e6f7420726561636820746172676574207175616c69747900000000006044820152606401610548565b6002546001600160a01b031663b7a3c04c610100610bf2610400806128b1565b610bfe906104006128b1565b610c099060086128b1565b610c1391906128e6565b8760800151610c2291906128e6565b60408089015190516001600160e01b031960e085901b16815260048101929092526001600160a01b03881660248301526044820152606401600060405180830381600087803b158015610c7457600080fd5b505af1158015610c88573d6000803e3d6000fd5b505050604080870151855160085460808a015184519182526020820152919350917ffedd8f58059af8fd54b4394c01ea8d07cac041988be3b5a822fb779f9c8de3a4910160405180910390a382516007556008805460019190600090610cef90849061296b565b90915550506004546008541015610d07575050505050565b7f000000000000000000000000000000000000000000000000000000000000000061084857610848836118bd565b6040810151600090610d895760405162461bcd60e51b815260206004820152601860248201527f4d696e65722049442063616e6e6f7420626520656d70747900000000000000006044820152606401610548565b60006040518060800160405280846040015181526020018460200151815260200184600001518152602001610dc185606001516118f6565b905290506000610dd08261195e565b90506000610de161040060406128b1565b610def6104006101006128b1565b610df991906128e6565b610e0661040060046128b1565b610e146104006101006128b1565b610e1e91906128e6565b610e2891906128e6565b8560a00151610e3791906129f7565b9050610e41612387565b610e496123a6565b610e588760e0015184866119d6565b92509050610100610e6c61040060046128b1565b610e7691906128e6565b8760a00151610e8591906128b1565b610ec282604051602001610e999190612a0b565b604051602081830303815290604052805190602001208960600151611bcc90919063ffffffff16565b610ecc919061296b565b876080015114610f1e5760405162461bcd60e51b815260206004820152601960248201527f496e636f727265637420726563616c6c20706f736974696f6e000000000000006044820152606401610548565b610f2d8760a001518584611cd2565b979650505050505050565b6000818152600a60205260409020546001600160a01b03163314610f9e5760405162461bcd60e51b815260206004820152601b60248201527f53656e64657220646f6573206e6f74206f776e206d696e6572496400000000006044820152606401610548565b6000818152600a602052604080822080546001600160a01b0319166001600160a01b03861690811790915590519091339184917f9a26a8e7fd42c501b452c02016def8048e3ea28c2bf15127a9b5e2029d989bf191a45050565b60005460ff16156110565760405162461bcd60e51b815260206004820152602260248201527f496e697469616c697a61626c653a20616c726561647920696e697469616c697a604482015261195960f21b6064820152608401610548565b6000805460ff1916600117905561106f836000196128e6565b6009557f00000000000000000000000000000000000000000000000000000000000000001561109f576000196009555b600180546001600160a01b039384166001600160a01b0319918216179091556002805492909316911617905550565b6110d66111df565b6001600160a01b03811661113b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610548565b6108838161180a565b600080600160009054906101000a90046001600160a01b03166001600160a01b031663b464b53e6040518163ffffffff1660e01b815260040160c0604051808303816000875af115801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c0919061297e565b9050600754816000015111806111d95750600454600854105b91505090565b6000546001600160a01b036101009091041633146108b85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610548565b61010061124e610400806128b1565b61125a906104006128b1565b6112659060086128b1565b61126f91906128e6565b825161127b91906129f7565b156112c85760405162461bcd60e51b815260206004820152601d60248201527f537461727420706f736974696f6e206973206e6f7420616c69676e65640000006044820152606401610548565b6020820151825182916112da9161296b565b11156113205760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e6765206f766572666c6f7760581b6044820152606401610548565b600061132b83611873565b61010061133a610400806128b1565b611346906104006128b1565b611352906104006128b1565b61135d9060086128b1565b61136791906128e6565b61137191906128b1565b905080836020015111156113bf5760405162461bcd60e51b81526020600482015260156024820152744d696e696e672072616e676520746f6f206c6f6e6760581b6044820152606401610548565b60006113cb8383611f54565b9050808460200151101561141a5760405162461bcd60e51b8152602060048201526016602482015275135a5b9a5b99c81c985b99d9481d1bdbc81cda1bdc9d60521b6044820152606401610548565b83606001518460400151166001600160401b031660001461147d5760405162461bcd60e51b815260206004820152601a60248201527f4d61736b656420626974732073686f756c64206265207a65726f0000000000006044820152606401610548565b50505050565b61148b612387565b60408083015160c0840151608085015192516114bb93906020019283526020830191909152604082015260600190565b60408051808303601f19018152919052805160209091012060e08301515118815260015b60206114ee61040060046128b1565b6114f891906128e6565b8110156115915760e083015161150f60018361289e565b6080811061151f5761151f612a33565b602002015160405160200161153691815260200190565b604051602081830303815290604052805190602001208360e00151826080811061156257611562612a33565b60200201511882826080811061157a5761157a612a33565b602002015261158a60018261296b565b90506114df565b50919050565b6000805b60206115aa61040060046128b1565b6115b491906128e6565b8110156116025761010060208202840120808483608081106115d8576115d8612a33565b6020020181815250505060206101006115f191906128e6565b6115fb908261296b565b905061159b565b50600061161260206101006128e6565b90505b602061162461040060046128b1565b61162e91906128e6565b8110156117015760005b602061164761040060046128b1565b61165191906128e6565b8110156116f857600084826080811061166c5761166c612a33565b60200201519050600085611680858561296b565b6080811061169057611690612a33565b6020020151905081816040516020016116b3929190918252602082015260400190565b604051602081830303815290604052805190602001208684608081106116db576116db612a33565b6020020152506116f19050600183901b8261296b565b9050611638565b5060011b611615565b50815161170c612387565b9250600061010061172061040060046128b1565b61172a91906128e6565b856080015161173991906128e6565b905060005b856101000151518110156118005760008061175a6002856129f7565b60000361178a57849150876101000151838151811061177b5761177b612a33565b602002602001015190506117af565b87610100015183815181106117a1576117a1612a33565b602002602001015191508490505b60408051602081018490529081018290526060016040516020818303038152906040528051906020012094506002846117e891906128e6565b935050506001816117f9919061296b565b905061173e565b5090949350505050565b600080546001600160a01b03838116610100818102610100600160a81b0319851617855560405193049190911692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a35050565b6108b86001600160f01b03611f6a565b606081015160009019815b6001600160401b038216156118ae57611898600183612a49565b90911690806118a681612a70565b91505061187e565b600160ff9091161b9392505050565b60008160200151436118cf919061289e565b905060006010600954901c905060006118eb828460035461200a565b905061147d81611f6a565b60008160000151826020015183604001518460600151604051602001611941949392919093845260208401929092526001600160401b03908116604084015216606082015260800190565b604051602081830303815290604052805190602001209050919050565b6119666123a6565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b6020808301919091528251908301516040840151606085015161086093859390929091608060016120b9565b6119de6123a6565b6119e6612387565b60005b84811015611a445760005b6040611a0361040060046128b1565b611a0d91906128e6565b811015611a3157611a1d85612178565b9450611a2a60018261296b565b90506119f4565b50611a3d60018261296b565b90506119e9565b5060005b6020611a5761040060046128b1565b611a6191906128e6565b811015611b0157611a7184612178565b9350858160808110611a8557611a85612a33565b6020020151845118828260808110611a9f57611a9f612a33565b602002015285611ab082600161296b565b60808110611ac057611ac0612a33565b602002015184600160200201511882611ada83600161296b565b60808110611aea57611aea612a33565b6020020152611afa60028261296b565b9050611a48565b506000611b0f85600161296b565b90505b611b1f61040060406128b1565b611b2d6104006101006128b1565b611b3791906128e6565b611b4461040060046128b1565b611b526104006101006128b1565b611b5c91906128e6565b611b6691906128e6565b811015611bc05760005b6040611b7f61040060046128b1565b611b8991906128e6565b811015611bad57611b9985612178565b9450611ba660018261296b565b9050611b70565b50611bb960018261296b565b9050611b12565b50829150935093915050565b600080610100611bde610400826128b1565b611be891906128e6565b8460200151611bf791906128e6565b611c0190846129f7565b60408501516060860151602087015192935083161790610100611c26610400826128b1565b611c3091906128e6565b611c43906001600160401b0384166128b1565b1115611c915760405162461bcd60e51b815260206004820152601c60248201527f526563616c6c20706f736974696f6e206f7574206f6620626f756e64000000006044820152606401610548565b610100611ca0610400826128b1565b611caa91906128e6565b611cbd906001600160401b0383166128b1565b8551611cc9919061296b565b95945050505050565b6000611cdc6123a6565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152845190850151611d4291839188919060006080816120b9565b905060005b60046020611d57610400836128b1565b611d6191906128e6565b611d6b919061289e565b811015611e1c576000816004016020026080019050611e0683868460808110611d9657611d96612a33565b602002015187611da786600161296b565b60808110611db757611db7612a33565b602002015188611dc887600261296b565b60808110611dd857611dd8612a33565b602002015189611de988600361296b565b60808110611df957611df9612a33565b60200201518660006120b9565b9250611e15905060048261296b565b9050611d47565b50611f4a818460046020611e32610400836128b1565b611e3c91906128e6565b611e46919061289e565b60808110611e5657611e56612a33565b602002015185600360206104006004611e6f91906128b1565b611e7991906128e6565b611e83919061289e565b60808110611e9357611e93612a33565b602002015186600260206104006004611eac91906128b1565b611eb691906128e6565b611ec0919061289e565b60808110611ed057611ed0612a33565b602002015187600160206104006004611ee991906128b1565b611ef391906128e6565b611efd919061289e565b60808110611f0d57611f0d612a33565b602002015160206104006004611f2391906128b1565b611f2d91906128e6565b611f389060206128b1565b611f4390608061296b565b60016120b9565b5195945050505050565b6000818310611f635781610892565b5090919050565b60095460065460109190911c9060008184611f8660018361289e565b611f9090866128b1565b611f9a919061296b565b611fa491906128e6565b9050611fb18360026128b1565b811115611fc657611fc38360026128b1565b90505b611fd16002846128e6565b811015611fe657611fe36002846128e6565b90505b6001600160f01b03811115611fff57506001600160f01b035b60101b600955505050565b60008080600019858709858702925082811083820303915050806000036120445783828161203a5761203a6128d0565b0492505050610892565b80841161205057600080fd5b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6120c16123a6565b600c60006120ce856121e5565b8a516020808d0151835184830151604080516001600160e01b031960e08b901b168187015260248101969096526044860193909352606485018f9052608485018e905260a485018d905260c485018c90526001600160c01b031991821660e48601521660ec84015287151560f81b60f4840152805160d58185038101825260f5909401825293945091869184016009600019fa61216a57600080fd5b505050979650505050505050565b6121806123a6565b7f48c9bdf267e6096a3ba7ca8485ae67bb2bf894fe72f36e3cf1361d5f3af54fa581527fd182e6ad7f520e511f6c3e2b8c68059b6bbd41fbabd9831f79217e1319cde05b602080830191909152825190830151610860918391600080604060016120b9565b6121ed6123a6565b6201000082101561223157600882811c66ffffffffffffff169083901b67ffffffffffffff00161760f01b5b6001600160c01b031916815260006020820152919050565b64010000000082101561227157600882811b63ff00ff001662ff00ff9184901c9190911617601081811b91901c1760e01b6001600160e01b031916612219565b6801000000000000000082101561228b5761221982612321565b600160801b8210156122db576001600160401b038216604083901c6122af82612321565b6001600160c01b03191683526122c481612321565b6001600160c01b03191660208401525061231c9050565b60405162461bcd60e51b8152602060048201526016602482015275626c616b65326220696e70757420746f6f206c6f6e6760501b6044820152606401610548565b919050565b65ff000000ff00600882811b91821664ff000000ff9390911c92831617601090811b67ff000000ff0000009290921666ff000000ff0000939093169290921790911c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b90565b6040518061100001604052806080906020820280368337509192915050565b60405180604001604052806002906020820280368337509192915050565b80356001600160a01b038116811461231c57600080fd5b80356001600160401b038116811461231c57600080fd5b6000806040838503121561240557600080fd5b61240e836123c4565b915061241c602084016123db565b90509250929050565b60006020828403121561243757600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b03811182821017156124775761247761243e565b60405290565b60405160c081016001600160401b03811182821017156124775761247761243e565b6000608082840312156124b157600080fd5b604051608081018181106001600160401b03821117156124d3576124d361243e565b806040525080915082358152602083013560208201526124f5604084016123db565b6040820152612506606084016123db565b60608201525092915050565b600082601f83011261252357600080fd5b6040516110008082018281106001600160401b03821117156125475761254761243e565b6040528301818582111561255a57600080fd5b845b8281101561257457803582526020918201910161255c565b509195945050505050565b600082601f83011261259057600080fd5b813560206001600160401b03808311156125ac576125ac61243e565b8260051b604051601f19603f830116810181811084821117156125d1576125d161243e565b6040529384528581018301938381019250878511156125ef57600080fd5b83870191505b84821015610f2d578135835291830191908301906125f5565b6000611160828403121561262157600080fd5b612629612454565b9050813581526020820135602082015260408201356040820152612650836060840161249f565b606082015260e082013560808201526101008083013560a083015261012083013560c0830152612684846101408501612512565b60e08301526111408301356001600160401b038111156126a357600080fd5b6126af8582860161257f565b82840152505092915050565b60008082840360e08112156126cf57600080fd5b83356001600160401b038111156126e557600080fd5b6126f18682870161260e565b93505060c0601f198201121561270657600080fd5b5061270f61247d565b6020840135815260408401356020820152606084013560408201526080840135606082015260a0840135608082015260c084013560a0820152809150509250929050565b60006020828403121561276557600080fd5b81356001600160401b0381111561277b57600080fd5b6127878482850161260e565b949350505050565b6110008101818360005b60808110156127b8578151835260209283019290910190600101612799565b50505092915050565b60008061102083850312156127d557600080fd5b82356001600160401b038111156127eb57600080fd5b6127f78582860161260e565b92505061241c8460208501612512565b6000806040838503121561281a57600080fd5b612823836123c4565b946020939093013593505050565b60008060006060848603121561284657600080fd5b83359250612856602085016123c4565b9150612864604085016123c4565b90509250925092565b60006020828403121561287f57600080fd5b610892826123c4565b634e487b7160e01b600052601160045260246000fd5b8181038181111561086057610860612888565b60008160001904831182151516156128cb576128cb612888565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826128f5576128f56128d0565b500490565b80516001600160801b038116811461231c57600080fd5b60006040828403121561292357600080fd5b604051604081018181106001600160401b03821117156129455761294561243e565b604052612951836128fa565b815261295f602084016128fa565b60208201529392505050565b8082018082111561086057610860612888565b600060c0828403121561299057600080fd5b60405160c081018181106001600160401b03821117156129b2576129b261243e565b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a08201528091505092915050565b600082612a0657612a066128d0565b500690565b60408101818360005b60028110156127b8578151835260209283019290910190600101612a14565b634e487b7160e01b600052603260045260246000fd5b6001600160401b03828116828216039080821115612a6957612a69612888565b5092915050565b600060ff821660ff8103612a8657612a86612888565b6001019291505056fea2646970667358221220486bb9117f7c39fec3c79f64489850bca4287f500fab1577bdbcda1f53fec85f64736f6c63430008100033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/storage-contracts-abis/README.md b/storage-contracts-abis/README.md new file mode 100644 index 0000000..0177d21 --- /dev/null +++ b/storage-contracts-abis/README.md @@ -0,0 +1,3 @@ +This folder is maintained by the script `./scripts/update_abis.sh <0g-storage-contracts-path>`. Please do not modify it manually. The default value for `0g-storage-contracts-path` is `../0g-storage-contracts`. + +When running the script, ensure that there are no uncommitted changes in the storage path and that `yarn` is already installed. \ No newline at end of file diff --git a/tests/test_framework/blockchain_node.py b/tests/test_framework/blockchain_node.py index 6f2f55e..d0f05d3 100644 --- a/tests/test_framework/blockchain_node.py +++ b/tests/test_framework/blockchain_node.py @@ -267,7 +267,7 @@ class BlockchainNode(TestNode): def deploy_contract(name, args=None): if args is None: args = [] - contract_interface = load_contract_metadata(base_path=self.contract_path, name=name) + contract_interface = load_contract_metadata(path=self.contract_path, name=name) contract = w3.eth.contract( abi=contract_interface["abi"], bytecode=contract_interface["bytecode"], diff --git a/tests/test_framework/contracts.py b/tests/test_framework/contracts.py index 457478e..8df3811 100644 --- a/tests/test_framework/contracts.py +++ b/tests/test_framework/contracts.py @@ -1,11 +1,10 @@ -from os.path import join from pathlib import Path import json from web3 import Web3 -def load_contract_metadata(base_path: str, name: str): - path = Path(join(base_path, "artifacts")) +def load_contract_metadata(path: str, name: str): + path = Path(path) try: found_file = next(path.rglob(f"{name}.json")) return json.loads(open(found_file, "r").read()) diff --git a/tests/test_framework/test_framework.py b/tests/test_framework/test_framework.py index 05e53fc..c688eee 100644 --- a/tests/test_framework/test_framework.py +++ b/tests/test_framework/test_framework.py @@ -256,7 +256,7 @@ class TestFramework: dest="contract", default=os.path.join( __file_path__, - "../../0g-storage-contracts/", + "../../storage-contracts-abis/", ), type=str, )