diff --git a/.github/workflows/actions/setup-env/action.yml b/.github/workflows/actions/setup-env/action.yml index 90a3998b..e3fa0d89 100644 --- a/.github/workflows/actions/setup-env/action.yml +++ b/.github/workflows/actions/setup-env/action.yml @@ -8,7 +8,7 @@ inputs: default: "cache" install-deps: - description: "Whether to install system dependencies. Set to false for self-hosted runners with pre-installed deps" + description: "Whether to install system dependencies via apt. Set to false to install dependencies locally without sudo." required: false default: "true" @@ -128,9 +128,9 @@ runs: shell: bash run: sudo apt-get update && sudo apt-get install -y libpq-dev libclang-dev - # Auto-install missing dependencies when install-deps is false (for self-hosted runners) + # Auto-install missing dependencies locally when install-deps is false (no sudo required) # Note: PATH and env vars are already set up in "Setup paths for cached tools" step - - name: Setup system dependencies (self-hosted) + - name: Setup system dependencies (local install) if: inputs.install-deps == 'false' shell: bash run: | @@ -226,8 +226,8 @@ runs: with: repo-token: ${{ github.token }} - # Auto-install protoc when install-deps is false (for self-hosted runners) - - name: Setup Protoc (self-hosted) + # Auto-install protoc locally when install-deps is false (no sudo required) + - name: Setup Protoc (local install) if: inputs.install-deps == 'false' shell: bash run: | diff --git a/.github/workflows/task-build-operator.yml b/.github/workflows/task-build-operator.yml index e5204b37..c796f3b6 100644 --- a/.github/workflows/task-build-operator.yml +++ b/.github/workflows/task-build-operator.yml @@ -20,8 +20,7 @@ jobs: outputs: binary-hash: ${{ steps.hash-binary.outputs.datahaven-node-hash }} name: Build operator binary - runs-on: - group: DH-runners + runs-on: ubuntu-latest env: RUSTC_WRAPPER: "sccache" CARGO_INCREMENTAL: "0" @@ -42,7 +41,6 @@ jobs: - uses: ./.github/workflows/actions/setup-env with: cache-key: BUILD-RELEASE - install-deps: false - name: Set build flags run: echo "RUSTFLAGS=${{ env.RUSTFLAGS }} -C linker=clang -C link-arg=-fuse-ld=mold" >> $GITHUB_ENV diff --git a/.github/workflows/task-build-static-operator.yaml b/.github/workflows/task-build-static-operator.yaml index 2001f75e..8c9ac8ce 100644 --- a/.github/workflows/task-build-static-operator.yaml +++ b/.github/workflows/task-build-static-operator.yaml @@ -10,8 +10,7 @@ on: jobs: build-node: name: Build operator binary - runs-on: - group: DH-runners + runs-on: ubuntu-latest env: RUSTC_WRAPPER: "sccache" CARGO_INCREMENTAL: "0" @@ -29,8 +28,6 @@ jobs: - uses: ./.github/workflows/actions/setup-env with: cache-key: BUILD-RELEASE - install-deps: false - skip-libpq: true - name: Set build flags run: echo "RUSTFLAGS=-C linker=clang -C link-arg=-fuse-ld=mold" >> $GITHUB_ENV diff --git a/.github/workflows/task-e2e.yml b/.github/workflows/task-e2e.yml index fd7a3daa..6d407f81 100644 --- a/.github/workflows/task-e2e.yml +++ b/.github/workflows/task-e2e.yml @@ -34,7 +34,7 @@ permissions: env: FOUNDRY_PROFILE: ci LOG_LEVEL: debug - DOCKER_HOST: unix:///run/user/1020/podman/podman.sock + # DOCKER_HOST: unix:///run/user/1020/podman/podman.sock # was: self-hosted podman socket KURTOSIS_CORE_IMAGE: docker.io/kurtosistech/core KURTOSIS_ENGINE_IMAGE: docker.io/kurtosistech/engine KURTOSIS_VERSION: 1.15.2 @@ -42,8 +42,9 @@ env: jobs: kurtosis: - runs-on: - group: DH-Testing + runs-on: ubuntu-latest + # was: runs-on: + # group: DH-Testing name: E2E Tests with Kurtosis Ethereum Network defaults: run: @@ -91,27 +92,26 @@ jobs: fi kurtosis analytics disable kurtosis version - - name: Configure Kurtosis cluster = podman + # was: podman cluster config for self-hosted runner + # - name: Configure Kurtosis cluster = podman + # run: | + # CFG_PATH="$(kurtosis config path)" + # mkdir -p "$(dirname "$CFG_PATH")" + # cat > "$CFG_PATH" <<'YML' + # config-version: 6 + # should-send-metrics: true + # kurtosis-clusters: + # docker: + # type: "docker" + # podman: + # type: "podman" + # YML + # kurtosis cluster set podman + # kurtosis cluster get + - name: Start Kurtosis engine run: | - # Get the config path from Kurtosis itself (portable) - CFG_PATH="$(kurtosis config path)" - mkdir -p "$(dirname "$CFG_PATH")" - # Create/update config with a podman cluster entry - cat > "$CFG_PATH" <<'YML' - config-version: 6 - should-send-metrics: true - kurtosis-clusters: - docker: - type: "docker" - podman: - type: "podman" - YML - kurtosis cluster set podman - kurtosis cluster get - - name: Start Kurtosis engine with Podman - run: | - kurtosis engine stop - kurtosis clean + kurtosis engine stop || true + kurtosis clean || true kurtosis engine start kurtosis engine status - uses: actions/cache@v4 @@ -154,4 +154,5 @@ jobs: - name: Delete volumes not used if: always() - run: podman system prune --volumes -f + run: docker system prune --volumes -f + # was: podman system prune --volumes -f diff --git a/.github/workflows/task-publish-binary.yml b/.github/workflows/task-publish-binary.yml index cfbc757a..7eb9ebfb 100644 --- a/.github/workflows/task-publish-binary.yml +++ b/.github/workflows/task-publish-binary.yml @@ -31,8 +31,7 @@ jobs: retention-days: 1 build-binary: - runs-on: - group: DH-runners + runs-on: ubuntu-latest needs: ["prepare-sources"] permissions: contents: read diff --git a/.github/workflows/task-rust-lint.yml b/.github/workflows/task-rust-lint.yml index 8cd39e05..1a6622d1 100644 --- a/.github/workflows/task-rust-lint.yml +++ b/.github/workflows/task-rust-lint.yml @@ -27,8 +27,7 @@ env: jobs: cargo-fmt: name: "Check format with rustfmt" - runs-on: - group: DH-runners + runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.WORKING_DIR }} @@ -38,15 +37,13 @@ jobs: - uses: ./.github/workflows/actions/setup-env with: cache-key: FMT - install-deps: false # Self-hosted runners have deps pre-installed - name: Run cargo fmt run: cargo fmt --all -- --check check-rust-lint: name: "Check lint with clippy" - runs-on: - group: DH-runners + runs-on: ubuntu-latest defaults: run: working-directory: ${{ env.WORKING_DIR }} @@ -56,7 +53,6 @@ jobs: - uses: ./.github/workflows/actions/setup-env with: cache-key: LINT - install-deps: false # Self-hosted runners have deps pre-installed - name: Set build flags run: echo "RUSTFLAGS=${{ env.RUSTFLAGS }} -C linker=clang -C link-arg=-fuse-ld=mold" >> $GITHUB_ENV @@ -66,8 +62,7 @@ jobs: check-cargo-sort: name: "Check Cargo sort" - runs-on: - group: DH-runners + runs-on: ubuntu-latest defaults: run: diff --git a/.github/workflows/task-rust-tests.yml b/.github/workflows/task-rust-tests.yml index 96db943d..56d78ab6 100644 --- a/.github/workflows/task-rust-tests.yml +++ b/.github/workflows/task-rust-tests.yml @@ -13,8 +13,7 @@ permissions: jobs: rust-tests: name: Run Operator Rust tests - runs-on: - group: DH-runners + runs-on: ubuntu-latest env: RUSTC_WRAPPER: "sccache" CARGO_INCREMENTAL: "0" @@ -32,7 +31,6 @@ jobs: - uses: ./.github/workflows/actions/setup-env with: cache-key: "TEST" - install-deps: false - name: Set build flags run: echo "RUSTFLAGS=${{ env.RUSTFLAGS }} -C linker=clang -C link-arg=-fuse-ld=mold" >> $GITHUB_ENV diff --git a/.github/workflows/task-warm-sccache.yml b/.github/workflows/task-warm-sccache.yml index eef54905..9c90bc85 100644 --- a/.github/workflows/task-warm-sccache.yml +++ b/.github/workflows/task-warm-sccache.yml @@ -15,8 +15,7 @@ permissions: jobs: warm-cache: name: Warm sccache cache - runs-on: - group: DH-runners + runs-on: ubuntu-latest env: RUSTC_WRAPPER: "sccache" CARGO_INCREMENTAL: "0" @@ -34,7 +33,6 @@ jobs: - uses: ./.github/workflows/actions/setup-env with: cache-key: WARM - install-deps: false - name: Set build flags run: echo "RUSTFLAGS=${{ env.RUSTFLAGS }} -C linker=clang -C link-arg=-fuse-ld=mold" >> $GITHUB_ENV diff --git a/contracts/config/anvil.json b/contracts/config/anvil.json index 4a134ced..e8c901f4 100644 --- a/contracts/config/anvil.json +++ b/contracts/config/anvil.json @@ -26,7 +26,7 @@ }, "avs": { "avsOwner": "0x976EA74026E726554dB657fA54763abd0C3a0aa9", - "rewardsInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", + "snowbridgeInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", "validatorSetSubmitter": "0x976EA74026E726554dB657fA54763abd0C3a0aa9", "validatorsStrategies": [] }, diff --git a/contracts/config/example.jsonc b/contracts/config/example.jsonc index aeef7cc4..99fc53b3 100644 --- a/contracts/config/example.jsonc +++ b/contracts/config/example.jsonc @@ -68,7 +68,7 @@ /// The address of the account that initiates the rewards calculation. /// This is for the EigenLayer rewards distribution way, using the RewardsCoordinator. /// But for now, we're not using it, and instead sending the rewards directly. - "rewardsInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", + "snowbridgeInitiator": "0x14dC79964da2C08b23698B3D3cc7Ca32193d9955", /// The EigenLayer strategy addresses for the Validators to stake into. /// The beaconChainETHStrategy is a virtual address representing native beacon chain ETH. /// All networks: diff --git a/contracts/config/mainnet-ethereum.json b/contracts/config/mainnet-ethereum.json index 28775dad..378ae274 100644 --- a/contracts/config/mainnet-ethereum.json +++ b/contracts/config/mainnet-ethereum.json @@ -30,7 +30,7 @@ }, "avs": { "avsOwner": "0x0000000000000000000000000000000000000000", - "rewardsInitiator": "0x0000000000000000000000000000000000000000", + "snowbridgeInitiator": "0x0000000000000000000000000000000000000000", "validatorsStrategies": [ "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", "0x93c4b944D05dfe6df7645A86cd2206016c51564D", diff --git a/contracts/config/stagenet-hoodi.json b/contracts/config/stagenet-hoodi.json index 40d80dbc..d71ce581 100644 --- a/contracts/config/stagenet-hoodi.json +++ b/contracts/config/stagenet-hoodi.json @@ -32,7 +32,7 @@ }, "avs": { "avsOwner": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e", - "rewardsInitiator": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e", + "snowbridgeInitiator": "0xe30a38ac89ffE5A86D5389Bfbf70C7EC766FbB6e", "validatorsStrategies": [ "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", "0xf8a1a66130d614c7360e868576d5e59203475fe0", diff --git a/contracts/config/testnet-hoodi.json b/contracts/config/testnet-hoodi.json index 3396b7b4..cf37569c 100644 --- a/contracts/config/testnet-hoodi.json +++ b/contracts/config/testnet-hoodi.json @@ -32,7 +32,7 @@ }, "avs": { "avsOwner": "0x0000000000000000000000000000000000000000", - "rewardsInitiator": "0x0000000000000000000000000000000000000000", + "snowbridgeInitiator": "0x0000000000000000000000000000000000000000", "validatorsStrategies": [ "0xbeaC0eeEeeeeEEeEeEEEEeeEEeEeeeEeeEEBEaC0", "0xf8a1a66130d614c7360e868576d5e59203475fe0", diff --git a/contracts/deployments/anvil.json b/contracts/deployments/anvil.json index d73d6b8f..e2c535ad 100644 --- a/contracts/deployments/anvil.json +++ b/contracts/deployments/anvil.json @@ -1,27 +1 @@ -{ - "network": "anvil", - "BeefyClient": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "AgentExecutor": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "Gateway": "0x9d4454B023096f34B160D6B654540c56A1F81688", - "ServiceManager": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", - "ServiceManagerImplementation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "ProxyAdmin": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7", - "DelegationManager": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", - "StrategyManager": "0x9A676e781A523b5d0C0e43731313A708CB607508", - "AVSDirectory": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", - "EigenPodManager": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "EigenPodBeacon": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "RewardsCoordinator": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", - "AllocationManager": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "PermissionController": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "ETHPOSDeposit": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141", - "BaseStrategyImplementation": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "DeployedStrategies": [ - { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "underlyingToken": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "tokenCreator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8" - } - ] -} +{"network": "anvil","BeefyClient": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf","AgentExecutor": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF","Gateway": "0x9d4454B023096f34B160D6B654540c56A1F81688","ServiceManager": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D","ServiceManagerImplementation": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570","ProxyAdmin": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788","RewardsAgent": "0xac06641381166cf085281c45292147f833C622d7","DelegationManager": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82","StrategyManager": "0x9A676e781A523b5d0C0e43731313A708CB607508","AVSDirectory": "0x0B306BF915C4d645ff596e518fAf3F9669b97016","EigenPodManager": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1","EigenPodBeacon": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1","RewardsCoordinator": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE","AllocationManager": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed","PermissionController": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c","ETHPOSDeposit": "0xC7f2Cf4845C6db0e1a1e91ED41Bcd0FcC1b0E141","BaseStrategyImplementation": "0xf5059a5D33d5853360D16C683c16e67980206f36","DeployedStrategies": [{"address": "0x998abeb3E57409262aE5b751f60747921B33613E","underlyingToken": "0x95401dc811bb5740090279Ba06cfA8fcF6113778","tokenCreator": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8"}]} \ No newline at end of file diff --git a/contracts/deployments/state-diff.checksum b/contracts/deployments/state-diff.checksum index 9c94bf73..777a048b 100644 --- a/contracts/deployments/state-diff.checksum +++ b/contracts/deployments/state-diff.checksum @@ -1 +1 @@ -a516a36564321527f303743cd049ff7007f5cf34 \ No newline at end of file +107e07a8e4ac06299cc380520c6e811bd70c5661 \ No newline at end of file diff --git a/contracts/deployments/state-diff.json b/contracts/deployments/state-diff.json index 7cab062d..8742fa08 100644 --- a/contracts/deployments/state-diff.json +++ b/contracts/deployments/state-diff.json @@ -1,109 +1,29 @@ { - "0": { - "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", + "8": { + "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", + "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220590055fea5441ad6e827390b16005643886d2dc4ffe2b97b43ed3ab207076ab664736f6c634300081c003300", "storage": {} }, - "32": { - "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" - } - }, - "41": { - "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", - "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220993e175405432033ed7aea33210be529d0ba9c2edc6085e7b95533cc13f90a0064736f6c634300081c003300", - "storage": {} - }, - "18": { - "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", - "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea26469706673582212204cd82bcd16986fe6b441e4b7c389c7f12dd596c825079086d78383b1e3d02f8364736f6c634300081c003300", + "19": { + "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", + "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea264697066735822122073ac1b7fd03357e63bd1ea96fdd2a71a85f098cadb19e9ccc9fc7028bc1c9a9664736f6c634300081c00330000", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "16": { - "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", - "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220d1857c1d79adf09a4456300c200565d4db0d5bcc151c34d3d6a7ed403fb9defd64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9" - } - }, - "31": { - "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", + "28": { + "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", "storage": { - "0x000000000000000000000000000000000000000000000000000000000000006a": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", - "0xf028937c64180bb2d245c1eb4b6ebc3d79a092cccfbb2b854f9d7b4da63470b6": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", - "0x000000000000000000000000000000000000000000000000000000000000006c": "0x302e312e3000000000000000000000000000000000000000000000000000000a" + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933" } }, - "24": { - "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", - "code": "0x6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c181565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f76312e302e300000000000000000000000000000000000000000000000000006611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd82909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe49c3bbb4c8ae3857e9da2c037ca93049f5f5931a49706e5b29c897d23875e264736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "13": { - "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", - "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea2646970667358221220202aa32fed9b1043addbc14e73c73106e521b4a0cbd4090b88a279664688a3ca64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "23": { - "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", - "code": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101a7578063a457c2d7146101af578063a9059cbb146101c2578063dd62ed3e146101d5575f5ffd5b806342966c681461015757806370a082311461016c57806379cc679014610194575f5ffd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce567146101355780633950935114610144575b5f5ffd5b6100d76101e8565b6040516100e49190610826565b60405180910390f35b6101006100fb366004610876565b610278565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b61010061013036600461089e565b610291565b604051601281526020016100e4565b610100610152366004610876565b6102b4565b61016a6101653660046108d8565b6102d5565b005b61011461017a3660046108ef565b6001600160a01b03165f9081526020819052604090205490565b61016a6101a2366004610876565b6102e2565b6100d76102fb565b6101006101bd366004610876565b61030a565b6101006101d0366004610876565b610389565b6101146101e336600461090f565b610396565b6060600380546101f790610940565b80601f016020809104026020016040519081016040528092919081815260200182805461022390610940565b801561026e5780601f106102455761010080835404028352916020019161026e565b820191905f5260205f20905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b5f336102858185856103c0565b60019150505b92915050565b5f3361029e8582856104e4565b6102a985858561055c565b506001949350505050565b5f336102858185856102c68383610396565b6102d09190610978565b6103c0565b6102df33826106fe565b50565b6102ed8233836104e4565b6102f782826106fe565b5050565b6060600480546101f790610940565b5f33816103178286610396565b90508381101561037c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102a982868684036103c0565b5f3361028581858561055c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6001600160a01b0382166104835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610373565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6104ef8484610396565b90505f19811461055657818110156105495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610373565b61055684848484036103c0565b50505050565b6001600160a01b0383166105c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610373565b6001600160a01b0382166106225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610373565b6001600160a01b0383165f90815260208190526040902054818110156106995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610373565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610556565b6001600160a01b03821661075e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610373565b6001600160a01b0382165f90815260208190526040902054818110156107d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610373565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016104d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610871575f5ffd5b919050565b5f5f60408385031215610887575f5ffd5b6108908361085b565b946020939093013593505050565b5f5f5f606084860312156108b0575f5ffd5b6108b98461085b565b92506108c76020850161085b565b929592945050506040919091013590565b5f602082840312156108e8575f5ffd5b5035919050565b5f602082840312156108ff575f5ffd5b6109088261085b565b9392505050565b5f5f60408385031215610920575f5ffd5b6109298361085b565b91506109376020840161085b565b90509250929050565b600181811c9082168061095457607f821691505b60208210810361097257634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561028b57634e487b7160e01b5f52601160045260245ffdfea26469706673582212200294a24180b18f81e47bb4c278ebbaa0cad18043e20afac6f0159b7940a7867a64736f6c634300081c003300", - "storage": { - "0xd19bcde47e0ffe1c643525c3cff070e266ec404a07f499b41fcbc480ff16fff7": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5445535400000000000000000000000000000000000000000000000000000008", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x54657374546f6b656e0000000000000000000000000000000000000000000012", - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000069e10de76676d0800000" - } - }, - "34": { - "address": "0x9A676e781A523b5d0C0e43731313A708CB607508", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0xedc9a600799bdec0e14ee5042ef794e1b4738abf52d225059d6b470373867218": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000a85233c63b9ee964add6f2cffe00fd84eb32338f", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "37": { - "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, "9": { "address": "0x5FC8d32690cc91D4c39d9d3abcBD16989F875707", "code": "0x735fc8d32690cc91d4c39d9d3abcbd16989f875707301460806040526004361061006b575f3560e01c8063017b73111461006f578063253946451461009057806365529675146100af5780638257f3d5146100ce578063ae8a4d98146100ed578063fe1aa59d1461010c575b5f5ffd5b81801561007a575f5ffd5b5061008e61008936600461080c565b61012b565b005b81801561009b575f5ffd5b5061008e6100aa36600461080c565b610155565b8180156100ba575f5ffd5b5061008e6100c9366004610860565b6101db565b8180156100d9575f5ffd5b5061008e6100e836600461080c565b610267565b8180156100f8575f5ffd5b5061008e61010736600461080c565b6102f8565b818015610117575f5ffd5b5061008e6101263660046108ae565b610328565b5f610138828401846109a7565b9050610150815f0151826020015183604001516103a5565b505050565b5f61016282840184610a68565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c73936101aa9390929091600401610b1b565b5f6040518083038186803b1580156101c0575f5ffd5b505af41580156101d2573d5f5f3e3d5ffd5b50505050505050565b5f6101e882840184610b4a565b90505f6102147f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79610414565b82519091506001600160a01b0316610248576102438582846020015185604001516001600160801b031661046c565b610260565b6102608582845f0151856020015186604001516104c9565b5050505050565b5f61027482840184610b7b565b80517e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab805492935091829060ff1916600183818111156102b5576102b5610bc9565b021790555081516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916102ea91610bdd565b60405180910390a150505050565b5f61030582840184610c03565b9050610322815f015182602001518360400151846060015161052e565b50505050565b5f61033582840184610cbd565b90505f61034186610414565b90505f825f01518360200151846040015160405160240161036493929190610d45565b60408051601f198184030181529190526020810180516001600160e01b031663c6b295c160e01b179052905061039b828783610679565b5050505050505050565b5f6103af84610705565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610402575f5ffd5b505af115801561039b573d5f5f3e3d5ffd5b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806104675760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506104c1848683610679565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506101d2858783610679565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156105a457604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516105b4906107bb565b6105c093929190610d78565b604051809103905ff0801580156105d9573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016106ab929190610db0565b5f604051808303815f875af11580156106c6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106ed9190810190610ddb565b915091506106fb8282610796565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b031661077a5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156107a55750806107b5565b81511561006b5781518083602001fd5b92915050565b610c3580610e6883390190565b5f5f83601f8401126107d8575f5ffd5b5081356001600160401b038111156107ee575f5ffd5b602083019150836020828501011115610805575f5ffd5b9250929050565b5f5f6020838503121561081d575f5ffd5b82356001600160401b03811115610832575f5ffd5b61083e858286016107c8565b90969095509350505050565b80356001600160a01b0381168114610467575f5ffd5b5f5f5f60408486031215610872575f5ffd5b61087b8461084a565b925060208401356001600160401b03811115610895575f5ffd5b6108a1868287016107c8565b9497909650939450505050565b5f5f5f5f606085870312156108c1575f5ffd5b843593506108d16020860161084a565b925060408501356001600160401b038111156108eb575f5ffd5b6108f7878288016107c8565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561093957610939610903565b60405290565b604051608081016001600160401b038111828210171561093957610939610903565b604051601f8201601f191681016001600160401b038111828210171561098957610989610903565b604052919050565b80356001600160801b0381168114610467575f5ffd5b5f60608284031280156109b8575f5ffd5b506109c1610917565b823581526109d16020840161084a565b60208201526109e260408401610991565b60408201529392505050565b5f6001600160401b03821115610a0657610a06610903565b50601f01601f191660200190565b5f82601f830112610a23575f5ffd5b8135602083015f610a3b610a36846109ee565b610961565b9050828152858383011115610a4e575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610a78575f5ffd5b81356001600160401b03811115610a8d575f5ffd5b820160608185031215610a9e575f5ffd5b610aa6610917565b610aaf8261084a565b81526020828101359082015260408201356001600160401b03811115610ad3575f5ffd5b610adf86828501610a14565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610b416060830184610aed565b95945050505050565b5f6060828403128015610b5b575f5ffd5b50610b64610917565b610b6d8361084a565b81526109d16020840161084a565b5f6020828403128015610b8c575f5ffd5b50604051602081016001600160401b0381118282101715610baf57610baf610903565b604052823560028110610bc0575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610bfd57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610c13575f5ffd5b81356001600160401b03811115610c28575f5ffd5b820160808185031215610c39575f5ffd5b610c4161093f565b8135815260208201356001600160401b03811115610c5d575f5ffd5b610c6986828501610a14565b60208301525060408201356001600160401b03811115610c87575f5ffd5b610c9386828501610a14565b6040830152506060820135915060ff82168214610cae575f5ffd5b60608101919091529392505050565b5f60208284031215610ccd575f5ffd5b81356001600160401b03811115610ce2575f5ffd5b820160608185031215610cf3575f5ffd5b610cfb610917565b610d048261084a565b815260208201356001600160401b03811115610d1e575f5ffd5b610d2a86828501610a14565b60208301525060408201356040820152809250505092915050565b6001600160a01b03841681526060602082018190525f90610d6890830185610aed565b9050826040830152949350505050565b606081525f610d8a6060830186610aed565b8281036020840152610d9c8186610aed565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f90610dd390830184610aed565b949350505050565b5f5f60408385031215610dec575f5ffd5b82518015158114610dfb575f5ffd5b60208401519092506001600160401b03811115610e16575f5ffd5b8301601f81018513610e26575f5ffd5b8051610e34610a36826109ee565b818152866020838501011115610e48575f5ffd5b8160208401602083015e5f60208383010152809350505050925092905056fe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220bf51267d76cff7222c17d610dde7751957cfe3a183e053d0666ff0994eb90d2f64736f6c634300081c0033000000000000000000", "storage": {} }, - "17": { - "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", - "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea2646970667358221220046dc7d429ea210c611797c7b4d01fa9b6906f8c2a4299f763335c848dfa743864736f6c634300081c003300000000000000", - "storage": {} - }, - "8": { - "address": "0x0E801D84Fa97b50751Dbf25036d067dCf18858bF", - "code": "0x60806040526004361061003e575f3560e01c806305b1137b1461004257806325ccedec14610063578063c6b295c114610082578063d0e30db014610061575b5f5ffd5b34801561004d575f5ffd5b5061006161005c36600461025e565b6100a1565b005b34801561006e575f5ffd5b5061006161007d366004610288565b6100b8565b34801561008d575f5ffd5b5061006161009c3660046102ef565b6100da565b6100b46001600160a01b038316826100f7565b5050565b6100d56001600160a01b038416836001600160801b038416610120565b505050565b5f6100e6848484610171565b9050806100f1575f5ffd5b50505050565b5f5f5f5f5f85875af19050806100d557604051633d2cec6f60e21b815260040160405180910390fd5b6040516001600160a01b0383166024820152604481018290526100d590849060640160408051601f198184030181529190526020810180516001600160e01b031663a9059cbb60e01b179052610188565b5f5f5f5f85516020870186895af195945050505050565b5f5f836001600160a01b0316836040516101a291906103be565b5f604051808303815f865af19150503d805f81146101db576040519150601f19603f3d011682016040523d82523d5f602084013e6101e0565b606091505b50915091505f82801561020b57508151158061020b57508180602001905181019061020b91906103d4565b905080158061022257506001600160a01b0385163b155b156102405760405163022e258160e11b815260040160405180910390fd5b5050505050565b6001600160a01b038116811461025b575f5ffd5b50565b5f5f6040838503121561026f575f5ffd5b823561027a81610247565b946020939093013593505050565b5f5f5f6060848603121561029a575f5ffd5b83356102a581610247565b925060208401356102b581610247565b915060408401356001600160801b03811681146102d0575f5ffd5b809150509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610301575f5ffd5b833561030c81610247565b9250602084013567ffffffffffffffff811115610327575f5ffd5b8401601f81018613610337575f5ffd5b803567ffffffffffffffff811115610351576103516102db565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610380576103806102db565b604052818152828201602001881015610397575f5ffd5b816020840160208301375f9181016020019190915293969395505050506040919091013590565b5f82518060208501845e5f920191825250919050565b5f602082840312156103e4575f5ffd5b815180151581146103f3575f5ffd5b939250505056fea2646970667358221220590055fea5441ad6e827390b16005643886d2dc4ffe2b97b43ed3ab207076ab664736f6c634300081c003300", - "storage": {} - }, "43": { "address": "0xc6e7DF5E7b4f2A278906862b61205850344D4e7d", "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c80637a8b2637116100bf578063ce7c2ac211610079578063ce7c2ac2146102d7578063d9caed12146102ea578063e3dae51c146102fd578063f3e7387514610310578063fabc1cbc14610323578063fdc371ce14610336575f5ffd5b80637a8b26371461025c578063886f11951461026f5780638c871019146102965780638f6a6240146102a9578063ab5921e1146102bc578063c4d66de8146102c4575f5ffd5b8063485cc95511610110578063485cc955146101e257806354fd4d50146101f5578063553ca5f81461020a578063595c6a671461021d5780635ac86ab7146102255780635c975abb14610254575f5ffd5b8063136439dd1461014c5780632495a5991461016157806339b70e38146101915780633a98ef39146101b857806347e7ef24146101cf575b5f5ffd5b61015f61015a3660046111cb565b610349565b005b603254610174906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101747f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6101c160335481565b604051908152602001610188565b6101c16101dd3660046111f6565b610383565b61015f6101f0366004611220565b6104b2565b6101fd61059d565b6040516101889190611257565b6101c161021836600461128c565b6105cd565b61015f6105e0565b6102446102333660046112bc565b6001805460ff9092161b9081161490565b6040519015158152602001610188565b6001546101c1565b6101c161026a3660046111cb565b6105f4565b6101747f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6101c16102a43660046111cb565b61063d565b6101c16102b736600461128c565b610647565b6101fd610654565b61015f6102d236600461128c565b610674565b6101c16102e536600461128c565b61073a565b6101c16102f83660046112d7565b6107cc565b6101c161030b3660046111cb565b6108ce565b6101c161031e3660046111cb565b610905565b61015f6103313660046111cb565b61090f565b606454610174906001600160a01b031681565b61035161097c565b60015481811681146103765760405163c61dca5d60e01b815260040160405180910390fd5b61037f82610a1f565b5050565b5f5f61038e81610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816146103d7576040516348da714f60e01b815260040160405180910390fd5b6103e18484610a92565b6033545f6103f16103e883611329565b90505f6103e86103ff610b4b565b6104099190611329565b90505f610416878361133c565b905080610423848961134f565b61042d9190611366565b9550855f0361044f57604051630c392ed360e11b815260040160405180910390fd5b6104598685611329565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561048e57604051632f14e8a360e11b815260040160405180910390fd5b6104a7826103e86033546104a29190611329565b610bb5565b505050505092915050565b5f54610100900460ff16158080156104d057505f54600160ff909116105b806104e95750303b1580156104e957505f5460ff166001145b61050e5760405162461bcd60e51b815260040161050590611385565b60405180910390fd5b5f805460ff19166001179055801561052f575f805461ff0019166101001790555b606480546001600160a01b0319166001600160a01b03851617905561055382610c01565b8015610598575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60606105c87f76312e302e300000000000000000000000000000000000000000000000000006610d4c565b905090565b5f6105da61026a8361073a565b92915050565b6105e861097c565b6105f25f19610a1f565b565b5f5f6103e86033546106069190611329565b90505f6103e8610614610b4b565b61061e9190611329565b90508161062b858361134f565b6106359190611366565b949350505050565b5f6105da826108ce565b5f6105da61031e8361073a565b60606040518060800160405280604d8152602001611456604d9139905090565b5f54610100900460ff161580801561069257505f54600160ff909116105b806106ab5750303b1580156106ab57505f5460ff166001145b6106c75760405162461bcd60e51b815260040161050590611385565b5f805460ff1916600117905580156106e8575f805461ff0019166101001790555b6106f182610c01565b801561037f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa1580156107a8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105da91906113d3565b5f60016107d881610a5c565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610821576040516348da714f60e01b815260040160405180910390fd5b61082c858585610d89565b6033548084111561085057604051630b469df360e41b815260040160405180910390fd5b5f61085d6103e883611329565b90505f6103e861086b610b4b565b6108759190611329565b905081610882878361134f565b61088c9190611366565b9450610898868461133c565b6033556108b86108a8868361133c565b6103e86033546104a29190611329565b6108c3888887610dcf565b505050509392505050565b5f5f6103e86033546108e09190611329565b90505f6103e86108ee610b4b565b6108f89190611329565b90508061062b838661134f565b5f6105da826105f4565b610917610ec8565b6001548019821981161461093e5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156109de573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a0291906113ea565b6105f257604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610a71816001805460ff9092161b9081161490565b15610a8f5760405163840a48d560e01b815260040160405180910390fd5b50565b6032546001600160a01b0383811691161480610abb57506064546001600160a01b038381169116145b610ad857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b039081169083160361037f57606454604051636f074d1f60e11b8152600481018390526001600160a01b039091169063de0e9a3e906024015f604051808303815f87803b158015610b31575f5ffd5b505af1158015610b43573d5f5f3e3d5ffd5b505050505050565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610b91573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105c891906113d3565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610be984670de0b6b3a764000061134f565b610bf39190611366565b60405190815260200161072e565b5f54610100900460ff16610c6b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610505565b603280546001600160a01b0319166001600160a01b038316179055610c8f5f610a1f565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d01573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d259190611409565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b60605f610d5883610f79565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6032546001600160a01b0383811691161480610db257506064546001600160a01b038381169116145b61059857604051630312abdd60e61b815260040160405180910390fd5b6064546001600160a01b0390811690831603610eb45760325460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015610e35573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e5991906113ea565b50606454604051630ea598cb60e41b8152600481018390526001600160a01b039091169063ea598cb0906024015f604051808303815f87803b158015610e9d575f5ffd5b505af1158015610eaf573d5f5f3e3d5ffd5b505050505b6105986001600160a01b0383168483610fa0565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f24573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f489190611424565b6001600160a01b0316336001600160a01b0316146105f25760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f8111156105da57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610598928692915f9161102f9185169084906110ae565b905080515f148061104f57508080602001905181019061104f91906113ea565b6105985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610505565b606061063584845f85855f5f866001600160a01b031685876040516110d3919061143f565b5f6040518083038185875af1925050503d805f811461110d576040519150601f19603f3d011682016040523d82523d5f602084013e611112565b606091505b50915091506111238783838761112e565b979650505050505050565b6060831561119c5782515f03611195576001600160a01b0385163b6111955760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610505565b5081610635565b61063583838151156111b15781518083602001fd5b8060405162461bcd60e51b81526004016105059190611257565b5f602082840312156111db575f5ffd5b5035919050565b6001600160a01b0381168114610a8f575f5ffd5b5f5f60408385031215611207575f5ffd5b8235611212816111e2565b946020939093013593505050565b5f5f60408385031215611231575f5ffd5b823561123c816111e2565b9150602083013561124c816111e2565b809150509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561129c575f5ffd5b81356112a7816111e2565b9392505050565b60ff81168114610a8f575f5ffd5b5f602082840312156112cc575f5ffd5b81356112a7816112ae565b5f5f5f606084860312156112e9575f5ffd5b83356112f4816111e2565b92506020840135611304816111e2565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b808201808211156105da576105da611315565b818103818111156105da576105da611315565b80820281158282048414176105da576105da611315565b5f8261138057634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e3575f5ffd5b5051919050565b5f602082840312156113fa575f5ffd5b815180151581146112a7575f5ffd5b5f60208284031215611419575f5ffd5b81516112a7816112ae565b5f60208284031215611434575f5ffd5b81516112a7816111e2565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a26469706673582212201363f1045faa90db6b9cd5e104a6adf153d8d9848b22c7129cad8df16e32d4e364736f6c634300081c00330000", @@ -111,110 +31,31 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "1": { - "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", - "code": "0x732279b7a0a67db372996a5fab50d91eaa73d2ebe63014608060405260043610610034575f3560e01c8063a3499c7314610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610230565b610059565b005b61006b836001600160a01b03166101b3565b610088576040516303777f6960e51b815260040160405180910390fd5b81836001600160a01b03163f146100b2576040516323e13ec960e21b815260040160405180910390fd5b6100da837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b5f5f846001600160a01b0316836040516024016100f79190610309565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161012c919061033e565b5f60405180830381855af49150503d805f8114610164576040519150601f19603f3d011682016040523d82523d5f602084013e610169565b606091505b509150915061017882826101fd565b506040516001600160a01b038616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050505050565b5f6001600160a01b0382163f158015906101f757507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383163f14155b92915050565b6060821561020c5750806101f7565b8151156100345781518083602001fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610242575f5ffd5b83356001600160a01b0381168114610258575f5ffd5b925060208401359150604084013567ffffffffffffffff81111561027a575f5ffd5b8401601f8101861361028a575f5ffd5b803567ffffffffffffffff8111156102a4576102a461021c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156102d3576102d361021c565b6040528181528282016020018810156102ea575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f82518060208501845e5f92019182525091905056fea26469706673582212204f9eff25a489952d6ace57dae13f4311e26f51d13db35754950e1446aa6c4c3264736f6c634300081c003300", + "15": { + "address": "0x610178dA211FEF7D417bC0e6FeD39F05609AD788", + "code": "0x608060405260043610610079575f3560e01c80639623609d1161004c5780639623609d1461010957806399a88ec41461011c578063f2fde38b1461013b578063f3b7dead1461015a575f5ffd5b8063204e1c7a1461007d578063715018a6146100b85780637eff275e146100ce5780638da5cb5b146100ed575b5f5ffd5b348015610088575f5ffd5b5061009c610097366004610479565b610179565b6040516001600160a01b03909116815260200160405180910390f35b3480156100c3575f5ffd5b506100cc610204565b005b3480156100d9575f5ffd5b506100cc6100e836600461049b565b610217565b3480156100f8575f5ffd5b505f546001600160a01b031661009c565b6100cc6101173660046104e6565b61027a565b348015610127575f5ffd5b506100cc61013636600461049b565b6102e5565b348015610146575f5ffd5b506100cc610155366004610479565b61031b565b348015610165575f5ffd5b5061009c610174366004610479565b610399565b5f5f5f836001600160a01b031660405161019d90635c60da1b60e01b815260040190565b5f60405180830381855afa9150503d805f81146101d5576040519150601f19603f3d011682016040523d82523d5f602084013e6101da565b606091505b5091509150816101e8575f5ffd5b808060200190518101906101fc91906105bd565b949350505050565b61020c6103bd565b6102155f610416565b565b61021f6103bd565b6040516308f2839760e41b81526001600160a01b038281166004830152831690638f283970906024015b5f604051808303815f87803b158015610260575f5ffd5b505af1158015610272573d5f5f3e3d5ffd5b505050505050565b6102826103bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906102b290869086906004016105d8565b5f604051808303818588803b1580156102c9575f5ffd5b505af11580156102db573d5f5f3e3d5ffd5b5050505050505050565b6102ed6103bd565b604051631b2ce7f360e11b81526001600160a01b038281166004830152831690633659cfe690602401610249565b6103236103bd565b6001600160a01b03811661038d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61039681610416565b50565b5f5f5f836001600160a01b031660405161019d906303e1469160e61b815260040190565b5f546001600160a01b031633146102155760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610384565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381168114610396575f5ffd5b5f60208284031215610489575f5ffd5b813561049481610465565b9392505050565b5f5f604083850312156104ac575f5ffd5b82356104b781610465565b915060208301356104c781610465565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156104f8575f5ffd5b833561050381610465565b9250602084013561051381610465565b9150604084013567ffffffffffffffff81111561052e575f5ffd5b8401601f8101861361053e575f5ffd5b803567ffffffffffffffff811115610558576105586104d2565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610587576105876104d2565b60405281815282820160200188101561059e575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b5f602082840312156105cd575f5ffd5b815161049481610465565b60018060a01b0383168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f830116840101915050939250505056fea2646970667358221220d1857c1d79adf09a4456300c200565d4db0d5bcc151c34d3d6a7ed403fb9defd64736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9" + } + }, + "6": { + "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", + "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a264697066735822122048797f739f4990ae363e6737b404ae972b4684803172bd809c64956b6bae7dc264736f6c634300081c003300000000000000", "storage": {} }, - "20": { - "address": "0x4A679253410272dd5232B3Ff7cF5dbB88f295319", - "code": "0x608060405234801561000f575f5ffd5b5060043610610148575f3560e01c8063a1060c88116100bf578063dce974b911610079578063dce974b914610334578063df5cf7231461035b578063ec76f44214610382578063f2fde38b146103b5578063f698da25146103c8578063fabc1cbc146103d0575f5ffd5b8063a1060c881461029a578063a364f4da146102ad578063a98fb355146102c0578063c825fe68146102d3578063cd6dc687146102fa578063d79aceab1461030d575f5ffd5b80635ac86ab7116101105780635ac86ab7146101fa5780635c975abb1461021d578063715018a61461022f578063886f1195146102375780638da5cb5b146102765780639926ee7d14610287575f5ffd5b8063136439dd1461014c578063374823b51461016157806349075da3146101a357806354fd4d50146101dd578063595c6a67146101f2575b5f5ffd5b61015f61015a3660046110dc565b6103e3565b005b61018e61016f366004611107565b609960209081525f928352604080842090915290825290205460ff1681565b60405190151581526020015b60405180910390f35b6101d06101b1366004611131565b609860209081525f928352604080842090915290825290205460ff1681565b60405161019a919061117c565b6101e561041d565b60405161019a91906111d0565b61015f61044d565b61018e6102083660046111e9565b606654600160ff9092169190911b9081161490565b6066545b60405190815260200161019a565b61015f610461565b61025e7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b03909116815260200161019a565b6033546001600160a01b031661025e565b61015f610295366004611277565b610472565b6102216102a8366004611364565b610673565b61015f6102bb3660046113a7565b6106f2565b61015f6102ce3660046113c2565b6107b9565b6102217f809c5ac049c45b7a7f050a20f00c16cf63797efbf8b1eb8d749fdfa39ff8f92981565b61015f610308366004611107565b610800565b6102217fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd81565b6102217f4ee65f64218c67b68da66fd0db16560040a6b973290b9e71912d661ee53fe49581565b61025e7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b61015f6103903660046110dc565b335f90815260996020908152604080832093835292905220805460ff19166001179055565b61015f6103c33660046113a7565b61091c565b610221610995565b61015f6103de3660046110dc565b610a4e565b6103eb610ab4565b60665481811681146104105760405163c61dca5d60e01b815260040160405180910390fd5b61041982610b57565b5050565b60606104487f76312e302e300000000000000000000000000000000000000000000000000006610b94565b905090565b610455610ab4565b61045f5f19610b57565b565b610469610bd1565b61045f5f610c2b565b5f61047c81610c7c565b6001335f9081526098602090815260408083206001600160a01b038816845290915290205460ff1660018111156104b5576104b5611168565b036104d357604051631aa528bb60e11b815260040160405180910390fd5b6001600160a01b0383165f90815260996020908152604080832085830151845290915290205460ff161561051a57604051630d4c4c9160e21b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561057e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105a29190611430565b6105bf57604051639f88c8af60e01b815260040160405180910390fd5b6105e3836105d7853386602001518760400151610673565b84516040860151610ca7565b6001600160a01b0383165f81815260996020908152604080832086830151845282528083208054600160ff19918216811790925533808652609885528386208787529094529382902080549094168117909355519092917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b4191610666919061117c565b60405180910390a3505050565b604080517fda2c89bafdd34776a2b8bb9c83c82f419e20cc8c67207f70edd58249b92661bd60208201526001600160a01b038087169282019290925290841660608201526080810183905260a081018290525f906106e99060c00160405160208183030381529060405280519060200120610cff565b95945050505050565b5f6106fc81610c7c565b6001335f9081526098602090815260408083206001600160a01b038716845290915290205460ff16600181111561073557610735611168565b14610753576040516352df45c960e01b815260040160405180910390fd5b335f8181526098602090815260408083206001600160a01b0387168085529252808320805460ff191690555190917ff0952b1c65271d819d39983d2abb044b9cace59bcc4d4dd389f586ebdcb15b41916107ad919061117c565b60405180910390a35050565b336001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371383836040516107f492919061144f565b60405180910390a25050565b5f54610100900460ff161580801561081e57505f54600160ff909116105b806108375750303b15801561083757505f5460ff166001145b61089f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff1916600117905580156108c0575f805461ff0019166101001790555b6108c982610b57565b6108d283610c2b565b8015610917575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610924610bd1565b6001600160a01b0381166109895760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610896565b61099281610c2b565b50565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea610a02610d45565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610a56610dba565b60665480198219811614610a7d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020016107f4565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610b16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b3a9190611430565b61045f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b60605f610ba083610e6b565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b0316331461045f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610896565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b606654600160ff83161b908116036109925760405163840a48d560e01b815260040160405180910390fd5b42811015610cc857604051630819bdcd60e01b815260040160405180910390fd5b610cdc6001600160a01b0385168484610e98565b610cf957604051638baa579f60e01b815260040160405180910390fd5b50505050565b5f610d08610995565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f610d717f76312e302e300000000000000000000000000000000000000000000000000006610b94565b9050805f81518110610d8557610d8561147d565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e16573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611491565b6001600160a01b0316336001600160a01b03161461045f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f811115610e9257604051632cd44ac360e21b815260040160405180910390fd5b92915050565b5f5f5f610ea58585610ef6565b90925090505f816004811115610ebd57610ebd611168565b148015610edb5750856001600160a01b0316826001600160a01b0316145b80610eec5750610eec868686610f38565b9695505050505050565b5f5f8251604103610f2a576020830151604084015160608501515f1a610f1e8782858561101f565b94509450505050610f31565b505f905060025b9250929050565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401610f609291906114ac565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051610f9e91906114cc565b5f60405180830381855afa9150503d805f8114610fd6576040519150601f19603f3d011682016040523d82523d5f602084013e610fdb565b606091505b5091509150818015610fef57506020815110155b8015610eec57508051630b135d3f60e11b9061101490830160209081019084016114e2565b149695505050505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561105457505f905060036110d3565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156110a5573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166110cd575f600192509250506110d3565b91505f90505b94509492505050565b5f602082840312156110ec575f5ffd5b5035919050565b6001600160a01b0381168114610992575f5ffd5b5f5f60408385031215611118575f5ffd5b8235611123816110f3565b946020939093013593505050565b5f5f60408385031215611142575f5ffd5b823561114d816110f3565b9150602083013561115d816110f3565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061119c57634e487b7160e01b5f52602160045260245ffd5b91905290565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6111e260208301846111a2565b9392505050565b5f602082840312156111f9575f5ffd5b813560ff811681146111e2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b6040516060810167ffffffffffffffff8111828210171561124057611240611209565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561126f5761126f611209565b604052919050565b5f5f60408385031215611288575f5ffd5b8235611293816110f3565b9150602083013567ffffffffffffffff8111156112ae575f5ffd5b8301606081860312156112bf575f5ffd5b6112c761121d565b813567ffffffffffffffff8111156112dd575f5ffd5b8201601f810187136112ed575f5ffd5b803567ffffffffffffffff81111561130757611307611209565b61131a601f8201601f1916602001611246565b81815288602083850101111561132e575f5ffd5b816020840160208301375f6020928201830152835283810135908301525060409182013591810191909152919491935090915050565b5f5f5f5f60808587031215611377575f5ffd5b8435611382816110f3565b93506020850135611392816110f3565b93969395505050506040820135916060013590565b5f602082840312156113b7575f5ffd5b81356111e2816110f3565b5f5f602083850312156113d3575f5ffd5b823567ffffffffffffffff8111156113e9575f5ffd5b8301601f810185136113f9575f5ffd5b803567ffffffffffffffff81111561140f575f5ffd5b856020828401011115611420575f5ffd5b6020919091019590945092505050565b5f60208284031215611440575f5ffd5b815180151581146111e2575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156114a1575f5ffd5b81516111e2816110f3565b828152604060208201525f6114c460408301846111a2565b949350505050565b5f82518060208501845e5f920191825250919050565b5f602082840312156114f2575f5ffd5b505191905056fea264697066735822122073ac1b7fd03357e63bd1ea96fdd2a71a85f098cadb19e9ccc9fc7028bc1c9a9664736f6c634300081c00330000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "19": { - "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", - "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa2646970667358221220bb783e6f87d678903cb96088c2c12d2cac558d531f4f913f330f95e9f12638ce64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", - "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402" - } - }, - "27": { - "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", + "30": { + "address": "0x809d550fca64d94Bd9F66E60752A544199cfAC3D", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65" - } - }, - "38": { - "address": "0xac06641381166cf085281c45292147f833C622d7", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, - "29": { - "address": "0x3Aa5ebB10DC797CAC828524e59A333d0A371443c", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000067d269191c92caf3cd7723f116c85e6e9bf55933", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "4": { - "address": "0x1111111111111111111111111111111111111111", - "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80632baeceb71461004e5780638381f58a146100585780638da5cb5b14610073578063d826f88f1461009e575b5f5ffd5b6100566100a6565b005b6100605f5481565b6040519081526020015b60405180910390f35b600154610086906001600160a01b031681565b6040516001600160a01b03909116815260200161006a565b61005661010d565b5f5f54116100fb5760405162461bcd60e51b815260206004820152601f60248201527f4e756d6265722073686f756c642062652067726561746572207468616e20300060448201526064015b60405180910390fd5b60015f54610109919061016d565b5f55565b6001546001600160a01b031633146101675760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792063616c6c61626c65206279206f776e65722100000000000000000060448201526064016100f2565b600a5f55565b8181038181111561018c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220ac5899491afd834afd223fd632497d1c0c7593961eda22f04c58db4b504999cf64736f6c634300081c0033000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000a", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266" - } - }, - "40": { - "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", - "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a9eb7922fcc5d3342ff9b5ab7a8bf23e57a11428d7ebabb9151464adde75010f64736f6c634300081c003300000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "44": { - "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", - "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220d2f603e4644996fdd6f5bfe996a433ec4c63b91e433ec6617ddd8c10790babb164736f6c634300081c003300000000000000000000000000", - "storage": {} - }, - "42": { - "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", - "code": "0x73cf7ed3acca5a467e9e704c703e8d87f634fb0fc93014608060405260043610610034575f3560e01c8063d3b08db814610038575b5f5ffd5b61004b610046366004610399565b610061565b604051610058919061049c565b60405180910390f35b80518051606091825f5b82518163ffffffff1610156101055781838263ffffffff1681518110610093576100936104d1565b60200260200101516040516020016100c3919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526100e192916020016104fc565b604051602081830303815290604052915080806100fd9061052c565b91505061006b565b50630e02a00760e31b5f80610119866101b9565b8461018b8a602001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6040516020016101a096959493929190610550565b6040516020818303038152906040529350505050919050565b6060603f8263ffffffff16116101f657604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff16116102555761023261021e6403fffffffc600285901b1660016105a9565b600881811b62ffff001691901c60ff161790565b6040516020016101e0919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116102c7576102a460028363ffffffff16901b600261028091906105a9565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6040516020016101e0919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b1660218201526025016101e0565b919050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561034b5761034b610314565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561037a5761037a610314565b604052919050565b803567ffffffffffffffff8116811461030f575f5ffd5b5f602082840312156103a9575f5ffd5b813567ffffffffffffffff8111156103bf575f5ffd5b8201604081850312156103d0575f5ffd5b6103d8610328565b813567ffffffffffffffff8111156103ee575f5ffd5b8201601f810186136103fe575f5ffd5b803567ffffffffffffffff81111561041857610418610314565b8060051b61042860208201610351565b91825260208184018101929081019089841115610443575f5ffd5b6020850194505b8385101561047c57843592506001600160a01b038316831461046a575f5ffd5b8282526020948501949091019061044a565b85525061048f9250505060208301610382565b6020820152949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f61051061050a83866104e5565b846104e5565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821663ffffffff810361054757610547610518565b60010192915050565b6001600160e01b0319871681526001600160f81b03198681166004830152851660058201525f61058c61058660068401876104e5565b856104e5565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff81811683821601908111156105c5576105c5610518565b9291505056fea264697066735822122025360fa68d61e06c0f66cb21e1db2778b987cc6ccef457fe1dbef98965e5dabb64736f6c634300081c0033000000000000000000000000", - "storage": {} - }, - "14": { - "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", - "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220003d7f443094069cb023dc39fb36d6ba29922db6cd9b714ea95af972fc56405e64736f6c634300081c003300000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b" - } - }, - "12": { - "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", - "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a2646970667358221220d6b7192f32171e73f3ca8608f2cb38bc543e4d751099308262bcc0a34560c16464736f6c634300081c003300", - "storage": {} - }, - "35": { - "address": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x000003e80000000000001c2090f79bf6eb2c4f870365e785982e1f101e93b906", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "11": { - "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", - "code": "0x608060405260043610610212575f3560e01c8063a69d9bb61161011e578063c1a8e2c5116100a8578063d4c250081161006d578063d4c2500814610664578063e2148f5a14610698578063f2fde38b146106b7578063fc299dee146106d6578063fe776c2a146106f5575f5ffd5b8063c1a8e2c5146105d4578063c63fd502146105f3578063ceb29d6114610612578063d156b91114610631578063d4b6b83414610645575f5ffd5b8063a997f0ca116100ee578063a997f0ca14610502578063a9a899cd14610523578063b526578714610542578063b89faa7c1461057a578063be6ab6ef146105b3575f5ffd5b8063a69d9bb614610492578063a8294cd8146104b1578063a8315705146104c4578063a98fb355146104e3575f5ffd5b80635d8874621161019f5780637240f9af1161016f5780637240f9af146103f0578063740d83771461040f57806374edeb6c146104435780638da5cb5b146104625780638f8ee5521461047f575f5ffd5b80635d8874621461037557806361115ba21461039e5780636deab019146103bd578063715018a6146103dc575f5ffd5b8063303ca956116101e5578063303ca956146102d857806333dcde4c146102f75780633bc28c8c14610318578063501060021461033757806359b0053414610356575f5ffd5b80631500cd8d14610216578063191088391461023757806326597383146102565780632fb31ef1146102a7575b5f5ffd5b348015610221575f5ffd5b506102356102303660046135c7565b610723565b005b348015610242575f5ffd5b506102356102513660046135e2565b61079b565b348015610261575f5ffd5b5061028a6102703660046135c7565b606b6020525f90815260409020546001600160601b031681565b6040516001600160601b0390911681526020015b60405180910390f35b3480156102b2575f5ffd5b506067546001600160a01b03165b6040516001600160a01b03909116815260200161029e565b3480156102e3575f5ffd5b506102356102f2366004613698565b6109bb565b348015610302575f5ffd5b5061030b610b38565b60405161029e9190613726565b348015610323575f5ffd5b506102356103323660046135c7565b610bc8565b348015610342575f5ffd5b5061030b61035136600461374e565b610c48565b348015610361575f5ffd5b506102356103703660046135c7565b611438565b348015610380575f5ffd5b50610389602081565b60405163ffffffff909116815260200161029e565b3480156103a9575f5ffd5b506102356103b836600461377a565b61155e565b3480156103c8575f5ffd5b506102356103d73660046139a7565b61196b565b3480156103e7575f5ffd5b50610235611e86565b3480156103fb575f5ffd5b5061023561040a366004613a51565b611e99565b34801561041a575f5ffd5b506102c06104293660046135c7565b60696020525f90815260409020546001600160a01b031681565b34801561044e575f5ffd5b5061023561045d3660046135c7565b611fca565b34801561046d575f5ffd5b506033546001600160a01b03166102c0565b34801561048a575f5ffd5b506103895f81565b34801561049d575f5ffd5b506102356104ac3660046135e2565b61204a565b6102356104bf366004613a98565b61224a565b3480156104cf575f5ffd5b506102356104de366004613ad8565b612360565b3480156104ee575f5ffd5b506102356104fd366004613a51565b61244f565b34801561050d575f5ffd5b506105166124d5565b60405161029e9190613b16565b34801561052e575f5ffd5b5061023561053d3660046135c7565b61268c565b34801561054d575f5ffd5b5061056a61055c3660046135c7565b6001600160a01b0316301490565b604051901515815260200161029e565b348015610585575f5ffd5b5061056a610594366004613b76565b606d60209081525f928352604080842090915290825290205460ff1681565b3480156105be575f5ffd5b506105c76126dc565b60405161029e9190613be3565b3480156105df575f5ffd5b506102356105ee366004613bf5565b612784565b3480156105fe575f5ffd5b5061023561060d366004613c45565b61286c565b34801561061d575f5ffd5b5061023561062c366004613ad8565b612aa2565b34801561063c575f5ffd5b5061030b612d3e565b348015610650575f5ffd5b50606a546102c0906001600160a01b031681565b34801561066f575f5ffd5b506102c061067e3660046135c7565b60686020525f90815260409020546001600160a01b031681565b3480156106a3575f5ffd5b506102356106b23660046135c7565b612d5a565b3480156106c2575f5ffd5b506102356106d13660046135c7565b612dd4565b3480156106e1575f5ffd5b506065546102c0906001600160a01b031681565b348015610700575f5ffd5b5061056a61070f3660046135c7565b60666020525f908152604090205460ff1681565b61072b612e4d565b6001600160a01b0381166107525760405163d92e233d60e01b815260040160405180910390fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b6107a3612e4d565b6040805180820182523081525f60208201819052915163105dea1f60e21b81529091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c90610805908590600401613d04565b5f60405180830381865afa15801561081f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108469190810190613d2c565b90505f5b8381101561097b575f805b83518110156108c85786868481811061087057610870613dc5565b61088692602060409092020190810191506135c7565b6001600160a01b03168482815181106108a1576108a1613dc5565b60200260200101516001600160a01b0316036108c057600191506108c8565b600101610855565b50806108e7576040516331bc342760e11b815260040160405180910390fd5b8585838181106108f9576108f9613dc5565b90506040020160200160208101906109119190613dd9565b606b5f88888681811061092657610926613dc5565b61093c92602060409092020190810191506135c7565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b03929092169190911790555060010161084a565b507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac84846040516109ad929190613df2565b60405180910390a150505050565b6109c3612ea7565b6001600160a01b03831630146109ec57604051631280731d60e21b815260040160405180910390fd5b60018114610a0d5760405163f37f411760e01b815260040160405180910390fd5b5f82828281610a1e57610a1e613dc5565b9050602002016020810190610a339190613e4e565b63ffffffff1614610a575760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b038481165f9081526068602052604090205416610a8e576040516325ec6c1f60e01b815260040160405180910390fd5b6001600160a01b038085165f90815260686020908152604080832080546001600160a01b03198082169092559094168084526069909252822080549093169092558390839081610ae057610ae0613dc5565b9050602002016020810190610af59190613e4e565b63ffffffff16856001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a35050505050565b6060606c8054610b4790613e67565b80601f0160208091040260200160405190810160405280929190818152602001828054610b7390613e67565b8015610bbe5780601f10610b9557610100808354040283529160200191610bbe565b820191905f5260205f20905b815481529060010190602001808311610ba157829003601f168201915b5050505050905090565b610bd0612e4d565b6001600160a01b038116610bf75760405163d92e233d60e01b815260040160405180910390fd5b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c905f90a35050565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610cab908590600401613d04565b5f60405180830381865afa158015610cc5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cec9190810190613e9f565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316634177a87c846040518263ffffffff1660e01b8152600401610d3b9190613d04565b5f60405180830381865afa158015610d55573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d7c9190810190613d2c565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316632b453a9a8585856040518463ffffffff1660e01b8152600401610dcf93929190613f2e565b5f60405180830381865afa158015610de9573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e109190810190613fff565b90505f83516001600160401b03811115610e2c57610e2c6137ca565b604051908082528060200260200182016040528015610e55578160200160208202803683370190505b5090505f84516001600160401b03811115610e7257610e726137ca565b604051908082528060200260200182016040528015610e9b578160200160208202803683370190505b5090505f85516001600160401b03811115610eb857610eb86137ca565b604051908082528060200260200182016040528015610ee1578160200160208202803683370190505b5090505f805b87518110156110ac575f60685f8a8481518110610f0657610f06613dc5565b6020908102919091018101516001600160a01b039081168352908201929092526040015f205416905080610f3a57506110a4565b5f805b8951811015610fef57606b5f8b8381518110610f5b57610f5b613dc5565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160601b03166001600160601b0316898581518110610fb057610fb0613dc5565b60200260200101518281518110610fc957610fc9613dc5565b6020026020010151610fdb91906140c2565b610fe590836140d9565b9150600101610f3d565b50805f03610ffe5750506110a4565b8187858151811061101157611011613dc5565b60200260200101906001600160a01b031690816001600160a01b0316815250508086858151811061104457611044613dc5565b60200260200101818152505089838151811061106257611062613dc5565b602002602001015185858151811061107c5761107c613dc5565b6001600160a01b03909216602092830291909101909101528361109e816140ec565b94505050505b600101610ee7565b50805f036110cd5760405163339e1ffb60e01b815260040160405180910390fd5b5f602082106110dd5760206110df565b815b90505f5b818110156112fa57805f6110f88260016140d9565b90505b848110156111845761117387828151811061111857611118613dc5565b602002602001015187838151811061113257611132613dc5565b602002602001015189858151811061114c5761114c613dc5565b602002602001015189868151811061116657611166613dc5565b6020026020010151612ef0565b1561117c578091505b6001016110fb565b508181146112f15786818151811061119e5761119e613dc5565b60200260200101518783815181106111b8576111b8613dc5565b60200260200101518884815181106111d2576111d2613dc5565b602002602001018984815181106111eb576111eb613dc5565b6001600160a01b03938416602091820292909201015291169052855186908290811061121957611219613dc5565b602002602001015186838151811061123357611233613dc5565b602002602001015187848151811061124d5761124d613dc5565b6020026020010188848151811061126657611266613dc5565b602002602001018281525082815250505084818151811061128957611289613dc5565b60200260200101518583815181106112a3576112a3613dc5565b60200260200101518684815181106112bd576112bd613dc5565b602002602001018784815181106112d6576112d6613dc5565b6001600160a01b039384166020918202929092010152911690525b506001016110e3565b505f816001600160401b03811115611314576113146137ca565b60405190808252806020026020018201604052801561133d578160200160208202803683370190505b5090505f5b828110156113965786818151811061135c5761135c613dc5565b602002602001015182828151811061137657611376613dc5565b6001600160a01b0390921660209283029190910190910152600101611342565b506040805180820182528281526001600160401b038e1660208201529051631a7611b760e31b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99163d3b08db8916113e79190600401614104565b5f60405180830381865af4158015611401573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114289190810190614174565b9c9b505050505050505050505050565b611440612f21565b6001600160a01b0381166114675760405163d92e233d60e01b815260040160405180910390fd5b335f908152606860205260409020546001600160a01b0390811690821681036114a35760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f908152606960205260409020541680156114dc5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f90815260696020818152604080842080546001600160a01b031990811690915533808652606884528286208054978b169783168817905586865293909252808420805490921683179091555190917f03ddab9377727860d18575279a4fb19cf32e3e650ae962f6ce2feaed801cd3af91a3505050565b611566612fdc565b5f6115708261427c565b6040810151519091505f816001600160401b03811115611592576115926137ca565b6040519080825280602002602001820160405280156115d657816020015b604080518082019091525f80825260208201528152602001906001900390816115b05790505b5090505f80805b848110156116de575f60695f886040015184815181106115ff576115ff613dc5565b602090810291909101810151516001600160a01b039081168352908201929092526040015f20541690508061163457506116d6565b8660400151828151811061164a5761164a613dc5565b602002602001015185848151811061166457611664613dc5565b60200260200101819052508085848151811061168257611682613dc5565b60209081029190910101516001600160a01b03909116905284518590849081106116ae576116ae613dc5565b602002602001015160200151846116c591906140d9565b9350826116d1816140ec565b935050505b6001016115dd565b5080835260408581018490528051838152602081018390527fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e81910160405180910390a1805f036117315750505050505050565b61173e8560400151613007565b5f61174f60408801602089016135c7565b63ffffffff89165f908152606d602090815260408083206001600160a01b03851684529091529020549091508890829060ff16156117bc5760405163618c143960e01b815263ffffffff90921660048301526001600160a01b031660248201526044015b60405180910390fd5b505063ffffffff88165f908152606d602090815260408083206001600160a01b0385168452825291829020805460ff19166001179055611839917f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae91869161182991908c01908c016135c7565b6001600160a01b031691906130fe565b6040805160018082528183019092525f91816020015b61189a6040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b81526020019060019003908161184f57905050905086815f815181106118c2576118c2613dc5565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca2989990611931908490869060040161438a565b5f604051808303815f87803b158015611948575f5ffd5b505af115801561195a573d5f5f3e3d5ffd5b5050505050505050505050505b5050565b5f54610100900460ff161580801561198957505f54600160ff909116105b806119a25750303b1580156119a257505f5460ff166001145b611a055760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016117b3565b5f805460ff191660011790558015611a26575f805461ff0019166101001790555b6001600160a01b038716611a4d5760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038616611a745760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038416611a9b5760405163d92e233d60e01b815260040160405180910390fd5b5f825111611abc57604051632e56a66b60e11b815260040160405180910390fd5b611ac46131e0565b611acd8761320e565b606580546001600160a01b0319166001600160a01b0388169081179091556040515f907fa499ec18d14a183a8ce150f6d1a61fe68e989121c8aa695bafde5305f1eee81c908290a3606c611b21838261452c565b507f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663a9821821306040518060a00160405280606d8152602001614af6606d91396040518363ffffffff1660e01b8152600401611b889291906145e6565b5f604051808303815f87803b158015611b9f575f5ffd5b505af1158015611bb1573d5f5f3e3d5ffd5b505050505f85516001600160401b03811115611bcf57611bcf6137ca565b604051908082528060200260200182016040528015611bf8578160200160208202803683370190505b5090505f5b8651811015611cd157868181518110611c1857611c18613dc5565b60200260200101515f0151828281518110611c3557611c35613dc5565b60200260200101906001600160a01b031690816001600160a01b031681525050868181518110611c6757611c67613dc5565b602002602001015160200151606b5f898481518110611c8857611c88613dc5565b602090810291909101810151516001600160a01b031682528101919091526040015f2080546001600160601b0319166001600160601b0392909216919091179055600101611bfd565b506040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081611ce857905050905060405180604001604052805f63ffffffff16815260200183815250815f81518110611d3e57611d3e613dc5565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e090611d979030908590600401614609565b5f604051808303815f87803b158015611dae575f5ffd5b505af1158015611dc0573d5f5f3e3d5ffd5b5050606780546001600160a01b0319166001600160a01b038a8116919091179091558716159150611e36905057606a80546001600160a01b0319166001600160a01b0387169081179091556040515f907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb908290a35b50508015611e7d575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611e8e612e4d565b611e975f61320e565b565b611ea161325f565b5f815111611ef15760405162461bcd60e51b815260206004820152601760248201527f56657273696f6e2063616e6e6f7420626520656d70747900000000000000000060448201526064016117b3565b5f606c8054611eff90613e67565b80601f0160208091040260200160405190810160405280929190818152602001828054611f2b90613e67565b8015611f765780601f10611f4d57610100808354040283529160200191611f76565b820191905f5260205f20905b815481529060010190602001808311611f5957829003601f168201915b5050505050905081606c9081611f8c919061452c565b507f22efc5f993dce37856b77dd72d7d7661032380c9728c4133f3c071c591bc6ca78183604051611fbe92919061468b565b60405180910390a15050565b611fd2612e4d565b6001600160a01b038116611ff95760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb905f90a35050565b612052612e4d565b5f816001600160401b0381111561206b5761206b6137ca565b604051908082528060200260200182016040528015612094578160200160208202803683370190505b5090505f5b8281101561218e578383828181106120b3576120b3613dc5565b6120c992602060409092020190810191506135c7565b8282815181106120db576120db613dc5565b60200260200101906001600160a01b031690816001600160a01b03168152505083838281811061210d5761210d613dc5565b90506040020160200160208101906121259190613dd9565b606b5f86868581811061213a5761213a613dc5565b61215092602060409092020190810191506135c7565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b0392909216919091179055600101612099565b50604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906121df9030905f9086906004016146b8565b5f604051808303815f87803b1580156121f6575f5ffd5b505af1158015612208573d5f5f3e3d5ffd5b505050507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac838360405161223d929190613df2565b60405180910390a1505050565b6122526132ab565b5f61225c84610c48565b6067549091506001600160a01b031663f2e500b234835f6040519080825280602002602001820160405280156122a657816020015b60608152602001906001900390816122915790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b81526004016122d89594939291906146e7565b5f604051808303818588803b1580156122ef575f5ffd5b505af1158015612301573d5f5f3e3d5ffd5b5050505050336001600160a01b0316846001600160401b03167f08de23359763aa62302ebcf98e51ce5f9f71f925679c5b7fc9d6cf634e6b4a73838051906020012060405161235291815260200190565b60405180910390a350505050565b612368612e4d565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906123ba9030905f9087908790600401614791565b5f604051808303815f87803b1580156123d1575f5ffd5b505af11580156123e3573d5f5f3e3d5ffd5b505f925050505b8181101561244a57606b5f84848481811061240757612407613dc5565b905060200201602081019061241c91906135c7565b6001600160a01b0316815260208101919091526040015f2080546001600160601b03191690556001016123ea565b505050565b612457612e4d565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9821821906124a590309085906004016145e6565b5f604051808303815f87803b1580156124bc575f5ffd5b505af11580156124ce573d5f5f3e3d5ffd5b5050505050565b6040805180820182523081525f60208201819052915163105dea1f60e21b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c90612538908590600401613d04565b5f60405180830381865afa158015612552573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125799190810190613d2c565b90505f81516001600160401b03811115612595576125956137ca565b6040519080825280602002602001820160405280156125d957816020015b604080518082019091525f80825260208201528152602001906001900390816125b35790505b5090505f5b825181101561268457604051806040016040528084838151811061260457612604613dc5565b60200260200101516001600160a01b03168152602001606b5f86858151811061262f5761262f613dc5565b6020908102919091018101516001600160a01b031682528101919091526040015f20546001600160601b03169052825183908390811061267157612671613dc5565b60209081029190910101526001016125de565b509392505050565b612694612e4d565b6001600160a01b0381165f81815260666020526040808220805460ff19169055517fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e549190a250565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c9061273d908490600401613d04565b5f60405180830381865afa158015612757573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261277e9190810190613d2c565b91505090565b61278c612e4d565b5f6040518060600160405280856001600160a01b03168152602001306001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050915250604051636e3492b560e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b5906128399084906004016147fb565b5f604051808303815f87803b158015612850575f5ffd5b505af1158015612862573d5f5f3e3d5ffd5b5050505050505050565b612874612ea7565b6001600160a01b038516301461289d57604051631280731d60e21b815260040160405180910390fd5b600183146128be5760405163b1698da560e01b815260040160405180910390fd5b5f848482816128cf576128cf613dc5565b90506020020160208101906128e49190613e4e565b63ffffffff16146129085760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526066602052604090205460ff1661294057604051630444d2e160e21b815260040160405180910390fd5b6001600160a01b038681165f908152606860205260409020541615612978576040516342ee68b560e01b815260040160405180910390fd5b5f6129b783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506132d692505050565b6001600160a01b038082165f9081526069602052604090205491925016156129f25760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038088165f81815260686020908152604080832080549587166001600160a01b0319968716811790915583526069909152812080549093169091179091558590859081612a4857612a48613dc5565b9050602002016020810190612a5d9190613e4e565b63ffffffff16876001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a350505050505050565b612aaa612fdc565b5f5b81811015612d11575f60695f858585818110612aca57612aca613dc5565b9050602002810190612adc9190614869565b612aea9060208101906135c7565b6001600160a01b03908116825260208201929092526040015f205416905080612b135750612d09565b5f6040518060a00160405280836001600160a01b031681526020015f63ffffffff168152602001868686818110612b4c57612b4c613dc5565b9050602002810190612b5e9190614869565b612b6c906020810190614887565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612bb457612bb4613dc5565b9050602002810190612bc69190614869565b612bd4906040810190614887565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612c1c57612c1c613dc5565b9050602002810190612c2e9190614869565b612c3c9060608101906148cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250604051633635205760e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690633635205790612cc2903090859060040161490e565b5f604051808303815f875af1158015612cdd573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612d0491908101906149bc565b505050505b600101612aac565b506040517f69e2dc7f4757ef3cbac3a5423ac42ce1938cb3b79c4f35563460926176265ce0905f90a15050565b6040518060a00160405280606d8152602001614af6606d913981565b612d62612e4d565b6001600160a01b038116612d895760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f81815260666020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b612ddc612e4d565b6001600160a01b038116612e415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016117b3565b612e4a8161320e565b50565b6033546001600160a01b03163314611e975760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016117b3565b336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611e97576040516323d871a560e01b815260040160405180910390fd5b5f828514612f015750818411612f19565b816001600160a01b0316846001600160a01b03161090505b949350505050565b6040805180820182523081525f602082015290516333869dd160e11b81527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03169063670d3ba290612f809033908590600401614a00565b602060405180830381865afa158015612f9b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbf9190614a36565b612e4a5760405163668191af60e11b815260040160405180910390fd5b6065546001600160a01b03163314611e9757604051638e79fdb560e01b815260040160405180910390fd5b805160015b8181101561244a575f83828151811061302757613027613dc5565b602002602001015190505f8290505b5f8111801561307d575081516001600160a01b031685613057600184614a55565b8151811061306757613067613dc5565b60200260200101515f01516001600160a01b0316115b156130d6578461308e600183614a55565b8151811061309e5761309e613dc5565b60200260200101518582815181106130b8576130b8613dc5565b602002602001018190525080806130ce90614a68565b915050613036565b818582815181106130e9576130e9613dc5565b6020908102919091010152505060010161300c565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa15801561314b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061316f9190614a7d565b90506131da8463095ea7b360e01b8561318886866140d9565b6040516001600160a01b039092166024830152604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613325565b50505050565b5f54610100900460ff166132065760405162461bcd60e51b81526004016117b390614a94565b611e976133f8565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610380546001600160a01b03163381146119675760405163283fa43d60e11b815260040160405180910390fd5b606a546001600160a01b03163314611e97576040516305067f3b60e21b815260040160405180910390fd5b5f81516014146132f95760405163526c487560e11b815260040160405180910390fd5b50602081015160601c806133205760405163d92e233d60e01b815260040160405180910390fd5b919050565b5f613379826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166134279092919063ffffffff16565b905080515f14806133995750808060200190518101906133999190614a36565b61244a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016117b3565b5f54610100900460ff1661341e5760405162461bcd60e51b81526004016117b390614a94565b611e973361320e565b606061343584845f8561343f565b90505b9392505050565b6060824710156134a05760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016117b3565b5f5f866001600160a01b031685876040516134bb9190614adf565b5f6040518083038185875af1925050503d805f81146134f5576040519150601f19603f3d011682016040523d82523d5f602084013e6134fa565b606091505b509150915061350b87838387613516565b979650505050505050565b606083156135845782515f0361357d576001600160a01b0385163b61357d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016117b3565b5081612f19565b612f1983838151156135995781518083602001fd5b8060405162461bcd60e51b81526004016117b39190613726565b6001600160a01b0381168114612e4a575f5ffd5b5f602082840312156135d7575f5ffd5b8135613438816135b3565b5f5f602083850312156135f3575f5ffd5b82356001600160401b03811115613608575f5ffd5b8301601f81018513613618575f5ffd5b80356001600160401b0381111561362d575f5ffd5b8560208260061b8401011115613641575f5ffd5b6020919091019590945092505050565b5f5f83601f840112613661575f5ffd5b5081356001600160401b03811115613677575f5ffd5b6020830191508360208260051b8501011115613691575f5ffd5b9250929050565b5f5f5f5f606085870312156136ab575f5ffd5b84356136b6816135b3565b935060208501356136c6816135b3565b925060408501356001600160401b038111156136e0575f5ffd5b6136ec87828801613651565b95989497509550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61343860208301846136f8565b80356001600160401b0381168114613320575f5ffd5b5f6020828403121561375e575f5ffd5b61343882613738565b803563ffffffff81168114613320575f5ffd5b5f5f6040838503121561378b575f5ffd5b61379483613767565b915060208301356001600160401b038111156137ae575f5ffd5b830160c081860312156137bf575f5ffd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715613800576138006137ca565b60405290565b60405160c081016001600160401b0381118282101715613800576138006137ca565b604051601f8201601f191681016001600160401b0381118282101715613850576138506137ca565b604052919050565b5f6001600160401b03821115613870576138706137ca565b5060051b60200190565b80356001600160601b0381168114613320575f5ffd5b5f82601f83011261389f575f5ffd5b81356138b26138ad82613858565b613828565b8082825260208201915060208360061b8601019250858311156138d3575f5ffd5b602085015b8381101561392a57604081880312156138ef575f5ffd5b6138f76137de565b8135613902816135b3565b81526139106020830161387a565b6020820152808452506020830192506040810190506138d8565b5095945050505050565b5f6001600160401b0382111561394c5761394c6137ca565b50601f01601f191660200190565b5f82601f830112613969575f5ffd5b81356139776138ad82613934565b81815284602083860101111561398b575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f60c087890312156139bc575f5ffd5b86356139c7816135b3565b955060208701356139d7816135b3565b945060408701356001600160401b038111156139f1575f5ffd5b6139fd89828a01613890565b9450506060870135613a0e816135b3565b92506080870135613a1e816135b3565b915060a08701356001600160401b03811115613a38575f5ffd5b613a4489828a0161395a565b9150509295509295509295565b5f60208284031215613a61575f5ffd5b81356001600160401b03811115613a76575f5ffd5b612f198482850161395a565b80356001600160801b0381168114613320575f5ffd5b5f5f5f60608486031215613aaa575f5ffd5b613ab384613738565b9250613ac160208501613a82565b9150613acf60408501613a82565b90509250925092565b5f5f60208385031215613ae9575f5ffd5b82356001600160401b03811115613afe575f5ffd5b613b0a85828601613651565b90969095509350505050565b602080825282518282018190525f918401906040840190835b81811015613b6b57835180516001600160a01b031684526020908101516001600160601b03168185015290930192604090920191600101613b2f565b509095945050505050565b5f5f60408385031215613b87575f5ffd5b613b9083613767565b915060208301356137bf816135b3565b5f8151808452602084019350602083015f5b82811015613bd95781516001600160a01b0316865260209586019590910190600101613bb2565b5093949350505050565b602081525f6134386020830184613ba0565b5f5f5f60408486031215613c07575f5ffd5b8335613c12816135b3565b925060208401356001600160401b03811115613c2c575f5ffd5b613c3886828701613651565b9497909650939450505050565b5f5f5f5f5f5f60808789031215613c5a575f5ffd5b8635613c65816135b3565b95506020870135613c75816135b3565b945060408701356001600160401b03811115613c8f575f5ffd5b613c9b89828a01613651565b90955093505060608701356001600160401b03811115613cb9575f5ffd5b8701601f81018913613cc9575f5ffd5b80356001600160401b03811115613cde575f5ffd5b896020828401011115613cef575f5ffd5b60208201935080925050509295509295509295565b81516001600160a01b0316815260208083015163ffffffff1690820152604081015b92915050565b5f60208284031215613d3c575f5ffd5b81516001600160401b03811115613d51575f5ffd5b8201601f81018413613d61575f5ffd5b8051613d6f6138ad82613858565b8082825260208201915060208360051b850101925086831115613d90575f5ffd5b6020840193505b82841015613dbb578351613daa816135b3565b825260209384019390910190613d97565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215613de9575f5ffd5b6134388261387a565b602080825281018290525f8360408301825b8581101561392a578235613e17816135b3565b6001600160a01b031682526001600160601b03613e366020850161387a565b16602083015260409283019290910190600101613e04565b5f60208284031215613e5e575f5ffd5b61343882613767565b600181811c90821680613e7b57607f821691505b602082108103613e9957634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613eaf575f5ffd5b81516001600160401b03811115613ec4575f5ffd5b8201601f81018413613ed4575f5ffd5b8051613ee26138ad82613858565b8082825260208201915060208360051b850101925086831115613f03575f5ffd5b6020840193505b82841015613dbb578351613f1d816135b3565b825260209384019390910190613f0a565b83516001600160a01b0316815260208085015163ffffffff16908201525f6080820160806040840152845190819052602085019060a08401905f5b81811015613f905783516001600160a01b0316835260209384019390920191600101613f69565b5050838103606085015261350b8186613ba0565b5f82601f830112613fb3575f5ffd5b8151613fc16138ad82613858565b8082825260208201915060208360051b860101925085831115613fe2575f5ffd5b602085015b8381101561392a578051835260209283019201613fe7565b5f6020828403121561400f575f5ffd5b81516001600160401b03811115614024575f5ffd5b8201601f81018413614034575f5ffd5b80516140426138ad82613858565b8082825260208201915060208360051b850101925086831115614063575f5ffd5b602084015b838110156140a35780516001600160401b03811115614085575f5ffd5b61409489602083890101613fa4565b84525060209283019201614068565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417613d2657613d266140ae565b80820180821115613d2657613d266140ae565b5f600182016140fd576140fd6140ae565b5060010190565b602080825282516040838301528051606084018190525f929190910190829060808501905b808310156141545783516001600160a01b031682526020938401936001939093019290910190614129565b506001600160401b03602087015116604086015280935050505092915050565b5f60208284031215614184575f5ffd5b81516001600160401b03811115614199575f5ffd5b8201601f810184136141a9575f5ffd5b80516141b76138ad82613934565b8181528560208385010111156141cb575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b8035613320816135b3565b5f82601f830112614202575f5ffd5b81356142106138ad82613858565b8082825260208201915060208360061b860101925085831115614231575f5ffd5b602085015b8381101561392a576040818803121561424d575f5ffd5b6142556137de565b8135614260816135b3565b8152602082810135818301529084529290920191604001614236565b5f60c0823603121561428c575f5ffd5b614294613806565b82356001600160401b038111156142a9575f5ffd5b6142b536828601613890565b8252506142c4602084016141e8565b602082015260408301356001600160401b038111156142e1575f5ffd5b6142ed368286016141f3565b6040830152506142ff60608401613767565b606082015261431060808401613767565b608082015260a08301356001600160401b0381111561432d575f5ffd5b6143393682860161395a565b60a08301525092915050565b5f8151808452602084019350602083015f5b82811015613bd957815180516001600160a01b031687526020908101518188015260409096019590910190600101614357565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b828110156144db57868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b8083101561444157835180516001600160a01b031683526020908101516001600160601b031690830152604082019150602084019350600183019250614400565b506020840151925061445e60208a01846001600160a01b03169052565b6040840151925088810360408a01526144778184614345565b925050506060820151614492606089018263ffffffff169052565b5060808201516144aa608089018263ffffffff169052565b5060a0820151915086810360a08801526144c481836136f8565b9650505060209384019391909101906001016143d0565b5092979650505050505050565b601f82111561244a57805f5260205f20601f840160051c8101602085101561450d5750805b601f840160051c820191505b818110156124ce575f8155600101614519565b81516001600160401b03811115614545576145456137ca565b614559816145538454613e67565b846144e8565b6020601f82116001811461458b575f83156145745750848201515b5f19600385901b1c1916600184901b1784556124ce565b5f84815260208120601f198516915b828110156145ba578785015182556020948501946001909201910161459a565b50848210156145d757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03831681526040602082018190525f90613435908301846136f8565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b828110156144db57605f19878603018452815163ffffffff815116865260208101519050604060208701526146756040870182613ba0565b955050602093840193919091019060010161463d565b604081525f61469d60408301856136f8565b82810360208401526146af81856136f8565b95945050505050565b6001600160a01b038416815263ffffffff831660208201526060604082018190525f906146af90830184613ba0565b60a081525f6146f960a08301886136f8565b828103602084015280875180835260208301915060208160051b84010160208a015f5b8381101561474e57601f198684030185526147388383516136f8565b602095860195909350919091019060010161471c565b50508581036040870152614762818a6136f8565b94505050505061477d60608301856001600160801b03169052565b6001600160801b0383166080830152613dbb565b6001600160a01b038516815263ffffffff8416602082015260606040820181905281018290525f8360808301825b858110156147ef5782356147d2816135b3565b6001600160a01b03168252602092830192909101906001016147bf565b50979650505050505050565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b8083101561392a5763ffffffff8451168252602082019150602084019350600183019250614840565b5f8235607e1983360301811261487d575f5ffd5b9190910192915050565b5f5f8335601e1984360301811261489c575f5ffd5b8301803591506001600160401b038211156148b5575f5ffd5b6020019150600581901b3603821315613691575f5ffd5b5f5f8335601e198436030181126148e1575f5ffd5b8301803591506001600160401b038211156148fa575f5ffd5b602001915036819003821315613691575f5ffd5b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f9061495660e0840182613ba0565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b8083101561499e578351825260208201915060208401935060018301925061497b565b506080860151858203603f190160c0870152925061350b81846136f8565b5f5f604083850312156149cd575f5ffd5b825160208401519092506001600160401b038111156149ea575f5ffd5b6149f685828601613fa4565b9150509250929050565b6001600160a01b038316815260608101613438602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f60208284031215614a46575f5ffd5b81518015158114613438575f5ffd5b81810381811115613d2657613d266140ae565b5f81614a7657614a766140ae565b505f190190565b5f60208284031215614a8d575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b5f82518060208501845e5f92019182525091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f64617461686176656e2d78797a2f64617461686176656e2f726566732f68656164732f6d61696e2f636f6e7472616374732f6465706c6f796d656e74732f6d657461646174612e6a736f6ea264697066735822122038ddee5a3b276db485998e1f964e206252589737368490aba4b71e745239821864736f6c634300081c003300000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000036c02da8a0983159322a80ffe9f24b1acff8b570", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", + "0x0000000000000000000000000000000000000000000000000000000000000067": "0x0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688", + "0x000000000000000000000000000000000000000000000000000000000000006c": "0x302e312e3000000000000000000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000000000000000000000000006a": "0x000000000000000000000000976ea74026e726554db657fa54763abd0c3a0aa9", + "0xf028937c64180bb2d245c1eb4b6ebc3d79a092cccfbb2b854f9d7b4da63470b6": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, "45": { @@ -226,162 +67,453 @@ "address": "0x000F3df6D732807Ef1319fB7B8bB8522d0Beac02", "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604d57602036146024575f5ffd5b5f35801560495762001fff810690815414603c575f5ffd5b62001fff01545f5260205ff35b5f5ffd5b62001fff42064281555f359062001fff015500", "storage": { - "0x00000000000000000000000000000000000000000000000000000000000015f5": "0x0000000000000000000000000000000000000000000000000000000069ca4789", - "0x00000000000000000000000000000000000000000000000000000000000035de": "0x0539ffe986ae992e66b69cee53521085e5c9bee934ccb5bdf7362b5bd5db13a1", - "0x00000000000000000000000000000000000000000000000000000000000035ed": "0x2dcda6486f96830898fc5aa58ccae472a482d1fc9f436ef3b2103e905d4bb25d", - "0x0000000000000000000000000000000000000000000000000000000000003600": "0x297cf3d69f15034c9d44ca29aaf071ebd95b48ddacb89acb719190c770c77ffb", - "0x00000000000000000000000000000000000000000000000000000000000015d4": "0x0000000000000000000000000000000000000000000000000000000069ca4768", - "0x00000000000000000000000000000000000000000000000000000000000035e3": "0x61adb1ad41e8a5d1fa98117ee6d4a52bc99509c58b2d99bb106457660f76a1d1", - "0x00000000000000000000000000000000000000000000000000000000000035e9": "0xb4df6e256c3024f5d089b5b4fe3f9ec4e6c22a3b5449a14c2d26ffc504864655", - "0x00000000000000000000000000000000000000000000000000000000000035c8": "0xd27acd2cb8eb7fc18f431d699acfbe6fd91f950acdcf8422b730bc7fd0c16710", - "0x00000000000000000000000000000000000000000000000000000000000035f2": "0x0b9f76806c067bfc2653305f36935b4f9a6490d2bd683df73a526721ea259d8b", - "0x00000000000000000000000000000000000000000000000000000000000015f4": "0x0000000000000000000000000000000000000000000000000000000069ca4788", - "0x00000000000000000000000000000000000000000000000000000000000015fd": "0x0000000000000000000000000000000000000000000000000000000069ca4791", - "0x00000000000000000000000000000000000000000000000000000000000035ca": "0x8fa5c695f4e47491fd3f48520588c48793533fb5f91137a6741deba899340233", - "0x00000000000000000000000000000000000000000000000000000000000015d8": "0x0000000000000000000000000000000000000000000000000000000069ca476c", - "0x00000000000000000000000000000000000000000000000000000000000035e4": "0x729a440cfba8282b0a3d3b2f3310fa3de751f93086bd2ea82bfb16f88078ee33", - "0x00000000000000000000000000000000000000000000000000000000000035c3": "0x32c43d8fd9c1e37d329ffa5704b815948451d7c93403540c9e3644eae771699a", - "0x00000000000000000000000000000000000000000000000000000000000035ef": "0xf9f36a10d5917554a86d04cae2e60d664527959141a4a0eeb191b1eaf62e74b4", - "0x00000000000000000000000000000000000000000000000000000000000035fc": "0xebd3fe6bce619308487718092b07e457373578e08d835838f6e5a0a33410a2bd", - "0x00000000000000000000000000000000000000000000000000000000000035fe": "0x43a09d024b2b92b4f86dc03be7e4373832e026bd83ebfea3906b63bb2a755cc1", - "0x00000000000000000000000000000000000000000000000000000000000035fd": "0xb1c00fde77e65fca1e5158b9032e8b743b449ac622952d4aa2dfee391ebd9193", - "0x00000000000000000000000000000000000000000000000000000000000035cb": "0xaca0b6bce7a4e8970a6091b6a7e102ecbc82425bc6b82c435b2434a5fb82bf80", - "0x00000000000000000000000000000000000000000000000000000000000015e1": "0x0000000000000000000000000000000000000000000000000000000069ca4775", - "0x00000000000000000000000000000000000000000000000000000000000015dc": "0x0000000000000000000000000000000000000000000000000000000069ca4770", - "0x00000000000000000000000000000000000000000000000000000000000015f7": "0x0000000000000000000000000000000000000000000000000000000069ca478b", - "0x0000000000000000000000000000000000000000000000000000000000001601": "0x0000000000000000000000000000000000000000000000000000000069ca4795", - "0x00000000000000000000000000000000000000000000000000000000000035bb": "0x3c3aa8454d8ce266088487586aa9d1e3283196ff961b90901d8113c17d165044", - "0x00000000000000000000000000000000000000000000000000000000000035c9": "0x9623482d4e2591d59783da1b5f1928845489585e0513d57b7f75f852d454a2b1", - "0x00000000000000000000000000000000000000000000000000000000000035e0": "0x405c82eb4a2f0a3e065129fa28d89f50d6ba34d68ccbfa7f21a2f5f1474971b8", - "0x00000000000000000000000000000000000000000000000000000000000015e5": "0x0000000000000000000000000000000000000000000000000000000069ca4779", - "0x00000000000000000000000000000000000000000000000000000000000015c8": "0x0000000000000000000000000000000000000000000000000000000069ca475c", - "0x00000000000000000000000000000000000000000000000000000000000035e5": "0xe8b026b18a795e74c6bdc6fe662be836d301f475c261d8b4c65b89ceafe3c88e", - "0x00000000000000000000000000000000000000000000000000000000000035eb": "0xae8a32fc16a7898255d68541f657dd8c8b717106b7a00ea339c3fa72beafc0f2", - "0x00000000000000000000000000000000000000000000000000000000000015df": "0x0000000000000000000000000000000000000000000000000000000069ca4773", - "0x00000000000000000000000000000000000000000000000000000000000015cb": "0x0000000000000000000000000000000000000000000000000000000069ca475f", - "0x00000000000000000000000000000000000000000000000000000000000015cf": "0x0000000000000000000000000000000000000000000000000000000069ca4763", - "0x00000000000000000000000000000000000000000000000000000000000015ec": "0x0000000000000000000000000000000000000000000000000000000069ca4780", - "0x00000000000000000000000000000000000000000000000000000000000035bf": "0x117b9f4084ad694de4816d24058333ca9d226aca01777065ead5bc6a3c5c8d98", - "0x00000000000000000000000000000000000000000000000000000000000015b9": "0x0000000000000000000000000000000000000000000000000000000069ca474d", - "0x00000000000000000000000000000000000000000000000000000000000015d2": "0x0000000000000000000000000000000000000000000000000000000069ca4766", - "0x00000000000000000000000000000000000000000000000000000000000015ca": "0x0000000000000000000000000000000000000000000000000000000069ca475e", - "0x00000000000000000000000000000000000000000000000000000000000015eb": "0x0000000000000000000000000000000000000000000000000000000069ca477f", - "0x00000000000000000000000000000000000000000000000000000000000035c4": "0x1730b64f1fdc4e169f64314a2fbfc059873fa20c0c65c949467d95f34d686081", - "0x00000000000000000000000000000000000000000000000000000000000035f9": "0x49acb66b5aef2a2447a689bb320b6664ec627cf1c1e2d6cf7571c7339b432d75", - "0x00000000000000000000000000000000000000000000000000000000000015ff": "0x0000000000000000000000000000000000000000000000000000000069ca4793", - "0x00000000000000000000000000000000000000000000000000000000000015bb": "0x0000000000000000000000000000000000000000000000000000000069ca474f", - "0x00000000000000000000000000000000000000000000000000000000000015c1": "0x0000000000000000000000000000000000000000000000000000000069ca4755", - "0x00000000000000000000000000000000000000000000000000000000000035ba": "0xdda8e256dbd0c5704917902434e7eabbd7d70a9ed152c8bc0a2cefc250e89252", - "0x00000000000000000000000000000000000000000000000000000000000015bc": "0x0000000000000000000000000000000000000000000000000000000069ca4750", - "0x00000000000000000000000000000000000000000000000000000000000015c2": "0x0000000000000000000000000000000000000000000000000000000069ca4756", - "0x00000000000000000000000000000000000000000000000000000000000015c6": "0x0000000000000000000000000000000000000000000000000000000069ca475a", - "0x00000000000000000000000000000000000000000000000000000000000035fb": "0xf4293ea548e12b11135d34b4b62c710bb7b49c6eef2629d920c1685a1b173df2", - "0x00000000000000000000000000000000000000000000000000000000000015c4": "0x0000000000000000000000000000000000000000000000000000000069ca4758", - "0x00000000000000000000000000000000000000000000000000000000000015c3": "0x0000000000000000000000000000000000000000000000000000000069ca4757", - "0x00000000000000000000000000000000000000000000000000000000000015fc": "0x0000000000000000000000000000000000000000000000000000000069ca4790", - "0x00000000000000000000000000000000000000000000000000000000000035b5": "0x329e8bb7bb339a2b727c5acd09238b006858dace39ccda3787ebfd9eeb5e57e1", - "0x00000000000000000000000000000000000000000000000000000000000015d3": "0x0000000000000000000000000000000000000000000000000000000069ca4767", - "0x00000000000000000000000000000000000000000000000000000000000015fb": "0x0000000000000000000000000000000000000000000000000000000069ca478f", - "0x00000000000000000000000000000000000000000000000000000000000015e9": "0x0000000000000000000000000000000000000000000000000000000069ca477d", - "0x00000000000000000000000000000000000000000000000000000000000015de": "0x0000000000000000000000000000000000000000000000000000000069ca4772", - "0x00000000000000000000000000000000000000000000000000000000000015e3": "0x0000000000000000000000000000000000000000000000000000000069ca4777", - "0x00000000000000000000000000000000000000000000000000000000000015ed": "0x0000000000000000000000000000000000000000000000000000000069ca4781", - "0x00000000000000000000000000000000000000000000000000000000000015bd": "0x0000000000000000000000000000000000000000000000000000000069ca4751", - "0x00000000000000000000000000000000000000000000000000000000000015dd": "0x0000000000000000000000000000000000000000000000000000000069ca4771", - "0x00000000000000000000000000000000000000000000000000000000000015e6": "0x0000000000000000000000000000000000000000000000000000000069ca477a", - "0x0000000000000000000000000000000000000000000000000000000000001603": "0x0000000000000000000000000000000000000000000000000000000069ca4797", - "0x00000000000000000000000000000000000000000000000000000000000035b7": "0x12e73554c7da25b4a4d40a177e05613439da4a04fd7d0ab81497c70d1eb7facf", - "0x00000000000000000000000000000000000000000000000000000000000015da": "0x0000000000000000000000000000000000000000000000000000000069ca476e", - "0x00000000000000000000000000000000000000000000000000000000000015f0": "0x0000000000000000000000000000000000000000000000000000000069ca4784", - "0x0000000000000000000000000000000000000000000000000000000000001600": "0x0000000000000000000000000000000000000000000000000000000069ca4794", - "0x00000000000000000000000000000000000000000000000000000000000035b9": "0x33ba60d871ec17150f313bc64de9fa7381a125dc29730706bc1b5dc01c90c712", - "0x00000000000000000000000000000000000000000000000000000000000035d9": "0xb0682d435333957dcaa2df2909892f4da9fe466733c1e1414345cbe6472be19c", - "0x00000000000000000000000000000000000000000000000000000000000035f0": "0x96edc1014760c629032349cade3148d81b8c39c939d883fafccf0e144605fe03", - "0x00000000000000000000000000000000000000000000000000000000000035d5": "0xe0925a4e6715a088552f2e34c81070d830cbaa532dd87a709718979f6ea2aafb", - "0x00000000000000000000000000000000000000000000000000000000000035dc": "0x6b84787ac03e67ffc03a0f6e363b79f7cf8e0bcfc85f9a8545075e414321da96", - "0x00000000000000000000000000000000000000000000000000000000000035c5": "0xcfa737fef1b53446c4921b7e44dc5f2b19fa50a9a14403db50de31e2c5f70f34", - "0x00000000000000000000000000000000000000000000000000000000000035ee": "0x81bfd5caabb717cbcc9467c86aea2ffd1b23acc1340472c5e9aca07112551de6", - "0x00000000000000000000000000000000000000000000000000000000000035f5": "0x6c33ee8de752e83515bdd3588228942812260893bb9fbc24cc36f9bd6b3161d9", - "0x00000000000000000000000000000000000000000000000000000000000015ef": "0x0000000000000000000000000000000000000000000000000000000069ca4783", - "0x00000000000000000000000000000000000000000000000000000000000035ec": "0x9e339dff03ca1daec46bb8e8a29fea87a08376ee279e5d7cfa8f3d7d01c84714", - "0x00000000000000000000000000000000000000000000000000000000000015fe": "0x0000000000000000000000000000000000000000000000000000000069ca4792", - "0x00000000000000000000000000000000000000000000000000000000000035e8": "0xdcdedd6d58654931ab1b9d5d61fc789d7d896e9ba1ff37479b9e3ce3f3743b78", - "0x00000000000000000000000000000000000000000000000000000000000015b7": "0x0000000000000000000000000000000000000000000000000000000069ca474b", - "0x00000000000000000000000000000000000000000000000000000000000035cd": "0xbbc751b2ca4cb819890b02e1b1a265012e6055cf6c51f52688a424ebd5b25755", - "0x00000000000000000000000000000000000000000000000000000000000035d1": "0x6579d5a1fdb64c329a194e58c01e8373658ef06c1742ae1fb9e6fddc39b6a1d5", - "0x00000000000000000000000000000000000000000000000000000000000015b6": "0x0000000000000000000000000000000000000000000000000000000069ca474a", - "0x00000000000000000000000000000000000000000000000000000000000015f3": "0x0000000000000000000000000000000000000000000000000000000069ca4787", - "0x00000000000000000000000000000000000000000000000000000000000015be": "0x0000000000000000000000000000000000000000000000000000000069ca4752", - "0x00000000000000000000000000000000000000000000000000000000000035ce": "0xbf0d3d7a0fc541c4bc62cfdcbeeb12a96ecc811fd3c50e2d65469dc272206c4e", - "0x00000000000000000000000000000000000000000000000000000000000035f4": "0x44f06181e964bfa63b75eacb521c631f2e17b43004d04c6b19f2bf28d61d0c1c", - "0x00000000000000000000000000000000000000000000000000000000000015d5": "0x0000000000000000000000000000000000000000000000000000000069ca4769", - "0x00000000000000000000000000000000000000000000000000000000000015fa": "0x0000000000000000000000000000000000000000000000000000000069ca478e", - "0x0000000000000000000000000000000000000000000000000000000000001602": "0x0000000000000000000000000000000000000000000000000000000069ca4796", - "0x00000000000000000000000000000000000000000000000000000000000035d6": "0x39772d6ae62d7178ac8102e70ee0229294440de2940eb7775da72f568808fa72", - "0x00000000000000000000000000000000000000000000000000000000000035bc": "0x8f3d6f43bd343ab4c76363b3b45f1777950d0e966e1a41c83643fa3392d941a6", - "0x00000000000000000000000000000000000000000000000000000000000015f2": "0x0000000000000000000000000000000000000000000000000000000069ca4786", - "0x00000000000000000000000000000000000000000000000000000000000035f3": "0xae1b333179dd42a16f5d28d3387c29b142f8aecf7aa79c8be4b995532d375f16", - "0x00000000000000000000000000000000000000000000000000000000000035e1": "0xf3eec9e3860af9769db6a4964acdb159511a8b859ec55b9c17943b21f24d9b4a", - "0x00000000000000000000000000000000000000000000000000000000000035e6": "0x3e24e9b40ae1ed4fb2f25887daa006496af9331f6fffcee885874d8c3923792a", - "0x00000000000000000000000000000000000000000000000000000000000035db": "0xaa253d3427de5050f86d406e9194d4a11960a44dcfe5a0cc2aefd0916c43662f", - "0x00000000000000000000000000000000000000000000000000000000000035fa": "0x0f3c3e27f2e542b63f9a37f8c9d54755e8ad605e953fab5e2fc68c3bf5f458aa", - "0x00000000000000000000000000000000000000000000000000000000000035b8": "0x66a01dfd762bd30d42ee435ed466fa3dec6fb68fd9793eae73b04c3b02764f8e", - "0x00000000000000000000000000000000000000000000000000000000000015c0": "0x0000000000000000000000000000000000000000000000000000000069ca4754", - "0x00000000000000000000000000000000000000000000000000000000000015bf": "0x0000000000000000000000000000000000000000000000000000000069ca4753", - "0x00000000000000000000000000000000000000000000000000000000000015c9": "0x0000000000000000000000000000000000000000000000000000000069ca475d", - "0x00000000000000000000000000000000000000000000000000000000000015e4": "0x0000000000000000000000000000000000000000000000000000000069ca4778", - "0x00000000000000000000000000000000000000000000000000000000000015e0": "0x0000000000000000000000000000000000000000000000000000000069ca4774", - "0x00000000000000000000000000000000000000000000000000000000000035e7": "0x332597a283b24005b8df351950d6134fa4bec2c6bc6110f407f172e994cc5d28", - "0x00000000000000000000000000000000000000000000000000000000000015b8": "0x0000000000000000000000000000000000000000000000000000000069ca474c", - "0x00000000000000000000000000000000000000000000000000000000000015d0": "0x0000000000000000000000000000000000000000000000000000000069ca4764", - "0x00000000000000000000000000000000000000000000000000000000000035cf": "0xf95da05d3e3e71cf9ace476fac1a856fa2725c103fc1d3ac05f4fc352675c9d8", - "0x00000000000000000000000000000000000000000000000000000000000015d9": "0x0000000000000000000000000000000000000000000000000000000069ca476d", - "0x00000000000000000000000000000000000000000000000000000000000015f9": "0x0000000000000000000000000000000000000000000000000000000069ca478d", - "0x00000000000000000000000000000000000000000000000000000000000015ee": "0x0000000000000000000000000000000000000000000000000000000069ca4782", - "0x00000000000000000000000000000000000000000000000000000000000035b6": "0x0816da469480a0bb13ed01fed1a09e66694f07c44b7bd42c12ab48d1b86b58d6", - "0x00000000000000000000000000000000000000000000000000000000000035d2": "0x9430612d31b22fc7c055a301317097ec4b6386b1d0470aa93875a86893503fc7", - "0x00000000000000000000000000000000000000000000000000000000000035f7": "0x208762fff02b3005e14fd66aace35fb4c8111ff597e7c8cd812eb6c809f1a7d3", - "0x00000000000000000000000000000000000000000000000000000000000035c6": "0xf1ad470dfdaa9ffcb4004d53e223533a184136031dde56f8ceb5b54628fbebe7", - "0x00000000000000000000000000000000000000000000000000000000000035d4": "0x821ca59f16f08d8a4425d47a7c8a38c479e9754fee46d7e860ad1c9e931c04ea", - "0x00000000000000000000000000000000000000000000000000000000000035df": "0xc153fc71537370373147fcfbee0d2ef318ec311106d15664fb3e4b28a141fd7e", - "0x00000000000000000000000000000000000000000000000000000000000035ff": "0x5ad04fc6cd1f44737c77dff7e968bdef89e45547a0b1a7e34c3c2315df628f79", - "0x00000000000000000000000000000000000000000000000000000000000035d3": "0xf306548b0e67a9c13f3e09f4ff7817b8819bcca78d07f719cc6e402e389c648e", - "0x00000000000000000000000000000000000000000000000000000000000015c7": "0x0000000000000000000000000000000000000000000000000000000069ca475b", - "0x00000000000000000000000000000000000000000000000000000000000035f6": "0xe60b85568a6eba6d9582e58cec52cb268f0fb931ee0cf24cab0538df2f7aee5d", - "0x00000000000000000000000000000000000000000000000000000000000015cd": "0x0000000000000000000000000000000000000000000000000000000069ca4761", - "0x00000000000000000000000000000000000000000000000000000000000015e7": "0x0000000000000000000000000000000000000000000000000000000069ca477b", - "0x00000000000000000000000000000000000000000000000000000000000035bd": "0x7b9b9b61297c02c2588c941dd4b2883817c12df59fde33c15687c60790076dfe", - "0x0000000000000000000000000000000000000000000000000000000000003602": "0x70af64e0520d6fd626381475c3e4a54bcce62f53223a61556d1df162beaccdc9", - "0x00000000000000000000000000000000000000000000000000000000000035d8": "0x5bbf8e435099c75c9bbdf02a1ded1744e5fb0fa316d2b107b295355e048299e2", - "0x00000000000000000000000000000000000000000000000000000000000035ea": "0x502c92aba4af3de0de37b0f7a474e2ca13114415eb6a31f5679024f24bba25ea", - "0x00000000000000000000000000000000000000000000000000000000000035c1": "0xc2313976c68aa120f91a1782f48dcc20ea2826bbcf45fd1a9ff13ec750d8fb90", - "0x00000000000000000000000000000000000000000000000000000000000035f8": "0xaab305eb1afbb7a59737fd080383b649a5a87d56c1a0af1264639bb5c694f842", - "0x00000000000000000000000000000000000000000000000000000000000015d6": "0x0000000000000000000000000000000000000000000000000000000069ca476a", - "0x00000000000000000000000000000000000000000000000000000000000035cc": "0xae6863ba8a2d81271ffabe12a6a95b7821ab1981ea3842343e22f77214b5f45a", - "0x00000000000000000000000000000000000000000000000000000000000015ba": "0x0000000000000000000000000000000000000000000000000000000069ca474e", - "0x00000000000000000000000000000000000000000000000000000000000015f8": "0x0000000000000000000000000000000000000000000000000000000069ca478c", - "0x00000000000000000000000000000000000000000000000000000000000035f1": "0x498f5c297eb49b3ac568c37e624f5b1bbab35adc54542ae8ea46cb83bfe380e6", - "0x00000000000000000000000000000000000000000000000000000000000035da": "0xb846d3b97274d45a6044feb81c083b8b1d9d87e3631504162ca347e5def4e6fb", - "0x00000000000000000000000000000000000000000000000000000000000015c5": "0x0000000000000000000000000000000000000000000000000000000069ca4759", - "0x00000000000000000000000000000000000000000000000000000000000015f1": "0x0000000000000000000000000000000000000000000000000000000069ca4785", - "0x00000000000000000000000000000000000000000000000000000000000015e8": "0x0000000000000000000000000000000000000000000000000000000069ca477c", - "0x00000000000000000000000000000000000000000000000000000000000015d1": "0x0000000000000000000000000000000000000000000000000000000069ca4765", - "0x00000000000000000000000000000000000000000000000000000000000015f6": "0x0000000000000000000000000000000000000000000000000000000069ca478a", - "0x00000000000000000000000000000000000000000000000000000000000035c7": "0x2ffb0e165d9c566e1afd0c5bfadac12561ab84ced06f565c9398b9e178b632f4", - "0x00000000000000000000000000000000000000000000000000000000000035e2": "0x7a89971d89bac4ddfe4e40b5f17627529637bebd75078e6531d00ac8b8f352b6", - "0x00000000000000000000000000000000000000000000000000000000000015e2": "0x0000000000000000000000000000000000000000000000000000000069ca4776", - "0x00000000000000000000000000000000000000000000000000000000000015db": "0x0000000000000000000000000000000000000000000000000000000069ca476f", - "0x00000000000000000000000000000000000000000000000000000000000015cc": "0x0000000000000000000000000000000000000000000000000000000069ca4760", - "0x00000000000000000000000000000000000000000000000000000000000035be": "0x9ad23a675b5cf6bcc496091f1c6e65607024f424815710add2098f007c2c55f4", - "0x00000000000000000000000000000000000000000000000000000000000015ce": "0x0000000000000000000000000000000000000000000000000000000069ca4762", - "0x00000000000000000000000000000000000000000000000000000000000015ea": "0x0000000000000000000000000000000000000000000000000000000069ca477e", - "0x00000000000000000000000000000000000000000000000000000000000035c0": "0x7e1f3a485d7112e710c2fee89100bd6021e10f65b581fb5d59cbfcc569083860", - "0x00000000000000000000000000000000000000000000000000000000000035d0": "0xd2b46db612097864acfed1e55b836744ade71e8b9ae84ee17f4afe1094086794", - "0x00000000000000000000000000000000000000000000000000000000000035d7": "0xc946400f7ea91c5e042697f8299ec3ddd87a84cbb2d622cb78ebbd9542f34b02", - "0x0000000000000000000000000000000000000000000000000000000000003601": "0x3a6bb4419c58428f78935cfedc49302c23af5e09295c27c677604882b3f8f6c8", - "0x00000000000000000000000000000000000000000000000000000000000035dd": "0x6c63b542719265643d103cc4db47aa9c08f483c3cb01bc8397080e926e44191f", - "0x00000000000000000000000000000000000000000000000000000000000015d7": "0x0000000000000000000000000000000000000000000000000000000069ca476b", - "0x00000000000000000000000000000000000000000000000000000000000035c2": "0xc674901d4a62fe8afd795bfa81e3bc5e7c834c816425d1eda8fc76273545121b" + "0x0000000000000000000000000000000000000000000000000000000000001156": "0x0000000000000000000000000000000000000000000000000000000069de024c", + "0x000000000000000000000000000000000000000000000000000000000000316b": "0x9ccc9ca9566e919dab6696c81acaff1492e7dc5b847a51449f3542c412c045e4", + "0x0000000000000000000000000000000000000000000000000000000000003155": "0xca72ef2f329a6f85631cf26bb43216780fe9620e3b871c7e5af95cdb07208ba1", + "0x000000000000000000000000000000000000000000000000000000000000317c": "0xa07bb8eb3406dfea2cb91a54fa9c2490632f0d470e07ff9c2b73c4190c534a1a", + "0x0000000000000000000000000000000000000000000000000000000000003180": "0x47859f19a2da88a46f9af4e4ef48d088142b01522c752b84b140289bacceb58e", + "0x0000000000000000000000000000000000000000000000000000000000001147": "0x0000000000000000000000000000000000000000000000000000000069de023d", + "0x0000000000000000000000000000000000000000000000000000000000003160": "0x2ef7f63aed9198fe2f153723771bc932c4eaf7aa8ad183c26c9ece3e2edec1bd", + "0x0000000000000000000000000000000000000000000000000000000000003162": "0x019b53bca1f0daf18e0c51b5d7e336f09129f3455a2b3e9cc770b24445495dcd", + "0x000000000000000000000000000000000000000000000000000000000000115b": "0x0000000000000000000000000000000000000000000000000000000069de0251", + "0x0000000000000000000000000000000000000000000000000000000000003157": "0x8e6f5873263e39b918fa0389ba41f4dde06602a30536576480eb78be4cf60b59", + "0x0000000000000000000000000000000000000000000000000000000000003152": "0xb5f6628a936f5b35e7cb8a09096979aad8c8c7e187392d69df94ca9d9f5d4155", + "0x000000000000000000000000000000000000000000000000000000000000114d": "0x0000000000000000000000000000000000000000000000000000000069de0243", + "0x000000000000000000000000000000000000000000000000000000000000316c": "0xe11d65e0dd1fe6220c6fb6cc76f6053d44867ece732600dce798e4e20ac30446", + "0x000000000000000000000000000000000000000000000000000000000000117b": "0x0000000000000000000000000000000000000000000000000000000069de0271", + "0x0000000000000000000000000000000000000000000000000000000000001150": "0x0000000000000000000000000000000000000000000000000000000069de0246", + "0x0000000000000000000000000000000000000000000000000000000000003146": "0xe39201b81fc022fcae8cd60ee9acf8237931ce67e2496057c1f48a2c5630094a", + "0x0000000000000000000000000000000000000000000000000000000000001143": "0x0000000000000000000000000000000000000000000000000000000069de0239", + "0x0000000000000000000000000000000000000000000000000000000000001167": "0x0000000000000000000000000000000000000000000000000000000069de025d", + "0x000000000000000000000000000000000000000000000000000000000000116b": "0x0000000000000000000000000000000000000000000000000000000069de0261", + "0x000000000000000000000000000000000000000000000000000000000000115e": "0x0000000000000000000000000000000000000000000000000000000069de0254", + "0x000000000000000000000000000000000000000000000000000000000000114e": "0x0000000000000000000000000000000000000000000000000000000069de0244", + "0x0000000000000000000000000000000000000000000000000000000000001160": "0x0000000000000000000000000000000000000000000000000000000069de0256", + "0x0000000000000000000000000000000000000000000000000000000000001181": "0x0000000000000000000000000000000000000000000000000000000069de0277", + "0x0000000000000000000000000000000000000000000000000000000000003142": "0xb1c8579e36d367a68b10148cbf09b8b3676fb67dff80e6c371c2522e23c4d495", + "0x000000000000000000000000000000000000000000000000000000000000315e": "0xe008afd80b7e276850ed6acf62e1e0fa234f67c07e78770030dde6622c4a6e9c", + "0x000000000000000000000000000000000000000000000000000000000000316a": "0x2a3b51977f8fb27edca7ae5186db66d4e0932ff197c9394bb377da531dd0d6e7", + "0x000000000000000000000000000000000000000000000000000000000000316d": "0x09ab757fc250d88afe27afcfeeba7a13172527fe9d93e7bff47a9ed7116fdfe3", + "0x0000000000000000000000000000000000000000000000000000000000001157": "0x0000000000000000000000000000000000000000000000000000000069de024d", + "0x000000000000000000000000000000000000000000000000000000000000316f": "0xe74e9849b7567990725ad5609e7f27cd961b6effdee73e6420ff03919adb3b28", + "0x0000000000000000000000000000000000000000000000000000000000003173": "0xf93a031c0341c227d04ec9813384ce94787e80e2afd9ef1181974d51dedbb1b3", + "0x0000000000000000000000000000000000000000000000000000000000001180": "0x0000000000000000000000000000000000000000000000000000000069de0276", + "0x000000000000000000000000000000000000000000000000000000000000315a": "0xf901818cdefb6372952ad6bf1f7fa888417e0ec903b35087cdc71ef891ffe757", + "0x0000000000000000000000000000000000000000000000000000000000003182": "0x3511d551c2bf16840b5c01a0a35f04ecd217208671b5fb36552795cd053ccdbd", + "0x000000000000000000000000000000000000000000000000000000000000116c": "0x0000000000000000000000000000000000000000000000000000000069de0262", + "0x0000000000000000000000000000000000000000000000000000000000003159": "0x422889cff9534eef58285ac4534eef982e8d66b8607eb67962b224f8dd75ddc5", + "0x000000000000000000000000000000000000000000000000000000000000116e": "0x0000000000000000000000000000000000000000000000000000000069de0264", + "0x0000000000000000000000000000000000000000000000000000000000003167": "0xc8ff82ccac3b4966df501fee7a6f21df78d1459873fd1aadc5b0a81344a7e614", + "0x0000000000000000000000000000000000000000000000000000000000003175": "0x65d2f40e589ecfd4383aa2d9ffa7825187261ecc01e323dcb16d163fb0a95931", + "0x000000000000000000000000000000000000000000000000000000000000317f": "0x1be1e6bcac6fcdcf00a57c63c693015a541403c5ff35a57b385c6fdef08ba7ce", + "0x0000000000000000000000000000000000000000000000000000000000001172": "0x0000000000000000000000000000000000000000000000000000000069de0268", + "0x0000000000000000000000000000000000000000000000000000000000003144": "0xd5b4d1b6f9292c1a216639bf626b6914ed9582490faded2bd7a9c165263c329f", + "0x0000000000000000000000000000000000000000000000000000000000003169": "0x466ba9fd2de3bc6490c1e47ce8a8124764e423aafbf98b900181a4a38ea54ee1", + "0x0000000000000000000000000000000000000000000000000000000000001170": "0x0000000000000000000000000000000000000000000000000000000069de0266", + "0x0000000000000000000000000000000000000000000000000000000000003141": "0xc41bbe58a406aad2cf814a88b9843fefb518bd7fa5ee33524da1733e332da3a2", + "0x0000000000000000000000000000000000000000000000000000000000003147": "0x6745049f06d5dc384cb2523112368feba23e5b032ae35c0f1469214ab947a8c9", + "0x000000000000000000000000000000000000000000000000000000000000315b": "0x2b70159ece7cbff1039c21afa48e5ad0409c86bba9a3a8eb1438b86fd24971bf", + "0x000000000000000000000000000000000000000000000000000000000000316e": "0x9e5a1f78679da78d8d26cf543f981c522c44cbfb423cc4729ecb4f4ecaac7fbe", + "0x0000000000000000000000000000000000000000000000000000000000001141": "0x0000000000000000000000000000000000000000000000000000000069de0237", + "0x0000000000000000000000000000000000000000000000000000000000001163": "0x0000000000000000000000000000000000000000000000000000000069de0259", + "0x0000000000000000000000000000000000000000000000000000000000003156": "0x91a2c23ae28ee93b3bcdc4787c64307aee7b15e4a51fe2a803445421248f3e27", + "0x0000000000000000000000000000000000000000000000000000000000003158": "0x3e122fa31b6ce55aaf81129ae65dba33ba489705a2bd6c98af9f71c107335463", + "0x0000000000000000000000000000000000000000000000000000000000001148": "0x0000000000000000000000000000000000000000000000000000000069de023e", + "0x000000000000000000000000000000000000000000000000000000000000315f": "0xe3e5f1b262ae376a9fc423fbf96eab9f635c6d5388bdcd1186289cf706e559cd", + "0x0000000000000000000000000000000000000000000000000000000000001159": "0x0000000000000000000000000000000000000000000000000000000069de024f", + "0x0000000000000000000000000000000000000000000000000000000000003178": "0x72611f05cd2f6dae871862a86054bbe9df0d6ae422330743fbb1048fc72e5cc8", + "0x0000000000000000000000000000000000000000000000000000000000003172": "0x8b7399e830da90f2906d5ed832fbab78e3f67db22365a613c3bcb4e2eb6a56ca", + "0x0000000000000000000000000000000000000000000000000000000000003166": "0x4bab5f345c2c5c3fcaf1c769015a69dc4f6be6875a18b73b86b5384be5035ba2", + "0x000000000000000000000000000000000000000000000000000000000000315d": "0x1fb3fd9df8872700e1461d404f77624e2912f14f4d01a47decb1cb5c735b59a1", + "0x000000000000000000000000000000000000000000000000000000000000113f": "0x0000000000000000000000000000000000000000000000000000000069de0235", + "0x000000000000000000000000000000000000000000000000000000000000313a": "0xe3c81d41d740e752eca847c19b48370c2eb6bcf2373a61c573eee2650c5905e8", + "0x000000000000000000000000000000000000000000000000000000000000317b": "0x349018291ead6cd24ea017a94c2fa0233a00bd73c9873b3a2e57fc875d523a73", + "0x000000000000000000000000000000000000000000000000000000000000113b": "0x0000000000000000000000000000000000000000000000000000000069de0231", + "0x0000000000000000000000000000000000000000000000000000000000001152": "0x0000000000000000000000000000000000000000000000000000000069de0248", + "0x000000000000000000000000000000000000000000000000000000000000117d": "0x0000000000000000000000000000000000000000000000000000000069de0273", + "0x0000000000000000000000000000000000000000000000000000000000003154": "0xef37667ecf8c77565764804f09963fe5dc7efff33cf466b24d870648b620b086", + "0x0000000000000000000000000000000000000000000000000000000000003163": "0x6af2ab185207a7e91b9ce25a66a657aa20fe3027d6bc809d1ed7755592188d63", + "0x0000000000000000000000000000000000000000000000000000000000001154": "0x0000000000000000000000000000000000000000000000000000000069de024a", + "0x0000000000000000000000000000000000000000000000000000000000001178": "0x0000000000000000000000000000000000000000000000000000000069de026e", + "0x000000000000000000000000000000000000000000000000000000000000117a": "0x0000000000000000000000000000000000000000000000000000000069de0270", + "0x0000000000000000000000000000000000000000000000000000000000003153": "0x3af616bbfc3195e15117fe8ad53bcea8c40270daecb268e12ef4ceabd4c77683", + "0x000000000000000000000000000000000000000000000000000000000000116f": "0x0000000000000000000000000000000000000000000000000000000069de0265", + "0x000000000000000000000000000000000000000000000000000000000000114c": "0x0000000000000000000000000000000000000000000000000000000069de0242", + "0x0000000000000000000000000000000000000000000000000000000000001166": "0x0000000000000000000000000000000000000000000000000000000069de025c", + "0x000000000000000000000000000000000000000000000000000000000000115d": "0x0000000000000000000000000000000000000000000000000000000069de0253", + "0x0000000000000000000000000000000000000000000000000000000000001165": "0x0000000000000000000000000000000000000000000000000000000069de025b", + "0x0000000000000000000000000000000000000000000000000000000000001175": "0x0000000000000000000000000000000000000000000000000000000069de026b", + "0x000000000000000000000000000000000000000000000000000000000000114f": "0x0000000000000000000000000000000000000000000000000000000069de0245", + "0x000000000000000000000000000000000000000000000000000000000000313e": "0x760a51cbaed0bed7158b30b9df09e39e95405f6ff412389c8d53616571a1bbfd", + "0x000000000000000000000000000000000000000000000000000000000000314b": "0x5f5bca6c6c9456509210ff917ba619e4e7ef5daf3c3561082a08441687ee7494", + "0x0000000000000000000000000000000000000000000000000000000000001179": "0x0000000000000000000000000000000000000000000000000000000069de026f", + "0x000000000000000000000000000000000000000000000000000000000000117e": "0x0000000000000000000000000000000000000000000000000000000069de0274", + "0x0000000000000000000000000000000000000000000000000000000000001183": "0x0000000000000000000000000000000000000000000000000000000069de0279", + "0x0000000000000000000000000000000000000000000000000000000000003174": "0x3cf0b2ef49454ea61fb1d6c6d108636fb64475baefbc7b1de2f828e067bd97d4", + "0x000000000000000000000000000000000000000000000000000000000000117f": "0x0000000000000000000000000000000000000000000000000000000069de0275", + "0x0000000000000000000000000000000000000000000000000000000000003149": "0xac43e76eb2b236a69b357ea8b02bb190f240dba896769ef38327803059ce65f0", + "0x0000000000000000000000000000000000000000000000000000000000001149": "0x0000000000000000000000000000000000000000000000000000000069de023f", + "0x0000000000000000000000000000000000000000000000000000000000001169": "0x0000000000000000000000000000000000000000000000000000000069de025f", + "0x000000000000000000000000000000000000000000000000000000000000115c": "0x0000000000000000000000000000000000000000000000000000000069de0252", + "0x0000000000000000000000000000000000000000000000000000000000001162": "0x0000000000000000000000000000000000000000000000000000000069de0258", + "0x000000000000000000000000000000000000000000000000000000000000116a": "0x0000000000000000000000000000000000000000000000000000000069de0260", + "0x0000000000000000000000000000000000000000000000000000000000001173": "0x0000000000000000000000000000000000000000000000000000000069de0269", + "0x000000000000000000000000000000000000000000000000000000000000113d": "0x0000000000000000000000000000000000000000000000000000000069de0233", + "0x0000000000000000000000000000000000000000000000000000000000003143": "0x99400ef65df18155c3ffb0ff1a379303a3e0d164e61c447de860a896ec26ecd4", + "0x0000000000000000000000000000000000000000000000000000000000003150": "0x236c194c559318220452ceeba08fb01d77ee5e7e806cc7600c96d6696eb641c0", + "0x0000000000000000000000000000000000000000000000000000000000003170": "0xb49127cdb6ea47a382c7d7cac69e44dafdb0ecf90188791b8b71be171e1d192f", + "0x0000000000000000000000000000000000000000000000000000000000003140": "0xcd51c79d3c3fd01f5fe782fd9500c06731dfc841c54469d5fb326fedd5b56438", + "0x0000000000000000000000000000000000000000000000000000000000003145": "0x3a5751c3efd57ef371e24c1a546127fe42549eec6621c5cc8306ea893345580a", + "0x0000000000000000000000000000000000000000000000000000000000001161": "0x0000000000000000000000000000000000000000000000000000000069de0257", + "0x0000000000000000000000000000000000000000000000000000000000003168": "0x3b78fae1b8eacb4a4b2b8269d790ac7e0220cf10d4581f9c4ce7bdd6ed6f8851", + "0x0000000000000000000000000000000000000000000000000000000000003181": "0x96fb83b36fff9b1c2c1628ef09da45ec3768ad92058e2e011ef855298a781f35", + "0x0000000000000000000000000000000000000000000000000000000000001155": "0x0000000000000000000000000000000000000000000000000000000069de024b", + "0x0000000000000000000000000000000000000000000000000000000000003148": "0x4f72924c621530d93d40233d6da10be3ddadd34cfc9597ece9776f67996696cd", + "0x0000000000000000000000000000000000000000000000000000000000001171": "0x0000000000000000000000000000000000000000000000000000000069de0267", + "0x000000000000000000000000000000000000000000000000000000000000116d": "0x0000000000000000000000000000000000000000000000000000000069de0263", + "0x000000000000000000000000000000000000000000000000000000000000313c": "0xec12dca347c574cfb5292ee673b7b8c13d3ac2400a3564f50091875b048fc4f9", + "0x0000000000000000000000000000000000000000000000000000000000001146": "0x0000000000000000000000000000000000000000000000000000000069de023c", + "0x0000000000000000000000000000000000000000000000000000000000003165": "0x48b6071bc085ec9b960e5ecd264ddc52f02ed9680adfe4603af8a7d570758799", + "0x000000000000000000000000000000000000000000000000000000000000313d": "0x03c5a0549dced6d49fac5d2c7a17cc60bb50dca1f625c61af42c05df3f74bdad", + "0x000000000000000000000000000000000000000000000000000000000000117c": "0x0000000000000000000000000000000000000000000000000000000069de0272", + "0x0000000000000000000000000000000000000000000000000000000000001145": "0x0000000000000000000000000000000000000000000000000000000069de023b", + "0x0000000000000000000000000000000000000000000000000000000000001176": "0x0000000000000000000000000000000000000000000000000000000069de026c", + "0x0000000000000000000000000000000000000000000000000000000000003151": "0x462e083866ad80e74edbb18fa8f4a4996dd9fcde454852f134853f06caae989e", + "0x0000000000000000000000000000000000000000000000000000000000001158": "0x0000000000000000000000000000000000000000000000000000000069de024e", + "0x0000000000000000000000000000000000000000000000000000000000001164": "0x0000000000000000000000000000000000000000000000000000000069de025a", + "0x0000000000000000000000000000000000000000000000000000000000001177": "0x0000000000000000000000000000000000000000000000000000000069de026d", + "0x000000000000000000000000000000000000000000000000000000000000315c": "0x5bbfbc93a0611586e6910e51d4067aa7315ff9e3f8674334cb66883badcdaff5", + "0x0000000000000000000000000000000000000000000000000000000000001182": "0x0000000000000000000000000000000000000000000000000000000069de0278", + "0x0000000000000000000000000000000000000000000000000000000000001140": "0x0000000000000000000000000000000000000000000000000000000069de0236", + "0x0000000000000000000000000000000000000000000000000000000000003177": "0xcc812446ab788f5d7488df093956466c354bd3a27b14897116abc707674c4b62", + "0x000000000000000000000000000000000000000000000000000000000000314f": "0x782b33653b13a5eaec2feaa10ef6234c9e40662dc17c7a28a6a957b1aed4e874", + "0x0000000000000000000000000000000000000000000000000000000000001174": "0x0000000000000000000000000000000000000000000000000000000069de026a", + "0x000000000000000000000000000000000000000000000000000000000000314a": "0xd3df069c615dab5f9d59b3c8812e889caafcfff472fb1bf85a39eeeb12ec3e37", + "0x000000000000000000000000000000000000000000000000000000000000317e": "0xc00f74ace21a66696f5ac7c5f7117469047f91de2e0b23b19c5044a3e50b7bc6", + "0x0000000000000000000000000000000000000000000000000000000000001168": "0x0000000000000000000000000000000000000000000000000000000069de025e", + "0x000000000000000000000000000000000000000000000000000000000000317d": "0x3ec7ab1cfb8b11042b919335f20595d39f6baf7efaf9634f593ffeb402200f58", + "0x0000000000000000000000000000000000000000000000000000000000003161": "0x45efc4110f2b275eaf3bb1b5f923e1180b8293897e0a8eb46d3b05254cd04df0", + "0x0000000000000000000000000000000000000000000000000000000000003179": "0xbd65e87f1a91dbed848c9d86363526a6de9e28911160fc6e1d01fa758d860d7c", + "0x0000000000000000000000000000000000000000000000000000000000003171": "0x9c68eac66f53568fe4a112872824f9cc8fedcdf78c7bea3b4c463f9bfc5ceb7d", + "0x0000000000000000000000000000000000000000000000000000000000003164": "0x2bf279981b8bd24b45e2eb5aace23c3a046dfd4bb0c57750861f8b348193fb03", + "0x0000000000000000000000000000000000000000000000000000000000001144": "0x0000000000000000000000000000000000000000000000000000000069de023a", + "0x000000000000000000000000000000000000000000000000000000000000115f": "0x0000000000000000000000000000000000000000000000000000000069de0255", + "0x000000000000000000000000000000000000000000000000000000000000314c": "0x8ee5b8bd45518c9c197137c8680d38d88c034922452d248babb59a18388a6292", + "0x000000000000000000000000000000000000000000000000000000000000317a": "0x18e36e8910134456cddd53b9c225773a7cd07895f5d4c5f57fc181d596b0b2f1", + "0x000000000000000000000000000000000000000000000000000000000000314d": "0xca313efef18791ea49a8f84481901d25a6c3f7e961db40eef8ef10d85d2b294d", + "0x0000000000000000000000000000000000000000000000000000000000001142": "0x0000000000000000000000000000000000000000000000000000000069de0238", + "0x000000000000000000000000000000000000000000000000000000000000313f": "0xe30f908e1d6709f03e153622b5429ae33305e7ea75111c6d3fdcdab05dc11197", + "0x000000000000000000000000000000000000000000000000000000000000114a": "0x0000000000000000000000000000000000000000000000000000000069de0240", + "0x0000000000000000000000000000000000000000000000000000000000003176": "0x1b15f434f0b1b75b6a8154a7f693f8595f31a08755e09b06447ad760c7609c96", + "0x0000000000000000000000000000000000000000000000000000000000001153": "0x0000000000000000000000000000000000000000000000000000000069de0249", + "0x000000000000000000000000000000000000000000000000000000000000113e": "0x0000000000000000000000000000000000000000000000000000000069de0234", + "0x0000000000000000000000000000000000000000000000000000000000001151": "0x0000000000000000000000000000000000000000000000000000000069de0247", + "0x000000000000000000000000000000000000000000000000000000000000114b": "0x0000000000000000000000000000000000000000000000000000000069de0241", + "0x000000000000000000000000000000000000000000000000000000000000115a": "0x0000000000000000000000000000000000000000000000000000000069de0250", + "0x000000000000000000000000000000000000000000000000000000000000314e": "0xb86fee1b333a91dc55498ba2b59e6ae5ca28b32e1f64e33888d30e431c19ab1b" + } + }, + "22": { + "address": "0x95401dc811bb5740090279Ba06cfA8fcF6113778", + "code": "0x608060405234801561000f575f5ffd5b50600436106100cb575f3560e01c806342966c681161008857806395d89b411161006357806395d89b41146101a7578063a457c2d7146101af578063a9059cbb146101c2578063dd62ed3e146101d5575f5ffd5b806342966c681461015757806370a082311461016c57806379cc679014610194575f5ffd5b806306fdde03146100cf578063095ea7b3146100ed57806318160ddd1461011057806323b872dd14610122578063313ce567146101355780633950935114610144575b5f5ffd5b6100d76101e8565b6040516100e49190610826565b60405180910390f35b6101006100fb366004610876565b610278565b60405190151581526020016100e4565b6002545b6040519081526020016100e4565b61010061013036600461089e565b610291565b604051601281526020016100e4565b610100610152366004610876565b6102b4565b61016a6101653660046108d8565b6102d5565b005b61011461017a3660046108ef565b6001600160a01b03165f9081526020819052604090205490565b61016a6101a2366004610876565b6102e2565b6100d76102fb565b6101006101bd366004610876565b61030a565b6101006101d0366004610876565b610389565b6101146101e336600461090f565b610396565b6060600380546101f790610940565b80601f016020809104026020016040519081016040528092919081815260200182805461022390610940565b801561026e5780601f106102455761010080835404028352916020019161026e565b820191905f5260205f20905b81548152906001019060200180831161025157829003601f168201915b5050505050905090565b5f336102858185856103c0565b60019150505b92915050565b5f3361029e8582856104e4565b6102a985858561055c565b506001949350505050565b5f336102858185856102c68383610396565b6102d09190610978565b6103c0565b6102df33826106fe565b50565b6102ed8233836104e4565b6102f782826106fe565b5050565b6060600480546101f790610940565b5f33816103178286610396565b90508381101561037c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084015b60405180910390fd5b6102a982868684036103c0565b5f3361028581858561055c565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6001600160a01b0383166104225760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610373565b6001600160a01b0382166104835760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610373565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b5f6104ef8484610396565b90505f19811461055657818110156105495760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610373565b61055684848484036103c0565b50505050565b6001600160a01b0383166105c05760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610373565b6001600160a01b0382166106225760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610373565b6001600160a01b0383165f90815260208190526040902054818110156106995760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610373565b6001600160a01b038481165f81815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610556565b6001600160a01b03821661075e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610373565b6001600160a01b0382165f90815260208190526040902054818110156107d15760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610373565b6001600160a01b0383165f818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016104d7565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610871575f5ffd5b919050565b5f5f60408385031215610887575f5ffd5b6108908361085b565b946020939093013593505050565b5f5f5f606084860312156108b0575f5ffd5b6108b98461085b565b92506108c76020850161085b565b929592945050506040919091013590565b5f602082840312156108e8575f5ffd5b5035919050565b5f602082840312156108ff575f5ffd5b6109088261085b565b9392505050565b5f5f60408385031215610920575f5ffd5b6109298361085b565b91506109376020840161085b565b90509250929050565b600181811c9082168061095457607f821691505b60208210810361097257634e487b7160e01b5f52602260045260245ffd5b50919050565b8082018082111561028b57634e487b7160e01b5f52601160045260245ffdfea26469706673582212200294a24180b18f81e47bb4c278ebbaa0cad18043e20afac6f0159b7940a7867a64736f6c634300081c003300", + "storage": { + "0xd19bcde47e0ffe1c643525c3cff070e266ec404a07f499b41fcbc480ff16fff7": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000069e10de76676d0800000", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x54657374546f6b656e0000000000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x5445535400000000000000000000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000" + } + }, + "23": { + "address": "0x7a2088a1bFc9d81c55368AE168C2C02570cB814F", + "code": "0x6080604052600436106101f1575f3560e01c8063886f119511610108578063a6a509be1161009d578063f2fde38b1161006d578063f2fde38b1461062e578063f5d4fed31461064d578063f6848d2414610662578063fabc1cbc1461069b578063fe243a17146106ba575f5ffd5b8063a6a509be1461059c578063cd6dc687146105b1578063d48e8894146105d0578063ea4d3c9b146105fb575f5ffd5b80639ba06275116100d85780639ba062751461050b578063a1ca780b1461053f578063a38406a31461055e578063a3d75e091461057d575f5ffd5b8063886f1195146104815780638da5cb5b146104b45780639104c319146104d15780639b4e4634146104f8575f5ffd5b8063595c6a67116101895780635c975abb116101595780635c975abb146103e9578063715018a614610407578063724af4231461041b57806374cdd7981461043a57806384d810621461046d575f5ffd5b8063595c6a6714610358578063595edbcb1461036c5780635a26fbf41461038b5780635ac86ab7146103aa575f5ffd5b80632eae418c116101c45780632eae418c146102c55780633fb99ca5146102e457806350ff72251461030357806354fd4d5014610337575f5ffd5b80630d1e9de1146101f5578063136439dd146102165780632704351a14610235578063292b7b2b1461027a575b5f5ffd5b348015610200575f5ffd5b5061021461020f366004611d7e565b6106d9565b005b348015610221575f5ffd5b50610214610230366004611d99565b610736565b348015610240575f5ffd5b50609f5461025c90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020015b60405180910390f35b348015610285575f5ffd5b506102ad7f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c181565b6040516001600160a01b039091168152602001610271565b3480156102d0575f5ffd5b506102146102df366004611db0565b610770565b3480156102ef575f5ffd5b506102146102fe366004611dfe565b6109c9565b34801561030e575f5ffd5b5061032261031d366004611e48565b610a6d565b60408051928352602083019190915201610271565b348015610342575f5ffd5b5061034b610b1d565b6040516102719190611e86565b348015610363575f5ffd5b50610214610b4d565b348015610377575f5ffd5b50609f546102ad906001600160a01b031681565b348015610396575f5ffd5b506102146103a5366004611ebb565b610b61565b3480156103b5575f5ffd5b506103d96103c4366004611ee2565b606654600160ff9092169190911b9081161490565b6040519015158152602001610271565b3480156103f4575f5ffd5b506066545b604051908152602001610271565b348015610412575f5ffd5b50610214610be8565b348015610426575f5ffd5b506103f9610435366004611e48565b610bf9565b348015610445575f5ffd5b506102ad7f000000000000000000000000c7f2cf4845c6db0e1a1e91ed41bcd0fcc1b0e14181565b348015610478575f5ffd5b506102ad610d3e565b34801561048c575f5ffd5b506102ad7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b3480156104bf575f5ffd5b506033546001600160a01b03166102ad565b3480156104dc575f5ffd5b506102ad73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610214610506366004611f40565b610da1565b348015610516575f5ffd5b506102ad610525366004611d7e565b60986020525f90815260409020546001600160a01b031681565b34801561054a575f5ffd5b50610214610559366004611fb3565b610e52565b348015610569575f5ffd5b506102ad610578366004611d7e565b611073565b348015610588575f5ffd5b5061025c610597366004611d7e565b611144565b3480156105a7575f5ffd5b506103f960995481565b3480156105bc575f5ffd5b506102146105cb366004611fe5565b6111a4565b3480156105db575f5ffd5b506103f96105ea366004611d7e565b609b6020525f908152604090205481565b348015610606575f5ffd5b506102ad7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b348015610639575f5ffd5b50610214610648366004611d7e565b6112c0565b348015610658575f5ffd5b506103f9609e5481565b34801561066d575f5ffd5b506103d961067c366004611d7e565b6001600160a01b039081165f9081526098602052604090205416151590565b3480156106a6575f5ffd5b506102146106b5366004611d99565b611339565b3480156106c5575f5ffd5b506103f96106d436600461200f565b6113a6565b6106e1611426565b609f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f7025c71a9fe60d709e71b377dc5f7c72c3e1d8539f8022574254e736ceca01e5906020015b60405180910390a150565b61073e611480565b60665481811681146107635760405163c61dca5d60e01b815260040160405180910390fd5b61076c82611523565b5050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146107b95760405163f739589b60e01b815260040160405180910390fd5b6107c1611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146107fe57604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b038416610825576040516339b190bb60e11b815260040160405180910390fd5b5f81136108455760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490829082121561093f575f6108718361205a565b90505f8185111561088f5750806108888186612074565b9250610895565b505f9150835b5f6108a08286612087565b6001600160a01b038a165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906108f09085815260200190565b60405180910390a2886001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe0770988260405161093391815260200190565b60405180910390a25050505b80156109b7576001600160a01b038681165f81815260986020526040908190205490516362483a2160e11b81526004810192909252602482018490529091169063c4907442906044015b5f604051808303815f87803b1580156109a0575f5ffd5b505af11580156109b2573d5f5f3e3d5ffd5b505050505b50506109c3600160c955565b50505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610a125760405163f739589b60e01b815260040160405180910390fd5b610a1a611560565b80609e5f828254610a2b91906120ae565b90915550506040518181527f1ed04b7fd262c0d9e50fa02957f32a81a151f03baaa367faeedc7521b001c4a49060200160405180910390a16109c3600160c955565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610ab85760405163f739589b60e01b815260040160405180910390fd5b610ac0611560565b6001600160a01b03841673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610afd57604051632711b74d60e11b815260040160405180910390fd5b610b0785846115b9565b91509150610b15600160c955565b935093915050565b6060610b487f76312e302e300000000000000000000000000000000000000000000000000006611700565b905090565b610b55611480565b610b5f5f19611523565b565b609f546001600160a01b03163314610b8c57604051630986113760e41b815260040160405180910390fd5b609f805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040519081527f1bc8f042a52db3a437620dea4548f2031fb2a16dd8d3b0b854295528dd2cdd339060200161072b565b610bf0611426565b610b5f5f61173d565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610c435760405163f739589b60e01b815260040160405180910390fd5b610c4b611560565b6001600160a01b03831673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014610c8857604051632711b74d60e11b815260040160405180910390fd5b5f610c928361178e565b6001600160a01b0386165f908152609b6020526040902054610cb491906120c1565b90505f811215610cd75760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0385165f818152609b602052604090819020839055517fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe07709890610d239084815260200190565b60405180910390a29050610d37600160c955565b9392505050565b5f5f610d49816117f7565b610d51611560565b335f908152609860205260409020546001600160a01b031615610d875760405163031a852160e21b815260040160405180910390fd5b5f610d90611822565b925050610d9d600160c955565b5090565b5f610dab816117f7565b610db3611560565b335f908152609860205260409020546001600160a01b031680610ddb57610dd8611822565b90505b6040516326d3918d60e21b81526001600160a01b03821690639b4e4634903490610e11908b908b908b908b908b9060040161210f565b5f604051808303818588803b158015610e28575f5ffd5b505af1158015610e3a573d5f5f3e3d5ffd5b505050505050610e4a600160c955565b505050505050565b6001600160a01b038084165f908152609860205260409020548491163314610e8d576040516312e16d7160e11b815260040160405180910390fd5b610e95611560565b6001600160a01b038416610ebc576040516339b190bb60e11b815260040160405180910390fd5b610eca633b9aca008361215c565b15610ee8576040516347d072bb60e11b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205490811215610f2157604051634b692bcf60e01b815260040160405180910390fd5b5f831315610fe2575f5f610f3587866115b9565b604051631e328e7960e11b81526001600160a01b038a8116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b158015610fc5575f5ffd5b505af1158015610fd7573d5f5f3e3d5ffd5b505050505050611068565b5f831215611068575f610ffe8686610ff98761205a565b61197d565b60405163305068e760e11b81526001600160a01b0388811660048301526024820185905267ffffffffffffffff831660448301529192507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd82909116906360a0d1ce90606401610989565b506109c3600160c955565b6001600160a01b038082165f908152609860205260408120549091168061113e5761113b836001600160a01b03165f1b60405180610940016040528061090e815260200161222161090e9139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526111209291602001612192565b60405160208183030381529060405280519060200120611a76565b90505b92915050565b6001600160a01b0381165f908152609d6020908152604080832081518083019092525460ff8116151580835261010090910467ffffffffffffffff16928201929092529061119a57670de0b6b3a7640000610d37565b6020015192915050565b5f54610100900460ff16158080156111c257505f54600160ff909116105b806111db5750303b1580156111db57505f5460ff166001145b6112435760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015611264575f805461ff0019166101001790555b61126d8361173d565b61127682611523565b80156112bb575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6112c8611426565b6001600160a01b03811661132d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161123a565b6113368161173d565b50565b611341611a82565b606654801982198116146113685760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146113e457604051632711b74d60e11b815260040160405180910390fd5b6001600160a01b0383165f908152609b60205260408120541261141e576001600160a01b0383165f908152609b602052604090205461113b565b505f92915050565b6033546001600160a01b03163314610b5f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161123a565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156114e2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061150691906121ae565b610b5f57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b600260c954036115b25760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161123a565b600260c955565b5f806001600160a01b0384166115e2576040516339b190bb60e11b815260040160405180910390fd5b5f8312156116035760405163ef147de160e01b815260040160405180910390fd5b6001600160a01b0384165f908152609b602052604081205484916116278383612087565b6001600160a01b0388165f818152609b60205260409081902083905551919250907f4e2b791dedccd9fb30141b088cabf5c14a8912b52f59375c95c010700b8c6193906116779086815260200190565b60405180910390a2866001600160a01b03167fd4def76d6d2bed6f14d5cd9af73cc2913d618d00edde42432e81c09bfe077098826040516116ba91815260200190565b60405180910390a25f81136116d7575f5f945094505050506116f9565b5f8212156116ec575f945092506116f9915050565b5092508391506116f99050565b9250929050565b60605f61170c83611b33565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6001600160ff1b03821115610d9d5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b606482015260840161123a565b606654600160ff83161b908116036113365760405163840a48d560e01b815260040160405180910390fd5b5f60995f8154611831906121cd565b9091555060408051610940810190915261090e8082525f916118ce91839133916122216020830139604080516001600160a01b037f0000000000000000000000004ed7c70f96b99c776995fb64377f0d4ab3b0e1c1166020820152808201919091525f606082015260800160408051601f19818403018152908290526118ba9291602001612192565b604051602081830303815290604052611b5a565b60405163189acdbd60e31b81523360048201529091506001600160a01b0382169063c4d66de8906024015f604051808303815f87803b15801561190f575f5ffd5b505af1158015611921573d5f5f3e3d5ffd5b5050335f8181526098602052604080822080546001600160a01b0319166001600160a01b038816908117909155905192945092507f21c99d0db02213c32fff5b05cf0a718ab5f858802b91498f80d82270289d856a91a3919050565b5f806119898385612074565b90505f61199586611144565b90505f6119ad67ffffffffffffffff83168488611c5c565b90505f6119ba82846121e5565b6040805180820182526001815267ffffffffffffffff85811660208084018281526001600160a01b038f165f818152609d845287902095518654925168ffffffffffffffffff1990931690151568ffffffffffffffff001916176101009286169290920291909117909455845193845291881691830191909152918101919091529091507fb160ab8589bf47dc04ea11b50d46678d21590cea2ed3e454e7bd3e41510f98cf9060600160405180910390a1979650505050505050565b5f61113b838330611d41565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ade573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b029190612205565b6001600160a01b0316336001600160a01b031614610b5f5760405163794821ff60e01b815260040160405180910390fd5b5f60ff8216601f81111561113e57604051632cd44ac360e21b815260040160405180910390fd5b5f83471015611bab5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e6365000000604482015260640161123a565b81515f03611bfb5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f604482015260640161123a565b8282516020840186f590506001600160a01b038116610d375760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f7900000000000000604482015260640161123a565b5f80805f19858709858702925082811083820303915050805f03611c9357838281611c8957611c89612148565b0492505050610d37565b808411611cda5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b604482015260640161123a565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6001600160a01b0381168114611336575f5ffd5b5f60208284031215611d8e575f5ffd5b8135610d3781611d6a565b5f60208284031215611da9575f5ffd5b5035919050565b5f5f5f5f60808587031215611dc3575f5ffd5b8435611dce81611d6a565b93506020850135611dde81611d6a565b92506040850135611dee81611d6a565b9396929550929360600135925050565b5f5f5f5f84860360a0811215611e12575f5ffd5b6040811215611e1f575f5ffd5b50849350604084013592506060840135611e3881611d6a565b9396929550929360800135925050565b5f5f5f60608486031215611e5a575f5ffd5b8335611e6581611d6a565b92506020840135611e7581611d6a565b929592945050506040919091013590565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215611ecb575f5ffd5b813567ffffffffffffffff81168114610d37575f5ffd5b5f60208284031215611ef2575f5ffd5b813560ff81168114610d37575f5ffd5b5f5f83601f840112611f12575f5ffd5b50813567ffffffffffffffff811115611f29575f5ffd5b6020830191508360208285010111156116f9575f5ffd5b5f5f5f5f5f60608688031215611f54575f5ffd5b853567ffffffffffffffff811115611f6a575f5ffd5b611f7688828901611f02565b909650945050602086013567ffffffffffffffff811115611f95575f5ffd5b611fa188828901611f02565b96999598509660400135949350505050565b5f5f5f60608486031215611fc5575f5ffd5b8335611fd081611d6a565b95602085013595506040909401359392505050565b5f5f60408385031215611ff6575f5ffd5b823561200181611d6a565b946020939093013593505050565b5f5f60408385031215612020575f5ffd5b823561202b81611d6a565b9150602083013561203b81611d6a565b809150509250929050565b634e487b7160e01b5f52601160045260245ffd5b5f600160ff1b820161206e5761206e612046565b505f0390565b8181038181111561113e5761113e612046565b8082018281125f8312801582168215821617156120a6576120a6612046565b505092915050565b8082018082111561113e5761113e612046565b8181035f8312801583831316838312821617156120e0576120e0612046565b5092915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b606081525f6121226060830187896120e7565b82810360208401526121358186886120e7565b9150508260408301529695505050505050565b634e487b7160e01b5f52601260045260245ffd5b5f8261217657634e487b7160e01b5f52601260045260245ffd5b500790565b5f81518060208401855e5f93019283525090919050565b5f6121a66121a0838661217b565b8461217b565b949350505050565b5f602082840312156121be575f5ffd5b81518015158114610d37575f5ffd5b5f600182016121de576121de612046565b5060010190565b67ffffffffffffffff828116828216039081111561113e5761113e612046565b5f60208284031215612215575f5ffd5b8151610d3781611d6a56fe608060405260405161090e38038061090e83398101604081905261002291610460565b61002e82826000610035565b505061058a565b61003e83610100565b6040516001600160a01b038416907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e90600090a260008251118061007f5750805b156100fb576100f9836001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100e99190610520565b836102a360201b6100291760201c565b505b505050565b610113816102cf60201b6100551760201c565b6101725760405162461bcd60e51b815260206004820152602560248201527f455243313936373a206e657720626561636f6e206973206e6f74206120636f6e6044820152641d1c9858dd60da1b60648201526084015b60405180910390fd5b6101e6816001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101d79190610520565b6102cf60201b6100551760201c565b61024b5760405162461bcd60e51b815260206004820152603060248201527f455243313936373a20626561636f6e20696d706c656d656e746174696f6e206960448201526f1cc81b9bdd08184818dbdb9d1c9858dd60821b6064820152608401610169565b806102827fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5060001b6102de60201b6100641760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b60606102c883836040518060600160405280602781526020016108e7602791396102e1565b9392505050565b6001600160a01b03163b151590565b90565b6060600080856001600160a01b0316856040516102fe919061053b565b600060405180830381855af49150503d8060008114610339576040519150601f19603f3d011682016040523d82523d6000602084013e61033e565b606091505b5090925090506103508683838761035a565b9695505050505050565b606083156103c65782516103bf576001600160a01b0385163b6103bf5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610169565b50816103d0565b6103d083836103d8565b949350505050565b8151156103e85781518083602001fd5b8060405162461bcd60e51b81526004016101699190610557565b80516001600160a01b038116811461041957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101561044f578181015183820152602001610437565b838111156100f95750506000910152565b6000806040838503121561047357600080fd5b61047c83610402565b60208401519092506001600160401b038082111561049957600080fd5b818501915085601f8301126104ad57600080fd5b8151818111156104bf576104bf61041e565b604051601f8201601f19908116603f011681019083821181831017156104e7576104e761041e565b8160405282815288602084870101111561050057600080fd5b610511836020830160208801610434565b80955050505050509250929050565b60006020828403121561053257600080fd5b6102c882610402565b6000825161054d818460208701610434565b9190910192915050565b6020815260008251806020840152610576816040850160208701610434565b601f01601f19169190910160400192915050565b61034e806105996000396000f3fe60806040523661001357610011610017565b005b6100115b610027610022610067565b610100565b565b606061004e83836040518060600160405280602781526020016102f260279139610124565b9392505050565b6001600160a01b03163b151590565b90565b600061009a7fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50546001600160a01b031690565b6001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100fb9190610249565b905090565b3660008037600080366000845af43d6000803e80801561011f573d6000f35b3d6000fd5b6060600080856001600160a01b03168560405161014191906102a2565b600060405180830381855af49150503d806000811461017c576040519150601f19603f3d011682016040523d82523d6000602084013e610181565b606091505b50915091506101928683838761019c565b9695505050505050565b6060831561020d578251610206576001600160a01b0385163b6102065760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064015b60405180910390fd5b5081610217565b610217838361021f565b949350505050565b81511561022f5781518083602001fd5b8060405162461bcd60e51b81526004016101fd91906102be565b60006020828403121561025b57600080fd5b81516001600160a01b038116811461004e57600080fd5b60005b8381101561028d578181015183820152602001610275565b8381111561029c576000848401525b50505050565b600082516102b4818460208701610272565b9190910192915050565b60208152600082518060208401526102dd816040850160208701610272565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220d51e81d3bc5ed20a26aeb05dce7e825c503b2061aa78628027300c8d65b9d89a64736f6c634300080c0033416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220fe49c3bbb4c8ae3857e9da2c037ca93049f5f5931a49706e5b29c897d23875e264736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "20": { + "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", + "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784" + } + }, + "27": { + "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "3": { + "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", + "code": "0x608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613a33565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613aab565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613b07565b610e25565b6104157f0000000000000000000000000000000000000000000000000000000065fb788081565b61043d6104d4366004613b3e565b610ea5565b6104ec6104e7366004613b55565b610edf565b6040519081526020016103e5565b610522610508366004613a33565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b6f565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000076a70081565b6105227f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613bbe565b6110c5565b61043d6105d3366004613c14565b6110ec565b61043d6105e6366004613c3e565b6112c2565b6105227f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b610625610620366004613a33565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c90565b61043d610672366004613cc5565b6113b0565b61043d6113c4565b6103d961068d366004613cde565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cfe565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613d2f565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d366004613a33565b611474565b6104ec610730366004613d59565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d85565b611521565b6104157f000000000000000000000000000000000000000000000000000000000001518081565b6106256107ef366004613dbc565b61169c565b61043d610802366004613a33565b61171f565b61043d610815366004613df8565b61172a565b6103d9610828366004613d2f565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613e11565b61173b565b6104ec610868366004613a33565b60ce6020525f908152604090205481565b6104157f00000000000000000000000000000000000000000000000000000000005c490081565b6103d96108ae366004613d2f565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b61043d610902366004613e3b565b611866565b610447610915366004613b3e565b6119b3565b610625610928366004613d59565b611a43565b61041561093b366004613b3e565b611aa8565b6105227f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6103d9610975366004613d2f565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d59565b611b29565b6103d96109b5366004613d2f565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613a33565b611c93565b61043d6109f5366004613e7f565b611d0e565b61043d610a08366004613edd565b611e43565b6104ec610a1b366004613b55565b61200a565b61043d610a2e366004613cc5565b61201a565b61043d610a41366004613b3e565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b6f565b6121b8565b61043d610a7a366004613b6f565b6122e9565b6009610a8a8161244a565b610a976020850185613a33565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890610b11908890600401613f48565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f56565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f71565b9050602002810190610b9c9190613f85565b90505f60ce81610baf60208b018b613a33565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a613a33565b8284604051602001610bee939291906141ad565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e613a33565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141f0565b60ce5f610c7360208e018e613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd493929190614203565b60405180910390a3610d03333083610cf26040890160208a01613a33565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d60600184614228565b81548110610d7057610d70613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df58161423b565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee6020840184613a33565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f71565b9050602002810190610fc59190614250565b335f81815260ce60209081526040808320549051949550939192610fef92909185918791016142e2565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141f0565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290611089908890614308565b60405180910390a46110aa333060408601803590610cf29060208901613a33565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff164261431a565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f71565b90506020028101906113069190614336565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f76312e302e300000000000000000000000000000000000000000000000000006612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613cc5565b63ffffffff168154811061140257611402613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b890600190614228565b815481106114c8576114c8613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f71565b905060200281019061158a9190613f85565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b9185918791016141ad565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141f0565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a9061434a565b60405180910390a461168c333083610cf26040890160208a01613a33565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca36879003870187614362565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff164261431a565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff164261431a565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac86001846143ca565b63ffffffff1681548110611ade57611ade613f71565b905f5260205f2090600202015f015403611afd576117186001826143ca565b80611b07816143e6565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f56565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed9091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a9190614404565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890611ec1908790600401613f48565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f56565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff164261431a565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b614362565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b614362565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff9949392919061441b565b60405180910390a350505050505050565b5f6001610eee6020840184613a33565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f71565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f71565b90506020028101906121f99190614250565b335f81815260ce6020908152604080832054905194955093919261222392909185918791016142e2565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141f0565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd908890614308565b60405180910390a46122de333060408601803590610cf29060208901613a33565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f71565b905060200281019061235a9190614250565b335f81815260ce6020908152604080832054905194955093919261238492909185918791016142e2565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141f0565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e908890614308565b60405180910390a461243f333060408601803590610cf29060208901613a33565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f56565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061444f565b6125966080860160608701613cc5565b6125a660a0870160808801613cc5565b613299565b5f6125b9604084018461444f565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613cc5565b6125fa6080850160608601613cc5565b612604919061431a565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661444f565b905081101561272a5736612650604087018761444f565b8381811061266057612660613f71565b6040029190910191505f90506126796020830183613a33565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad6020820182613a33565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f6020820182613a33565b925061271f6020820135856141f0565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f56565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061444f565b6129256080850160608601613cc5565b6125a660a0860160808701613cc5565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f0000000000000000000000000000000000000000000000000000000000278d0016426141f0565b6129ce6080830160608401613cc5565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613cc5565b63ffffffff1681548110612a1957612a19613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a6080850160608601613a33565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614494565b9050811015611e3b5736612afe60e088018861444f565b83818110612b0e57612b0e613f71565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b4290850185613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b97826020850135614228565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc49087613a33565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf590870187613a33565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c496020890189613a33565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614494565b9050612e0360a0840184614494565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361444f565b9050612e3f60c0840184614494565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613cc5565b612e8260408601866144d9565b866060016136c1565b5f5b612e9a60a0840184614494565b90508110156110c057612f346080840135612eb860a0860186614494565b84818110612ec857612ec8613f71565b9050602002016020810190612edd9190613cc5565b612eea60c0870187614494565b85818110612efa57612efa613f71565b9050602002810190612f0c91906144d9565b612f1960e089018961444f565b87818110612f2957612f29613f71565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a9061451b565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613268919061453e565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000005c490063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f00000000000000000000000000000000000000000000000000000000000151808261456d565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f00000000000000000000000000000000000000000000000000000000000151808361456d565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426133ff9190614228565b1115801561343957508163ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f71565b61348a9260206040909202019081019150613a33565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f56565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f56565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614594565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614594565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137ee565b949350505050565b5f836137d8576040516329e7276760e11b815260040160405180910390fd5b836137e48685856138c5565b1495945050505050565b60608247101561384f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161386a91906145a7565b5f6040518083038185875af1925050503d805f81146138a4576040519150601f19603f3d011682016040523d82523d5f602084013e6138a9565b606091505b50915091506138ba87838387613982565b979650505050505050565b5f83515f036138d5575081611718565b602084516138e391906145bd565b15613901576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613962576139186002856145bd565b5f0361393957815f528086015160205260405f209150600284049350613950565b808601515f528160205260405f2091506002840493505b61395b6020826141f0565b9050613905565b5082156137b1576040516363df817160e01b815260040160405180910390fd5b606083156139f05782515f036139e9576001600160a01b0385163b6139e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b18383815115613a055781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c90565b6001600160a01b03811681146113c1575f5ffd5b5f60208284031215613a43575f5ffd5b813561171881613a1f565b5f60408284031215613a5e575f5ffd5b50919050565b5f5f83601f840112613a74575f5ffd5b5081356001600160401b03811115613a8a575f5ffd5b6020830191508360208260051b8501011115613aa4575f5ffd5b9250929050565b5f5f5f60608486031215613abd575f5ffd5b613ac78585613a4e565b925060408401356001600160401b03811115613ae1575f5ffd5b613aed86828701613a64565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613b18575f5ffd5b8235613b2381613a1f565b91506020830135613b3381613afa565b809150509250929050565b5f60208284031215613b4e575f5ffd5b5035919050565b5f60408284031215613b65575f5ffd5b6117188383613a4e565b5f5f60208385031215613b80575f5ffd5b82356001600160401b03811115613b95575f5ffd5b613ba185828601613a64565b90969095509350505050565b5f6101008284031215613a5e575f5ffd5b5f5f60408385031215613bcf575f5ffd5b82356001600160401b03811115613be4575f5ffd5b613bf085828601613bad565b9250506020830135613b3381613a1f565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613c25575f5ffd5b82359150613c3560208401613c01565b90509250929050565b5f5f5f60408486031215613c50575f5ffd5b83356001600160401b03811115613c65575f5ffd5b613c7186828701613a64565b9094509250506020840135613c8581613a1f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613cd5575f5ffd5b61171882613c01565b5f60208284031215613cee575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613d0e575f5ffd5b81356001600160401b03811115613d23575f5ffd5b6137b184828501613bad565b5f5f60408385031215613d40575f5ffd5b8235613d4b81613a1f565b946020939093013593505050565b5f5f60408385031215613d6a575f5ffd5b8235613d7581613a1f565b91506020830135613b3381613a1f565b5f5f5f60408486031215613d97575f5ffd5b8335613da281613a1f565b925060208401356001600160401b03811115613ae1575f5ffd5b5f5f60608385031215613dcd575f5ffd5b8235613dd881613a1f565b9150613c358460208501613a4e565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613e08575f5ffd5b61171882613de7565b5f5f60408385031215613e22575f5ffd5b8235613e2d81613a1f565b9150613c3560208401613de7565b5f5f5f60608486031215613e4d575f5ffd5b8335613e5881613a1f565b92506020840135613e6881613a1f565b9150613e7660408501613de7565b90509250925092565b5f5f5f5f5f60a08688031215613e93575f5ffd5b8535613e9e81613a1f565b9450602086013593506040860135613eb581613a1f565b9250613ec360608701613c01565b9150613ed160808701613de7565b90509295509295909350565b5f5f5f60808486031215613eef575f5ffd5b8335613efa81613a1f565b9250613f098560208601613a4e565b9150613e7660608501613de7565b8035613f2281613a1f565b6001600160a01b0316825263ffffffff613f3e60208301613c01565b1660208301525050565b6040810161137a8284613f17565b5f60208284031215613f66575f5ffd5b815161171881613afa565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f99575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613fb8575f5ffd5b83016020810192503590506001600160401b03811115613fd6575f5ffd5b8060061b3603821315613aa4575f5ffd5b8183526020830192505f815f5b8481101561404a57813561400781613a1f565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214614031575f5ffd5b6020880152506040958601959190910190600101613ff4565b5093949350505050565b5f5f8335601e19843603018112614069575f5ffd5b83016020810192503590506001600160401b03811115614087575f5ffd5b803603821315613aa4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140c88283613fa3565b60c085526140da60c086018284613fe7565b91505060208301356140eb81613a1f565b6001600160a01b031660208501526141066040840184613fa3565b858303604087015280835290915f91906020015b8183101561415557833561412d81613a1f565b6001600160a01b0316815260208481013590820152604093840193600193909301920161411a565b61416160608701613c01565b63ffffffff81166060890152935061417b60808701613c01565b63ffffffff81166080890152935061419660a0870187614054565b9450925086810360a08801526138ba818585614095565b60018060a01b0384168152826020820152606060408201525f6141d360608301846140bd565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a6141dc565b61420d8185613f17565b826040820152608060608201525f6141d360808301846140bd565b8181038181111561137a5761137a6141dc565b5f81614249576142496141dc565b505f190190565b5f8235609e19833603018112613f99575f5ffd5b5f61426f8283613fa3565b60a0855261428160a086018284613fe7565b915050602083013561429281613a1f565b6001600160a01b031660208501526040838101359085015263ffffffff6142bb60608501613c01565b16606085015263ffffffff6142d260808501613c01565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f6141d36060830184614264565b602081525f6117186020830184614264565b63ffffffff818116838216019081111561137a5761137a6141dc565b5f823560fe19833603018112613f99575f5ffd5b828152604060208201525f6137b160408301846140bd565b5f6040828403128015614373575f5ffd5b50604080519081016001600160401b03811182821017156143a257634e487b7160e01b5f52604160045260245ffd5b60405282356143b081613a1f565b81526143be60208401613c01565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a6141dc565b5f63ffffffff8216806143fb576143fb6141dc565b5f190192915050565b5f60208284031215614414575f5ffd5b5051919050565b60a081016144298287613f17565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614464575f5ffd5b8301803591506001600160401b0382111561447d575f5ffd5b6020019150600681901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144a9575f5ffd5b8301803591506001600160401b038211156144c2575f5ffd5b6020019150600581901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144ee575f5ffd5b8301803591506001600160401b03821115614507575f5ffd5b602001915036819003821315613aa4575f5ffd5b80516020808301519190811015613a5e575f1960209190910360031b1b16919050565b5f6020828403121561454e575f5ffd5b815161171881613a1f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061458257614582614559565b8063ffffffff84160691505092915050565b5f826145a2576145a2614559565b500490565b5f82518060208501845e5f920191825250919050565b5f826145cb576145cb614559565b50069056fea26469706673582212209764e0fe3693a179c5f7a81fc907220c85c1a49189bc26fd152ee3a6c5a36b1e64736f6c634300081c0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "32": { + "address": "0x998abeb3E57409262aE5b751f60747921B33613E", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36" + } + }, + "1": { + "address": "0x2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6", + "code": "0x732279b7a0a67db372996a5fab50d91eaa73d2ebe63014608060405260043610610034575f3560e01c8063a3499c7314610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610230565b610059565b005b61006b836001600160a01b03166101b3565b610088576040516303777f6960e51b815260040160405180910390fd5b81836001600160a01b03163f146100b2576040516323e13ec960e21b815260040160405180910390fd5b6100da837f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55565b5f5f846001600160a01b0316836040516024016100f79190610309565b60408051601f198184030181529181526020820180516001600160e01b031663439fab9160e01b1790525161012c919061033e565b5f60405180830381855af49150503d805f8114610164576040519150601f19603f3d011682016040523d82523d5f602084013e610169565b606091505b509150915061017882826101fd565b506040516001600160a01b038616907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a25050505050565b5f6001600160a01b0382163f158015906101f757507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706001600160a01b0383163f14155b92915050565b6060821561020c5750806101f7565b8151156100345781518083602001fd5b634e487b7160e01b5f52604160045260245ffd5b5f5f5f60608486031215610242575f5ffd5b83356001600160a01b0381168114610258575f5ffd5b925060208401359150604084013567ffffffffffffffff81111561027a575f5ffd5b8401601f8101861361028a575f5ffd5b803567ffffffffffffffff8111156102a4576102a461021c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156102d3576102d361021c565b6040528181528282016020018810156102ea575f5ffd5b816020840160208301375f602083830101528093505050509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f82518060208501845e5f92019182525091905056fea26469706673582212204f9eff25a489952d6ace57dae13f4311e26f51d13db35754950e1446aa6c4c3264736f6c634300081c003300", + "storage": {} + }, + "26": { + "address": "0x0B306BF915C4d645ff596e518fAf3F9669b97016", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000004a679253410272dd5232b3ff7cf5dbb88f295319", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "10": { + "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", + "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bfdf80ca4b361e8018a5f82c2bf79ca0703b2a580a1928bf0168143ae266103964736f6c634300081c0033000000000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "34": { + "address": "0x9A9f2CCfdE556A7E9Ff0848998Aa4a0CFD8863AE", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x00000000000000000000000009635f643e140090a9a8dcd712ed6285858cebef", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x000003e80000000000001c2090f79bf6eb2c4f870365e785982e1f101e93b906" + } + }, + "37": { + "address": "0xac06641381166cf085281c45292147f833C622d7", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", + "storage": {} + }, + "41": { + "address": "0xDc64a140Aa3E981100a9becA4E685f962f0cF6C9", + "code": "0x73dc64a140aa3e981100a9beca4e685f962f0cf6c93014608060405260043610610090575f3560e01c8063741fad8811610063578063741fad88146101125780638257f3d514610131578063ae8a4d9814610150578063c31308d11461016f575f5ffd5b80630c86ea461461009457806325394645146100b55780635b2e9c4c146100d457806365529675146100f3575b5f5ffd5b81801561009f575f5ffd5b506100b36100ae366004610a3a565b61018e565b005b8180156100c0575f5ffd5b506100b36100cf366004610a3a565b610229565b8180156100df575f5ffd5b506100b36100ee366004610a3a565b6102af565b8180156100fe575f5ffd5b506100b361010d366004610a8f565b610337565b81801561011d575f5ffd5b506100b361012c366004610adf565b6103aa565b81801561013c575f5ffd5b506100b361014b366004610a3a565b610433565b81801561015b575f5ffd5b506100b361016a366004610a3a565b6104c4565b81801561017a575f5ffd5b506100b3610189366004610a8f565b6104ee565b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f65f6101bc84840185610baf565b8051835560208101516001840180546fffffffffffffffffffffffffffffffff19166001600160801b039092169190911790556040808201516002850155519091507f5e3c25378b5946068b94aa2ea10c4c1e215cc975f994322b159ddc9237a973d4905f90a150505050565b5f61023682840184610c6d565b80516020820151604080840151905163a3499c7360e01b8152939450732279b7a0a67db372996a5fab50d91eaa73d2ebe69363a3499c739361027e9390929091600401610d22565b5f6040518083038186803b158015610294575f5ffd5b505af41580156102a6573d5f5f3e3d5ffd5b50505050505050565b7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e5f6102dd84840185610d51565b805160208201516001600160801b03908116600160801b0291161760028401556040808201516003850155519091507f4793c0cb5bef4b1fdbbfbcf17e06991844eb881088b012442af17a12ff38d5cd905f90a150505050565b5f61034482840184610d86565b90505f610353825f01516105c4565b60208301519091506001600160a01b031661038a576103858582846040015185606001516001600160801b031661061c565b6103a3565b6103a38582846020015185604001518660600151610679565b5050505050565b60408051637061726160e01b602080830191909152607d60e31b602483015282516008818403018152602890920190925280519101206103eb9084906106de565b15610408576040516282b42960e81b815260040160405180910390fd5b5f61041582840184610de4565b905061042d815f0151826020015183604001516106e9565b50505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f61046084840185610e2f565b8051835491925090839060ff19166001838181111561048157610481610e7d565b021790555080516040517f4016a1377b8961c4aa6f3a2d3de830a685ddbfe0f228ffc0208eb96304c4cf1a916104b691610e91565b60405180910390a150505050565b5f6104d182840184610eb7565b905061042d815f0151826020015183604001518460600151610762565b5f6104fb82840184610f71565b90505f61050a825f01516105c4565b90508160200151515f03610531576040516309e256f760e21b815260040160405180910390fd5b5f5f836020015180602001905181019061054b919061104f565b90925090505f82801561056057610560610e7d565b036102a6575f5f5f8380602001905181019061057c919061109f565b919450925090506001600160a01b0383166105ab576105a68a8784846001600160801b031661061c565b6105b8565b6105b88a87858585610679565b50505050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106175760405163d3227c9b60e01b815260040160405180910390fd5b919050565b6040516001600160a01b0383166024820152604481018290525f9060640160408051601f198184030181529190526020810180516001600160e01b03166305b1137b60e01b17905290506106718486836108ad565b505050505050565b6040516001600160a01b038085166024830152831660448201526001600160801b03821660648201525f9060840160408051601f198184030181529190526020810180516001600160e01b03166309733b7b60e21b17905290506102a68587836108ad565b818114155b92915050565b5f6106f384610939565b6040516340c10f1960e01b81526001600160a01b0385811660048301526001600160801b0385166024830152919250908216906340c10f19906044015f604051808303815f87803b158015610746575f5ffd5b505af1158015610758573d5f5f3e3d5ffd5b5050505050505050565b5f8481527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b0316156107d857604051633ea7ffd960e11b815260040160405180910390fd5b5f8585856040516107e8906109e9565b6107f4939291906110e9565b604051809103905ff08015801561080d573d5f5f3e3d5ffd5b50604080518082018252600180825260208083018c81525f8d815260048901835285812080546001600160a01b0319166001600160a01b038916908117909155808252898452908690208551815460ff19169015151781559151919093015592519081529293509189917f57f58171b8777633d03aff1e7408b96a3d910c93a7ce433a8cb7fb837dc306a6910160405180910390a2509695505050505050565b60605f5f856001600160a01b0316639bb66b2886866040518363ffffffff1660e01b81526004016108df929190611121565b5f604051808303815f875af11580156108fa573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610921919081019061114c565b9150915061092f82826109ca565b9695505050505050565b5f8181527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260408120547f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e906001600160a01b03166109ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f9283526004016020525060409020546001600160a01b031690565b606082156109d95750806106e3565b8151156100905781518083602001fd5b610c358061116d83390190565b5f5f83601f840112610a06575f5ffd5b5081356001600160401b03811115610a1c575f5ffd5b602083019150836020828501011115610a33575f5ffd5b9250929050565b5f5f60208385031215610a4b575f5ffd5b82356001600160401b03811115610a60575f5ffd5b610a6c858286016109f6565b90969095509350505050565b6001600160a01b0381168114610a8c575f5ffd5b50565b5f5f5f60408486031215610aa1575f5ffd5b8335610aac81610a78565b925060208401356001600160401b03811115610ac6575f5ffd5b610ad2868287016109f6565b9497909650939450505050565b5f5f5f60408486031215610af1575f5ffd5b8335925060208401356001600160401b03811115610ac6575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610b4357610b43610b0d565b60405290565b604051608081016001600160401b0381118282101715610b4357610b43610b0d565b604051601f8201601f191681016001600160401b0381118282101715610b9357610b93610b0d565b604052919050565b6001600160801b0381168114610a8c575f5ffd5b5f6060828403128015610bc0575f5ffd5b50610bc9610b21565b823581526020830135610bdb81610b9b565b60208201526040928301359281019290925250919050565b5f6001600160401b03821115610c0b57610c0b610b0d565b50601f01601f191660200190565b5f82601f830112610c28575f5ffd5b8135602083015f610c40610c3b84610bf3565b610b6b565b9050828152858383011115610c53575f5ffd5b828260208301375f92810160200192909252509392505050565b5f60208284031215610c7d575f5ffd5b81356001600160401b03811115610c92575f5ffd5b820160608185031215610ca3575f5ffd5b610cab610b21565b8135610cb681610a78565b81526020828101359082015260408201356001600160401b03811115610cda575f5ffd5b610ce686828501610c19565b604083015250949350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60018060a01b0384168152826020820152606060408201525f610d486060830184610cf4565b95945050505050565b5f6060828403128015610d62575f5ffd5b50610d6b610b21565b8235610d7681610b9b565b81526020830135610bdb81610b9b565b5f6080828403128015610d97575f5ffd5b50610da0610b49565b823581526020830135610db281610a78565b60208201526040830135610dc581610a78565b60408201526060830135610dd881610b9b565b60608201529392505050565b5f6060828403128015610df5575f5ffd5b50610dfe610b21565b823581526020830135610e1081610a78565b60208201526040830135610e2381610b9b565b60408201529392505050565b5f6020828403128015610e40575f5ffd5b50604051602081016001600160401b0381118282101715610e6357610e63610b0d565b604052823560028110610e74575f5ffd5b81529392505050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310610eb157634e487b7160e01b5f52602160045260245ffd5b91905290565b5f60208284031215610ec7575f5ffd5b81356001600160401b03811115610edc575f5ffd5b820160808185031215610eed575f5ffd5b610ef5610b49565b8135815260208201356001600160401b03811115610f11575f5ffd5b610f1d86828501610c19565b60208301525060408201356001600160401b03811115610f3b575f5ffd5b610f4786828501610c19565b6040830152506060820135915060ff82168214610f62575f5ffd5b60608101919091529392505050565b5f60208284031215610f81575f5ffd5b81356001600160401b03811115610f96575f5ffd5b820160408185031215610fa7575f5ffd5b604080519081016001600160401b0381118282101715610fc957610fc9610b0d565b6040528135815260208201356001600160401b03811115610fe8575f5ffd5b610ff486828501610c19565b602083015250949350505050565b5f82601f830112611011575f5ffd5b815161101f610c3b82610bf3565b818152846020838601011115611033575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215611060575f5ffd5b82516001811061106e575f5ffd5b60208401519092506001600160401b03811115611089575f5ffd5b61109585828601611002565b9150509250929050565b5f5f5f606084860312156110b1575f5ffd5b83516110bc81610a78565b60208501519093506110cd81610a78565b60408501519092506110de81610b9b565b809150509250925092565b606081525f6110fb6060830186610cf4565b828103602084015261110d8186610cf4565b91505060ff83166040830152949350505050565b6001600160a01b03831681526040602082018190525f9061114490830184610cf4565b949350505050565b5f5f6040838503121561115d575f5ffd5b8251801515811461106e575f5ffdfe60c060405234801561000f575f5ffd5b50604051610c35380380610c3583398101604081905261002e916100f5565b5f61003984826101f6565b50600161004683826101f6565b5060ff1660a0525050336080526102b0565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011261007b575f5ffd5b81516001600160401b0381111561009457610094610058565b604051601f8201601f19908116603f011681016001600160401b03811182821017156100c2576100c2610058565b6040528181528382016020018510156100d9575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f5f60608486031215610107575f5ffd5b83516001600160401b0381111561011c575f5ffd5b6101288682870161006c565b602086015190945090506001600160401b03811115610145575f5ffd5b6101518682870161006c565b925050604084015160ff81168114610167575f5ffd5b809150509250925092565b600181811c9082168061018657607f821691505b6020821081036101a457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156101f157805f5260205f20601f840160051c810160208510156101cf5750805b601f840160051c820191505b818110156101ee575f81556001016101db565b50505b505050565b81516001600160401b0381111561020f5761020f610058565b6102238161021d8454610172565b846101aa565b6020601f821160018114610255575f831561023e5750848201515b5f19600385901b1c1916600184901b1784556101ee565b5f84815260208120601f198516915b828110156102845787850151825560209485019460019092019101610264565b50848210156102a157868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b60805160a0516109566102df5f395f61019e01525f818161013a015281816104f301526105c201526109565ff3fe608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806340c10f19116100935780639dc29fac116100635780639dc29fac14610247578063a9059cbb1461025a578063d505accf1461026d578063dd62ed3e14610280575f5ffd5b806340c10f19146101da57806370a08231146101ef5780637ecebe001461021757806395d89b411461023f575f5ffd5b806318160ddd116100ce57806318160ddd1461017457806323b872dd14610186578063313ce567146101995780633644e515146101d2575f5ffd5b806306fdde03146100f4578063095ea7b314610112578063116191b614610135575b5f5ffd5b6100fc6102b8565b6040516101099190610749565b60405180910390f35b610125610120366004610799565b610343565b6040519015158152602001610109565b61015c7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610109565b6005545b604051908152602001610109565b6101256101943660046107c1565b6103d5565b6101c07f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff9091168152602001610109565b61017861046f565b6101ed6101e8366004610799565b6104e8565b005b6101786101fd3660046107fb565b6001600160a01b03165f9081526002602052604090205490565b6101786102253660046107fb565b6001600160a01b03165f9081526004602052604090205490565b6100fc6105aa565b6101ed610255366004610799565b6105b7565b610125610268366004610799565b61064d565b6101ed61027b366004610814565b61069d565b61017861028e366004610881565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205490565b5f80546102c4906108b2565b80601f01602080910402602001604051908101604052809291908181526020018280546102f0906108b2565b801561033b5780601f106103125761010080835404028352916020019161033b565b820191905f5260205f20905b81548152906001019060200180831161031e57829003601f168201915b505050505081565b6040516338412ce560e01b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c853906338412ce5906064015b602060405180830381865af41580156103aa573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103ce91906108ea565b9392505050565b6040516301b8d43b60e41b8152600260048201526001600160a01b03808516602483015283166044820152606481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390631b8d43b090608401602060405180830381865af4158015610443573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061046791906108ea565b949350505050565b6040516312af95d360e31b81525f600482018190529073a513e6e4b8f2a923d98304ec87f64353c4d5c8539063957cae9890602401602060405180830381865af41580156104bf573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190610909565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610530576040516282b42960e81b815260040160405180910390fd5b60405163480ff06560e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063480ff065906064015b5f6040518083038186803b158015610590575f5ffd5b505af41580156105a2573d5f5f3e3d5ffd5b505050505050565b600180546102c4906108b2565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105ff576040516282b42960e81b815260040160405180910390fd5b60405163c7f6238760e01b8152600260048201526001600160a01b03831660248201526044810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c8539063c7f623879060640161057a565b60405163379bc60360e11b8152600260048201526001600160a01b0383166024820152604481018290525f9073a513e6e4b8f2a923d98304ec87f64353c4d5c85390636f378c069060640161038f565b604051630334f36960e31b8152600260048201525f60248201526001600160a01b038089166044830152871660648201526084810186905260a4810185905260ff841660c482015260e48101839052610104810182905273a513e6e4b8f2a923d98304ec87f64353c4d5c853906319a79b4890610124015f6040518083038186803b15801561072a575f5ffd5b505af415801561073c573d5f5f3e3d5ffd5b5050505050505050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80356001600160a01b0381168114610794575f5ffd5b919050565b5f5f604083850312156107aa575f5ffd5b6107b38361077e565b946020939093013593505050565b5f5f5f606084860312156107d3575f5ffd5b6107dc8461077e565b92506107ea6020850161077e565b929592945050506040919091013590565b5f6020828403121561080b575f5ffd5b6103ce8261077e565b5f5f5f5f5f5f5f60e0888a03121561082a575f5ffd5b6108338861077e565b96506108416020890161077e565b95506040880135945060608801359350608088013560ff81168114610864575f5ffd5b9699959850939692959460a0840135945060c09093013592915050565b5f5f60408385031215610892575f5ffd5b61089b8361077e565b91506108a96020840161077e565b90509250929050565b600181811c908216806108c657607f821691505b6020821081036108e457634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156108fa575f5ffd5b815180151581146103ce575f5ffd5b5f60208284031215610919575f5ffd5b505191905056fea2646970667358221220e1f5b5d05dc7259c2004ce8b2365485a31341d166e578c6bed74cf416d43d0b864736f6c634300081c0033a2646970667358221220993e175405432033ed7aea33210be529d0ba9c2edc6085e7b95533cc13f90a0064736f6c634300081c003300", + "storage": {} + }, + "36": { + "address": "0xdf077F5F72071dF6e8B0a78071E496bA17b5Ee0c", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b7981565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", + "storage": {} + }, + "42": { + "address": "0xCf7Ed3AccA5a467e9e704C703E8D87F634fB0Fc9", + "code": "0x73cf7ed3acca5a467e9e704c703e8d87f634fb0fc93014608060405260043610610034575f3560e01c8063d3b08db814610038575b5f5ffd5b61004b610046366004610399565b610061565b604051610058919061049c565b60405180910390f35b80518051606091825f5b82518163ffffffff1610156101055781838263ffffffff1681518110610093576100936104d1565b60200260200101516040516020016100c3919060609190911b6bffffffffffffffffffffffff1916815260140190565b60408051601f19818403018152908290526100e192916020016104fc565b604051602081830303815290604052915080806100fd9061052c565b91505061006b565b50630e02a00760e31b5f80610119866101b9565b8461018b8a602001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6040516020016101a096959493929190610550565b6040516020818303038152906040529350505050919050565b6060603f8263ffffffff16116101f657604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff16116102555761023261021e6403fffffffc600285901b1660016105a9565b600881811b62ffff001691901c60ff161790565b6040516020016101e0919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116102c7576102a460028363ffffffff16901b600261028091906105a9565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b6040516020016101e0919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b1660218201526025016101e0565b919050565b634e487b7160e01b5f52604160045260245ffd5b6040805190810167ffffffffffffffff8111828210171561034b5761034b610314565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561037a5761037a610314565b604052919050565b803567ffffffffffffffff8116811461030f575f5ffd5b5f602082840312156103a9575f5ffd5b813567ffffffffffffffff8111156103bf575f5ffd5b8201604081850312156103d0575f5ffd5b6103d8610328565b813567ffffffffffffffff8111156103ee575f5ffd5b8201601f810186136103fe575f5ffd5b803567ffffffffffffffff81111561041857610418610314565b8060051b61042860208201610351565b91825260208184018101929081019089841115610443575f5ffd5b6020850194505b8385101561047c57843592506001600160a01b038316831461046a575f5ffd5b8282526020948501949091019061044a565b85525061048f9250505060208301610382565b6020820152949350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f61051061050a83866104e5565b846104e5565b949350505050565b634e487b7160e01b5f52601160045260245ffd5b5f63ffffffff821663ffffffff810361054757610547610518565b60010192915050565b6001600160e01b0319871681526001600160f81b03198681166004830152851660058201525f61058c61058660068401876104e5565b856104e5565b6001600160c01b0319939093168352505060080195945050505050565b63ffffffff81811683821601908111156105c5576105c5610518565b9291505056fea264697066735822122025360fa68d61e06c0f66cb21e1db2778b987cc6ccef457fe1dbef98965e5dabb64736f6c634300081c0033000000000000000000000000", + "storage": {} + }, + "7": { + "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", + "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212207c195dc6c0dcf274cd547cf28d123e774d60cc2ca6ccfba9a4b62ae46152a83164736f6c634300081c003300", + "storage": {} + }, + "47": { + "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", + "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea2646970667358221220d968f6e7b0fa23955f1f9580db081bbf816d7e99d0b3ab6d1bf5c644ea927f8d64736f6c634300081c003300", + "storage": { + "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", + "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "4": { + "address": "0x1111111111111111111111111111111111111111", + "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c80632baeceb71461004e5780638381f58a146100585780638da5cb5b14610073578063d826f88f1461009e575b5f5ffd5b6100566100a6565b005b6100605f5481565b6040519081526020015b60405180910390f35b600154610086906001600160a01b031681565b6040516001600160a01b03909116815260200161006a565b61005661010d565b5f5f54116100fb5760405162461bcd60e51b815260206004820152601f60248201527f4e756d6265722073686f756c642062652067726561746572207468616e20300060448201526064015b60405180910390fd5b60015f54610109919061016d565b5f55565b6001546001600160a01b031633146101675760405162461bcd60e51b815260206004820152601760248201527f4f6e6c792063616c6c61626c65206279206f776e65722100000000000000000060448201526064016100f2565b600a5f55565b8181038181111561018c57634e487b7160e01b5f52601160045260245ffd5b9291505056fea2646970667358221220ac5899491afd834afd223fd632497d1c0c7593961eda22f04c58db4b504999cf64736f6c634300081c0033000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb92266", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x000000000000000000000000000000000000000000000000000000000000000a" + } + }, + "17": { + "address": "0xa85233C63b9Ee964Add6F2cffe00Fd84eb32338f", + "code": "0x608060405234801561000f575f5ffd5b506004361061026b575f3560e01c80637ecebe001161014b578063ca8aa7c7116100bf578063f2fde38b11610084578063f2fde38b1461062f578063f3b4a00014610642578063f698da251461064c578063fabc1cbc14610654578063fd98042314610667578063fe243a171461067a575f5ffd5b8063ca8aa7c71461059b578063cbc2bd62146105c2578063de44acb6146105d5578063df5cf723146105f5578063e7a050aa1461061c575f5ffd5b80638da5cb5b116101105780638da5cb5b1461052b57806394f649dd1461053c578063967fc0d21461054f5780639ac01d6114610562578063b5d8b5b814610575578063c665670214610588575f5ffd5b80637ecebe001461047f578063829fca731461049e578063886f1195146104b157806388c10299146104f05780638b8aac3c14610503575f5ffd5b806350ff7225116101e25780635de08ff2116101a75780635de08ff2146103fc578063663c1de41461040f578063715018a614610431578063724af4231461043957806376fb162b1461044c5780637def15641461045f575f5ffd5b806350ff72251461037c57806354fd4d50146103a4578063595c6a67146103b95780635ac86ab7146103c15780635c975abb146103f4575f5ffd5b806332e89ace1161023357806332e89ace146102f157806336a8c500146103045780633f292b081461031a5780633fb99ca51461032f57806348825e94146103425780634b6d5d6e14610369575f5ffd5b8063136439dd1461026f5780631794bb3c146102845780632d44def6146102975780632eae418c146102bd57806331f8fb4c146102d0575b5f5ffd5b61028261027d366004612e33565b6106a4565b005b610282610292366004612e5e565b6106de565b6102aa6102a5366004612eb2565b610804565b6040519081526020015b60405180910390f35b6102826102cb366004612ef0565b6108b6565b6102e36102de366004612f3e565b610982565b6040516102b4929190612fda565b6102aa6102ff36600461304b565b610b10565b61030c610b95565b6040516102b4929190613125565b610322610cb0565b6040516102b4919061317b565b61028261033d3660046131d8565b610d98565b6102aa7f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922481565b61028261037736600461321c565b610ee0565b61038f61038a366004612e5e565b61102d565b604080519283526020830191909152016102b4565b6103ac6110a1565b6040516102b49190613265565b6102826110d1565b6103e46103cf366004613277565b609854600160ff9092169190911b9081161490565b60405190151581526020016102b4565b6098546102aa565b61028261040a366004613297565b6110e5565b6103e461041d36600461321c565b60d16020525f908152604090205460ff1681565b610282611238565b6102aa610447366004612e5e565b611249565b6102aa61045a366004612eb2565b6112a6565b61047261046d366004613306565b6112f5565b6040516102b49190613320565b6102aa61048d36600461321c565b60ca6020525f908152604090205481565b6102aa6104ac366004612f3e565b611327565b6104d87f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6040516001600160a01b0390911681526020016102b4565b6104726104fe366004612f3e565b611361565b6102aa61051136600461321c565b6001600160a01b03165f90815260ce602052604090205490565b6033546001600160a01b03166104d8565b6102e361054a36600461321c565b611498565b60cb546104d8906001600160a01b031681565b6102aa610570366004613332565b61160f565b610282610583366004613297565b6116a0565b61028261059636600461321c565b6117e7565b6104d87f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b6104d86105d0366004613393565b61180a565b6105e86105e336600461321c565b61183e565b6040516102b491906133bd565b6104d87f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6102aa61062a366004612e5e565b6118b1565b61028261063d36600461321c565b6118e4565b6104d8620e16e481565b6102aa61195a565b610282610662366004612e33565b611a13565b6102aa61067536600461321c565b611a80565b6102aa6106883660046133cf565b60cd60209081525f928352604080842090915290825290205481565b6106ac611a95565b60985481811681146106d15760405163c61dca5d60e01b815260040160405180910390fd5b6106da82611b38565b5050565b5f54610100900460ff16158080156106fc57505f54600160ff909116105b806107155750303b15801561071557505f5460ff166001145b61077d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561079e575f805461ff0019166101001790555b6107a782611b38565b6107b084611b75565b6107b983611bc6565b80156107fe575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b5f61080d611c2f565b6108a38484847f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e896040518263ffffffff1660e01b815260040161085f919061344f565b602060405180830381865afa15801561087a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061089e919061345d565b611c88565b90506108af6001606555565b9392505050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146108ff5760405163f739589b60e01b815260040160405180910390fd5b610907611c2f565b604051636ce5768960e11b81526001600160a01b0384169063d9caed129061093790879086908690600401613478565b6020604051808303815f875af1158015610953573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610977919061349c565b506107fe6001606555565b6060805f60d7816109a061099b368990038901896134b3565b611e90565b81526020019081526020015f205f8581526020019081526020015f2090505f6109c882611ef3565b90505f81516001600160401b038111156109e4576109e4613007565b604051908082528060200260200182016040528015610a0d578160200160208202803683370190505b5090505f82516001600160401b03811115610a2a57610a2a613007565b604051908082528060200260200182016040528015610a53578160200160208202803683370190505b5090505f5b8351811015610b0057838181518110610a7357610a7361350f565b6020026020010151838281518110610a8d57610a8d61350f565b60200260200101906001600160a01b031690816001600160a01b031681525050610ad9848281518110610ac257610ac261350f565b602002602001015186611eff90919063ffffffff16565b9050828281518110610aed57610aed61350f565b6020908102919091010152600101610a58565b50909450925050505b9250929050565b5f5f610b1b81611f23565b610b23611c2f565b6001600160a01b0385165f90815260ca6020526040902054610b5486610b4d818c8c8c878c61160f565b8688611f4e565b6001600160a01b0386165f90815260ca60205260409020600182019055610b7d868a8a8a611fa0565b925050610b8a6001606555565b509695505050505050565b6060805f610ba360d461210d565b90505f816001600160401b03811115610bbe57610bbe613007565b604051908082528060200260200182016040528015610be7578160200160208202803683370190505b5090505f826001600160401b03811115610c0357610c03613007565b604051908082528060200260200182016040528015610c2c578160200160208202803683370190505b5090505f5b83811015610ca5575f5f610c4660d484612117565b9150915081858481518110610c5d57610c5d61350f565b60200260200101906001600160a01b031690816001600160a01b03168152505080848481518110610c9057610c9061350f565b60209081029190910101525050600101610c31565b509094909350915050565b60605f610cbd60d8612125565b90505f816001600160401b03811115610cd857610cd8613007565b604051908082528060200260200182016040528015610d1c57816020015b604080518082019091525f8082526020820152815260200190600190039081610cf65790505b5090505f5b82811015610d9157610d6c610d3760d88361212e565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610d7e57610d7e61350f565b6020908102919091010152600101610d21565b5092915050565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614610de15760405163f739589b60e01b815260040160405180910390fd5b610de9611c2f565b5f60d781610dff61099b368990038901896134b3565b815260208082019290925260409081015f90812087825290925290209050610e28818484612139565b610e455760405163ca354fa360e01b815260040160405180910390fd5b610e62610e5a61099b368890038801886134b3565b60d89061214e565b50610e978460da5f610e7c61099b368b90038b018b6134b3565b81526020019081526020015f2061214e90919063ffffffff16565b507f5f5209798bbac45a16d2dc3bc67319fab26ee00153916d6f07b69f8a134a1e8b85858585604051610ecd9493929190613523565b60405180910390a1506107fe6001606555565b610ee8611c2f565b5f610ef460d483611eff565b915050610f0260d483612159565b50604080516001600160a01b0384168152602081018390527fd9d082c3ec4f3a3ffa55c324939a06407f5fbcb87d5e0ce3b9508c92c84ed839910160405180910390a1801561101f57816001600160a01b031663d9caed12620e16e4846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe919061345d565b846040518463ffffffff1660e01b8152600401610fdd93929190613478565b6020604051808303815f875af1158015610ff9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101d919061349c565b505b5061102a6001606555565b50565b5f80336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146110785760405163f739589b60e01b815260040160405180910390fd5b611080611c2f565b61108b85858561216d565b915091506110996001606555565b935093915050565b60606110cc7f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b905090565b6110d9611a95565b6110e35f19611b38565b565b60cb546001600160a01b03163314611110576040516320ba3ff960e21b815260040160405180910390fd5b611118611c2f565b805f5b8181101561122c5760d15f8585848181106111385761113861350f565b905060200201602081019061114d919061321c565b6001600160a01b0316815260208101919091526040015f205460ff1661122457600160d15f8686858181106111845761118461350f565b9050602002016020810190611199919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f0c35b17d91c96eb2751cd456e1252f42a386e524ef9ff26ecc9950859fdc04fe8484838181106111f3576111f361350f565b9050602002016020810190611208919061321c565b6040516001600160a01b03909116815260200160405180910390a15b60010161111b565b50506106da6001606555565b611240612312565b6110e35f611b75565b5f336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216146112935760405163f739589b60e01b815260040160405180910390fd5b61129b611c2f565b6108a384848461236c565b5f806112eb8360d7836112c161099b368b90038b018b6134b3565b81526020019081526020015f205f8781526020019081526020015f20611eff90919063ffffffff16565b9695505050505050565b606061132160da5f61130f61099b368790038701876134b3565b81526020019081526020015f2061241a565b92915050565b5f6108af60d78261134061099b368890038801886134b3565b81526020019081526020015f205f8481526020019081526020015f2061210d565b606061136b611c2f565b5f6113a560d78261138461099b368990038901896134b3565b81526020019081526020015f205f8581526020019081526020015f20611ef3565b80519091505f816001600160401b038111156113c3576113c3613007565b6040519080825280602002602001820160405280156113ec578160200160208202803683370190505b5090505f5b828110156114895761146487878684815181106114105761141061350f565b60200260200101517f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316630f3df50e8c6040518263ffffffff1660e01b815260040161085f919061344f565b8282815181106114765761147661350f565b60209081029190910101526001016113f1565b50925050506113216001606555565b6001600160a01b0381165f90815260ce6020526040812054606091829190816001600160401b038111156114ce576114ce613007565b6040519080825280602002602001820160405280156114f7578160200160208202803683370190505b5090505f5b82811015611585576001600160a01b0386165f90815260cd6020908152604080832060ce909252822080549192918490811061153a5761153a61350f565b5f9182526020808320909101546001600160a01b0316835282019290925260400190205482518390839081106115725761157261350f565b60209081029190910101526001016114fc565b5060ce5f866001600160a01b03166001600160a01b031681526020019081526020015f2081818054806020026020016040519081016040528092919081815260200182805480156115fd57602002820191905f5260205f20905b81546001600160a01b031681526001909101906020018083116115df575b50505050509150935093505050915091565b604080517f4337f82d142e41f2a8c10547cd8c859bddb92262a61058e77842e24d9dea922460208201526001600160a01b03808916928201929092528187166060820152908516608082015260a0810184905260c0810183905260e081018290525f90611695906101000160405160208183030381529060405280519060200120612426565b979650505050505050565b60cb546001600160a01b031633146116cb576040516320ba3ff960e21b815260040160405180910390fd5b6116d3611c2f565b805f5b8181101561122c5760d15f8585848181106116f3576116f361350f565b9050602002016020810190611708919061321c565b6001600160a01b0316815260208101919091526040015f205460ff16156117df575f60d15f86868581811061173f5761173f61350f565b9050602002016020810190611754919061321c565b6001600160a01b0316815260208101919091526040015f20805460ff19169115159190911790557f4074413b4b443e4e58019f2855a8765113358c7c72e39509c6af45fc0f5ba0308484838181106117ae576117ae61350f565b90506020020160208101906117c3919061321c565b6040516001600160a01b03909116815260200160405180910390a15b6001016116d6565b6117ef612312565b6117f7611c2f565b61180081611bc6565b61102a6001606555565b60ce602052815f5260405f208181548110611823575f80fd5b5f918252602090912001546001600160a01b03169150829050565b6001600160a01b0381165f90815260ce60209081526040918290208054835181840281018401909452808452606093928301828280156118a557602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611887575b50505050509050919050565b5f5f6118bc81611f23565b6118c4611c2f565b6118d033868686611fa0565b91506118dc6001606555565b509392505050565b6118ec612312565b6001600160a01b0381166119515760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610774565b61102a81611b75565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea6119c761246c565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b611a1b6124e1565b60985480198219811614611a425760405163c61dca5d60e01b815260040160405180910390fd5b609882905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f5f611a8d60d484611eff565b949350505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611af7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b1b9190613555565b6110e357604051631d77d47760e21b815260040160405180910390fd5b609881905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb54604080516001600160a01b03928316815291831660208301527f4264275e593955ff9d6146a51a4525f6ddace2e81db9391abcc9d1ca48047d29910160405180910390a160cb80546001600160a01b0319166001600160a01b0392909216919091179055565b600260655403611c815760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610774565b6002606555565b5f8060d781611c9f61099b368a90038a018a6134b3565b815260208082019290925260409081015f90812088825290925281209150611cc78286611eff565b9150611cd590508286612159565b505f8115611dec57856001600160a01b031663d9caed1286886001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d4d919061345d565b856040518463ffffffff1660e01b8152600401611d6c93929190613478565b6020604051808303815f875af1158015611d88573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dac919061349c565b90507fe6413aa0c789e437b0a06bf64b20926584f066c79a2d8b80a759c85472f7b0af88888885604051611de39493929190613523565b60405180910390a15b5f611df684611ef3565b519050805f03611e8457611e348860da5f611e1961099b368f90038f018f6134b3565b81526020019081526020015f2061259290919063ffffffff16565b50611e5f60da5f611e4d61099b368e90038e018e6134b3565b81526020019081526020015f20612125565b5f03611e8457611e82611e7a61099b368c90038c018c6134b3565b60d890612592565b505b50979650505050505050565b5f815f0151826020015163ffffffff16604051602001611edb92919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261132190613574565b60605f6108af8361259d565b5f808080611f16866001600160a01b0387166125a8565b9097909650945050505050565b609854600160ff83161b9081160361102a5760405163840a48d560e01b815260040160405180910390fd5b42811015611f6f57604051630819bdcd60e01b815260040160405180910390fd5b611f836001600160a01b03851684846125e0565b6107fe57604051638baa579f60e01b815260040160405180910390fd5b6001600160a01b0383165f90815260d16020526040812054849060ff16611fda57604051632efd965160e11b815260040160405180910390fd5b611fef6001600160a01b038516338786612634565b6040516311f9fbc960e21b81526001600160a01b038581166004830152602482018590528616906347e7ef24906044016020604051808303815f875af115801561203b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061205f919061349c565b91505f5f61206e88888661216d565b604051631e328e7960e11b81526001600160a01b038b811660048301528a8116602483015260448201849052606482018390529294509092507f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8290911690633c651cf2906084015f604051808303815f87803b1580156120ec575f5ffd5b505af11580156120fe573d5f5f3e3d5ffd5b50505050505050949350505050565b5f6113218261268c565b5f808080611f168686612696565b5f611321825490565b5f6108af83836126bf565b5f611a8d846001600160a01b038516846126e5565b5f6108af8383612701565b5f6108af836001600160a01b03841661274d565b5f806001600160a01b038516612196576040516316f2ccc960e01b815260040160405180910390fd5b825f036121b6576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038086165f90815260cd602090815260408083209388168352929052908120549081900361225c576001600160a01b0386165f90815260ce60209081526040909120541061221e576040516301a1443960e31b815260040160405180910390fd5b6001600160a01b038681165f90815260ce602090815260408220805460018101825590835291200180546001600160a01b0319169187169190911790555b61226684826135ab565b6001600160a01b038088165f90815260cd60209081526040808320938a16835292905281902091909155517f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62906122c290889088908890613478565b60405180910390a1959294509192505050565b60605f6122e183612769565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6033546001600160a01b031633146110e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610774565b5f815f0361238d576040516342061b2560e11b815260040160405180910390fd5b6001600160a01b038085165f90815260cd6020908152604080832093871683529290522054808311156123d357604051634b18b19360e01b815260040160405180910390fd5b6123dd83826135be565b6001600160a01b038087165f90815260cd602090815260408083209389168352929052908120829055909150819003611a8d57611a8d8585612790565b60605f6108af8361290e565b5f61242f61195a565b60405161190160f01b6020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b60605f6124987f76312e302e3000000000000000000000000000000000000000000000000000066122d5565b9050805f815181106124ac576124ac61350f565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612561919061345d565b6001600160a01b0316336001600160a01b0316146110e35760405163794821ff60e01b815260040160405180910390fd5b5f6108af8383612966565b60606113218261241a565b5f8181526002830160205260408120548190806125d5576125c98585612a49565b92505f9150610b099050565b600192509050610b09565b5f5f5f6125ed8585612a54565b90925090505f816004811115612605576126056135d1565b1480156126235750856001600160a01b0316826001600160a01b0316145b806112eb57506112eb868686612a93565b6107fe846323b872dd60e01b85858560405160240161265593929190613478565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152612b7a565b5f61132182612125565b5f80806126a3858561212e565b5f81815260029690960160205260409095205494959350505050565b5f825f0182815481106126d4576126d461350f565b905f5260205f200154905092915050565b5f8281526002840160205260408120829055611a8d848461214e565b5f81815260018301602052604081205461274657508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155611321565b505f611321565b5f81815260028301602052604081208190556108af8383612592565b5f60ff8216601f81111561132157604051632cd44ac360e21b815260040160405180910390fd5b6001600160a01b0382165f90815260ce6020526040812054905b818110156128a2576001600160a01b038481165f90815260ce60205260409020805491851691839081106127e0576127e061350f565b5f918252602090912001546001600160a01b03160361289a576001600160a01b0384165f90815260ce60205260409020805461281e906001906135be565b8154811061282e5761282e61350f565b5f9182526020808320909101546001600160a01b03878116845260ce909252604090922080549190921691908390811061286a5761286a61350f565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506128a2565b6001016127aa565b8181036128c257604051632df15a4160e11b815260040160405180910390fd5b6001600160a01b0384165f90815260ce602052604090208054806128e8576128e86135e5565b5f8281526020902081015f1990810180546001600160a01b031916905501905550505050565b6060815f018054806020026020016040519081016040528092919081815260200182805480156118a557602002820191905f5260205f20905b8154815260200190600101908083116129475750505050509050919050565b5f8181526001830160205260408120548015612a40575f6129886001836135be565b85549091505f9061299b906001906135be565b90508181146129fa575f865f0182815481106129b9576129b961350f565b905f5260205f200154905080875f0184815481106129d9576129d961350f565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080612a0b57612a0b6135e5565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050611321565b5f915050611321565b5f6108af8383612c52565b5f5f8251604103612a88576020830151604084015160608501515f1a612a7c87828585612c69565b94509450505050610b09565b505f90506002610b09565b5f5f5f856001600160a01b0316631626ba7e60e01b8686604051602401612abb9291906135f9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b0319909416939093179092529051612af99190613611565b5f60405180830381855afa9150503d805f8114612b31576040519150601f19603f3d011682016040523d82523d5f602084013e612b36565b606091505b5091509150818015612b4a57506020815110155b80156112eb57508051630b135d3f60e11b90612b6f908301602090810190840161349c565b149695505050505050565b5f612bce826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612d269092919063ffffffff16565b905080515f1480612bee575080806020019051810190612bee9190613555565b612c4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610774565b505050565b5f81815260018301602052604081205415156108af565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612c9e57505f90506003612d1d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612cef573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116612d17575f60019250925050612d1d565b91505f90505b94509492505050565b6060611a8d84845f85855f5f866001600160a01b03168587604051612d4b9190613611565b5f6040518083038185875af1925050503d805f8114612d85576040519150601f19603f3d011682016040523d82523d5f602084013e612d8a565b606091505b50915091506116958783838760608315612e045782515f03612dfd576001600160a01b0385163b612dfd5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610774565b5081611a8d565b611a8d8383815115612e195781518083602001fd5b8060405162461bcd60e51b81526004016107749190613265565b5f60208284031215612e43575f5ffd5b5035919050565b6001600160a01b038116811461102a575f5ffd5b5f5f5f60608486031215612e70575f5ffd5b8335612e7b81612e4a565b92506020840135612e8b81612e4a565b929592945050506040919091013590565b5f60408284031215612eac575f5ffd5b50919050565b5f5f5f60808486031215612ec4575f5ffd5b612ece8585612e9c565b9250604084013591506060840135612ee581612e4a565b809150509250925092565b5f5f5f5f60808587031215612f03575f5ffd5b8435612f0e81612e4a565b93506020850135612f1e81612e4a565b92506040850135612f2e81612e4a565b9396929550929360600135925050565b5f5f60608385031215612f4f575f5ffd5b612f598484612e9c565b946040939093013593505050565b5f8151808452602084019350602083015f5b82811015612fa05781516001600160a01b0316865260209586019590910190600101612f79565b5093949350505050565b5f8151808452602084019350602083015f5b82811015612fa0578151865260209586019590910190600101612fbc565b604081525f612fec6040830185612f67565b8281036020840152612ffe8185612faa565b95945050505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561304357613043613007565b604052919050565b5f5f5f5f5f5f60c08789031215613060575f5ffd5b863561306b81612e4a565b9550602087013561307b81612e4a565b945060408701359350606087013561309281612e4a565b92506080870135915060a08701356001600160401b038111156130b3575f5ffd5b8701601f810189136130c3575f5ffd5b80356001600160401b038111156130dc576130dc613007565b6130ef601f8201601f191660200161301b565b8181528a6020838501011115613103575f5ffd5b816020840160208301375f602083830101528093505050509295509295509295565b604080825283519082018190525f9060208501906060840190835b818110156131675783516001600160a01b0316835260209384019390920191600101613140565b505083810360208501526112eb8186612faa565b602080825282518282018190525f918401906040840190835b818110156131cd57835180516001600160a01b0316845260209081015163ffffffff168185015290930192604090920191600101613194565b509095945050505050565b5f5f5f5f60a085870312156131eb575f5ffd5b6131f58686612e9c565b935060408501359250606085013561320c81612e4a565b9396929550929360800135925050565b5f6020828403121561322c575f5ffd5b81356108af81612e4a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6108af6020830184613237565b5f60208284031215613287575f5ffd5b813560ff811681146108af575f5ffd5b5f5f602083850312156132a8575f5ffd5b82356001600160401b038111156132bd575f5ffd5b8301601f810185136132cd575f5ffd5b80356001600160401b038111156132e2575f5ffd5b8560208260051b84010111156132f6575f5ffd5b6020919091019590945092505050565b5f60408284031215613316575f5ffd5b6108af8383612e9c565b602081525f6108af6020830184612faa565b5f5f5f5f5f5f60c08789031215613347575f5ffd5b863561335281612e4a565b9550602087013561336281612e4a565b9450604087013561337281612e4a565b959894975094956060810135955060808101359460a0909101359350915050565b5f5f604083850312156133a4575f5ffd5b82356133af81612e4a565b946020939093013593505050565b602081525f6108af6020830184612f67565b5f5f604083850312156133e0575f5ffd5b82356133eb81612e4a565b915060208301356133fb81612e4a565b809150509250929050565b803563ffffffff81168114613419575f5ffd5b919050565b803561342981612e4a565b6001600160a01b0316825263ffffffff61344560208301613406565b1660208301525050565b60408101611321828461341e565b5f6020828403121561346d575f5ffd5b81516108af81612e4a565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f602082840312156134ac575f5ffd5b5051919050565b5f60408284031280156134c4575f5ffd5b50604080519081016001600160401b03811182821017156134e7576134e7613007565b60405282356134f581612e4a565b815261350360208401613406565b60208201529392505050565b634e487b7160e01b5f52603260045260245ffd5b60a08101613531828761341e565b60408201949094526001600160a01b03929092166060830152608090910152919050565b5f60208284031215613565575f5ffd5b815180151581146108af575f5ffd5b80516020808301519190811015612eac575f1960209190910360031b1b16919050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561132157611321613597565b8181038181111561132157611321613597565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f611a8d6040830184613237565b5f82518060208501845e5f92019182525091905056fea26469706673582212204cd82bcd16986fe6b441e4b7c389c7f12dd596c825079086d78383b1e3d02f8364736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "38": { + "address": "0x36C02dA8a0983159322a80FFE9F24b1acfF8B570", + "code": "0x608060405260043610610212575f3560e01c8063a69d9bb61161011e578063c1a8e2c5116100a8578063d4c250081161006d578063d4c2500814610664578063d6e588d414610698578063e2148f5a146106b7578063f2fde38b146106d6578063fe776c2a146106f5575f5ffd5b8063c1a8e2c5146105d4578063c63fd502146105f3578063ceb29d6114610612578063d156b91114610631578063d4b6b83414610645575f5ffd5b8063a997f0ca116100ee578063a997f0ca14610502578063a9a899cd14610523578063b526578714610542578063b89faa7c1461057a578063be6ab6ef146105b3575f5ffd5b8063a69d9bb614610492578063a8294cd8146104b1578063a8315705146104c4578063a98fb355146104e3575f5ffd5b806361115ba21161019f5780637240f9af1161016f5780637240f9af146103f0578063740d83771461040f57806374edeb6c146104435780638da5cb5b146104625780638f8ee5521461047f575f5ffd5b806361115ba21461037f5780636d4f5c0e1461039e5780636deab019146103bd578063715018a6146103dc575f5ffd5b8063303ca956116101e5578063303ca956146102d857806333dcde4c146102f7578063501060021461031857806359b00534146103375780635d88746214610356575f5ffd5b80631500cd8d14610216578063191088391461023757806326597383146102565780632fb31ef1146102a7575b5f5ffd5b348015610221575f5ffd5b506102356102303660046139e2565b610723565b005b348015610242575f5ffd5b506102356102513660046139fd565b61079b565b348015610261575f5ffd5b5061028a6102703660046139e2565b606b6020525f90815260409020546001600160601b031681565b6040516001600160601b0390911681526020015b60405180910390f35b3480156102b2575f5ffd5b506067546001600160a01b03165b6040516001600160a01b03909116815260200161029e565b3480156102e3575f5ffd5b506102356102f2366004613ab3565b6109bb565b348015610302575f5ffd5b5061030b610b1b565b60405161029e9190613b41565b348015610323575f5ffd5b5061030b610332366004613b69565b610bab565b348015610342575f5ffd5b506102356103513660046139e2565b61139b565b348015610361575f5ffd5b5061036a602081565b60405163ffffffff909116815260200161029e565b34801561038a575f5ffd5b50610235610399366004613b95565b6114bc565b3480156103a9575f5ffd5b506065546102c0906001600160a01b031681565b3480156103c8575f5ffd5b506102356103d7366004613dc2565b61197f565b3480156103e7575f5ffd5b50610235611e9a565b3480156103fb575f5ffd5b5061023561040a366004613e6c565b611ead565b34801561041a575f5ffd5b506102c06104293660046139e2565b60696020525f90815260409020546001600160a01b031681565b34801561044e575f5ffd5b5061023561045d3660046139e2565b611fde565b34801561046d575f5ffd5b506033546001600160a01b03166102c0565b34801561048a575f5ffd5b5061036a5f81565b34801561049d575f5ffd5b506102356104ac3660046139fd565b61205e565b6102356104bf366004613eb3565b61225e565b3480156104cf575f5ffd5b506102356104de366004613ef3565b612374565b3480156104ee575f5ffd5b506102356104fd366004613e6c565b612463565b34801561050d575f5ffd5b506105166124e9565b60405161029e9190613f31565b34801561052e575f5ffd5b5061023561053d3660046139e2565b6126a0565b34801561054d575f5ffd5b5061056a61055c3660046139e2565b6001600160a01b0316301490565b604051901515815260200161029e565b348015610585575f5ffd5b5061056a610594366004613f91565b606d60209081525f928352604080842090915290825290205460ff1681565b3480156105be575f5ffd5b506105c7612769565b60405161029e9190613ffe565b3480156105df575f5ffd5b506102356105ee366004614010565b612811565b3480156105fe575f5ffd5b5061023561060d366004614060565b612855565b34801561061d575f5ffd5b5061023561062c366004613ef3565b612a87565b34801561063c575f5ffd5b5061030b612d15565b348015610650575f5ffd5b50606a546102c0906001600160a01b031681565b34801561066f575f5ffd5b506102c061067e3660046139e2565b60686020525f90815260409020546001600160a01b031681565b3480156106a3575f5ffd5b506102356106b23660046139e2565b612d31565b3480156106c2575f5ffd5b506102356106d13660046139e2565b612db1565b3480156106e1575f5ffd5b506102356106f03660046139e2565b612e2b565b348015610700575f5ffd5b5061056a61070f3660046139e2565b60666020525f908152604090205460ff1681565b61072b612ea4565b6001600160a01b0381166107525760405163d92e233d60e01b815260040160405180910390fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517f6a8a174b559440c4e231f06fda7f0eb644f79306c33292fbb95f7602bef9aaf9905f90a250565b6107a3612ea4565b6040805180820182523081525f60208201819052915163105dea1f60e21b81529091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c9061080590859060040161411f565b5f60405180830381865afa15801561081f573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108469190810190614145565b90505f5b8381101561097b575f805b83518110156108c857868684818110610870576108706141de565b61088692602060409092020190810191506139e2565b6001600160a01b03168482815181106108a1576108a16141de565b60200260200101516001600160a01b0316036108c057600191506108c8565b600101610855565b50806108e7576040516331bc342760e11b815260040160405180910390fd5b8585838181106108f9576108f96141de565b905060400201602001602081019061091191906141f2565b606b5f888886818110610926576109266141de565b61093c92602060409092020190810191506139e2565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b03929092169190911790555060010161084a565b507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac84846040516109ad92919061420b565b60405180910390a150505050565b6109c3612efe565b6001600160a01b03831630146109ec57604051631280731d60e21b815260040160405180910390fd5b60018114610a0d5760405163f37f411760e01b815260040160405180910390fd5b5f82828281610a1e57610a1e6141de565b9050602002016020810190610a339190614267565b63ffffffff1614610a575760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b038481165f9081526068602052604090205416610a8e576040516325ec6c1f60e01b815260040160405180910390fd5b6001600160a01b0384165f90815260686020526040812080546001600160a01b03191690558290829081610ac457610ac46141de565b9050602002016020810190610ad99190614267565b63ffffffff16846001600160a01b03167f2638d53da645bac898f1b50bd1d6d2a4d389e3141e209c988488abced5c3c54c60405160405180910390a350505050565b6060606c8054610b2a90614280565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5690614280565b8015610ba15780601f10610b7857610100808354040283529160200191610ba1565b820191905f5260205f20905b815481529060010190602001808311610b8457829003601f168201915b5050505050905090565b6040805180820182523081525f602082018190529151633743aedd60e11b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690636e875dba90610c0e90859060040161411f565b5f60405180830381865afa158015610c28573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c4f91908101906142b8565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316634177a87c846040518263ffffffff1660e01b8152600401610c9e919061411f565b5f60405180830381865afa158015610cb8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cdf9190810190614145565b90505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316632b453a9a8585856040518463ffffffff1660e01b8152600401610d3293929190614347565b5f60405180830381865afa158015610d4c573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d739190810190614418565b90505f83516001600160401b03811115610d8f57610d8f613be5565b604051908082528060200260200182016040528015610db8578160200160208202803683370190505b5090505f84516001600160401b03811115610dd557610dd5613be5565b604051908082528060200260200182016040528015610dfe578160200160208202803683370190505b5090505f85516001600160401b03811115610e1b57610e1b613be5565b604051908082528060200260200182016040528015610e44578160200160208202803683370190505b5090505f805b875181101561100f575f60685f8a8481518110610e6957610e696141de565b6020908102919091018101516001600160a01b039081168352908201929092526040015f205416905080610e9d5750611007565b5f805b8951811015610f5257606b5f8b8381518110610ebe57610ebe6141de565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f9054906101000a90046001600160601b03166001600160601b0316898581518110610f1357610f136141de565b60200260200101518281518110610f2c57610f2c6141de565b6020026020010151610f3e91906144db565b610f4890836144f2565b9150600101610ea0565b50805f03610f61575050611007565b81878581518110610f7457610f746141de565b60200260200101906001600160a01b031690816001600160a01b03168152505080868581518110610fa757610fa76141de565b602002602001018181525050898381518110610fc557610fc56141de565b6020026020010151858581518110610fdf57610fdf6141de565b6001600160a01b03909216602092830291909101909101528361100181614505565b94505050505b600101610e4a565b50805f036110305760405163339e1ffb60e01b815260040160405180910390fd5b5f60208210611040576020611042565b815b90505f5b8181101561125d57805f61105b8260016144f2565b90505b848110156110e7576110d687828151811061107b5761107b6141de565b6020026020010151878381518110611095576110956141de565b60200260200101518985815181106110af576110af6141de565b60200260200101518986815181106110c9576110c96141de565b6020026020010151612f47565b156110df578091505b60010161105e565b5081811461125457868181518110611101576111016141de565b602002602001015187838151811061111b5761111b6141de565b6020026020010151888481518110611135576111356141de565b6020026020010189848151811061114e5761114e6141de565b6001600160a01b03938416602091820292909201015291169052855186908290811061117c5761117c6141de565b6020026020010151868381518110611196576111966141de565b60200260200101518784815181106111b0576111b06141de565b602002602001018884815181106111c9576111c96141de565b60200260200101828152508281525050508481815181106111ec576111ec6141de565b6020026020010151858381518110611206576112066141de565b6020026020010151868481518110611220576112206141de565b60200260200101878481518110611239576112396141de565b6001600160a01b039384166020918202929092010152911690525b50600101611046565b505f816001600160401b0381111561127757611277613be5565b6040519080825280602002602001820160405280156112a0578160200160208202803683370190505b5090505f5b828110156112f9578681815181106112bf576112bf6141de565b60200260200101518282815181106112d9576112d96141de565b6001600160a01b03909216602092830291909101909101526001016112a5565b506040805180820182528281526001600160401b038e1660208201529051631a7611b760e31b815273cf7ed3acca5a467e9e704c703e8d87f634fb0fc99163d3b08db89161134a919060040161451d565b5f60405180830381865af4158015611364573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261138b919081019061458d565b9c9b505050505050505050505050565b6113a3612f78565b6001600160a01b0381166113ca5760405163d92e233d60e01b815260040160405180910390fd5b335f908152606860205260409020546001600160a01b0390811690821681036114065760405163ac92c8d560e01b815260040160405180910390fd5b5f6114108361304b565b90506001600160a01b0381161561143a5760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038083165f90815260696020818152604080842080546001600160a01b031990811690915533808652606884528286208054978b169783168817905586865293909252808420805490921683179091555190917f03ddab9377727860d18575279a4fb19cf32e3e650ae962f6ce2feaed801cd3af91a3505050565b6114c461315e565b5f6114ce82614695565b6040810151519091505f816001600160401b038111156114f0576114f0613be5565b60405190808252806020026020018201604052801561153457816020015b604080518082019091525f808252602082015281526020019060019003908161150e5790505b5090505f80805b8481101561162d575f61156d8760400151838151811061155d5761155d6141de565b60200260200101515f0151613189565b90506001600160a01b0381166115835750611625565b86604001518281518110611599576115996141de565b60200260200101518584815181106115b3576115b36141de565b6020026020010181905250808584815181106115d1576115d16141de565b60209081029190910101516001600160a01b03909116905284518590849081106115fd576115fd6141de565b6020026020010151602001518461161491906144f2565b93508261162081614505565b935050505b60010161153b565b5080835260408581018490528051838152602081018390527fb6d94e6419560f5b19430e640113c0926ed3c399cb053a26a2324b5b29f18e81910160405180910390a1805f036116805750505050505050565b5f61168e866040015161327a565b9050856040015151811015611751575f816001600160401b038111156116b6576116b6613be5565b6040519080825280602002602001820160405280156116fa57816020015b604080518082019091525f80825260208201528152602001906001900390816116d45790505b5090505f5b8281101561174a578760400151818151811061171d5761171d6141de565b6020026020010151828281518110611737576117376141de565b60209081029190910101526001016116ff565b5060408701525b5f6117626040890160208a016139e2565b63ffffffff8a165f908152606d602090815260408083206001600160a01b03851684529091529020549091508990829060ff16156117cf5760405163618c143960e01b815263ffffffff90921660048301526001600160a01b031660248201526044015b60405180910390fd5b505063ffffffff89165f908152606d602090815260408083206001600160a01b0385168452825291829020805460ff1916600117905561184c917f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae91879161183c91908d01908d016139e2565b6001600160a01b03169190613488565b6040805160018082528183019092525f91816020015b6118ad6040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b81526020019060019003908161186257905050905087815f815181106118d5576118d56141de565b6020908102919091018101919091526040805180820182523081525f9281019290925251630ca2989960e01b81527f0000000000000000000000009a9f2ccfde556a7e9ff0848998aa4a0cfd8863ae6001600160a01b031690630ca298999061194490849086906004016147a3565b5f604051808303815f87803b15801561195b575f5ffd5b505af115801561196d573d5f5f3e3d5ffd5b505050505050505050505050505b5050565b5f54610100900460ff161580801561199d57505f54600160ff909116105b806119b65750303b1580156119b657505f5460ff166001145b611a195760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016117c6565b5f805460ff191660011790558015611a3a575f805461ff0019166101001790555b6001600160a01b038716611a615760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038616611a885760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b038416611aaf5760405163d92e233d60e01b815260040160405180910390fd5b5f825111611ad057604051632e56a66b60e11b815260040160405180910390fd5b611ad861356a565b611ae187613598565b606580546001600160a01b0319166001600160a01b0388169081179091556040515f907f36865e413bf7465ef494decdccf522701d4528249b08689f6b1b5b04eaa59a5e908290a3606c611b358382614945565b507f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663a9821821306040518060a00160405280606d8152602001614f0f606d91396040518363ffffffff1660e01b8152600401611b9c9291906149ff565b5f604051808303815f87803b158015611bb3575f5ffd5b505af1158015611bc5573d5f5f3e3d5ffd5b505050505f85516001600160401b03811115611be357611be3613be5565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b5090505f5b8651811015611ce557868181518110611c2c57611c2c6141de565b60200260200101515f0151828281518110611c4957611c496141de565b60200260200101906001600160a01b031690816001600160a01b031681525050868181518110611c7b57611c7b6141de565b602002602001015160200151606b5f898481518110611c9c57611c9c6141de565b602090810291909101810151516001600160a01b031682528101919091526040015f2080546001600160601b0319166001600160601b0392909216919091179055600101611c11565b506040805160018082528183019092525f91816020015b604080518082019091525f815260606020820152815260200190600190039081611cfc57905050905060405180604001604052805f63ffffffff16815260200183815250815f81518110611d5257611d526141de565b6020908102919091010152604051630130fc2760e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063261f84e090611dab9030908590600401614a22565b5f604051808303815f87803b158015611dc2575f5ffd5b505af1158015611dd4573d5f5f3e3d5ffd5b5050606780546001600160a01b0319166001600160a01b038a8116919091179091558716159150611e4a905057606a80546001600160a01b0319166001600160a01b0387169081179091556040515f907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb908290a35b50508015611e91575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b611ea2612ea4565b611eab5f613598565b565b611eb56135e9565b5f815111611f055760405162461bcd60e51b815260206004820152601760248201527f56657273696f6e2063616e6e6f7420626520656d70747900000000000000000060448201526064016117c6565b5f606c8054611f1390614280565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3f90614280565b8015611f8a5780601f10611f6157610100808354040283529160200191611f8a565b820191905f5260205f20905b815481529060010190602001808311611f6d57829003601f168201915b5050505050905081606c9081611fa09190614945565b507f22efc5f993dce37856b77dd72d7d7661032380c9728c4133f3c071c591bc6ca78183604051611fd2929190614aa4565b60405180910390a15050565b611fe6612ea4565b6001600160a01b03811661200d5760405163d92e233d60e01b815260040160405180910390fd5b606a80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f34a8177f4fa0d6ac3a138dd129bccb64eedbd41d168fc21170fcccfcd5e020cb905f90a35050565b612066612ea4565b5f816001600160401b0381111561207f5761207f613be5565b6040519080825280602002602001820160405280156120a8578160200160208202803683370190505b5090505f5b828110156121a2578383828181106120c7576120c76141de565b6120dd92602060409092020190810191506139e2565b8282815181106120ef576120ef6141de565b60200260200101906001600160a01b031690816001600160a01b031681525050838382818110612121576121216141de565b905060400201602001602081019061213991906141f2565b606b5f86868581811061214e5761214e6141de565b61216492602060409092020190810191506139e2565b6001600160a01b0316815260208101919091526040015f2080546001600160601b0319166001600160601b03929092169190911790556001016120ad565b50604051630287f75160e51b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed16906350feea20906121f39030905f908690600401614ad1565b5f604051808303815f87803b15801561220a575f5ffd5b505af115801561221c573d5f5f3e3d5ffd5b505050507f3d364e01af6b92dca61dc3ff4a790ff6d9674aa5cafd689fb2e2ae83540977ac838360405161225192919061420b565b60405180910390a1505050565b612266613635565b5f61227084610bab565b6067549091506001600160a01b031663f2e500b234835f6040519080825280602002602001820160405280156122ba57816020015b60608152602001906001900390816122a55790505b5060405180602001604052805f81525088886040518763ffffffff1660e01b81526004016122ec959493929190614b00565b5f604051808303818588803b158015612303575f5ffd5b505af1158015612315573d5f5f3e3d5ffd5b5050505050336001600160a01b0316846001600160401b03167f08de23359763aa62302ebcf98e51ce5f9f71f925679c5b7fc9d6cf634e6b4a73838051906020012060405161236691815260200190565b60405180910390a350505050565b61237c612ea4565b60405163b66bd98960e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063b66bd989906123ce9030905f9087908790600401614baa565b5f604051808303815f87803b1580156123e5575f5ffd5b505af11580156123f7573d5f5f3e3d5ffd5b505f925050505b8181101561245e57606b5f84848481811061241b5761241b6141de565b905060200201602081019061243091906139e2565b6001600160a01b0316815260208101919091526040015f2080546001600160601b03191690556001016123fe565b505050565b61246b612ea4565b60405163a982182160e01b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9821821906124b990309085906004016149ff565b5f604051808303815f87803b1580156124d0575f5ffd5b505af11580156124e2573d5f5f3e3d5ffd5b5050505050565b6040805180820182523081525f60208201819052915163105dea1f60e21b8152606092907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c9061254c90859060040161411f565b5f60405180830381865afa158015612566573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261258d9190810190614145565b90505f81516001600160401b038111156125a9576125a9613be5565b6040519080825280602002602001820160405280156125ed57816020015b604080518082019091525f80825260208201528152602001906001900390816125c75790505b5090505f5b8251811015612698576040518060400160405280848381518110612618576126186141de565b60200260200101516001600160a01b03168152602001606b5f868581518110612643576126436141de565b6020908102919091018101516001600160a01b031682528101919091526040015f20546001600160601b031690528251839083908110612685576126856141de565b60209081029190910101526001016125f2565b509392505050565b6126a8612ea4565b6001600160a01b038082165f908152606660209081526040808320805460ff1916905560689091529020541615612733576040805160018082528183019092525f91602080830190803683370190505090505f815f8151811061270d5761270d6141de565b602002602001019063ffffffff16908163ffffffff16815250506127318282613660565b505b6040516001600160a01b038216907fdf2097d1af3ac651476385ff7048eefcbc11072c13100fa1d966effaf2ea3e54905f90a250565b6040805180820182523081525f6020820152905163105dea1f60e21b8152606091907f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031690634177a87c906127ca90849060040161411f565b5f60405180830381865afa1580156127e4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261280b9190810190614145565b91505090565b612819612ea4565b61245e838383808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061366092505050565b61285d612efe565b6001600160a01b038516301461288657604051631280731d60e21b815260040160405180910390fd5b600183146128a75760405163b1698da560e01b815260040160405180910390fd5b5f848482816128b8576128b86141de565b90506020020160208101906128cd9190614267565b63ffffffff16146128f15760405163c106a33360e01b815260040160405180910390fd5b6001600160a01b0386165f9081526066602052604090205460ff1661292957604051630444d2e160e21b815260040160405180910390fd5b6001600160a01b038681165f908152606860205260409020541615612961576040516342ee68b560e01b815260040160405180910390fd5b5f6129a083838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506136f192505050565b90505f6129ac8261304b565b90506001600160a01b038116156129d65760405163ac92c8d560e01b815260040160405180910390fd5b6001600160a01b038089165f81815260686020908152604080832080549588166001600160a01b0319968716811790915583526069909152812080549093169091179091558690869081612a2c57612a2c6141de565b9050602002016020810190612a419190614267565b63ffffffff16886001600160a01b03167f3ed331d6c3431aecc422f169b89a3c24f9e23cef141e10631262a3fc865f513a60405160405180910390a35050505050505050565b612a8f61315e565b5f5b81811015612ce8575f612ad4848484818110612aaf57612aaf6141de565b9050602002810190612ac19190614c14565b612acf9060208101906139e2565b613189565b90506001600160a01b038116612aea5750612ce0565b5f6040518060a00160405280836001600160a01b031681526020015f63ffffffff168152602001868686818110612b2357612b236141de565b9050602002810190612b359190614c14565b612b43906020810190614c32565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612b8b57612b8b6141de565b9050602002810190612b9d9190614c14565b612bab906040810190614c32565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250505090825250602001868686818110612bf357612bf36141de565b9050602002810190612c059190614c14565b612c13906060810190614c77565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250604051633635205760e01b81529091506001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690633635205790612c999030908590600401614cb9565b5f604051808303815f875af1158015612cb4573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612cdb9190810190614d67565b505050505b600101612a91565b506040517f69e2dc7f4757ef3cbac3a5423ac42ce1938cb3b79c4f35563460926176265ce0905f90a15050565b6040518060a00160405280606d8152602001614f0f606d913981565b612d39612ea4565b6001600160a01b038116612d605760405163d92e233d60e01b815260040160405180910390fd5b606580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f36865e413bf7465ef494decdccf522701d4528249b08689f6b1b5b04eaa59a5e905f90a35050565b612db9612ea4565b6001600160a01b038116612de05760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0381165f81815260666020526040808220805460ff19166001179055517f5045083cd90f33bcbd2689f0152c6fd980a5bc506dff19aed51f534e2a49ecee9190a250565b612e33612ea4565b6001600160a01b038116612e985760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016117c6565b612ea181613598565b50565b6033546001600160a01b03163314611eab5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016117c6565b336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611eab576040516323d871a560e01b815260040160405180910390fd5b5f828514612f585750818411612f70565b816001600160a01b0316846001600160a01b03161090505b949350505050565b7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663670d3ba233612fd26040805180820182525f808252602091820181905282518084019093523083529082015290565b6040518363ffffffff1660e01b8152600401612fef929190614dab565b602060405180830381865afa15801561300a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061302e9190614de1565b611eab5760405163668191af60e11b815260040160405180910390fd5b6001600160a01b038082165f908152606960205260408120549091168061307457505f92915050565b7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316631352c3e6826130ce6040805180820182525f808252602091820181905282518084019093523083529082015290565b6040518363ffffffff1660e01b81526004016130eb929190614dab565b602060405180830381865afa158015613106573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061312a9190614de1565b156131355792915050565b50506001600160a01b03165f90815260696020526040812080546001600160a01b031916905590565b6065546001600160a01b03163314611eab57604051638e79fdb560e01b815260040160405180910390fd5b6001600160a01b038082165f90815260696020526040812054909116806131b257505f92915050565b7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316631352c3e68261320c6040805180820182525f808252602091820181905282518084019093523083529082015290565b6040518363ffffffff1660e01b8152600401613229929190614dab565b602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132689190614de1565b61327457505f92915050565b92915050565b80515f9060015b81811015613373575f84828151811061329c5761329c6141de565b602002602001015190505f8290505b5f811180156132f2575081516001600160a01b0316866132cc600184614e00565b815181106132dc576132dc6141de565b60200260200101515f01516001600160a01b0316115b1561334b5785613303600183614e00565b81518110613313576133136141de565b602002602001015186828151811061332d5761332d6141de565b6020026020010181905250808061334390614e13565b9150506132ab565b8186828151811061335e5761335e6141de565b60209081029190910101525050600101613281565b50600181116133825792915050565b5f60015b8281101561347c578482815181106133a0576133a06141de565b60200260200101515f01516001600160a01b03168582815181106133c6576133c66141de565b60200260200101515f01516001600160a01b03160361342f578481815181106133f1576133f16141de565b60200260200101516020015185838151811061340f5761340f6141de565b602002602001015160200181815161342791906144f2565b905250613474565b8161343981614505565b92505084818151811061344e5761344e6141de565b6020026020010151858381518110613468576134686141de565b60200260200101819052505b600101613386565b50612f708160016144f2565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301525f919085169063dd62ed3e90604401602060405180830381865afa1580156134d5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134f99190614e28565b90506135648463095ea7b360e01b8561351286866144f2565b6040516001600160a01b039092166024830152604482015260640160408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613740565b50505050565b5f54610100900460ff166135905760405162461bcd60e51b81526004016117c690614e3f565b611eab613813565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d610380546001600160a01b031633811461197b5760405163283fa43d60e11b815260040160405180910390fd5b606a546001600160a01b03163314611eab576040516305067f3b60e21b815260040160405180910390fd5b604080516060810182526001600160a01b0380851682523060208301528183018490529151636e3492b560e01b815290917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1690636e3492b5906136c8908490600401614e8a565b5f604051808303815f87803b1580156136df575f5ffd5b505af1158015611e91573d5f5f3e3d5ffd5b5f81516014146137145760405163526c487560e11b815260040160405180910390fd5b50602081015160601c8061373b5760405163d92e233d60e01b815260040160405180910390fd5b919050565b5f613794826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166138429092919063ffffffff16565b905080515f14806137b45750808060200190518101906137b49190614de1565b61245e5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016117c6565b5f54610100900460ff166138395760405162461bcd60e51b81526004016117c690614e3f565b611eab33613598565b606061385084845f8561385a565b90505b9392505050565b6060824710156138bb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016117c6565b5f5f866001600160a01b031685876040516138d69190614ef8565b5f6040518083038185875af1925050503d805f8114613910576040519150601f19603f3d011682016040523d82523d5f602084013e613915565b606091505b509150915061392687838387613931565b979650505050505050565b6060831561399f5782515f03613998576001600160a01b0385163b6139985760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016117c6565b5081612f70565b612f7083838151156139b45781518083602001fd5b8060405162461bcd60e51b81526004016117c69190613b41565b6001600160a01b0381168114612ea1575f5ffd5b5f602082840312156139f2575f5ffd5b8135613853816139ce565b5f5f60208385031215613a0e575f5ffd5b82356001600160401b03811115613a23575f5ffd5b8301601f81018513613a33575f5ffd5b80356001600160401b03811115613a48575f5ffd5b8560208260061b8401011115613a5c575f5ffd5b6020919091019590945092505050565b5f5f83601f840112613a7c575f5ffd5b5081356001600160401b03811115613a92575f5ffd5b6020830191508360208260051b8501011115613aac575f5ffd5b9250929050565b5f5f5f5f60608587031215613ac6575f5ffd5b8435613ad1816139ce565b93506020850135613ae1816139ce565b925060408501356001600160401b03811115613afb575f5ffd5b613b0787828801613a6c565b95989497509550505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6138536020830184613b13565b80356001600160401b038116811461373b575f5ffd5b5f60208284031215613b79575f5ffd5b61385382613b53565b803563ffffffff8116811461373b575f5ffd5b5f5f60408385031215613ba6575f5ffd5b613baf83613b82565b915060208301356001600160401b03811115613bc9575f5ffd5b830160c08186031215613bda575f5ffd5b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b604080519081016001600160401b0381118282101715613c1b57613c1b613be5565b60405290565b60405160c081016001600160401b0381118282101715613c1b57613c1b613be5565b604051601f8201601f191681016001600160401b0381118282101715613c6b57613c6b613be5565b604052919050565b5f6001600160401b03821115613c8b57613c8b613be5565b5060051b60200190565b80356001600160601b038116811461373b575f5ffd5b5f82601f830112613cba575f5ffd5b8135613ccd613cc882613c73565b613c43565b8082825260208201915060208360061b860101925085831115613cee575f5ffd5b602085015b83811015613d455760408188031215613d0a575f5ffd5b613d12613bf9565b8135613d1d816139ce565b8152613d2b60208301613c95565b602082015280845250602083019250604081019050613cf3565b5095945050505050565b5f6001600160401b03821115613d6757613d67613be5565b50601f01601f191660200190565b5f82601f830112613d84575f5ffd5b8135613d92613cc882613d4f565b818152846020838601011115613da6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f5f60c08789031215613dd7575f5ffd5b8635613de2816139ce565b95506020870135613df2816139ce565b945060408701356001600160401b03811115613e0c575f5ffd5b613e1889828a01613cab565b9450506060870135613e29816139ce565b92506080870135613e39816139ce565b915060a08701356001600160401b03811115613e53575f5ffd5b613e5f89828a01613d75565b9150509295509295509295565b5f60208284031215613e7c575f5ffd5b81356001600160401b03811115613e91575f5ffd5b612f7084828501613d75565b80356001600160801b038116811461373b575f5ffd5b5f5f5f60608486031215613ec5575f5ffd5b613ece84613b53565b9250613edc60208501613e9d565b9150613eea60408501613e9d565b90509250925092565b5f5f60208385031215613f04575f5ffd5b82356001600160401b03811115613f19575f5ffd5b613f2585828601613a6c565b90969095509350505050565b602080825282518282018190525f918401906040840190835b81811015613f8657835180516001600160a01b031684526020908101516001600160601b03168185015290930192604090920191600101613f4a565b509095945050505050565b5f5f60408385031215613fa2575f5ffd5b613fab83613b82565b91506020830135613bda816139ce565b5f8151808452602084019350602083015f5b82811015613ff45781516001600160a01b0316865260209586019590910190600101613fcd565b5093949350505050565b602081525f6138536020830184613fbb565b5f5f5f60408486031215614022575f5ffd5b833561402d816139ce565b925060208401356001600160401b03811115614047575f5ffd5b61405386828701613a6c565b9497909650939450505050565b5f5f5f5f5f5f60808789031215614075575f5ffd5b8635614080816139ce565b95506020870135614090816139ce565b945060408701356001600160401b038111156140aa575f5ffd5b6140b689828a01613a6c565b90955093505060608701356001600160401b038111156140d4575f5ffd5b8701601f810189136140e4575f5ffd5b80356001600160401b038111156140f9575f5ffd5b89602082840101111561410a575f5ffd5b60208201935080925050509295509295509295565b81516001600160a01b0316815260208083015163ffffffff169082015260408101613274565b5f60208284031215614155575f5ffd5b81516001600160401b0381111561416a575f5ffd5b8201601f8101841361417a575f5ffd5b8051614188613cc882613c73565b8082825260208201915060208360051b8501019250868311156141a9575f5ffd5b6020840193505b828410156141d45783516141c3816139ce565b8252602093840193909101906141b0565b9695505050505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215614202575f5ffd5b61385382613c95565b602080825281018290525f8360408301825b85811015613d45578235614230816139ce565b6001600160a01b031682526001600160601b0361424f60208501613c95565b1660208301526040928301929091019060010161421d565b5f60208284031215614277575f5ffd5b61385382613b82565b600181811c9082168061429457607f821691505b6020821081036142b257634e487b7160e01b5f52602260045260245ffd5b50919050565b5f602082840312156142c8575f5ffd5b81516001600160401b038111156142dd575f5ffd5b8201601f810184136142ed575f5ffd5b80516142fb613cc882613c73565b8082825260208201915060208360051b85010192508683111561431c575f5ffd5b6020840193505b828410156141d4578351614336816139ce565b825260209384019390910190614323565b83516001600160a01b0316815260208085015163ffffffff16908201525f6080820160806040840152845190819052602085019060a08401905f5b818110156143a95783516001600160a01b0316835260209384019390920191600101614382565b505083810360608501526139268186613fbb565b5f82601f8301126143cc575f5ffd5b81516143da613cc882613c73565b8082825260208201915060208360051b8601019250858311156143fb575f5ffd5b602085015b83811015613d45578051835260209283019201614400565b5f60208284031215614428575f5ffd5b81516001600160401b0381111561443d575f5ffd5b8201601f8101841361444d575f5ffd5b805161445b613cc882613c73565b8082825260208201915060208360051b85010192508683111561447c575f5ffd5b602084015b838110156144bc5780516001600160401b0381111561449e575f5ffd5b6144ad896020838901016143bd565b84525060209283019201614481565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417613274576132746144c7565b80820180821115613274576132746144c7565b5f60018201614516576145166144c7565b5060010190565b602080825282516040838301528051606084018190525f929190910190829060808501905b8083101561456d5783516001600160a01b031682526020938401936001939093019290910190614542565b506001600160401b03602087015116604086015280935050505092915050565b5f6020828403121561459d575f5ffd5b81516001600160401b038111156145b2575f5ffd5b8201601f810184136145c2575f5ffd5b80516145d0613cc882613d4f565b8181528560208385010111156145e4575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b803561373b816139ce565b5f82601f83011261461b575f5ffd5b8135614629613cc882613c73565b8082825260208201915060208360061b86010192508583111561464a575f5ffd5b602085015b83811015613d455760408188031215614666575f5ffd5b61466e613bf9565b8135614679816139ce565b815260208281013581830152908452929092019160400161464f565b5f60c082360312156146a5575f5ffd5b6146ad613c21565b82356001600160401b038111156146c2575f5ffd5b6146ce36828601613cab565b8252506146dd60208401614601565b602082015260408301356001600160401b038111156146fa575f5ffd5b6147063682860161460c565b60408301525061471860608401613b82565b606082015261472960808401613b82565b608082015260a08301356001600160401b03811115614746575f5ffd5b61475236828601613d75565b60a08301525092915050565b5f8151808452602084019350602083015f5b82811015613ff457815180516001600160a01b031687526020908101518188015260409096019590910190600101614770565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b828110156148f457868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b8083101561485a57835180516001600160a01b031683526020908101516001600160601b031690830152604082019150602084019350600183019250614819565b506020840151925061487760208a01846001600160a01b03169052565b6040840151925088810360408a0152614890818461475e565b9250505060608201516148ab606089018263ffffffff169052565b5060808201516148c3608089018263ffffffff169052565b5060a0820151915086810360a08801526148dd8183613b13565b9650505060209384019391909101906001016147e9565b5092979650505050505050565b601f82111561245e57805f5260205f20601f840160051c810160208510156149265750805b601f840160051c820191505b818110156124e2575f8155600101614932565b81516001600160401b0381111561495e5761495e613be5565b6149728161496c8454614280565b84614901565b6020601f8211600181146149a4575f831561498d5750848201515b5f19600385901b1c1916600184901b1784556124e2565b5f84815260208120601f198516915b828110156149d357878501518255602094850194600190920191016149b3565b50848210156149f057868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03831681526040602082018190525f9061385090830184613b13565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b828110156148f457605f19878603018452815163ffffffff81511686526020810151905060406020870152614a8e6040870182613fbb565b9550506020938401939190910190600101614a56565b604081525f614ab66040830185613b13565b8281036020840152614ac88185613b13565b95945050505050565b6001600160a01b038416815263ffffffff831660208201526060604082018190525f90614ac890830184613fbb565b60a081525f614b1260a0830188613b13565b828103602084015280875180835260208301915060208160051b84010160208a015f5b83811015614b6757601f19868403018552614b51838351613b13565b6020958601959093509190910190600101614b35565b50508581036040870152614b7b818a613b13565b945050505050614b9660608301856001600160801b03169052565b6001600160801b03831660808301526141d4565b6001600160a01b038516815263ffffffff8416602082015260606040820181905281018290525f8360808301825b85811015614c08578235614beb816139ce565b6001600160a01b0316825260209283019290910190600101614bd8565b50979650505050505050565b5f8235607e19833603018112614c28575f5ffd5b9190910192915050565b5f5f8335601e19843603018112614c47575f5ffd5b8301803591506001600160401b03821115614c60575f5ffd5b6020019150600581901b3603821315613aac575f5ffd5b5f5f8335601e19843603018112614c8c575f5ffd5b8301803591506001600160401b03821115614ca5575f5ffd5b602001915036819003821315613aac575f5ffd5b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f90614d0160e0840182613fbb565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b80831015614d495783518252602082019150602084019350600183019250614d26565b506080860151858203603f190160c087015292506139268184613b13565b5f5f60408385031215614d78575f5ffd5b825160208401519092506001600160401b03811115614d95575f5ffd5b614da1858286016143bd565b9150509250929050565b6001600160a01b038316815260608101613853602083018480516001600160a01b0316825260209081015163ffffffff16910152565b5f60208284031215614df1575f5ffd5b81518015158114613853575f5ffd5b81810381811115613274576132746144c7565b5f81614e2157614e216144c7565b505f190190565b5f60208284031215614e38575f5ffd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602080825282516001600160a01b039081168383015283820151166040808401919091528301516060808401528051608084018190525f929190910190829060a08501905b80831015613d455763ffffffff8451168252602082019150602084019350600183019250614ecf565b5f82518060208501845e5f92019182525091905056fe68747470733a2f2f7261772e67697468756275736572636f6e74656e742e636f6d2f64617461686176656e2d78797a2f64617461686176656e2f726566732f68656164732f6d61696e2f636f6e7472616374732f6465706c6f796d656e74732f6d657461646174612e6a736f6ea2646970667358221220fd3af89d7077a0f352fb483a82f62ee370702e10a4d48d6be08b25b80d077e3964736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" + } + }, + "14": { + "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", + "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", + "storage": {} + }, + "13": { + "address": "0x4ed7c70F96B99c776995fB64377f0d4aB3B0e1C1", + "code": "0x608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c6100673660046102d7565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c610109565b5f546001600160a01b031661007b565b61006c6100bd3660046102d7565b61011c565b6100ca61019a565b6100d3816101f3565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b61011161019a565b61011a5f610288565b565b61012461019a565b6001600160a01b03811661018e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b61019781610288565b50565b5f546001600160a01b0316331461011a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610185565b6001600160a01b0381163b6102665760405162461bcd60e51b815260206004820152603360248201527f5570677261646561626c65426561636f6e3a20696d706c656d656e746174696f6044820152721b881a5cc81b9bdd08184818dbdb9d1c9858dd606a1b6064820152608401610185565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156102e7575f5ffd5b81356001600160a01b03811681146102fd575f5ffd5b939250505056fea2646970667358221220003d7f443094069cb023dc39fb36d6ba29922db6cd9b714ea95af972fc56405e64736f6c634300081c003300000000000000", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x00000000000000000000000059b670e9fa9d0a427751af201d676719a970857b" + } + }, + "44": { + "address": "0x8f86403A4DE0BB5791fa46B8e795C547942fE4Cf", + "code": "0x60806040526004361061021d575f3560e01c8063805ce31d1161011e578063b39053c5116100a8578063d58a8be41161006d578063d58a8be4146106cb578063df4ed829146106de578063f2e500b2146106fd578063f906d30914610710578063fe61cc491461072f575f5ffd5b8063b39053c5146105f9578063be8d42c014610618578063c536218f1461066e578063c66414c51461068d578063c9bd1e5b146106ac575f5ffd5b806390ffc4f9116100ee57806390ffc4f914610561578063928bc49d14610594578063988062ea146105b357806398ea5fca146105d2578063b0a23d44146105da575f5ffd5b8063805ce31d146104d55780638450a97c146104f7578063860929ee146105165780638ce2e33914610542575f5ffd5b80633ae65d7e116101aa57806346cd27511161016f57806346cd27511461045157806352054834146104705780635c60da1b146104835780635e6dae26146104975780636a64d9fb146104b6575f5ffd5b80633ae65d7e1461038a5780633f8bb4d9146103a9578063423e69b6146103c857806342e3ccfa14610413578063439fab9114610432575f5ffd5b806327c1d325116101f057806327c1d325146102cb5780632a6c3229146102ea5780632dd677b1146103295780632fb8ac581461034857806338004f6914610367575f5ffd5b80630705f4651461022157806309824a80146102565780630b6176461461026b57806326aa101f1461029c575b5f5ffd5b34801561022c575f5ffd5b5061024061023b3660046129ee565b61074e565b60405161024d9190612a19565b60405180910390f35b610269610264366004612a47565b6107c8565b005b348015610276575f5ffd5b5061027f610843565b604080519283526001600160801b0390911660208301520161024d565b3480156102a7575f5ffd5b506102bb6102b6366004612a47565b6108b7565b604051901515815260200161024d565b3480156102d6575f5ffd5b506102696102e5366004612aa6565b610933565b3480156102f5575f5ffd5b506103096103043660046129ee565b6109bb565b604080516001600160401b0393841681529290911660208301520161024d565b348015610334575f5ffd5b50610269610343366004612aa6565b610a39565b348015610353575f5ffd5b50610269610362366004612ae4565b610a91565b348015610372575f5ffd5b505f516020613ae35f395f51905f525460ff16610240565b348015610395575f5ffd5b506102696103a4366004612aa6565b610b3e565b3480156103b4575f5ffd5b506102696103c3366004612aa6565b610bb8565b3480156103d3575f5ffd5b506103fb7f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf81565b6040516001600160a01b03909116815260200161024d565b34801561041e575f5ffd5b5061026961042d366004612aa6565b610c10565b34801561043d575f5ffd5b5061026961044c366004612aa6565b610c68565b34801561045c575f5ffd5b5061026961046b366004612aa6565b610ca1565b61026961047e366004612b50565b610d1b565b34801561048e575f5ffd5b506103fb610da1565b3480156104a2575f5ffd5b506103fb6104b13660046129ee565b610dcf565b3480156104c1575f5ffd5b506102696104d0366004612ae4565b610dd9565b3480156104e0575f5ffd5b506104e9610e33565b60405190815260200161024d565b348015610502575f5ffd5b50610269610511366004612aa6565b610e9f565b348015610521575f5ffd5b5061052a610f19565b6040516001600160401b03909116815260200161024d565b34801561054d575f5ffd5b5061026961055c366004612c2f565b610f85565b34801561056c575f5ffd5b506103fb7f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf81565b34801561059f575f5ffd5b506104e96105ae366004612ccb565b6110fd565b3480156105be575f5ffd5b506102696105cd366004612aa6565b61119c565b6102696111f4565b3480156105e5575f5ffd5b506102696105f4366004612aa6565b61122e565b348015610604575f5ffd5b506102696106133660046129ee565b611286565b348015610623575f5ffd5b506104e9610632366004612a47565b6001600160a01b03165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e602052604090206001015490565b348015610679575f5ffd5b50610269610688366004612aa6565b6112e8565b348015610698575f5ffd5b506102bb6106a7366004612d32565b611340565b3480156106b7575f5ffd5b506102696106c6366004612aa6565b611389565b6102696106d9366004612d5b565b6113e1565b3480156106e9575f5ffd5b506102696106f8366004612db4565b611438565b61026961070b366004612e3f565b61191f565b34801561071b575f5ffd5b5061026961072a366004612aa6565b6119ac565b34801561073a575f5ffd5b506103fb6107493660046129ee565b611a04565b604051630705f46560e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f051290630705f46590602401602060405180830381865af415801561079e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f00565b92915050565b5f5c156107d3575f5ffd5b60015f5d6040516213049560e71b81526001600160a01b038216600482015273e7f1725e7734ce288f8367e1bb143e90bb3f0512906309824a80906024015f6040518083038186803b158015610827575f5ffd5b505af4158015610839573d5f5f3e3d5ffd5b505050505f5f5d50565b5f5f73e7f1725e7734ce288f8367e1bb143e90bb3f0512630b6176466040518163ffffffff1660e01b81526004016040805180830381865af415801561088b573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108af9190612f1e565b915091509091565b6040516326aa101f60e01b81526001600160a01b03821660048201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f0512906326aa101f90602401602060405180830381865af415801561090f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c29190612f4d565b333014610952576040516282b42960e81b815260040160405180910390fd5b6040516316cba71360e21b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990635b2e9c4c9061098b9085908590600401612f94565b5f6040518083038186803b1580156109a1575f5ffd5b505af41580156109b3573d5f5f3e3d5ffd5b505050505050565b604051632a6c322960e01b8152600481018290525f90819073e7f1725e7734ce288f8367e1bb143e90bb3f051290632a6c3229906024016040805180830381865af4158015610a0c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a309190612fa7565b91509150915091565b333014610a58576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f87570790638257f3d59061098b9085908590600401612f94565b333014610ab0576040516282b42960e81b815260040160405180910390fd5b60405163fe1aa59d60e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063fe1aa59d90610b0d9086907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9087908790600401612fd4565b5f6040518083038186803b158015610b23575f5ffd5b505af4158015610b35573d5f5f3e3d5ffd5b50505050505050565b333014610b5d576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b333014610bd7576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063253946459061098b9085908590600401612f94565b333014610c2f576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063ae8a4d989061098b9085908590600401612f94565b60405163439fab9160e01b8152730165878a594ca255338adfa4d48449f69242eb8f9063439fab919061098b9085908590600401612f94565b333014610cc0576040516282b42960e81b815260040160405180910390fd5b604051636552967560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063655296759061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f5c15610d26575f5ffd5b60015f5d6040516326415bf360e21b815273e7f1725e7734ce288f8367e1bb143e90bb3f0512906399056fcc90610d6b9088903390899089908990899060040161306d565b5f6040518083038186803b158015610d81575f5ffd5b505af4158015610d93573d5f5f3e3d5ffd5b505050505f5f5d5050505050565b5f610dca7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b905090565b5f6107c282611a78565b333014610df8576040516282b42960e81b815260040160405180910390fd5b604051630e83f5b160e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063741fad8890610b0d90869086908690600401613102565b5f73e7f1725e7734ce288f8367e1bb143e90bb3f051263805ce31d6040518163ffffffff1660e01b8152600401602060405180830381865af4158015610e7b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca919061311b565b333014610ebe576040516282b42960e81b815260040160405180910390fd5b60405163c31308d160e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063c31308d19061098b907f0000000000000000000000000e801d84fa97b50751dbf25036d067dcf18858bf9086908690600401613008565b5f739fe46736679d2d9a65f0992f2272de9f3c7fa6e063fd10ebe56040518163ffffffff1660e01b8152600401602060405180830381865af4158015610f61573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dca9190613132565b5f5c15610f90575f5ffd5b60015f5d5f516020613ae35f395f51905f52610fe4610fb56040880160208901612d32565b66ffffffffffffff600882901c165f908152600484016020526040902054600160ff9092169190911b16151590565b1561100257604051633ab3447f60e11b815260040160405180910390fd5b6110466110156040880160208901612d32565b66ffffffffffffff600882901c165f90815260048401602052604090208054600160ff9093169290921b9091179055565b5f611052878787611ad0565b905061105e8185611b41565b61107b576040516309bde33960e01b815260040160405180910390fd5b505f61108687611be4565b90506110986040880160208901612d32565b6001600160401b03167f8856ab63954e6c2938803a4654fb704c8779757e7bfdbe94a578e341ec637a95886040013583866040516110e9939291909283529015156020830152604082015260600190565b60405180910390a250505f5f5d5050505050565b60405163928bc49d60e01b81526001600160a01b038416600482015263ffffffff831660248201526001600160801b03821660448201525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063928bc49d90606401602060405180830381865af4158015611170573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611194919061311b565b949350505050565b3330146111bb576040516282b42960e81b815260040160405180910390fd5b60405163017b731160e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063017b73119061098b9085908590600401612f94565b604080513381523460208201527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4910160405180910390a1565b33301461124d576040516282b42960e81b815260040160405180910390fd5b604051630643752360e11b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990630c86ea469061098b9085908590600401612f94565b604051634a283cd960e01b815260048101829052739fe46736679d2d9a65f0992f2272de9f3c7fa6e090634a283cd9906024015f6040518083038186803b1580156112cf575f5ffd5b505af41580156112e1573d5f5f3e3d5ffd5b5050505050565b333014611307576040516282b42960e81b815260040160405180910390fd5b6040516315d149b360e31b815273dc64a140aa3e981100a9beca4e685f962f0cf6c99063ae8a4d989061098b9085908590600401612f94565b66ffffffffffffff600882901c165f9081527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96af6020526040812054600160ff84161b1615156107c2565b3330146113a8576040516282b42960e81b815260040160405180910390fd5b604051638257f3d560e01b815273dc64a140aa3e981100a9beca4e685f962f0cf6c990638257f3d59061098b9085908590600401612f94565b5f5c156113ec575f5ffd5b60015f5d60ff831615611412576040516386eab41b60e01b815260040160405180910390fd5b61142f8460ff8516801561142857611428612a05565b8484611ca1565b5f5f5d50505050565b5f5c15611443575f5ffd5b60015f5d5f5a90505f6114568635611d5a565b80549091506114749061010090046001600160401b03166001613161565b6001600160401b031661148d6040880160208901612d32565b6001600160401b0316146114b457604051633ab3447f60e11b815260040160405180910390fd5b805461010090046001600160401b03168160016114d083613180565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550505f8660405160200161150791906131cc565b6040516020818303038152906040528051906020012090505f61155d8787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250869250611db0915050565b905061156a81865f611df2565b611587576040516309bde33960e01b815260040160405180910390fd5b5f61159860a08a0160808b01612d32565b6001600160401b031690506115af6127108261327e565b60405a6115bd90603f613291565b6115c791906132a8565b10156115e657604051636eb14fc360e11b815260040160405180910390fd5b60015f6115f960608c0160408d016132c7565b600b81111561160a5761160a612a05565b036116795730638450a97c8361162360608e018e6132e0565b6040518463ffffffff1660e01b8152600401611640929190612f94565b5f604051808303815f88803b158015611657575f5ffd5b5087f193505050508015611669575060015b61167457505f611840565b611840565b600561168b60608c0160408d016132c7565b600b81111561169c5761169c612a05565b036116b5573063c9bd1e5b8361162360608e018e6132e0565b60016116c760608c0160408d016132c7565b600b8111156116d8576116d8612a05565b036116f15730633f8bb4d98361162360608e018e6132e0565b600761170360608c0160408d016132c7565b600b81111561171457611714612a05565b0361172d57306327c1d3258361162360608e018e6132e0565b600861173f60608c0160408d016132c7565b600b81111561175057611750612a05565b03611769573063b0a23d448361162360608e018e6132e0565b600961177b60608c0160408d016132c7565b600b81111561178c5761178c612a05565b036117a557306346cd27518361162360608e018e6132e0565b600a6117b760608c0160408d016132c7565b600b8111156117c8576117c8612a05565b036117e1573063c536218f8361162360608e018e6132e0565b600b6117f360608c0160408d016132c7565b600b81111561180457611804612a05565b0361183d5730636a64d9fb838c3561181f60608f018f6132e0565b6040518563ffffffff1660e01b815260040161164093929190613102565b505f5b5f5a61184c9088613322565b611854611e97565b61185e919061327e565b90505f61186f3a8d60a00135611ebb565b6118799083613291565b90505f61189361188d60c08f01358461327e565b47611ebb565b905061189d611ed0565b8111156118ae576118ae3382611edd565b8c60e001358d5f01357f617fdb0cb78f01551a192a3673208ec5eb09f20a90acf673c63a0dcb11745a7a8f60200160208101906118eb9190612d32565b604080516001600160401b03909216825288151560208301520160405180910390a35050505050505050505f5f5d50505050565b5f5c1561192a575f5ffd5b60015f5d604051631fccb47160e31b8152739fe46736679d2d9a65f0992f2272de9f3c7fa6e09063fe65a38890611973908b908b908b908b908b908b908b908b90600401613335565b5f6040518083038186803b158015611989575f5ffd5b505af415801561199b573d5f5f3e3d5ffd5b505050505f5f5d5050505050505050565b3330146119cb576040516282b42960e81b815260040160405180910390fd5b604051632539464560e01b8152735fc8d32690cc91d4c39d9d3abcbd16989f8757079063253946459061098b9085908590600401612f94565b60405163fe61cc4960e01b8152600481018290525f9073e7f1725e7734ce288f8367e1bb143e90bb3f05129063fe61cc4990602401602060405180830381865af4158015611a54573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c291906133ef565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b031680611acb5760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f84604051602001611ae3919061346b565b604051602081830303815290604052805190602001209050611b388484808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250859250611db0915050565b95945050505050565b6040516372dd6c6d60e11b81525f90735fbdb2315678afecb367f032d93f642f64180aa39063e5bad8da90611b9e907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9087908790600401613605565b602060405180830381865af4158015611bb9573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bdd9190612f4d565b9392505050565b5f6001815b611bf6606085018561366f565b9050811015611c9a57611c38611c0f606086018661366f565b83818110611c1f57611c1f6136b4565b9050602002810190611c3191906136c8565b8535611f0b565b611c9257611c4c6040850160208601612d32565b6001600160401b03167fa6dc208277bb3da3666e7305baf550db2daf26f8f386a431a4b27cc7a02965a282604051611c8691815260200190565b60405180910390a25f91505b600101611be9565b5092915050565b6001600160801b03341115611cc9576040516330e972ad60e01b815260040160405180910390fd5b611cd381836136e6565b6001600160801b0316341015611cfc5760405163044044a560e21b815260040160405180910390fd5b5f611d078585612127565b9050611d12856121c7565b604080515f808252602082019092526112e19130918491611d43565b6060815260200190600190039081611d2e5790505b5060405180602001604052805f8152508787612271565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b0316611acb57604051636ddd9da960e01b815260040160405180910390fd5b5f81815b8451811015611dea57611de082868381518110611dd357611dd36136b4565b602002602001015161250c565b9150600101611db4565b509392505050565b6040516316db930b60e11b81525f90738a791620dd6260079bf849dc5567adc3f2fdc31890632db7261690611e58907f00000000000000000000000099bba657f2bbc93c02d617f8ba121cb8fc104acf9061ea0360f01b9089908990899060040161374a565b602060405180830381865af4158015611e73573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111949190612f4d565b5f611ea436610bb8611ebb565b611eaf906010613291565b610dca90618b7261327e565b5f818310611ec95781611bdd565b5090919050565b5f610dca3a615208613291565b5f5f5f5f5f85875af1905080611f0657604051633d2cec6f60e21b815260040160405180910390fd5b505050565b5f615dc0611f1f6040850160208601612d32565b6001600160401b0316611f32919061327e565b60405a611f4090603f613291565b611f4a91906132a8565b1015611f69576040516360ee124760e01b815260040160405180910390fd5b5f611f7760208501856138ef565b60ff1603612001573063f906d309611f956040860160208701612d32565b6001600160401b0316611fab60408701876132e0565b6040518463ffffffff1660e01b8152600401611fc8929190612f94565b5f604051808303815f88803b158015611fdf575f5ffd5b5087f193505050508015611ff1575060015b611ffc57505f6107c2565b61211e565b600161201060208501856138ef565b60ff160361202e5730632dd677b1611f956040860160208701612d32565b600261203d60208501856138ef565b60ff160361205b5730633ae65d7e611f956040860160208701612d32565b600361206a60208501856138ef565b60ff160361208857306342e3ccfa611f956040860160208701612d32565b600461209760208501856138ef565b60ff16036120b5573063988062ea611f956040860160208701612d32565b60056120c460208501856138ef565b60ff16036121175730632fb8ac586120e26040860160208701612d32565b6001600160401b0316846120f960408801886132e0565b6040518563ffffffff1660e01b8152600401611fc893929190613102565b505f6107c2565b50600192915050565b604080518082019091525f8152606060208201526040518060400160405280600160ff1681526020016040518060400160405280866001600160a01b03168152602001855f81111561217b5761217b612a05565b60ff1690526040516121ae919060200181516001600160a01b0316815260209182015160ff169181019190915260400190565b60408051601f1981840301815291905290529392505050565b6121d9816001600160a01b0316612538565b6121f65760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e60208190526040909120805460ff16801561224457506122448161257e565b1561226257604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b612279612592565b6001600160801b033411156122a1576040516330e972ad60e01b815260040160405180910390fd5b6122ab81836136e6565b6001600160801b03163410156122d45760405163044044a560e21b815260040160405180910390fd5b5f6122fe7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b79611a78565b90506123136001600160a01b03821634611edd565b8451600810156123365760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561235057612350613705565b60405190808252806020026020018201604052801561239557816020015b604080518082019091525f81526060602082015281526020019060019003908161236e5790505b5090505f5b86518110156123ea576123c58782815181106123b8576123b86136b4565b60200260200101516125d9565b8282815181106123d7576123d76136b4565b602090810291909101015260010161239a565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0545f516020613ae35f395f51905f529061242f906001600160401b03166001613161565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a8152602001888152602001868834612490919061390a565b61249a919061390a565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c916124f8916001600160401b0316908490613978565b60405180910390a150505050505050505050565b5f818310612526575f828152602084905260409020611bdd565b5f838152602083905260409020611bdd565b5f6001600160a01b0382163f158015906107c25750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f61258b82600101541590565b1592915050565b5f516020613ae35f395f51905f5280545f9060ff1660018111156125b8576125b8612a05565b146125d657604051633ac4266d60e11b815260040160405180910390fd5b50565b604080518082019091525f815260606020820152602082015160ff165f819003612622575f5f848060200190518101906126139190613a8d565b9250925050611b38828261263b565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166126ae5760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b0316116126d75760405163162908e360e11b815260040160405180910390fd5b600181015461270d5760018201546126fa906001600160a01b03168633876127a5565b6127048585612821565b925050506107c2565b6127168161257e565b1561278c57604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b158015612768575f5ffd5b505af115801561277a573d5f5f3e3d5ffd5b50505050612704816001015485612888565b604051636890662960e01b815260040160405180910390fd5b6127b7836001600160a01b0316612538565b6127d45760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036127fd5760405163162908e360e11b815260040160405180910390fd5b61281b6001600160a01b03841683866001600160801b0385166128e2565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060016121ae565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a905291511695810195909552929390830191016121ae565b6040516001600160a01b038085166024830152831660448201526064810182905261281b90859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b0316836040516129509190613acc565b5f604051808303815f865af19150503d805f8114612989576040519150601f19603f3d011682016040523d82523d5f602084013e61298e565b606091505b50915091505f8280156129b95750815115806129b95750818060200190518101906129b99190612f4d565b90508015806129d057506001600160a01b0385163b155b156112e15760405163022e258160e11b815260040160405180910390fd5b5f602082840312156129fe575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b6020810160028310612a2d57612a2d612a05565b91905290565b6001600160a01b03811681146125d6575f5ffd5b5f60208284031215612a57575f5ffd5b8135611bdd81612a33565b5f5f83601f840112612a72575f5ffd5b5081356001600160401b03811115612a88575f5ffd5b602083019150836020828501011115612a9f575f5ffd5b9250929050565b5f5f60208385031215612ab7575f5ffd5b82356001600160401b03811115612acc575f5ffd5b612ad885828601612a62565b90969095509350505050565b5f5f5f60408486031215612af6575f5ffd5b8335925060208401356001600160401b03811115612b12575f5ffd5b612b1e86828701612a62565b9497909650939450505050565b63ffffffff811681146125d6575f5ffd5b6001600160801b03811681146125d6575f5ffd5b5f5f5f5f5f60a08688031215612b64575f5ffd5b8535612b6f81612a33565b94506020860135612b7f81612b2b565b935060408601356001600160401b03811115612b99575f5ffd5b860160408189031215612baa575f5ffd5b92506060860135612bba81612b3c565b91506080860135612bca81612b3c565b809150509295509295909350565b5f5f83601f840112612be8575f5ffd5b5081356001600160401b03811115612bfe575f5ffd5b6020830191508360208260051b8501011115612a9f575f5ffd5b5f6101008284031215612c29575f5ffd5b50919050565b5f5f5f5f5f60808688031215612c43575f5ffd5b85356001600160401b03811115612c58575f5ffd5b860160808189031215612c69575f5ffd5b945060208601356001600160401b03811115612c83575f5ffd5b612c8f88828901612bd8565b90955093505060408601356001600160401b03811115612cad575f5ffd5b612cb988828901612c18565b95989497509295606001359392505050565b5f5f5f60608486031215612cdd575f5ffd5b8335612ce881612a33565b92506020840135612cf881612b2b565b91506040840135612d0881612b3c565b809150509250925092565b6001600160401b03811681146125d6575f5ffd5b8035611acb81612d13565b5f60208284031215612d42575f5ffd5b8135611bdd81612d13565b60ff811681146125d6575f5ffd5b5f5f5f5f60808587031215612d6e575f5ffd5b8435612d7981612a33565b93506020850135612d8981612d4d565b92506040850135612d9981612b3c565b91506060850135612da981612b3c565b939692955090935050565b5f5f5f5f60608587031215612dc7575f5ffd5b84356001600160401b03811115612ddc575f5ffd5b612de887828801612c18565b94505060208501356001600160401b03811115612e03575f5ffd5b612e0f87828801612bd8565b90945092505060408501356001600160401b03811115612e2d575f5ffd5b85016101408188031215612da9575f5ffd5b5f5f5f5f5f5f5f5f60a0898b031215612e56575f5ffd5b88356001600160401b03811115612e6b575f5ffd5b612e778b828c01612a62565b90995097505060208901356001600160401b03811115612e95575f5ffd5b612ea18b828c01612bd8565b90975095505060408901356001600160401b03811115612ebf575f5ffd5b612ecb8b828c01612a62565b9095509350506060890135612edf81612b3c565b91506080890135612eef81612b3c565b809150509295985092959890939650565b5f60208284031215612f10575f5ffd5b815160028110611bdd575f5ffd5b5f5f60408385031215612f2f575f5ffd5b82516020840151909250612f4281612b3c565b809150509250929050565b5f60208284031215612f5d575f5ffd5b81518015158114611bdd575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f611194602083018486612f6c565b5f5f60408385031215612fb8575f5ffd5b8251612fc381612d13565b6020840151909250612f4281612d13565b8481526001600160a01b03841660208201526060604082018190525f90612ffe9083018486612f6c565b9695505050505050565b6001600160a01b03841681526040602082018190525f90611b389083018486612f6c565b5f5f8335601e19843603018112613041575f5ffd5b83016020810192503590506001600160401b0381111561305f575f5ffd5b803603821315612a9f575f5ffd5b6001600160a01b0387811682528616602082015263ffffffff8516604082015260c060608201525f8435600381108015906130a6575f5ffd5b5060c08301526130b9602086018661302c565b604060e08501526130cf61010085018284612f6c565b925050506001600160801b03841660808301526130f760a08301846001600160801b03169052565b979650505050505050565b838152604060208201525f611b38604083018486612f6c565b5f6020828403121561312b575f5ffd5b5051919050565b5f60208284031215613142575f5ffd5b8151611bdd81612d13565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908111156107c2576107c261314d565b5f6001600160401b0382166001600160401b0381036131a1576131a161314d565b60010192915050565b8035600c8110611acb575f5ffd5b600c81106131c8576131c8612a05565b9052565b60208082528235828201525f908301356131e581612d13565b6001600160401b038116604084015250613201604084016131aa565b61320e60608401826131b8565b5061321c606084018461302c565b610100608085015261323361012085018284612f6c565b91505061324260808501612d27565b6001600160401b03811660a08501525060a084013560c08481019190915284013560e08085019190915290930135610100909201919091525090565b808201808211156107c2576107c261314d565b80820281158282048414176107c2576107c261314d565b5f826132c257634e487b7160e01b5f52601260045260245ffd5b500490565b5f602082840312156132d7575f5ffd5b611bdd826131aa565b5f5f8335601e198436030181126132f5575f5ffd5b8301803591506001600160401b0382111561330e575f5ffd5b602001915036819003821315612a9f575f5ffd5b818103818111156107c2576107c261314d565b60a081525f61334860a083018a8c612f6c565b82810360208401528088825260208201905060208960051b8301018a5f5b8b8110156133a457848303601f19018452613381828e61302c565b61338c858284612f6c565b60209687019690955093909301925050600101613366565b505084810360408601526133b981898b612f6c565b93505050506133d360608301856001600160801b03169052565b6001600160801b03831660808301529998505050505050505050565b5f602082840312156133ff575f5ffd5b8151611bdd81612a33565b5f5f8335601e1984360301811261341f575f5ffd5b83016020810192503590506001600160401b0381111561343d575f5ffd5b8060051b3603821315612a9f575f5ffd5b5f8235605e19833603018112613462575f5ffd5b90910192915050565b60208082528235828201525f9060a083019084013561348981612d13565b6001600160401b0381166040850152505f60408501359050806060850152506134b5606085018561340a565b6080808601528281845260c08601905060c08260051b8701019350825f5b838110156135555787860360bf190183526134ee828661344e565b80356134f981612d4d565b60ff168752602081013561350c81612d13565b6001600160401b03166020880152613527604082018261302c565b91506060604089015261353e606089018383612f6c565b9750505060209283019291909101906001016134d3565b5093979650505050505050565b803561356d81612d4d565b60ff168252602081013561358081612b2b565b63ffffffff1660208301526040818101359083015260608101356135a381612d13565b6001600160401b0316606083015260808101356135bf81612b2b565b63ffffffff16608083015260a090810135910152565b8183525f6001600160fb1b038311156135ec575f5ffd5b8260051b80836020870137939093016020019392505050565b6001600160a01b03841681526020810183905260606040820181905261362d90820183613562565b5f61363b60c084018461340a565b610100610120850152613653610160850182846135d5565b60e0959095013561014094909401939093525091949350505050565b5f5f8335601e19843603018112613684575f5ffd5b8301803591506001600160401b0382111561369d575f5ffd5b6020019150600581901b3603821315612a9f575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126136dc575f5ffd5b9190910192915050565b6001600160801b0381811683821601908111156107c2576107c261314d565b634e487b7160e01b5f52604160045260245ffd5b80358252602080820135908301525f613735604083018361340a565b60606040860152611b386060860182846135d5565b6001600160a01b03861681526001600160e01b0319851660208201526040810184905260a060608201525f833536859003609e19018112613789575f5ffd5b61014060a0840152840180356101e084015260208101356102008401526040810135610220840152606081013561024084015261028083016137ce608083018361340a565b925060a0610260860152818383526102a0860190506102a08460051b8701019250815f5b8581101561386e5787850361029f1901835261380e828561344e565b8035865260208101356001600160e01b0319811680821461382d575f5ffd5b602088015250613840604082018261302c565b915060606040880152613857606088018383612f6c565b9650505060209283019291909101906001016137f2565b5050505061387f602087018761344e565b848203609f190160c086015291506138978183613719565b9150506138aa60e0840160408701613562565b6138b861010086018661340a565b848303609f19016101a08601526138d08382846135d5565b6101208801356101c087015286151560808701529350612ffe92505050565b5f602082840312156138ff575f5ffd5b8135611bdd81612d4d565b6001600160801b0382811682821603908111156107c2576107c261314d565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f6020820151604060208501526111946040850182613929565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b818110156139ff5761013f198786030183526139ea858551613957565b945060209384019392909201916001016139cd565b505050506040840151838203603f19016080850152613a1e8282613957565b9150506060840151603f198483030160a0850152613a3c8282613929565b9150506080840151613a5960c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b5f5f5f60608486031215613a9f575f5ffd5b8351613aaa81612d4d565b6020850151909350613abb81612a33565b6040850151909250612d0881612b3c565b5f82518060208501845e5f92019182525091905056fe0096e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96aba2646970667358221220d2f603e4644996fdd6f5bfe996a433ec4c63b91e433ec6617ddd8c10790babb164736f6c634300081c003300000000000000000000000000", + "storage": {} + }, + "12": { + "address": "0x5FbDB2315678afecb367f032d93F642f64180aa3", + "code": "0x735fbdb2315678afecb367f032d93f642f64180aa33014608060405260043610610034575f3560e01c8063e5bad8da14610038575b5f5ffd5b61004b610046366004610256565b61005f565b604051901515815260200160405180910390f35b5f80610079610073368590038501856102fc565b85610104565b90506001600160a01b03851663a401662b8261009860c087018761039b565b8760e001356040518563ffffffff1660e01b81526004016100bc94939291906103e8565b602060405180830381865afa1580156100d7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100fb919061042c565b95945050505050565b81515f90819060f81b61013c8560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b85604001516101b287606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b5f5f5f60608486031215610268575f5ffd5b83356001600160a01b038116811461027e575f5ffd5b925060208401359150604084013567ffffffffffffffff8111156102a0575f5ffd5b840161010081870312156102b2575f5ffd5b809150509250925092565b803560ff811681146102cd575f5ffd5b919050565b803563ffffffff811681146102cd575f5ffd5b803567ffffffffffffffff811681146102cd575f5ffd5b5f60c082840312801561030d575f5ffd5b5060405160c0810167ffffffffffffffff8111828210171561033d57634e487b7160e01b5f52604160045260245ffd5b604052610349836102bd565b8152610357602084016102d2565b602082015260408381013590820152610372606084016102e5565b6060820152610383608084016102d2565b608082015260a0928301359281019290925250919050565b5f5f8335601e198436030181126103b0575f5ffd5b83018035915067ffffffffffffffff8211156103ca575f5ffd5b6020019150600581901b36038213156103e1575f5ffd5b9250929050565b84815260606020820181905281018390525f6001600160fb1b0384111561040d575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f6020828403121561043c575f5ffd5b8151801515811461044b575f5ffd5b939250505056fea2646970667358221220202aa32fed9b1043addbc14e73c73106e521b4a0cbd4090b88a279664688a3ca64736f6c634300081c0033000000000000000000000000", + "storage": {} + }, + "16": { + "address": "0xe7f1725E7734CE288F8367e1Bb143E90bb3F0512", + "code": "0x73e7f1725e7734ce288f8367e1bb143e90bb3f0512301460806040526004361061009b575f3560e01c80632a6c32291161006e5780632a6c322914610191578063805ce31d146101c5578063928bc49d146101db57806399056fcc146101ee578063fe61cc491461020d575f5ffd5b80630705f4651461009f57806309824a80146100c85780630b617646146100e957806326aa101f1461014a575b5f5ffd5b6100b26100ad366004611fdf565b61026c565b6040516100bf919061200a565b60405180910390f35b8180156100d3575f5ffd5b506100e76100e236600461203a565b610282565b005b7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6547f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f754604080519283526001600160801b039091166020830152016100bf565b61018161015836600461203a565b6001600160a01b03165f9081525f5160206125e85f395f51905f52602052604090205460ff1690565b60405190151581526020016100bf565b6101a461019f366004611fdf565b61033b565b6040805167ffffffffffffffff9384168152929091166020830152016100bf565b6101cd61036a565b6040519081526020016100bf565b6101cd6101e936600461207c565b610380565b8180156101f9575f5ffd5b506100e76102083660046120bc565b6103e0565b61025461021b366004611fdf565b5f9081527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23260205260409020546001600160a01b031690565b6040516001600160a01b0390911681526020016100bf565b5f5f61027783610494565b5460ff169392505050565b5f5160206125e85f395f51905f52610299826104ef565b60408051608081019091526001820154600160a01b900463ffffffff1681525f90602081016102c6610586565b815260028401546020909101906102e79086906001600160801b03166105e7565b81525f6020918201526040516001600160a01b03861681529192507ff78bb28d4b1d7da699e5c0bc2be29c2b04b5aab6aacf6298fe5304f9db9c6d7e910160405180910390a161033681610632565b505050565b5f5f5f61034784610494565b5467ffffffffffffffff6101008204811696600160481b90920416945092505050565b5f61037b610376610586565b610836565b905090565b6001600160a01b0383165f9081525f5160206125e85f395f51905f52602081905260408220805460ff166103c75760405163259ba1ad60e01b815260040160405180910390fd5b6103d461037686866108c7565b925050505b9392505050565b5f5160206125e85f395f51905f526001600160801b0382165f036104175760405163162908e360e11b815260040160405180910390fd5b6001600160a01b0387165f908152602082905260409020805460ff166104505760405163259ba1ad60e01b815260040160405180910390fd5b60018101546104745761046f61046a8989898989896109ae565b610632565b61048a565b61048a61046a82600101548a8a8a8a8a8a610b97565b5050505050505050565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ac6020526040902060018101546001600160a01b03166104ea57604051636ddd9da960e01b815260040160405180910390fd5b919050565b610501816001600160a01b0316610cf9565b61051e5760405163c1ab6dc160e01b815260040160405180910390fd5b6001600160a01b0381165f9081525f5160206125e85f395f51905f5260208190526040909120805460ff168015610559575061055981610d3f565b1561057757604051633ea7ffd960e11b815260040160405180910390fd5b805460ff191660011790555050565b604080518082019091527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230546001600160801b031681527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23154602082015290565b60605f6105f346610d53565b5f6105fd86610dbc565b61060686610ded565b60405160200161061a959493929190612161565b60405160208183030381529060405290505b92915050565b805160408051637061726160e01b60208083019190915260e09390931b6001600160e01b031916602482015281516008818303018152602890910190915280519101205f61067f82610494565b905061068a81610e8c565b5f6106988460200151610836565b90505f84606001516001600160801b0316826106b491906121c4565b9050803410156106d757604051631c0b171360e31b815260040160405180910390fd5b60608501516001600160801b0316156107225761072285606001516001600160801b031661070f5f5160206125e85f395f51905f5290565b600101546001600160a01b031690610f08565b825461074090600160481b900467ffffffffffffffff1660016121d7565b835467ffffffffffffffff91909116600160481b0270ffffffffffffffff000000000000000000199091161783555f61077982346121f7565b9050610783610f31565b811115610794576107943382610f08565b83546040805160208101889052600160481b90920460c01b6001600160c01b031916908201525f9060480160405160208183030381529060405280519060200120905080867f7153f9357c8ea496bba60bf82e67143e27b64462b49041f8e689e1b05728f84f875f0160099054906101000a900467ffffffffffffffff168a6040015160405161082592919061220a565b60405180910390a350505050505050565b80517f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7545f917f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f691839161089c9161089791906001600160801b03166121c4565b610f3e565b90506108b0825f0154836002015483610f88565b84602001516108bf91906121c4565b949350505050565b604080518082019091525f80825260208201527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f545f5160206125e85f395f51905f5290600160a01b900463ffffffff9081169085160361093e576002810154600160801b90046001600160801b031682526109a1565b60058101546001600160801b0361010090910481169084161115610975576040516332ee86af60e11b815260040160405180910390fd5b6002810154610995908490600160801b90046001600160801b0316612250565b6001600160801b031682525b505f602082015292915050565b6109b6611f9a565b5f5160206125e85f395f51905f526001600160a01b038816156109f85760018101546109ed906001600160a01b031689898661100d565b5f6060830152610a08565b6001600160801b03831660608301525b6001810154600160a01b900463ffffffff168252610a2686856108c7565b6020830152600181015463ffffffff808816600160a01b9092041603610a9f57610a4f85611089565b15610a8657610a7c88610a61876110b2565b6002840154600160801b90046001600160801b0316866110c9565b6040830152610b38565b604051634851657960e11b815260040160405180910390fd5b836001600160801b03165f03610ac8576040516332ee86af60e11b815260040160405180910390fd5b610ad185611089565b15610b0057610a7c8887610ae4886110b2565b6002850154600160801b90046001600160801b03168888611127565b610b09856111ba565b15610a8657610a7c8887610b1c886111c2565b6002850154600160801b90046001600160801b031688886111d9565b8563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610b8492919061227d565b60405180910390a4509695505050505050565b610b9f611f9a565b5f5f5160206125e85f395f51905f52604051632770a7eb60e21b81526001600160a01b0389811660048301526001600160801b038616602483015291925090891690639dc29fac906044015f604051808303815f87803b158015610c01575f5ffd5b505af1158015610c13573d5f5f3e3d5ffd5b505050506001810154600160a01b900463ffffffff168252610c3586856108c7565b60208301525f6060830152600181015463ffffffff808816600160a01b90920416148015610c675750610c6785611089565b15610a8657610c9489610c79876110b2565b6002840154600160801b90046001600160801b031686611251565b60408301528563ffffffff16876001600160a01b0316896001600160a01b03167f24c5d2de620c6e25186ae16f6919eba93b6e2c1a33857cc419d9f3a00d6967e98887604051610ce592919061227d565b60405180910390a450979650505050505050565b5f6001600160a01b0382163f1580159061062c5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b5f610d4c82600101541590565b1592915050565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051606082811b6001600160601b0319166020830152906034016040516020818303038152906040529050919050565b6eff000000ff000000ff000000ff0000600882811c9182166fff000000ff000000ff000000ff0000009390911b92831617601090811c6cff000000ff000000ff000000ff929092166dff000000ff000000ff000000ff00939093169290921790911b17602081811c6bffffffff00000000ffffffff166fffffffff00000000ffffffff000000009290911b9190911617604081811c91901b1760801b90565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff166001811115610ec457610ec4611ff6565b141580610ee657505f825460ff166001811115610ee357610ee3611ff6565b14155b15610f0457604051633ac4266d60e11b815260040160405180910390fd5b5050565b5f5f5f5f5f85875af190508061033657604051633d2cec6f60e21b815260040160405180910390fd5b5f61037b3a615208612323565b5f610f52670de0b6b3a76400005f1961234e565b821115610f7a57604051631cd951a760e01b8152600481018390526024015b60405180910390fd5b50670de0b6b3a76400000290565b5f5f5160206125e85f395f51905f5281610fa9670de0b6b3a7640000610f3e565b60058301549091505f90610fd390610fc39060ff16610f3e565b610fcd600a610f3e565b906112dd565b90505f610ff683610fea84610ff08c838d8d6113ed565b906113ed565b906113fb565b905061100181611412565b98975050505050505050565b61101f836001600160a01b0316610cf9565b61103c5760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036110655760405163162908e360e11b815260040160405180910390fd5b6110836001600160a01b03841683866001600160801b038516611425565b50505050565b5f60015b61109a602084018461236d565b60028111156110ab576110ab611ff6565b1492915050565b5f6110c06020830183612386565b61062c916123d0565b60605f6110d546610d53565b600160f81b6110e388610dbc565b5f886110ee88610ded565b6110f78a610ded565b60405160200161110e9897969594939291906123ed565b6040516020818303038152906040529050949350505050565b60605f61113346610d53565b600160f81b6111418a610dbc565b600160f81b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6111748a610ded565b61117d8a610ded565b6111868d610ded565b60405160200161119f9a9998979695949392919061245b565b60405160208183030381529060405290509695505050505050565b5f600261108d565b5f6111d06020830183612386565b61062c916124e3565b60605f6111e546610d53565b600160f81b6111f38a610dbc565b600160f91b60088b811b63ff00ff001662ff00ff918d901c9190911617601081811b91901c1760e01b8a6112268a610ded565b61122f8a610ded565b6112388d610ded565b60405160200161119f9a9998979695949392919061252b565b60605f61125d46610d53565b600160f91b875f8861126e88610ded565b6112778a610ded565b6040516001600160f81b031998891660208201526001600160c01b031990971660218801529487166029870152602a8601939093529416604a840152604b8301939093526001600160801b0319928316606b83015291909116607b820152608b0161110e565b5f82828183036113065780156112f3575f6112fd565b670de0b6b3a76400005b9250505061062c565b670de0b6b3a7640000820361132757670de0b6b3a76400009250505061062c565b805f0361134057670de0b6b3a76400009250505061062c565b670de0b6b3a7640000810361135957849250505061062c565b670de0b6b3a764000082111561138a5761138361137e6113788761147e565b866113ed565b6115a6565b92506113e5565b5f6113aa6113a7846ec097ce7bc90715b34b9f100000000061234e565b90565b90505f6113c261137e6113bc8461147e565b886113ed565b90506113e06113a7826ec097ce7bc90715b34b9f100000000061234e565b945050505b505092915050565b5f6103d96113a784846115fa565b5f6103d96113a784670de0b6b3a7640000856116ac565b5f61062c670de0b6b3a76400008361234e565b6040516001600160a01b038085166024830152831660448201526064810182905261108390859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b17905261177b565b5f81670de0b6b3a76400008110156114ac5760405163036d32ef60e41b815260048101849052602401610f71565b5f61152e670de0b6b3a7640000830460016001600160801b03821160071b91821c67ffffffffffffffff811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211871b91821c969096119490961792909217171791909117919091171790565b9050670de0b6b3a7640000810282821c670de0b6b3a763ffff1981016115575750949350505050565b671bc16d674ec800006706f05b59d3b200005b801561159a57670de0b6b3a7640000838002049250818310611592579283019260019290921c915b60011c61156a565b50919695505050505050565b5f81680a688906bd8affffff8111156115d55760405163b3b6ba1f60e01b815260048101849052602401610f71565b5f6115ec670de0b6b3a7640000604084901b61234e565b90506108bf6113a78261183a565b5f80805f19848609848602925082811083820303915050805f0361162b5750670de0b6b3a76400009004905061062c565b670de0b6b3a7640000811061165d57604051635173648d60e01b81526004810186905260248101859052604401610f71565b5f670de0b6b3a764000085870962040000818503049310909103600160ee1b02919091177faccb18165bd6fe31ae1cf318dc5b51eee0e1ba569b88cd74c1773b91fac106690291505092915050565b5f80805f19858709858702925082811083820303915050805f036116e3578382816116d9576116d961233a565b04925050506103d9565b83811061171457604051630c740aef60e31b8152600481018790526024810186905260448101859052606401610f71565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f836001600160a01b03168360405161179591906125bd565b5f604051808303815f865af19150503d805f81146117ce576040519150601f19603f3d011682016040523d82523d5f602084013e6117d3565b606091505b50915091505f8280156117fe5750815115806117fe5750818060200190518101906117fe91906125c8565b905080158061181557506001600160a01b0385163b155b156118335760405163022e258160e11b815260040160405180910390fd5b5050505050565b600160bf1b67ff000000000000008216156119475767800000000000000082161561186e5768016a09e667f3bcc9090260401c5b67400000000000000082161561188d576801306fe0a31b7152df0260401c5b6720000000000000008216156118ac576801172b83c7d517adce0260401c5b6710000000000000008216156118cb5768010b5586cf9890f62a0260401c5b6708000000000000008216156118ea576801059b0d31585743ae0260401c5b67040000000000000082161561190957680102c9a3e778060ee70260401c5b6702000000000000008216156119285768010163da9fb33356d80260401c5b67010000000000000082161561194757680100b1afa5abcbed610260401c5b66ff000000000000821615611a465766800000000000008216156119745768010058c86da1c09ea20260401c5b6640000000000000821615611992576801002c605e2e8cec500260401c5b66200000000000008216156119b057680100162f3904051fa10260401c5b66100000000000008216156119ce576801000b175effdc76ba0260401c5b66080000000000008216156119ec57680100058ba01fb9f96d0260401c5b6604000000000000821615611a0a5768010002c5cc37da94920260401c5b6602000000000000821615611a28576801000162e525ee05470260401c5b6601000000000000821615611a465768010000b17255775c040260401c5b65ff0000000000821615611b3c5765800000000000821615611a71576801000058b91b5bc9ae0260401c5b65400000000000821615611a8e57680100002c5c89d5ec6d0260401c5b65200000000000821615611aab5768010000162e43f4f8310260401c5b65100000000000821615611ac857680100000b1721bcfc9a0260401c5b65080000000000821615611ae55768010000058b90cf1e6e0260401c5b65040000000000821615611b02576801000002c5c863b73f0260401c5b65020000000000821615611b1f57680100000162e430e5a20260401c5b65010000000000821615611b3c576801000000b1721835510260401c5b64ff00000000821615611c2957648000000000821615611b6557680100000058b90c0b490260401c5b644000000000821615611b815768010000002c5c8601cc0260401c5b642000000000821615611b9d576801000000162e42fff00260401c5b641000000000821615611bb95768010000000b17217fbb0260401c5b640800000000821615611bd5576801000000058b90bfce0260401c5b640400000000821615611bf157680100000002c5c85fe30260401c5b640200000000821615611c0d5768010000000162e42ff10260401c5b640100000000821615611c2957680100000000b17217f80260401c5b63ff000000821615611d0d576380000000821615611c505768010000000058b90bfc0260401c5b6340000000821615611c6b576801000000002c5c85fe0260401c5b6320000000821615611c8657680100000000162e42ff0260401c5b6310000000821615611ca1576801000000000b17217f0260401c5b6308000000821615611cbc57680100000000058b90c00260401c5b6304000000821615611cd75768010000000002c5c8600260401c5b6302000000821615611cf2576801000000000162e4300260401c5b6301000000821615611d0d5768010000000000b172180260401c5b62ff0000821615611de85762800000821615611d32576801000000000058b90c0260401c5b62400000821615611d4c57680100000000002c5c860260401c5b62200000821615611d665768010000000000162e430260401c5b62100000821615611d8057680100000000000b17210260401c5b62080000821615611d9a5768010000000000058b910260401c5b62040000821615611db4576801000000000002c5c80260401c5b62020000821615611dce57680100000000000162e40260401c5b62010000821615611de8576801000000000000b1720260401c5b61ff00821615611eba57618000821615611e0b57680100000000000058b90260401c5b614000821615611e245768010000000000002c5d0260401c5b612000821615611e3d576801000000000000162e0260401c5b611000821615611e565768010000000000000b170260401c5b610800821615611e6f576801000000000000058c0260401c5b610400821615611e8857680100000000000002c60260401c5b610200821615611ea157680100000000000001630260401c5b610100821615611eba57680100000000000000b10260401c5b60ff821615611f83576080821615611edb57680100000000000000590260401c5b6040821615611ef3576801000000000000002c0260401c5b6020821615611f0b57680100000000000000160260401c5b6010821615611f23576801000000000000000b0260401c5b6008821615611f3b57680100000000000000060260401c5b6004821615611f5357680100000000000000030260401c5b6002821615611f6b57680100000000000000010260401c5b6001821615611f8357680100000000000000010260401c5b670de0b6b3a76400000260409190911c60bf031c90565b60405180608001604052805f63ffffffff168152602001611fcc60405180604001604052805f81526020015f81525090565b8152606060208201525f60409091015290565b5f60208284031215611fef575f5ffd5b5035919050565b634e487b7160e01b5f52602160045260245ffd5b602081016002831061201e5761201e611ff6565b91905290565b80356001600160a01b03811681146104ea575f5ffd5b5f6020828403121561204a575f5ffd5b6103d982612024565b803563ffffffff811681146104ea575f5ffd5b80356001600160801b03811681146104ea575f5ffd5b5f5f5f6060848603121561208e575f5ffd5b61209784612024565b92506120a560208501612053565b91506120b360408501612066565b90509250925092565b5f5f5f5f5f5f60c087890312156120d1575f5ffd5b6120da87612024565b95506120e860208801612024565b94506120f660408801612053565b9350606087013567ffffffffffffffff811115612111575f5ffd5b87016040818a031215612122575f5ffd5b925061213060808801612066565b915061213e60a08801612066565b90509295509295509295565b5f81518060208401855e5f93019283525090919050565b6001600160f81b031986811682526001600160c01b031986166001830152841660098201525f612194600a83018561214a565b6001600160801b03199390931683525050601001949350505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561062c5761062c6121b0565b67ffffffffffffffff818116838216019081111561062c5761062c6121b0565b8181038181111561062c5761062c6121b0565b67ffffffffffffffff83168152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b6001600160801b03818116838216019081111561062c5761062c6121b0565b8035600381106104ea575f5ffd5b604081525f61228b8461226f565b6003811061229b5761229b611ff6565b6040830152602084013536859003601e190181126122b7575f5ffd5b840160208101903567ffffffffffffffff8111156122d3575f5ffd5b8036038213156122e1575f5ffd5b60406060850152806080850152808260a08601375f60a0828601015260a0601f19601f830116850101925050506103d960208301846001600160801b03169052565b808202811582820484141761062c5761062c6121b0565b634e487b7160e01b5f52601260045260245ffd5b5f8261236857634e487b7160e01b5f52601260045260245ffd5b500490565b5f6020828403121561237d575f5ffd5b6103d98261226f565b5f5f8335601e1984360301811261239b575f5ffd5b83018035915067ffffffffffffffff8211156123b5575f5ffd5b6020019150368190038213156123c9575f5ffd5b9250929050565b8035602083101561062c575f19602084900360031b1b1692915050565b6001600160f81b031989811682526001600160c01b031989166001830152871660098201525f612420600a83018861214a565b6001600160f81b0319969096168652505060018401929092526001600160801b03199081166021840152166031820152604101949350505050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61248e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b031994909416600186015260058501929092526001600160801b031990811660258501529081166035840152166045820152605501949350505050565b80356001600160601b03198116906014841015612524576bffffffffffffffffffffffff196bffffffffffffffffffffffff198560140360031b1b82161691505b5092915050565b6001600160f81b03198b811682526001600160c01b03198b166001830152891660098201525f61255e600a83018a61214a565b6001600160f81b031998909816885250506001600160e01b03199490941660018601526001600160601b03199290921660058501526001600160801b031990811660198501529081166029840152166039820152604901949350505050565b5f6103d9828461214a565b5f602082840312156125d8575f5ffd5b815180151581146103d9575f5ffdfe8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22ea2646970667358221220046dc7d429ea210c611797c7b4d01fa9b6906f8c2a4299f763335c848dfa743864736f6c634300081c003300000000000000", + "storage": {} + }, + "0": { + "address": "0x00000961Ef480Eb55e80D19ad83579A64c007002", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460cb5760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146101f457600182026001905f5b5f82111560685781019083028483029004916001019190604d565b909390049250505036603814608857366101f457346101f4575f5260205ff35b34106101f457600154600101600155600354806003026004013381556001015f35815560010160203590553360601b5f5260385f601437604c5fa0600101600355005b6003546002548082038060101160df575060105b5f5b8181146101835782810160030260040181604c02815460601b8152601401816001015481526020019060020154807fffffffffffffffffffffffffffffffff00000000000000000000000000000000168252906010019060401c908160381c81600701538160301c81600601538160281c81600501538160201c81600401538160181c81600301538160101c81600201538160081c81600101535360010160e1565b910180921461019557906002556101a0565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff14156101cd57505f5b6001546002828201116101e25750505f6101e8565b01600290035b5f555f600155604c025ff35b5f5ffd00", + "storage": {} + }, + "5": { + "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", + "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220367283a645a6f2ff4567a6b7f3c48a7618ad09eda48237419b569370b356fa4d64736f6c634300081c0033000000", + "storage": {} + }, + "18": { + "address": "0x99bbA657f2BbC93c02D617f8bA121cB8Fc104Acf", + "code": "0x608060405234801561000f575f5ffd5b50600436106100f0575f3560e01c806366ae69a011610093578063a77cf3d211610063578063a77cf3d214610238578063ad209a9b1461024b578063bb51f1eb14610272578063df0dd0d514610285575f5ffd5b806366ae69a0146101b05780636f55bd32146101db5780638ab81d1314610202578063a401662b14610215575f5ffd5b806341c9634e116100ce57806341c9634e1461013e578063591d99ee146101545780635da57fe91461017b578063623b223d1461019b575f5ffd5b80630a7c8faa146100f45780632cdea7171461011e5780633666751314610136575b5f5ffd5b610100610dad60f31b81565b6040516001600160f01b031990911681526020015b60405180910390f35b61012661030f565b60405161011594939291906124a2565b610126610390565b6101465f5481565b604051908152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000481565b61018e610189366004612572565b61040f565b60405161011591906125b9565b6101ae6101a9366004612621565b610447565b005b6001546101c3906001600160401b031681565b6040516001600160401b039091168152602001610115565b6101467f000000000000000000000000000000000000000000000000000000000000000281565b61018e610210366004612702565b6107d9565b610228610223366004612749565b6108b0565b6040519015158152602001610115565b6101ae610246366004612797565b6108bf565b6101467f000000000000000000000000000000000000000000000000000000000000001881565b6101ae6102803660046127ae565b610a37565b6102d3610293366004612797565b600a6020525f90815260409020805460018201546002909201546001600160401b0382169263ffffffff600160401b8404811693600160601b9004169185565b604080516001600160401b0396909616865263ffffffff948516602087015292909316918401919091526060830152608082015260a001610115565b6002805460035460408051600480546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20905b815481526020019060010190808311610364575b50505050508152602001600182015481525050905084565b6006805460075460408051600880546060602082028401810185529383018181526001600160801b0380881698600160801b9098041696948492849184018282801561037857602002820191905f5260205f20908154815260200190600101908083116103645750505050508152602001600182015481525050905084565b60608282101561043257604051635c85a0e760e01b815260040160405180910390fd5b61043d848484610ea1565b90505b9392505050565b5f6104518a610f2b565b8051906020012090505f61046e33835f9182526020526040902090565b905061047c818c8c8c61101d565b5f5f90505f6002905060065f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906104b89190612843565b6001600160401b0316036104d2575060019050600661052c565b60025f015f9054906101000a90046001600160801b03166001600160801b03168d60200160208101906105059190612843565b6001600160401b03161461052c57604051636033c4fd60e11b815260040160405180910390fd5b61053b84848e8e858f8f61110c565b5f6105458e6112c2565b905082156106d657600654610564906001600160801b0316600161287d565b6001600160801b031661057d60808b0160608c01612843565b6001600160401b0316146105a3576040516263964160e91b815260040160405180910390fd5b5f6105c0826105b18c6113f4565b805190602001208b8b8b6114a8565b9050806105e05760405163128597bb60e01b815260040160405180910390fd5b60068054600160801b8082046001600160801b0390811690910291161760029081556007546003556008805460049061061c908290849061240d565b5060019182015491015550610639905060808b0160608c01612843565b600680546001600160801b0319166001600160401b039290921691909117905561066960a08b0160808c0161289c565b600680546001600160801b031663ffffffff92909216600160801b0291909117905560a08a0180356007556106b0906106a59060808d0161289c565b63ffffffff16611517565b805180516008916106c691839160200190612455565b5060208201518160010155905050505b5f8190556106e760208f018f61289c565b63ffffffff1660015f6101000a8154816001600160401b0302191690836001600160401b03160217905550600a5f8581526020019081526020015f205f5f82015f6101000a8154906001600160401b0302191690555f820160086101000a81549063ffffffff02191690555f8201600c6101000a81549063ffffffff0219169055600182015f9055600282015f905550507fd95fe1258d152dc91c81b09380498adc76ed36a6079bcb2ed31eff622ae2d0f1818f5f0160208101906107ac919061289c565b6040805192835263ffffffff90911660208301520160405180910390a15050505050505050505050505050565b60605f600a5f6107f233885f9182526020526040902090565b81526020019081526020015f20905083836040516020016108149291906128bf565b6040516020818303038152906040528051906020012081600201541461084d576040516333b4605560e11b815260040160405180910390fd5b6108a781600101548585808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050855463ffffffff600160401b820481169350600160601b9091041690506115bc565b95945050505050565b5f6108a75f54868686866114a8565b335f9081526020829052604081205f818152600a602052604081208054929350916001600160401b03169003610908576040516319a1b6d960e21b815260040160405180910390fd5b60018101541561092b5760405163e31d900560e01b815260040160405180910390fd5b8054610961907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b4310156109815760405163c77c194960e01b815260040160405180910390fd5b80547f0000000000000000000000000000000000000000000000000000000000000018906109d9907f0000000000000000000000000000000000000000000000000000000000000004906001600160401b03166128e6565b6109e391906128e6565b431115610a2c575f828152600a602052604080822080546001600160801b0319168155600181018390556002019190915580516340d3544760e01b815290519081900360040190fd5b446001909101555050565b6001546001600160401b0316610a50602086018661289c565b63ffffffff1611610a74576040516303d618e560e41b815260040160405180910390fd5b600280545f906001600160801b0316610a936040880160208901612843565b6001600160401b031603610ad757610ab0600460608501356116a4565b9050610ad26060840135610ac961ffff8416600161170e565b6004919061172c565b610b54565b6006546001600160801b0316610af36040880160208901612843565b6001600160401b031603610b3b57610b10600860608501356116a4565b9050610b326060840135610b2961ffff8416600161170e565b6008919061172c565b60069150610b54565b604051636033c4fd60e11b815260040160405180910390fd5b610b7f82610b6860a08601608087016128f9565b6060860135610b7a60a088018861291f565b6117d3565b1580610bc75750610bc58585808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152505050506060850135611842565b155b15610be557604051637000a9fd60e11b815260040160405180910390fd5b5f610bef87610f2b565b80516020909101209050610c0960a08501608086016128f9565b6001600160a01b0316610c3282610c236020880188612964565b87602001358860400135611886565b6001600160a01b031614610c5957604051638baa579f60e01b815260040160405180910390fd5b8254610c7490600160801b90046001600160801b03166118ac565b85141580610ce857508254610c9890600160801b90046001600160801b03166118c5565b610ce68787808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508754600160801b90046001600160801b031691506118f49050565b105b15610d06576040516333b4605560e11b815260040160405180910390fd5b6040805160a081018252436001600160401b031681528454600160801b900463ffffffff811660208301529091820190610d6e906001600160801b031661ffff86167f0000000000000000000000000000000000000000000000000000000000000002611c6e565b63ffffffff1681526020015f81526020018787604051602001610d929291906128bf565b60405160208183030381529060405280519060200120815250600a5f610dc133855f9182526020526040902090565b815260208082019290925260409081015f2083518154858501519386015163ffffffff908116600160601b0263ffffffff60601b1991909516600160401b026bffffffffffffffffffffffff199092166001600160401b03909316929092171716919091178155606083015160018201556080909201516002909201919091557fbee983fc706c692efb9b0240bddc5666c010a53af55ed5fb42d226e7e4293869903390610e71908a018a61289c565b604080516001600160a01b03909316835263ffffffff90911660208301520160405180910390a150505050505050565b6060610eac826118ac565b6001600160401b03811115610ec357610ec3612984565b604051908082528060200260200182016040528015610eec578160200160208202803683370190505b5090505f5b83811015610f2357610f1b82868684818110610f0f57610f0f612998565b90506020020135611cc6565b600101610ef1565b509392505050565b6060610f42610f3d604084018461291f565b611d1d565b610f79610f52602085018561289c565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b610ff5610f8c6040860160208701612843565b5f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b604051602001611007939291906129c3565b6040516020818303038152906040529050919050565b5f848152600a60205260408120805490916001600160401b039091169003611058576040516319a1b6d960e21b815260040160405180910390fd5b80600101545f0361107c576040516378ef3a4760e01b815260040160405180910390fd5b6001546001600160401b0316611095602086018661289c565b63ffffffff16116110b9576040516303d618e560e41b815260040160405180910390fd5b82826040516020016110cc9291906128bf565b60405160208183030381529060405280519060200120816002015414611105576040516333b4605560e11b815260040160405180910390fd5b5050505050565b5f868152600a602052604090208054600160601b900463ffffffff1682811461114857604051630f8b88ed60e11b815260040160405180910390fd5b5f61119d83600101548989808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250508a54600160801b90046001600160801b031691508690506115bc565b90505f5b848110156112b557368686838181106111bc576111bc612998565b90506020028101906111ce91906129f6565b90506111f6886111e460a08401608085016128f9565b6060840135610b7a60a086018661291f565b61121357604051637000a9fd60e11b815260040160405180910390fd5b611221838260600135611842565b61123e57604051637000a9fd60e11b815260040160405180910390fd5b61124e60a08201608083016128f9565b6001600160a01b03166112778d6112686020850185612964565b84602001358560400135611886565b6001600160a01b03161461129e57604051638baa579f60e01b815260040160405180910390fd5b6112ac838260600135611e04565b506001016111a1565b5050505050505050505050565b5f805b6112d2604084018461291f565b90508110156113da57610dad60f31b6112ee604085018561291f565b838181106112fe576112fe612998565b90506020028101906113109190612a14565b61131e906020810190612a28565b6001600160f01b031916036113d25761133a604084018461291f565b8281811061134a5761134a612998565b905060200281019061135c9190612a14565b61136a906020810190612a4f565b905060201461138c57604051633efce24360e11b815260040160405180910390fd5b611399604084018461291f565b828181106113a9576113a9612998565b90506020028101906113bb9190612a14565b6113c9906020810190612a4f565b61044091612a91565b6001016112c5565b5060405163484ab7df60e01b815260040160405180910390fd5b606061140c6114066020840184612964565b60f81b90565b61141f610f52604085016020860161289c565b6040840135611437610f8c6080870160608801612843565b61144a610f5260a088016080890161289c565b6040516001600160f81b031990951660208601526001600160e01b0319938416602186015260258501929092526001600160c01b031916604584015216604d82015260a0830135605182015260c08301356071820152609101611007565b5f6101008311156114cc57604051632f43154560e11b815260040160405180910390fd5b845f5b8481101561150a57611500828787848181106114ed576114ed612998565b905060200201358387901c600116611e38565b91506001016114cf565b5090951495945050505050565b60408051808201909152606081525f60208201525f611537601084612ac2565b15611543576001611545565b5f5b60ff16611553601085612ad5565b61155d91906128e6565b90506040518060400160405280826001600160401b0381111561158257611582612984565b6040519080825280602002602001820160405280156115ab578160200160208202803683370190505b508152602001939093525090919050565b60606115c7836118ac565b84511415806115de57506115db84846118f4565b82115b156115fc576040516302fb251f60e51b815260040160405180910390fd5b83516001600160401b0381111561161557611615612984565b60405190808252806020026020018201604052801561163e578160200160208202803683370190505b5090505f805b8382101561169a575f611658888388611e61565b90506116648782611842565b158061167557506116758482611842565b156116835750600101611644565b61168d8482611cc6565b5060019182019101611644565b5050949350505050565b5f826001015482106116c957604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83166116dd816010612ae8565b60ff16855f0183815481106116f4576116f4612998565b905f5260205f200154901c61ffff16925050505b92915050565b5f82820161ffff80851690821610156104405761ffff915050611708565b8260010154821061175057604051634e23d03560e01b815260040160405180910390fd5b600482901c600f83165f611765826010612ae8565b60ff1661ffff901b1990505f82601061177e9190612ae8565b60ff168561ffff16901b90508082885f0186815481106117a0576117a0612998565b905f5260205f2001541617875f0185815481106117bf576117bf612998565b5f9182526020909120015550505050505050565b6040516bffffffffffffffffffffffff19606086901b1660208201525f90819060340160408051808303601f190181529190528051602090910120600188015488549192506118379183908890600160801b90046001600160801b03168888611e84565b979650505050505050565b5f5f600883901c90506118778385838151811061186157611861612998565b6020026020010151611eaf90919063ffffffff16565b60ff1660011491505092915050565b5f5f5f61189587878787611eb9565b915091506118a281611f76565b5095945050505050565b5f6101006118bb8360ff6128e6565b6117089190612ad5565b5f60038211156118f05760036118dc600184612b0b565b6118e69190612ad5565b6117089083612b0b565b5090565b5f81158061190157508251155b1561190d57505f611708565b5f610100830460ff8416825b82811080156119285750865181105b15611abd575f87828151811061194057611940612998565b602002602001015190505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b0382160190508085019450508080600101915050611919565b505f81118015611acd5750855182105b15611c64575f6001826001901b0390505f81888581518110611af157611af1612998565b60200260200101511690505f516020612c235f395f51905f52600182901c165f516020612c235f395f51905f5282160190505f516020612bc35f395f51905f52600282901c165f516020612bc35f395f51905f5282160190505f516020612c035f395f51905f52600482901c165f516020612c035f395f51905f5282160190505f516020612c435f395f51905f52600882901c165f516020612c435f395f51905f5282160190505f516020612be35f395f51905f52601082901c165f516020612be35f395f51905f5282160190507bffffffff00000000ffffffff00000000ffffffff00000000ffffffff602082901c167bffffffff00000000ffffffff00000000ffffffff00000000ffffffff821601905077ffffffffffffffff0000000000000000ffffffffffffffff604082901c1677ffffffffffffffff0000000000000000ffffffffffffffff82160190506001600160801b03608082901c166001600160801b038216019050808501945050505b5090949350505050565b5f81611c7b8560016120c7565b611c8590826128e6565b9050611c928460016120c7565b611c9d906002612b1e565b611ca89060016128e6565b611cb290826128e6565b90506108a781611cc1876118c5565b612104565b5f600882901c9050611cfa82848381518110611ce457611ce4612998565b602002602001015161211990919063ffffffff16565b838281518110611d0c57611d0c612998565b602002602001018181525050505050565b60605f611d2983612126565b90505f5b83811015610f235781858583818110611d4857611d48612998565b9050602002810190611d5a9190612a14565b611d68906020810190612a28565b611da4878785818110611d7d57611d7d612998565b9050602002810190611d8f9190612a14565b611d9d906020810190612a4f565b9050612126565b878785818110611db657611db6612998565b9050602002810190611dc89190612a14565b611dd6906020810190612a4f565b604051602001611dea959493929190612b35565b60408051601f198184030181529190529150600101611d2d565b5f600882901c9050611cfa82848381518110611e2257611e22612998565b602002602001015161215690919063ffffffff16565b5f818015611e4c57835f5284602052611e54565b845f52836020525b505060405f209392505050565b5f815f03611e7057505f610440565b505f92835260209190915260409091200690565b5f838510611e9357505f611ea5565b611ea08686868686612164565b871490505b9695505050505050565b60ff161c60011690565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611eee57505f90506003611f6d565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611f3f573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116611f67575f60019250925050611f6d565b91505f90505b94509492505050565b5f816004811115611f8957611f89612b71565b03611f915750565b6001816004811115611fa557611fa5612b71565b03611ff75760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064015b60405180910390fd5b600281600481111561200b5761200b612b71565b036120585760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611fee565b600381600481111561206c5761206c612b71565b036120c45760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611fee565b50565b5f5f6120d28461220a565b90506120dd8361229d565b80156120ec575083816001901b105b6120f6575f6120f9565b60015b60ff16019392505050565b5f8183106121125781610440565b5090919050565b600160ff919091161b1790565b606063ffffffff82111561214d57604051637404cccd60e11b815260040160405180910390fd5b611708826122c9565b600160ff919091161b191690565b5f85815b838110156121ff57866001166001148061218457508587600101145b156121bb576121b485858381811061219e5761219e612998565b90506020020135835f9182526020526040902090565b91506121e9565b6121e6828686848181106121d1576121d1612998565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501612168565b509695505050505050565b5f80608083901c1561221e57608092831c92015b604083901c1561223057604092831c92015b602083901c1561224257602092831c92015b601083901c1561225457601092831c92015b600883901c1561226657600892831c92015b600483901c1561227857600492831c92015b600283901c1561228a57600292831c92015b600183901c156117085760010192915050565b5f60028260038111156122b2576122b2612b71565b6122bc9190612b85565b60ff166001149050919050565b6060603f8263ffffffff16116122f457604051603f60fa1b60fa84901b166020820152602101611007565b613fff8263ffffffff16116123535761233061231c6403fffffffc600285901b166001612ba6565b600881811b62ffff001691901c60ff161790565b604051602001611007919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116123c5576123a260028363ffffffff16901b600261237e9190612ba6565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b604051602001611007919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b166021820152602501611007565b828054828255905f5260205f20908101928215612449575f5260205f209182015b8281111561244957825482559160010191906001019061242e565b506118f092915061248e565b828054828255905f5260205f20908101928215612449579160200282015b82811115612449578251825591602001919060010190612473565b5b808211156118f0575f815560010161248f565b6001600160801b03851681526001600160801b0384166020820152826040820152608060608201525f60c0820183516040608085015281815180845260e0860191506020830193505f92505b8083101561251157835182526020820191506020840193506001830192506124ee565b50602086015160a086015280935050505095945050505050565b5f5f83601f84011261253b575f5ffd5b5081356001600160401b03811115612551575f5ffd5b6020830191508360208260051b850101111561256b575f5ffd5b9250929050565b5f5f5f60408486031215612584575f5ffd5b83356001600160401b03811115612599575f5ffd5b6125a58682870161252b565b909790965060209590950135949350505050565b602080825282518282018190525f918401906040840190835b818110156125f05783518352602093840193909201916001016125d2565b509095945050505050565b5f6060828403121561260b575f5ffd5b50919050565b5f60e0828403121561260b575f5ffd5b5f5f5f5f5f5f5f5f5f6101808a8c03121561263a575f5ffd5b89356001600160401b0381111561264f575f5ffd5b61265b8c828d016125fb565b99505060208a01356001600160401b03811115612676575f5ffd5b6126828c828d0161252b565b90995097505060408a01356001600160401b038111156126a0575f5ffd5b6126ac8c828d0161252b565b90975095506126c090508b60608c01612611565b93506101408a01356001600160401b038111156126db575f5ffd5b6126e78c828d0161252b565b9a9d999c50979a969995989497966101600135949350505050565b5f5f5f60408486031215612714575f5ffd5b8335925060208401356001600160401b03811115612730575f5ffd5b61273c8682870161252b565b9497909650939450505050565b5f5f5f5f6060858703121561275c575f5ffd5b8435935060208501356001600160401b03811115612778575f5ffd5b6127848782880161252b565b9598909750949560400135949350505050565b5f602082840312156127a7575f5ffd5b5035919050565b5f5f5f5f606085870312156127c1575f5ffd5b84356001600160401b038111156127d6575f5ffd5b6127e2878288016125fb565b94505060208501356001600160401b038111156127fd575f5ffd5b6128098782880161252b565b90945092505060408501356001600160401b03811115612827575f5ffd5b850160c08188031215612838575f5ffd5b939692955090935050565b5f60208284031215612853575f5ffd5b81356001600160401b0381168114610440575f5ffd5b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561170857611708612869565b5f602082840312156128ac575f5ffd5b813563ffffffff81168114610440575f5ffd5b5f6001600160fb1b038311156128d3575f5ffd5b8260051b80858437919091019392505050565b8082018082111561170857611708612869565b5f60208284031215612909575f5ffd5b81356001600160a01b0381168114610440575f5ffd5b5f5f8335601e19843603018112612934575f5ffd5b8301803591506001600160401b0382111561294d575f5ffd5b6020019150600581901b360382131561256b575f5ffd5b5f60208284031215612974575f5ffd5b813560ff81168114610440575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b5f81518060208401855e5f93019283525090919050565b5f6129ce82866129ac565b6001600160e01b031994909416845250506001600160c01b0319166004820152600c01919050565b5f823560be19833603018112612a0a575f5ffd5b9190910192915050565b5f8235603e19833603018112612a0a575f5ffd5b5f60208284031215612a38575f5ffd5b81356001600160f01b031981168114610440575f5ffd5b5f5f8335601e19843603018112612a64575f5ffd5b8301803591506001600160401b03821115612a7d575f5ffd5b60200191503681900382131561256b575f5ffd5b80356020831015611708575f19602084900360031b1b1692915050565b634e487b7160e01b5f52601260045260245ffd5b5f82612ad057612ad0612aae565b500690565b5f82612ae357612ae3612aae565b500490565b60ff8181168382160290811690818114612b0457612b04612869565b5092915050565b8181038181111561170857611708612869565b808202811582820484141761170857611708612869565b5f612b4082886129ac565b6001600160f01b031987168152612b5a60028201876129ac565b9050838582375f9301928352509095945050505050565b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680612b9757612b97612aae565b8060ff84160691505092915050565b63ffffffff81811683821601908111156117085761170861286956fe33333333333333333333333333333333333333333333333333333333333333330000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f555555555555555555555555555555555555555555555555555555555555555500ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ffa2646970667358221220bb783e6f87d678903cb96088c2c12d2cac558d531f4f913f330f95e9f12638ce64736f6c634300081c003300", + "storage": { + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x0000000000000000000000000000000200000000000000000000000000000000", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0x0000000000000000000000000000000200000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0000000000000000000000000000000000000000000000000000000000000002", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0x697ea2a8fe5b03468548a7a413424a6292ab44a82a6f5cc594c3fa7dda7ce402" + } + }, + "21": { + "address": "0x0000F90827F1C53a10cb7A02335B175320002935", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", + "storage": { + "0x000000000000000000000000000000000000000000000000000000000000002d": "0xcf58c9c6a4dd1d4fb41fd57ffc221719b35f532532ce2643edbe63be08447b4e", + "0x000000000000000000000000000000000000000000000000000000000000000e": "0x2854f40f82f6aadda1c4650963dcf1e214b3a06f64cef22b7ae545211463035e", + "0x0000000000000000000000000000000000000000000000000000000000000024": "0xe3ce7658aa24c2dd1bd028c2440b6061fac55c8812677df8bbcc99f9fded9323", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x2b08cdf4b013a4e7055655a17b5eac4ce99186fcc0caa47e864e248c3b1ba777", + "0x0000000000000000000000000000000000000000000000000000000000000041": "0x32cebee6d6e2caa954abf2f194a6e75c255a9200d79fc0c46716d5ae47f2f41f", + "0x0000000000000000000000000000000000000000000000000000000000000047": "0xa5d2fc7c1045625cfc87d957f659c8f8539244968be34105c983ef0a66e8fd83", + "0x000000000000000000000000000000000000000000000000000000000000000c": "0x9268e5ed98fd63602ea9e2068ce35f1c75fb5b666bc3edbdcd9602f2369c96d9", + "0x0000000000000000000000000000000000000000000000000000000000000028": "0xb9c9b6864bb52f125296c1e4a5657f28ad031f26dbb52084d034610c79ace318", + "0x0000000000000000000000000000000000000000000000000000000000000023": "0x834e5aa28a5bb38184a7c1d5d73ddfae4137da657f2d09eca061f999c6c29e5d", + "0x0000000000000000000000000000000000000000000000000000000000000038": "0xc427a162461853b0ef979610b2e6b6ee3e8daa3be10d64f6a839d34d9625424c", + "0x000000000000000000000000000000000000000000000000000000000000001b": "0x70306d2062463cf89ae6856387f8e1bdcebde2297df00e4303f2a137704d5cd1", + "0x000000000000000000000000000000000000000000000000000000000000000d": "0x3e0ad986bc3eab99fc533dd41f0249d7d75132723b4a88c6dc0cfd3d758cdbfb", + "0x0000000000000000000000000000000000000000000000000000000000000017": "0x9d524292178b53f2c028149a78758077625e07355b8aaa75d2ed2c44c6b2f316", + "0x0000000000000000000000000000000000000000000000000000000000000002": "0x4da305ea782568b290f87d84b460c6541227cce55d351d503070aea06395bd19", + "0x0000000000000000000000000000000000000000000000000000000000000045": "0xa83b3e8565f00a68e9660509f5c5f2c007f8dd31e3323d8062f7897c81b6ddde", + "0x0000000000000000000000000000000000000000000000000000000000000046": "0xc354da5a5506ead76c844949cdbf4160c2f8e4b64e0095b3bb90d3b38082eb21", + "0x0000000000000000000000000000000000000000000000000000000000000034": "0xc26ae7eb759d3a61de3bf037ef996ccd6059287fc3d14709a42c6b1f4d708857", + "0x000000000000000000000000000000000000000000000000000000000000002e": "0x39592e457adecf4d8b9f7cb4a5681c64215891b1689e021fa6b4da4813e9bdee", + "0x0000000000000000000000000000000000000000000000000000000000000042": "0x2c034fdbdc965f8d3e2ac01874885e24d2fcf942155c77bad21f0fb268fa3ed9", + "0x0000000000000000000000000000000000000000000000000000000000000044": "0x67b4d6bcf6d30d6d56ea543a9e27fb0110e1bb3eef37be767ed0f02ee050278b", + "0x0000000000000000000000000000000000000000000000000000000000000035": "0x1b24724cd46d38fe38d9a41c7e74a37c647b9b8222970df9373e49907db4de99", + "0x0000000000000000000000000000000000000000000000000000000000000029": "0x53859ab046318b9c487b9ec074325ac1f536ec2eca164ddbdc5ae9c97cfded3b", + "0x0000000000000000000000000000000000000000000000000000000000000043": "0x48c22cf9e75741a9b6928119e1bda9158e1bfa9ebbda24a5d9ed9be0ef3a8ef0", + "0x0000000000000000000000000000000000000000000000000000000000000009": "0x0b4a7ca56543951226ac99a3af79a047e06ddba0ba64470de34576ef8086eb65", + "0x0000000000000000000000000000000000000000000000000000000000000040": "0x3f17b5eb4046532f8b39ef61205ae2a060f7ea87c22bd9e130417e58b6d72ec0", + "0x0000000000000000000000000000000000000000000000000000000000000003": "0x3b6421f01086fc1f83006b07821e744ecca136e31a18832a4f144cc726ac9493", + "0x0000000000000000000000000000000000000000000000000000000000000030": "0x562149c272f38eda714cc78cd6a788a86b52d9f282c0fd9ee25efa4fba8bdccc", + "0x0000000000000000000000000000000000000000000000000000000000000011": "0x4dcce69c2771ed1947a78ee3d883dd08b793c12ccef592a3e0e17fc806ecd36e", + "0x0000000000000000000000000000000000000000000000000000000000000016": "0xc5a97f10a646e0e18641533f8a51e797d83309a7ff6511bd7decf59f083c84bf", + "0x000000000000000000000000000000000000000000000000000000000000001d": "0xc7de8e1e578d0af5cc54286bdb7afa883acea40bb01daa52aff7d8869aa30ad7", + "0x000000000000000000000000000000000000000000000000000000000000001e": "0x263f3ecfa689c815f27eeea98244e092d85f60913138b4df1147f77741b644f0", + "0x0000000000000000000000000000000000000000000000000000000000000021": "0xf86450cefb72463c940538043a736260a275e57649265a64b1f5b9ab18c21ed0", + "0x0000000000000000000000000000000000000000000000000000000000000022": "0xc170da799d22c1e1cc45ff57e2a8f8a397f1aa48eaa49ea52de356f6a92bba67", + "0x000000000000000000000000000000000000000000000000000000000000001f": "0x23abcb1e15d8a5d6f2c221f23b2a425805838fb72e3da7cbe07f049af164fc7b", + "0x000000000000000000000000000000000000000000000000000000000000000b": "0xdb9ac127abfb718c5689af2643c6e919c90a9c27e61b9d88236548040fbea4dd", + "0x0000000000000000000000000000000000000000000000000000000000000001": "0x86a0254f88489f294b87a872b0f29b424e221bf8d315f6f2ad0ded6f99324e40", + "0x0000000000000000000000000000000000000000000000000000000000000025": "0x91c2249a2b21bc1cf4132af2d07b0bad3401a91d06426a7b92dc76a639c71081", + "0x000000000000000000000000000000000000000000000000000000000000002a": "0x41ead16336d4cddcd9024262472860cb6879aad8f380b65ed66646376d7df177", + "0x000000000000000000000000000000000000000000000000000000000000002c": "0xd590d9f0d649a6c1ed59097c6bddde587568987f10cca4096099f76fef4be05f", + "0x0000000000000000000000000000000000000000000000000000000000000008": "0x94f3d4e02619293747d20506145e8c4fb863abd800298a6b39af43ec9f9975e3", + "0x0000000000000000000000000000000000000000000000000000000000000014": "0x5b8473f038afbefcbdcfd21d1fbcfd6908fbe2e99d17d5057bef087fee862944", + "0x0000000000000000000000000000000000000000000000000000000000000010": "0x8059e2724d4cfb34dcde0eb1da840d431fc2dd04e560e8799808119fcfaa00b5", + "0x0000000000000000000000000000000000000000000000000000000000000031": "0x3989d1cfe55690961830189f7669f57b600632ec7ed79e3f17d4607f244a47a3", + "0x0000000000000000000000000000000000000000000000000000000000000037": "0xebe4f283394801e2bc8f532853b4ea3f9c0a59f9f4a9b762b74b02255e6032e2", + "0x000000000000000000000000000000000000000000000000000000000000003f": "0x971f0076b8c5d7aa39fa82e50eda38240a1af34b4cef6ed4f6f55486d991b79e", + "0x0000000000000000000000000000000000000000000000000000000000000027": "0x51d7f448b89216a7c6eab49f6641a2e25cbe420cd8af772ecce962e1b14e8755", + "0x0000000000000000000000000000000000000000000000000000000000000039": "0xc2a0ca6881492da89c02448b1077098edb0f2dc01ed7adf8508180635ce8b5b7", + "0x0000000000000000000000000000000000000000000000000000000000000013": "0xba5e371abd401e2d47168f71fbe6679170610b02b3358e9054cb3b1af9317fb3", + "0x0000000000000000000000000000000000000000000000000000000000000032": "0xbcdcd48ae3ce4ea9551322a0e8edbff4f84a0183ebf3e23ffbbd26284e17ce8a", + "0x0000000000000000000000000000000000000000000000000000000000000006": "0xdbb516d332f0796af2718172ad8b388d19349470001231a4cdc9e7d81b720608", + "0x0000000000000000000000000000000000000000000000000000000000000007": "0xcdef98b2309edcc683d2a8e998d158b0c452f044caf0edccfdcf60121f37c0b6", + "0x000000000000000000000000000000000000000000000000000000000000002b": "0xa929204c7c9721555c15c6442e7426d9c97805c98a4bdda68ae6f8315bbb5d84", + "0x0000000000000000000000000000000000000000000000000000000000000020": "0xab987d94834f6adebbf6d4ebb82b46a440d2151120e9236ecc63c0ca640eea9d", + "0x000000000000000000000000000000000000000000000000000000000000003a": "0xd003af4b33596649a4a10c5286bc31435536697ba40eb523b78a2a08a824bc58", + "0x000000000000000000000000000000000000000000000000000000000000000f": "0x0e80532e6a73690d483d004907d53b4d50fb176c19877e9ff951600234a6d14d", + "0x0000000000000000000000000000000000000000000000000000000000000015": "0xb7fbbd4b5278b039882921deb8db09832874b133487f83b715c30faebea3b111", + "0x0000000000000000000000000000000000000000000000000000000000000004": "0x19fae23bd4fa14b70a965531f34e9c74476d708bc2864d2b3bf61f27c3186292", + "0x000000000000000000000000000000000000000000000000000000000000003d": "0xa484a79f0f525d9dae75ec932af89a8b72e75b5ba4f27e9b2a8dae975d534ae4", + "0x0000000000000000000000000000000000000000000000000000000000000026": "0xe407eccca0fe4b5b5c1d8bd871fa452029aa6b6e668fb2a1d27ced42f791b671", + "0x0000000000000000000000000000000000000000000000000000000000000012": "0xab8f188af3803bee313f7f181d1fd35b900bdd25e8017d7a7023c8c5b4aba9db", + "0x000000000000000000000000000000000000000000000000000000000000003e": "0x02a92ec96316b5bd8606305e9b7c78b9340cf636329ae3601fcd8cfd860cc3a8", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x2bbb079654d36b67760db8ee00a7aae505fa229d0424359406c9bb30c480dc6d", + "0x000000000000000000000000000000000000000000000000000000000000000a": "0x6a8e098aef433277123f5e66def86afaeb97a0285cc070956e3aa333f2e20078", + "0x0000000000000000000000000000000000000000000000000000000000000036": "0xa50e4f4d4cc5e729d96d6a79f6229966c1ff8de9faad13bca050fb2f41d567ad", + "0x0000000000000000000000000000000000000000000000000000000000000019": "0x3b20525e8d5d45473711077ecee451acae353874293f818f12e5077ebc8c0553", + "0x000000000000000000000000000000000000000000000000000000000000003b": "0xaacecb30302d1e42ea64fce74dfc689f2dd71b653d504baee252b7ec5b373227", + "0x0000000000000000000000000000000000000000000000000000000000000005": "0x111db244c42181c5c192474d8017f10f173cfc6cac1af59456dd170c3e72ed0c", + "0x000000000000000000000000000000000000000000000000000000000000003c": "0x73f2906a6ee68d880d06e5e9f240b4080040496633676ec3dcc2f4353ef7aa58", + "0x000000000000000000000000000000000000000000000000000000000000002f": "0xa0a6bb0389f287d23ef0856774d157a88da77ae927e4e7d97944616b5316e9ca", + "0x000000000000000000000000000000000000000000000000000000000000001c": "0xe3c438146a7b2a621932e4ecc4b69d77ef6e8772890b07e4d9596bbb587b0a39", + "0x000000000000000000000000000000000000000000000000000000000000001a": "0x7d9b1ede1f98bad5e702fa923b654703686d2e039b25b01013e1f924e9123a51", + "0x0000000000000000000000000000000000000000000000000000000000000018": "0xf785a090045eb7290cfe4865b14506faaa10f7596eb13f2e236ca330db380ed2" } }, "2": { @@ -391,194 +523,80 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "7": { - "address": "0xa513E6E4b8f2a923D98304ec87F64353C4D5C853", - "code": "0x73a513e6e4b8f2a923d98304ec87f64353c4d5c853301460806040526004361061009b575f3560e01c806338412ce51161006e57806338412ce514610150578063480ff0651461016f5780636f378c061461018e578063957cae98146101ad578063c7f62387146101c0575f5ffd5b806319a79b481461009f5780631b8d43b0146100c057806320606b70146100f457806330adf81f14610129575b5f5ffd5b8180156100aa575f5ffd5b506100be6100b9366004610a4d565b6101df565b005b8180156100cb575f5ffd5b506100df6100da366004610acf565b610346565b60405190151581526020015b60405180910390f35b61011b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6040519081526020016100eb565b61011b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b81801561015b575f5ffd5b506100df61016a366004610b10565b61036b565b81801561017a575f5ffd5b506100be610189366004610b10565b610384565b818015610199575f5ffd5b506100df6101a8366004610b10565b6103cf565b61011b6101bb366004610b43565b6103dc565b8180156101cb575f5ffd5b506100be6101da366004610b10565b6103ec565b834211156102005760405163068568f360e21b815260040160405180910390fd5b5f61020a8961042d565b6001600160a01b0389165f90815260028c016020526040812080547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c9290919061025983610b6e565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e001604051602081830303815290604052805190602001206040516020016102d292919061190160f01b81526002810192909252602282015260420190565b6040516020818303038152906040528051906020012090505f6102f7828686866104dc565b9050886001600160a01b0316816001600160a01b03161461032b57604051638baa579f60e01b815260040160405180910390fd5b6103398b8a8a8a6001610502565b5050505050505050505050565b5f610353858533856105f0565b506103608585858561067c565b506001949350505050565b5f61037a843385856001610502565b5060019392505050565b5f6001600160a01b0383166103bd57604051639cfea58360e01b81526001600160a01b0390911660048201526024015b60405180910390fd5b506103ca835f84846106f8565b505050565b5f61037a8433858561067c565b5f6103e68261042d565b92915050565b5f6001600160a01b038316610420576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b506103ca83835f846106f8565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8260405161045d9190610b86565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c001604051602081830303815290604052805190602001209050919050565b5f5f5f6104eb87878787610829565b915091506104f8816108e6565b5095945050505050565b5f6001600160a01b038516610536576040516322f051b160e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b03841661056b5760405163270af7ed60e11b81526001600160a01b0390911660048201526024016103b4565b506001600160a01b038085165f908152600187016020908152604080832093871683529290522082905580156105e957826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516105e091815260200190565b60405180910390a35b5050505050565b6001600160a01b038084165f90815260018601602090815260408083209386168352929052908120545f198114610670578381848082101561065e57604051630c95cf2760e11b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506106708686868685035f610502565b50600195945050505050565b5f6001600160a01b0384166106b0576040516313053d9360e21b81526001600160a01b0390911660048201526024016103b4565b505f6001600160a01b0383166106e557604051639cfea58360e01b81526001600160a01b0390911660048201526024016103b4565b506106f2848484846106f8565b50505050565b6001600160a01b0383166107245780846003015f8282546107199190610c22565b9091555061079a9050565b6001600160a01b0383165f90815260208590526040902054838183808210156107795760405163db42144d60e01b81526001600160a01b039093166004840152602483019190915260448201526064016103b4565b5050506001600160a01b0384165f9081526020869052604090209082900390555b6001600160a01b0382166107b85760038401805482900390556107d6565b6001600160a01b0382165f9081526020859052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161081b91815260200190565b60405180910390a350505050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561085e57505f905060036108dd565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156108af573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166108d7575f600192509250506108dd565b91505f90505b94509492505050565b5f8160048111156108f9576108f9610c35565b036109015750565b600181600481111561091557610915610c35565b036109625760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016103b4565b600281600481111561097657610976610c35565b036109c35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016103b4565b60038160048111156109d7576109d7610c35565b03610a2f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016103b4565b50565b80356001600160a01b0381168114610a48575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f6101208a8c031215610a66575f5ffd5b8935985060208a01359750610a7d60408b01610a32565b9650610a8b60608b01610a32565b955060808a0135945060a08a0135935060c08a013560ff81168114610aae575f5ffd5b989b979a50959894979396929550929360e081013593506101000135919050565b5f5f5f5f60808587031215610ae2575f5ffd5b84359350610af260208601610a32565b9250610b0060408601610a32565b9396929550929360600135925050565b5f5f5f60608486031215610b22575f5ffd5b83359250610b3260208501610a32565b929592945050506040919091013590565b5f60208284031215610b53575f5ffd5b5035919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b7f57610b7f610b5a565b5060010190565b5f5f83545f8160011c90506001821680610ba157607f821691505b602082108103610bbf57634e487b7160e01b5f52602260045260245ffd5b808015610bd35760018114610be857610c16565b60ff1984168752821515830287019450610c16565b5f888152602090205f5b84811015610c0e57815489820152600190910190602001610bf2565b505082870194505b50929695505050505050565b808201808211156103e6576103e6610b5a565b634e487b7160e01b5f52602160045260245ffdfea26469706673582212207c195dc6c0dcf274cd547cf28d123e774d60cc2ca6ccfba9a4b62ae46152a83164736f6c634300081c003300", + "24": { + "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", + "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", "storage": {} }, - "15": { - "address": "0xBeaAFDA2E17fC95E69Dc06878039d274E0d2B21A", - "code": "0x608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f8168881565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c11131481565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000009d4454b023096f34b160d6b654540c56a1f81688161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c00330000000000", - "storage": {} - }, - "22": { - "address": "0x0000F90827F1C53a10cb7A02335B175320002935", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe14604657602036036042575f35600143038111604257611fff81430311604257611fff9006545f5260205ff35b5f5ffd5b5f35611fff60014303065500", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000006": "0xf7a41c74cf99cce31922e994be15beff2a611b7bb9d790c7ce7690d2eb0fe3f6", - "0x0000000000000000000000000000000000000000000000000000000000000020": "0x832c196bf7ae87f85b24425dc70f41b2b0dceca451a2edb3a601606859074926", - "0x000000000000000000000000000000000000000000000000000000000000004c": "0x61469dbb596aade532ebd26a314676d155bef5e313c3c5f5ddb519598a350707", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0xa6373698093a98c9bd3cc138cdfed80f19d3ec86a24f5bc86a0c1de0b1db086e", - "0x0000000000000000000000000000000000000000000000000000000000000019": "0x330e118b17caff823c488a3688893f9ae72e8e540e03cc6a94885e51ae61bcc7", - "0x000000000000000000000000000000000000000000000000000000000000000d": "0xcc8595a4593c7d33f3b64dd408233560973ac174bbdbc8156f469577bb1b31fa", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0xb37c7650159e80448ead5950f2b8f8764aed154bf97be1b5a1be6cd9b5193fa3", - "0x000000000000000000000000000000000000000000000000000000000000001b": "0xea1ae9310fed442ba9f963e7f2530004c4be93b4e291426e3295155e2199a675", - "0x0000000000000000000000000000000000000000000000000000000000000017": "0xdab4d5d8a61c147363fc098299bcc1f1262c6d5f85e53d7b09ce1abf8ce5f49e", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xc805113f28e11d1e9cf528d9f4a6f2281c5637f7c1842ed5cf6ff763b837c701", - "0x0000000000000000000000000000000000000000000000000000000000000042": "0x689df459d2e0cbe0016c09b3f546b10ca4827384a7e4ba31cc9f595ff15c16b4", - "0x000000000000000000000000000000000000000000000000000000000000000e": "0xeab35409b3a1df20a84ba022b53d934dec4865db06a57b3de5718099560e7026", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x74a0f1e4bb3f74198f16670d6f4c4f8c6f982c6443b4ecbe1276ec24f7c61feb", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x5b434b5e7eb45fe882b52b818260eff28acbde5aaa4cddb0a84ae7b9bbca9a0a", - "0x0000000000000000000000000000000000000000000000000000000000000047": "0xd001763776e0afcce5184f711e7f596e3878806b16346eb7c15fb155eb58252f", - "0x0000000000000000000000000000000000000000000000000000000000000044": "0xa3aee7135d00495196cb17582e987b4eb0136c813043890741cc816a342a0d18", - "0x0000000000000000000000000000000000000000000000000000000000000014": "0x08a9d85af46b6d46df65e87b07f3e2f872cd860549ab2365fd2d1c33d11a86c5", - "0x0000000000000000000000000000000000000000000000000000000000000005": "0xd9b3ce1cab01b1be2b2ed5a6b4066df4038f2976851fe1dc3f109f63d3fa4c07", - "0x0000000000000000000000000000000000000000000000000000000000000015": "0x480fc6678b06cdcf44ea08e29af395a5ad6a3328ddd80a07c23f0461fe416221", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xd10dbec4cc95e05d5763a5b20a299e7e9346b353f502336b20d70fbef56a3f29", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0x037a333065821189799ab52a9b0ccd254fac0ca1c4d9a3af2215fc6f44807845", - "0x0000000000000000000000000000000000000000000000000000000000000008": "0x1cc58272f47ea48c501423a7f3baae3e11fe2465c50f7775dd9fd9830a072ed3", - "0x0000000000000000000000000000000000000000000000000000000000000012": "0x8097897768aac86b34b16c53a1b6477255d3c28d250d4f7c310645e918da0ac7", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0x14ef0139080a49c21fb402cf2a3d87d11e150563a92930b81c51bff4f723409d", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x37a8a14f54db0c806f788aac81cf335abdf101c30e6a5292cae4db0a98cae01c", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0x84e214a203c3b9a080fd087f2f3037e200b02a505fe23fe3e5801d8c21ca42f8", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x7812228cb5d5722e96615b89da1debb6b4b3a4b4aeeb14ae137373f15278a634", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0xdf3c2cc9056ab22a2b35fd3f3a5904dda83102e8698a4aa49edb91d6a9b6c722", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0x69555fcbb97e0c612f1f775a9561d76e42fbdd9839c642c1cf2aecbca7450489", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x0dd1d43418babc61c2dddf7c0fd538568a5e75afd0768c28bdc9571cf8ff59ae", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0xb176c5d17ed4fac220435bc768b4f5288ba518248705f2fc3df72164efabff86", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0x521b2e1f90d1807d705ec90ef57e4642c2531c266a451969ef2d66eb6f2dfab8", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0xb4c398027fc61215e7e52fa3d5ca29648d4849763a5ec3adc9477713f3247189", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0x05c5da68fc5c94f40681969c3f105457db7c7c17ec4b0c9087f084c3eb77452b", - "0x0000000000000000000000000000000000000000000000000000000000000043": "0x363d1fafb3cdc95408ac686c4453e6353af2e0be343e9ecb3a28341873692f3c", - "0x000000000000000000000000000000000000000000000000000000000000001c": "0xdeca372673c6ad1e76a3f566cf7afacd13ca3349bf811a67f29649fd5dee47f6", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0x7f4fc8fc0b46e38d985b47b189c0d02d5e2fe718745a79b23ce168ce0da3980c", - "0x0000000000000000000000000000000000000000000000000000000000000002": "0xd4a441a0a78f97e403da533e3086129584d78bb082549851f571f679769d6538", - "0x000000000000000000000000000000000000000000000000000000000000001e": "0x4cf0295fc667dc9f0f9ff590476c3710711b71189d17592154b65f70949c6239", - "0x0000000000000000000000000000000000000000000000000000000000000041": "0xd2123bace464d03e8313241b8077f3bda37592cfcb259e5c3a84dab4a9826f7c", - "0x000000000000000000000000000000000000000000000000000000000000000a": "0x2efef207adde16f160028f7fee29d18a39b74e3fc90a437b6656e3968b01e67d", - "0x000000000000000000000000000000000000000000000000000000000000000c": "0xdd51f4aa949f0a5e17725ddb2aad652df316ea84fae4ada0ed62c2be8c823464", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0xabc4b26934dafef3c127bbaedf81767e7244d88eb067de9f42c8f40d64152a8d", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0xb1d22d948047f0e61fb469d0eef0f742ce511bb9856ac0db94acea1d94e1248e", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0xd61ddaa0a54f53e2498234060e4faefec9d895000c9b95a809b0a33f8cccf4a5", - "0x0000000000000000000000000000000000000000000000000000000000000018": "0xd417b9e9750712347b1b3a02b0e71ce84436a2eb994c9592a13c4816568fffe0", - "0x000000000000000000000000000000000000000000000000000000000000001a": "0xd1e8986b5ea0638e766a52872c60b143c1894b58eb74931f04d2f4fddb2da253", - "0x000000000000000000000000000000000000000000000000000000000000004a": "0x233b51f332e2a7807eddd8f28d73062ec228002ff0d25b87efbd2de3627e1fe2", - "0x000000000000000000000000000000000000000000000000000000000000000b": "0xaa2031826824d8c9585977d9c2258649bf2dcd2c604984d4751946bb45bf4ed8", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf4bebedafff8cdbd19ccdcfc46b5c352c0e767c444506adb8de09ce2ef788fbd", - "0x0000000000000000000000000000000000000000000000000000000000000048": "0x59ace73ec93fca291ed37a7830ab76626caec2b267785d3b5f7c9b39aee69f80", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x822cf66d54e30e7bfbe3392f0b7885561829017270f6e1cf5f2d98cd8d7be4ee", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0xcdcce61828cb40fd1167d1de7b455bb5cf57a5f2bddf9df01350f96c37335bb6", - "0x0000000000000000000000000000000000000000000000000000000000000003": "0x2a457734c40ef3edde0424f6af42bf20ac2e5e8cdc05371d058e9e63ebf51d82", - "0x0000000000000000000000000000000000000000000000000000000000000010": "0x01db0dc93e4d3120df79aec232ba4ffa23059620e38ed3b5dfa36053e1479fc0", - "0x0000000000000000000000000000000000000000000000000000000000000011": "0x670bceb6d5121e6040b5ceff622e6b388d7c533afaee215ed47324aa36458745", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0x41e0bc3260a8708278f917529782e359b3b7210ac533f179852eb9aec9d06489", - "0x000000000000000000000000000000000000000000000000000000000000004d": "0xcab722d70bd7c47fef4929d864746c07eec170c515e2f9776b3bad3f027cbcf9", - "0x0000000000000000000000000000000000000000000000000000000000000004": "0x556dbc08f6d43b5e0570fdb016ce329761d8a066ef7a28249acc8f7027ae09e4", - "0x0000000000000000000000000000000000000000000000000000000000000013": "0x1c3b2053c8abf03ee2d1fe2a392d35a4329c263b41b4d6f83596a5bb1d7a128c", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xfadde3a4ddc6adef267ab193dccd5e70671b3d4184cb75d82a8f8d78e4512246", - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0fe8dd9e6ac37cf7a900fafdc914c5d31770d1d1a1a2a893ca7aa5ad7600ffeb", - "0x000000000000000000000000000000000000000000000000000000000000001d": "0xd6cb0001920714790b68f32c0317242ed8e7447a5cb81d257a45f94cffbb3525", - "0x0000000000000000000000000000000000000000000000000000000000000021": "0xa6269a90fd732d7e8ec8d8c77e9fccba4d1f7252e6780d72046a8b2989e1cfbd", - "0x0000000000000000000000000000000000000000000000000000000000000016": "0x70529591d8856a2347230a1228ebb8c0f3581681fa8cc184dd5c1dad0f6ff034", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x3f72090c533b4d2671d15ba451dca59bc08aaf8d622c5e331c121590e1c1b5b9", - "0x000000000000000000000000000000000000000000000000000000000000004b": "0x8a4e138fc1d63bc02cdba5f7e6ad3990111c70ce2518a40a422928d1bf6b3344", - "0x000000000000000000000000000000000000000000000000000000000000001f": "0xa02dc6aec2c9f6b490fbf31504e7b43c5267627861441f24f53d0ae95e2958a3", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0x9e54baee3f441816ece21b0165a870e290121a11e72849a8f1beef7ac59ce765", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0xed5c0893985aa6c7b7504009179f3e498186d1c5322b893fcdb4f64282a5d24b", - "0x0000000000000000000000000000000000000000000000000000000000000009": "0xbc65e0b21539b574736e67d0c2aa1e79cd493a23d79052f35c4353bb4672ddab", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0xea90ccf14348263130e3ede991ff1167fbe627a12754cabaa8594451baa97185", - "0x000000000000000000000000000000000000000000000000000000000000000f": "0x9d9f0bed4298295ca4be92c3a37c505c9d67d5df80aeaf71518118d6f4c0a263", - "0x0000000000000000000000000000000000000000000000000000000000000045": "0x90d636528a37ca5a2e1db5a12bef9e202b9de068a4cbddb2a7816aeae17468fb", - "0x0000000000000000000000000000000000000000000000000000000000000049": "0xb5878a53b994ec1c9a7300c67d253bcc38851bde39739eb2ccd59d77133a2450", - "0x0000000000000000000000000000000000000000000000000000000000000007": "0x4eefe9c00840f024c85f5a7ab245c4a157f99898327d532ff4fa3546eaeeaeac", - "0x000000000000000000000000000000000000000000000000000000000000002c": "0xc6d7eda513272de14eec1a1a5a2e29b57dd6f78da4a50c23dd2a9deb95949e06", - "0x0000000000000000000000000000000000000000000000000000000000000046": "0xae04166c30167d6400890b93da8afd256ca5cd5d7a8d2c282484313f7f825094" - } - }, - "26": { + "25": { "address": "0xc5a5C42992dECbae36851359345FE25997F5C42d", "code": "0x608060405234801561000f575f5ffd5b50600436106102ff575f3560e01c8063670d3ba211610195578063b2447af7116100e4578063db4df7611161009e578063f231bd0811610079578063f231bd08146107f7578063f605ce081461080a578063fabc1cbc1461081d578063fe4b84df14610830575f5ffd5b8063db4df76114610796578063dc2af692146107bd578063df5cf723146107d0575f5ffd5b8063b2447af714610708578063b66bd9891461071b578063b9fbaed11461072e578063ba1a84e51461075d578063c221d8ae14610770578063d3d96ff414610783575f5ffd5b8063886f11951161014f578063952899ee1161012a578063952899ee146106bc578063a9333ec8146106cf578063a9821821146106e2578063adc2e3d9146106f5575f5ffd5b8063886f1195146106625780638ce648541461068957806394d7d00c146106a9575f5ffd5b8063670d3ba2146105c45780636cfb4481146105d75780636e3492b5146106025780636e875dba1461061557806379ae50cd146106285780637bc1ef611461063b575f5ffd5b806340120dab1161025157806350feea201161020b57806356c483e6116101e657806356c483e61461057e578063595c6a67146105915780635ac86ab7146105995780635c975abb146105bc575f5ffd5b806350feea2014610543578063547afb871461055657806354fd4d5014610569575f5ffd5b806340120dab146104875780634177a87c146104a85780634657e26a146104c85780634a10ffe5146104ef5780634b5046ef1461050f5780634cfd293914610522575f5ffd5b8063261f84e0116102bc5780632bab2c4a116102975780632bab2c4a1461042d578063304c10cd1461044057806332a879e4146104535780633635205714610466575f5ffd5b8063261f84e0146103be5780632981eb77146103d15780632b453a9a1461040d575f5ffd5b80630f3df50e1461030357806310e1b9b8146103335780631352c3e614610353578063136439dd1461037657806315fe50281461038b578063260dc758146103ab575b5f5ffd5b610316610311366004614bf0565b610843565b6040516001600160a01b0390911681526020015b60405180910390f35b610346610341366004614c0a565b610884565b60405161032a9190614c51565b610366610361366004614c84565b6108bd565b604051901515815260200161032a565b610389610384366004614cb8565b610938565b005b61039e610399366004614ccf565b610972565b60405161032a9190614d4d565b6103666103b9366004614bf0565b610a89565b6103896103cc366004614d9f565b610aba565b6103f87f000000000000000000000000000000000000000000000000000000000000003281565b60405163ffffffff909116815260200161032a565b61042061041b366004614e84565b610b63565b60405161032a9190614f27565b61042061043b366004614f8a565b610b79565b61031661044e366004614ccf565b610c18565b61038961046136600461500e565b610c47565b61047961047436600461508e565b610d8e565b60405161032a9291906150e0565b61049a6104953660046150f8565b610ed1565b60405161032a929190615185565b6104bb6104b6366004614bf0565b61104c565b60405161032a91906151e2565b6103167f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6105026104fd3660046151f4565b611070565b60405161032a9190615237565b61038961051d36600461500e565b611118565b610535610530366004614bf0565b6111ab565b60405190815260200161032a565b610389610551366004615282565b6111cd565b6105026105643660046152e0565b6112be565b610571611366565b60405161032a9190615322565b61038961058c366004615357565b611396565b61038961149b565b6103666105a7366004615381565b606654600160ff9092169190911b9081161490565b606654610535565b6103666105d2366004614c84565b6114af565b6105ea6105e53660046150f8565b6114db565b6040516001600160401b03909116815260200161032a565b6103896106103660046153b7565b6114f0565b6104bb610623366004614bf0565b6118b3565b61039e610636366004614ccf565b6118c4565b6103f87f000000000000000000000000000000000000000000000000000000000000000081565b6103167f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61069c6106973660046153e8565b61199e565b60405161032a919061542b565b6105026106b736600461543d565b611a5a565b6103896106ca366004615498565b611b46565b6105ea6106dd3660046150f8565b611fe7565b6103896106f0366004615641565b612016565b6103896107033660046156bf565b6120c8565b610535610716366004614bf0565b612411565b610389610729366004615282565b612433565b61074161073c366004614ccf565b61258d565b60408051921515835263ffffffff90911660208301520161032a565b61053561076b366004614ccf565b612627565b6104bb61077e366004614c84565b612647565b6103896107913660046150f8565b612670565b6103167f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d81565b6103666107cb366004614ccf565b61279d565b6103167f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b610366610805366004614bf0565b6127d0565b6105ea6108183660046150f8565b6127ef565b61038961082b366004614cb8565b6127fb565b61038961083e366004614cb8565b612868565b5f5f60a65f61085185612979565b815260208101919091526040015f20546001600160a01b031690508015610878578061087d565b620e16e45b9392505050565b604080516060810182525f80825260208201819052918101829052906108b3856108ad86612979565b856129dc565b9695505050505050565b6001600160a01b0382165f908152609e602052604081208190816108e085612979565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff169282019290925291508061092e5750806020015163ffffffff164311155b9150505b92915050565b610940612b48565b60665481811681146109655760405163c61dca5d60e01b815260040160405180910390fd5b61096e82612beb565b5050565b6001600160a01b0381165f908152609d602052604081206060919061099690612c28565b90505f816001600160401b038111156109b1576109b1614b00565b6040519080825280602002602001820160405280156109f557816020015b604080518082019091525f80825260208201528152602001906001900390816109cf5790505b5090505f5b82811015610a81576001600160a01b0385165f908152609d60205260409020610a5c90610a279083612c31565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610a6e57610a6e615701565b60209081029190910101526001016109fa565b509392505050565b60208082015182516001600160a01b03165f9081526098909252604082206109329163ffffffff90811690612c3c16565b82610ac481612c53565b610ae15760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16610b19576040516348f7dbb960e01b815260040160405180910390fd5b5f5b82811015610b5c57610b5485858584818110610b3957610b39615701565b9050602002810190610b4b9190615715565b620e16e4612cfd565b600101610b1b565b5050505050565b6060610b7184848443612eb1565b949350505050565b6060610b8785858585612eb1565b90505f5b8451811015610c0f57610bb7858281518110610ba957610ba9615701565b6020026020010151876108bd565b610c07575f5b8451811015610c05575f838381518110610bd957610bd9615701565b60200260200101518281518110610bf257610bf2615701565b6020908102919091010152600101610bbd565b505b600101610b8b565b50949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610c40578061087d565b5090919050565b84610c5181612c53565b610c6e5760405163932d94f760e01b815260040160405180910390fd5b838214610c8e576040516343714afd60e01b815260040160405180910390fd5b6001600160a01b0386165f90815260a4602052604090205460ff16610cc6576040516348f7dbb960e01b815260040160405180910390fd5b5f5b84811015610d85575f848483818110610ce357610ce3615701565b9050602002016020810190610cf89190614ccf565b90506001600160a01b038116610d21576040516339b190bb60e11b815260040160405180910390fd5b620e16e3196001600160a01b03821601610d4e576040516364be1a3f60e11b815260040160405180910390fd5b610d7c88888885818110610d6457610d64615701565b9050602002810190610d769190615715565b83612cfd565b50600101610cc8565b50505050505050565b5f60606001610d9c8161319e565b84610da681612c53565b610dc35760405163932d94f760e01b815260040160405180910390fd5b5f6040518060400160405280886001600160a01b03168152602001876020016020810190610df19190615733565b63ffffffff1690529050610e08606087018761574c565b9050610e17604088018861574c565b905014610e37576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610e699163ffffffff90811690612c3c16565b610e8657604051631fb1705560e21b815260040160405180910390fd5b610e9c610e966020880188614ccf565b826108bd565b610eb95760405163ebbff49760e01b815260040160405180910390fd5b610ec386826131cc565b945094505050509250929050565b6001600160a01b0382165f908152609d602052604081206060918291610ef690612c28565b90505f816001600160401b03811115610f1157610f11614b00565b604051908082528060200260200182016040528015610f5557816020015b604080518082019091525f8082526020820152815260200190600190039081610f2f5790505b5090505f826001600160401b03811115610f7157610f71614b00565b604051908082528060200260200182016040528015610fba57816020015b604080516060810182525f80825260208083018290529282015282525f19909201910181610f8f5790505b5090505f5b8381101561103d576001600160a01b0388165f908152609d60205260408120610fec90610a279084612c31565b90508084838151811061100157611001615701565b602002602001018190525061101789828a610884565b83838151811061102957611029615701565b602090810291909101015250600101610fbf565b509093509150505b9250929050565b60605f61087d60995f61105e86612979565b81526020019081526020015f2061390c565b60605f83516001600160401b0381111561108c5761108c614b00565b6040519080825280602002602001820160405280156110b5578160200160208202803683370190505b5090505f5b8451811015610a81576110e68582815181106110d8576110d8615701565b602002602001015185611fe7565b8282815181106110f8576110f8615701565b6001600160401b03909216602092830291909101909101526001016110ba565b5f6111228161319e565b838214611142576040516343714afd60e01b815260040160405180910390fd5b5f5b84811015610d85576111a38787878481811061116257611162615701565b90506020020160208101906111779190614ccf565b86868581811061118957611189615701565b905060200201602081019061119e9190615791565b613918565b600101611144565b5f60a55f6111b884612979565b81526020019081526020015f20549050919050565b836111d781612c53565b6111f45760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926112339291612c3c16565b61125057604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d85576112b68286868481811061127057611270615701565b90506020020160208101906112859190614ccf565b6112b160405180604001604052808c6001600160a01b031681526020018b63ffffffff168152506127d0565b613a1c565b600101611252565b60605f82516001600160401b038111156112da576112da614b00565b604051908082528060200260200182016040528015611303578160200160208202803683370190505b5090505f5b8351811015610a81576113348585838151811061132757611327615701565b6020026020010151611fe7565b82828151811061134657611346615701565b6001600160401b0390921660209283029190910190910152600101611308565b60606113917f76312e302e300000000000000000000000000000000000000000000000000006613afc565b905090565b336001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821614611491576113cf82612c53565b6113ec576040516348f5c3ed60e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0383811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611450573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147491906157b2565b6114915760405163ccea9e6f60e01b815260040160405180910390fd5b61096e8282613b39565b6114a3612b48565b6114ad5f19612beb565b565b5f61087d83609a5f6114c086612979565b81526020019081526020015f20613ce590919063ffffffff16565b5f5f6114e78484613d06565b95945050505050565b60026114fb8161319e565b61151061150b6020840184614ccf565b612c53565b80611529575061152961150b6040840160208501614ccf565b611546576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b611555604084018461574c565b9050811015611817575f604051806040016040528085602001602081019061157d9190614ccf565b6001600160a01b03168152602001611598604087018761574c565b858181106115a8576115a8615701565b90506020020160208101906115bd9190615733565b63ffffffff16815250905061160a816020015163ffffffff1660985f8760200160208101906115ec9190614ccf565b6001600160a01b0316815260208101919091526040015f2090612c3c565b61162757604051631fb1705560e21b815260040160405180910390fd5b609e5f6116376020870187614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f61166083612979565b815260208101919091526040015f205460ff16611690576040516325131d4f60e01b815260040160405180910390fd5b6116ca61169c82612979565b609c5f6116ac6020890189614ccf565b6001600160a01b0316815260208101919091526040015f2090613e75565b506117026116db6020860186614ccf565b609a5f6116e785612979565b81526020019081526020015f20613e8090919063ffffffff16565b506117106020850185614ccf565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe8260405161174891906157d1565b60405180910390a2604080518082019091525f81526020810161178b7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b63ffffffff169052609e5f6117a36020880188614ccf565b6001600160a01b03166001600160a01b031681526020019081526020015f205f6117cc84612979565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff199093169290921717905550600101611548565b5061182b61044e6040840160208501614ccf565b6001600160a01b031663303ca9566118466020850185614ccf565b6118566040860160208701614ccf565b611863604087018761574c565b6040518563ffffffff1660e01b81526004016118829493929190615848565b5f604051808303815f87803b158015611899575f5ffd5b505af11580156118ab573d5f5f3e3d5ffd5b505050505050565b6060610932609a5f61105e85612979565b6001600160a01b0381165f908152609c60205260408120606091906118e890612c28565b90505f816001600160401b0381111561190357611903614b00565b60405190808252806020026020018201604052801561194757816020015b604080518082019091525f80825260208201528152602001906001900390816119215790505b5090505f5b82811015610a81576001600160a01b0385165f908152609c6020526040902061197990610a279083612c31565b82828151811061198b5761198b615701565b602090810291909101015260010161194c565b60605f84516001600160401b038111156119ba576119ba614b00565b604051908082528060200260200182016040528015611a0357816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816119d85790505b5090505f5b8551811015610c0f57611a35868281518110611a2657611a26615701565b60200260200101518686610884565b828281518110611a4757611a47615701565b6020908102919091010152600101611a08565b60605f83516001600160401b03811115611a7657611a76614b00565b604051908082528060200260200182016040528015611a9f578160200160208202803683370190505b5090505f5b8451811015610c0f576001600160a01b0386165f90815260a1602052604081208651611b1492879291899086908110611adf57611adf615701565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20613e9490919063ffffffff16565b828281518110611b2657611b26615701565b6001600160401b0390921660209283029190910190910152600101611aa4565b5f611b508161319e565b611b5983612c53565b611b76576040516348f5c3ed60e01b815260040160405180910390fd5b5f5f5f611b828661258d565b9150915081611ba45760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b8351811015610b5c57838181518110611bc557611bc5615701565b60200260200101516040015151848281518110611be457611be4615701565b6020026020010151602001515114611c0f576040516343714afd60e01b815260040160405180910390fd5b5f848281518110611c2257611c22615701565b602090810291909101810151518082015181516001600160a01b03165f90815260989093526040909220909250611c629163ffffffff90811690612c3c16565b611c7f57604051631fb1705560e21b815260040160405180910390fd5b5f611c8a87836108bd565b90505f5b868481518110611ca057611ca0615701565b60200260200101516020015151811015611fdc575f878581518110611cc757611cc7615701565b6020026020010151602001518281518110611ce457611ce4615701565b60200260200101519050611cfb898261ffff613918565b5f5f611d0a8b6108ad88612979565b91509150806040015163ffffffff165f14611d3857604051630d8fcbe360e41b815260040160405180910390fd5b5f611d4587858489613ea8565b9050611d8a825f01518c8a81518110611d6057611d60615701565b6020026020010151604001518781518110611d7d57611d7d615701565b6020026020010151613ede565b600f0b602083018190525f03611db357604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b1215611ef7578015611e7957611e34611dd488612979565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b611e5e7f0000000000000000000000000000000000000000000000000000000000000032436157f3565b611e699060016157f3565b63ffffffff166040830152611f64565b611e8b83602001518360200151613ef5565b6001600160401b031660208401528a518b9089908110611ead57611ead615701565b6020026020010151604001518581518110611eca57611eca615701565b6020908102919091018101516001600160401b031683525f9083015263ffffffff43166040830152611f64565b5f8260200151600f0b1315611f6457611f1883602001518360200151613ef5565b6001600160401b039081166020850181905284519091161015611f4e57604051636c9be0bf60e01b815260040160405180910390fd5b611f5889436157f3565b63ffffffff1660408301525b611f798c611f7189612979565b868686613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886611fae865f01518760200151613ef5565b8660400151604051611fc4959493929190615874565b60405180910390a1505060019092019150611c8e9050565b505050600101611baa565b6001600160a01b038083165f90815260a160209081526040808320938516835292905290812061087d9061414c565b8261202081612c53565b61203d5760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff1661207f576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371384846040516120ba9291906158ed565b60405180910390a250505050565b60026120d38161319e565b826120dd81612c53565b6120fa5760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0385811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa15801561215e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061218291906157b2565b61219f5760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b6121ae602085018561574c565b905081101561237657604080518082019091525f90806121d16020880188614ccf565b6001600160a01b031681526020018680602001906121ef919061574c565b858181106121ff576121ff615701565b90506020020160208101906122149190615733565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350612250929190811690612c3c16565b61226d57604051631fb1705560e21b815260040160405180910390fd5b61227786826108bd565b1561229557604051636c6c6e2760e11b815260040160405180910390fd5b6122be6122a182612979565b6001600160a01b0388165f908152609c602052604090209061415f565b506122ea86609a5f6122cf85612979565b81526020019081526020015f2061416a90919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e8260405161232491906157d1565b60405180910390a26001600160a01b0386165f908152609e6020526040812060019161234f84612979565b815260208101919091526040015f20805460ff1916911515919091179055506001016121a1565b5061238761044e6020850185614ccf565b6001600160a01b031663c63fd502856123a36020870187614ccf565b6123b0602088018861574c565b6123bd60408a018a615900565b6040518763ffffffff1660e01b81526004016123de96959493929190615942565b5f604051808303815f87803b1580156123f5575f5ffd5b505af1158015612407573d5f5f3e3d5ffd5b5050505050505050565b5f610932609a5f61242185612979565b81526020019081526020015f20612c28565b8361243d81612c53565b61245a5760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f938452609890529390912091926124999291612c3c16565b6124b657604051631fb1705560e21b815260040160405180910390fd5b5f6124c082612979565b90505f5b84811015612407576125098686838181106124e1576124e1615701565b90506020020160208101906124f69190614ccf565b5f84815260996020526040902090613e80565b612526576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee8387878481811061255a5761255a615701565b905060200201602081019061256f9190614ccf565b60405161257d92919061598e565b60405180910390a16001016124c4565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b90910416606082018190528493919291901580159061260e5750826060015163ffffffff164310155b1561261d575050604081015160015b9590945092505050565b6001600160a01b0381165f90815260986020526040812061093290612c28565b6001600160a01b0382165f908152609f602052604081206060919061092e908261105e86612979565b8161267a81612c53565b6126975760405163932d94f760e01b815260040160405180910390fd5b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa1580156126db573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126ff91906157b2565b61271c57604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361277481610c18565b604080516001600160a01b039384168152929091166020830152015b60405180910390a1505050565b5f5f6127a8836118c4565b90505f6127b484610972565b90506127c0848361417e565b80610b715750610b71848261417e565b5f620e16e46127de83610843565b6001600160a01b0316141592915050565b5f5f610c0f8484613d06565b6128036141f6565b6066548019821981161461282a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f54610100900460ff161580801561288657505f54600160ff909116105b8061289f5750303b15801561289f57505f5460ff166001145b6129075760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612928575f805461ff0019166101001790555b61293182612beb565b801561096e575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f815f0151826020015163ffffffff166040516020016129c492919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b604051602081830303815290604052610932906159b4565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a1845286852090881685529092529382209293928190612a3c9061414c565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff16918101829052919250431015612ade579092509050612b40565b612aef815f01518260200151613ef5565b6001600160401b0316815260208101515f600f9190910b1215612b2d57612b1e82602001518260200151613ef5565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612baa573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bce91906157b2565b6114ad57604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f610932825490565b5f61087d83836142a7565b5f818152600183016020526040812054151561087d565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af1158015612cd9573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061093291906157b2565b5f6040518060400160405280856001600160a01b03168152602001845f016020810190612d2a9190615733565b63ffffffff168152509050612d74816020015163ffffffff1660985f876001600160a01b03166001600160a01b031681526020019081526020015f2061415f90919063ffffffff16565b612d9157604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c81604051612dc091906157d1565b60405180910390a16001600160a01b038216620e16e414801590612e55578260a65f612deb85612979565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f90a6fa2a9b79b910872ebca540cf3bd8be827f586e6420c30d8836e30012907e8284604051612e4c92919061598e565b60405180910390a15b5f5b612e64602086018661574c565b90508110156118ab57612ea983612e7e602088018861574c565b84818110612e8e57612e8e615701565b9050602002016020810190612ea39190614ccf565b84613a1c565b600101612e57565b606083516001600160401b03811115612ecc57612ecc614b00565b604051908082528060200260200182016040528015612eff57816020015b6060815260200190600190039081612eea5790505b5090505f7f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd826001600160a01b031663f0e0e67686866040518363ffffffff1660e01b8152600401612f519291906159d7565b5f60405180830381865afa158015612f6b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612f9291908101906159fb565b90505f5b8551811015613194575f868281518110612fb257612fb2615701565b6020026020010151905085516001600160401b03811115612fd557612fd5614b00565b604051908082528060200260200182016040528015612ffe578160200160208202803683370190505b5084838151811061301157613011615701565b60209081029190910101525f5b865181101561318a575f87828151811061303a5761303a615701565b6020908102919091018101516001600160a01b038086165f90815260a18452604080822092841682529190935282209092506130759061414c565b9050806001600160401b03165f0361308e575050613182565b5f61309a858d85610884565b90508863ffffffff16816040015163ffffffff16111580156130c257505f8160200151600f0b125b156130e4576130d8815f01518260200151613ef5565b6001600160401b031681525b80515f906130ff906001600160401b039081169085166142cd565b90506131468189898151811061311757613117615701565b6020026020010151878151811061313057613130615701565b60200260200101516142e190919063ffffffff16565b89888151811061315857613158615701565b6020026020010151868151811061317157613171615701565b602002602001018181525050505050505b60010161301e565b5050600101612f96565b5050949350505050565b606654600160ff83161b908116036131c95760405163840a48d560e01b815260040160405180910390fd5b50565b5f6060816131dd604086018661574c565b90506001600160401b038111156131f6576131f6614b00565b60405190808252806020026020018201604052801561321f578160200160208202803683370190505b50905061322f604086018661574c565b90506001600160401b0381111561324857613248614b00565b604051908082528060200260200182016040528015613271578160200160208202803683370190505b50915060a55f61328086612979565b81526020019081526020015f205f815461329990615b07565b918290555092505f5b6132af604087018761574c565b905081101561389e5780158061334257506132cd604087018761574c565b6132d8600184615b1f565b8181106132e7576132e7615701565b90506020020160208101906132fc9190614ccf565b6001600160a01b0316613312604088018861574c565b8381811061332257613322615701565b90506020020160208101906133379190614ccf565b6001600160a01b0316115b61335f57604051639f1c805360e01b815260040160405180910390fd5b61336c606087018761574c565b8281811061337c5761337c615701565b905060200201355f1080156133bc5750670de0b6b3a76400006133a2606088018861574c565b838181106133b2576133b2615701565b9050602002013511155b6133d957604051631353603160e01b815260040160405180910390fd5b61341a6133e9604088018861574c565b838181106133f9576133f9615701565b905060200201602081019061340e9190614ccf565b60995f6114c089612979565b613437576040516331bc342760e11b815260040160405180910390fd5b5f8061348961344960208a018a614ccf565b61345289612979565b61345f60408c018c61574c565b8781811061346f5761346f615701565b90506020020160208101906134849190614ccf565b6129dc565b805191935091506001600160401b03165f036134a6575050613896565b5f6134e16134b760608b018b61574c565b868181106134c7576134c7615701565b85516001600160401b0316926020909102013590506142f5565b83519091506134fc6001600160401b038084169083166142cd565b86868151811061350e5761350e615701565b60200260200101818152505081835f0181815161352b9190615b32565b6001600160401b0316905250835182908590613548908390615b32565b6001600160401b0316905250602084018051839190613568908390615b32565b6001600160401b031690525060208301515f600f9190910b1215613680575f6135cb61359760608d018d61574c565b888181106135a7576135a7615701565b9050602002013585602001516135bc90615b51565b6001600160801b0316906142f5565b9050806001600160401b0316846020018181516135e89190615b75565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61361c60208d018d614ccf565b8b61362a60408f018f61574c565b8a81811061363a5761363a615701565b905060200201602081019061364f9190614ccf565b613660885f01518960200151613ef5565b8860400151604051613676959493929190615874565b60405180910390a1505b6136d261369060208c018c614ccf565b6136998b612979565b6136a660408e018e61574c565b898181106136b6576136b6615701565b90506020020160208101906136cb9190614ccf565b8787613f14565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61370060208c018c614ccf565b8a61370e60408e018e61574c565b8981811061371e5761371e615701565b90506020020160208101906137339190614ccf565b865160405161374794939291904390615874565b60405180910390a161379861375f60208c018c614ccf565b61376c60408d018d61574c565b8881811061377c5761377c615701565b90506020020160208101906137919190614ccf565b865161430b565b6001600160a01b037f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8216635ae679a76137d460208d018d614ccf565b8b8b8e80604001906137e6919061574c565b8b8181106137f6576137f6615701565b905060200201602081019061380b9190614ccf565b89516040516001600160e01b031960e088901b16815261383395949392918991600401615ba2565b6020604051808303815f875af115801561384f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138739190615bf5565b87868151811061388557613885615701565b602002602001018181525050505050505b6001016132a2565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe56138cd6020870187614ccf565b856138db604089018961574c565b856138e960808c018c615900565b6040516138fc9796959493929190615c0c565b60405180910390a1509250929050565b60605f61087d8361438d565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f8111801561396257508261ffff1682105b15610b5c576001600160a01b038086165f90815260a3602090815260408083209388168352929052908120613996906143e6565b90505f5f6139a58884896129dc565b91509150806040015163ffffffff164310156139c357505050610b5c565b6139d08884898585613f14565b6001600160a01b038089165f90815260a360209081526040808320938b168352929052206139fd90614438565b50613a0785615b07565b9450613a1284615ca2565b9350505050613950565b8015613a9e576001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac014801590613a8157507f000000000000000000000000c6e7df5e7b4f2a278906862b61205850344d4e7d6001600160a01b0316826001600160a01b031614155b613a9e57604051632711b74d60e11b815260040160405180910390fd5b613aae8260995f6122cf87612979565b613acb5760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b838360405161279092919061598e565b60605f613b08836144b5565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b0382165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b909204166060820181905215801590613bb55750806060015163ffffffff164310155b15613bcf57604081015163ffffffff168152600160208201525b63ffffffff82166040820152613c057f0000000000000000000000000000000000000000000000000000000000000000436157f3565b613c109060016157f3565b63ffffffff90811660608381019182526001600160a01b0386165f818152609b602090815260409182902087518154838a0151858b01519851928a1664ffffffffff1990921691909117600160201b91151591909102176cffffffffffffffff0000000000191665010000000000978916979097026cffffffff000000000000000000191696909617600160481b968816968702179055815192835294871694820194909452928301919091527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db9101612790565b6001600160a01b0381165f908152600183016020526040812054151561087d565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b81811015613e31576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120613d9990836144dc565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff16918101829052919250431015613e14575050613e31565b613e22868260200151613ef5565b95505050806001019050613d61565b506001600160a01b038086165f90815260a1602090815260408083209388168352929052208390613e619061414c565b613e6b9190615b32565b9150509250929050565b5f61087d838361454b565b5f61087d836001600160a01b03841661454b565b5f61087d8383670de0b6b3a764000061462e565b5f613eb98460995f6114c089612979565b8015613ec25750815b80156114e757505090516001600160401b031615159392505050565b5f61087d6001600160401b03808516908416615cb7565b5f61087d613f0c836001600160401b038616615b75565b600f0b614683565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613fda57602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b156140bc576001600160a01b0385165f908152609f602090815260408083208784529091529020614094908461416a565b506001600160a01b0385165f908152609d602052604090206140b6908561415f565b50610b5c565b80516001600160401b03165f03610b5c576001600160a01b0385165f908152609f6020908152604080832087845290915290206140f99084613e80565b506001600160a01b0385165f908152609f60209081526040808320878452909152902061412590612c28565b5f03610b5c576001600160a01b0385165f908152609d602052604090206118ab9085613e75565b5f61093282670de0b6b3a76400006146ee565b5f61087d8383614725565b5f61087d836001600160a01b038416614725565b5f805b82518110156141ed576141ad848483815181106141a0576141a0615701565b60200260200101516108bd565b80156141d657506141d68382815181106141c9576141c9615701565b60200260200101516127d0565b156141e5576001915050610932565b600101614181565b505f9392505050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614252573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142769190615ce4565b6001600160a01b0316336001600160a01b0316146114ad5760405163794821ff60e01b815260040160405180910390fd5b5f825f0182815481106142bc576142bc615701565b905f5260205f200154905092915050565b5f61087d83670de0b6b3a764000084614771565b5f61087d8383670de0b6b3a7640000614771565b5f61087d8383670de0b6b3a76400006001614856565b6001600160a01b038084165f90815260a16020908152604080832093861683529290522061433a9043836148a5565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c90606001612790565b6060815f018054806020026020016040519081016040528092919081815260200182805480156143da57602002820191905f5260205f20905b8154815260200190600101908083116143c6575b50505050509050919050565b5f6144008254600f81810b600160801b909204900b131590565b1561441e57604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f6144528254600f81810b600160801b909204900b131590565b1561447057604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f60ff8216601f81111561093257604051632cd44ac360e21b815260040160405180910390fd5b5f5f6144fe6144ea846148be565b85546144f99190600f0b615cff565b614927565b8454909150600160801b9004600f90810b9082900b1261453157604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b5f8181526001830160205260408120548015614625575f61456d600183615b1f565b85549091505f9061458090600190615b1f565b90508181146145df575f865f01828154811061459e5761459e615701565b905f5260205f200154905080875f0184815481106145be576145be615701565b5f918252602080832090910192909255918252600188019052604090208390555b85548690806145f0576145f0615d26565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f905560019350505050610932565b5f915050610932565b82545f908161463f86868385614990565b905080156146795761466386614656600184615b1f565b5f91825260209091200190565b54600160201b90046001600160e01b03166108b3565b5091949350505050565b5f6001600160401b038211156146ea5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016128fe565b5090565b81545f90801561471d5761470784614656600184615b1f565b54600160201b90046001600160e01b031661092e565b509092915050565b5f81815260018301602052604081205461476a57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610932565b505f610932565b5f80805f19858709858702925082811083820303915050805f036147a85783828161479e5761479e615d3a565b049250505061087d565b8084116147ef5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b60448201526064016128fe565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f5f614863868686614771565b9050600183600281111561487957614879615d4e565b14801561489557505f848061489057614890615d3a565b868809115b156114e7576108b3600182615d62565b6148b983836001600160401b0384166149e3565b505050565b5f6001600160ff1b038211156146ea5760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016128fe565b80600f81900b811461498b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016128fe565b919050565b5f5b81831015610a81575f6149a58484614ae6565b5f8781526020902090915063ffffffff86169082015463ffffffff1611156149cf578092506149dd565b6149da816001615d62565b93505b50614992565b82548015614a99575f6149fb85614656600185615b1f565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b031660208401529192509085161015614a4d5760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff808616911603614a975782614a6e86614656600186615b1f565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b5f614af46002848418615d75565b61087d90848416615d62565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614b3657614b36614b00565b60405290565b604051601f8201601f191681016001600160401b0381118282101715614b6457614b64614b00565b604052919050565b6001600160a01b03811681146131c9575f5ffd5b803563ffffffff8116811461498b575f5ffd5b5f60408284031215614ba3575f5ffd5b604080519081016001600160401b0381118282101715614bc557614bc5614b00565b6040529050808235614bd681614b6c565b8152614be460208401614b80565b60208201525092915050565b5f60408284031215614c00575f5ffd5b61087d8383614b93565b5f5f5f60808486031215614c1c575f5ffd5b8335614c2781614b6c565b9250614c368560208601614b93565b91506060840135614c4681614b6c565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff169082015260608101610932565b5f5f60608385031215614c95575f5ffd5b8235614ca081614b6c565b9150614caf8460208501614b93565b90509250929050565b5f60208284031215614cc8575f5ffd5b5035919050565b5f60208284031215614cdf575f5ffd5b813561087d81614b6c565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b82811015614d4357614d2d868351614cea565b6040959095019460209190910190600101614d1a565b5093949350505050565b602081525f61087d6020830184614d08565b5f5f83601f840112614d6f575f5ffd5b5081356001600160401b03811115614d85575f5ffd5b6020830191508360208260051b8501011115611045575f5ffd5b5f5f5f60408486031215614db1575f5ffd5b8335614dbc81614b6c565b925060208401356001600160401b03811115614dd6575f5ffd5b614de286828701614d5f565b9497909650939450505050565b5f6001600160401b03821115614e0757614e07614b00565b5060051b60200190565b5f82601f830112614e20575f5ffd5b8135614e33614e2e82614def565b614b3c565b8082825260208201915060208360051b860101925085831115614e54575f5ffd5b602085015b83811015614e7a578035614e6c81614b6c565b835260209283019201614e59565b5095945050505050565b5f5f5f60808486031215614e96575f5ffd5b614ea08585614b93565b925060408401356001600160401b03811115614eba575f5ffd5b614ec686828701614e11565b92505060608401356001600160401b03811115614ee1575f5ffd5b614eed86828701614e11565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614d43578151865260209586019590910190600101614f09565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614f7e57603f19878603018452614f69858351614ef7565b94506020938401939190910190600101614f4d565b50929695505050505050565b5f5f5f5f60a08587031215614f9d575f5ffd5b614fa78686614b93565b935060408501356001600160401b03811115614fc1575f5ffd5b614fcd87828801614e11565b93505060608501356001600160401b03811115614fe8575f5ffd5b614ff487828801614e11565b92505061500360808601614b80565b905092959194509250565b5f5f5f5f5f60608688031215615022575f5ffd5b853561502d81614b6c565b945060208601356001600160401b03811115615047575f5ffd5b61505388828901614d5f565b90955093505060408601356001600160401b03811115615071575f5ffd5b61507d88828901614d5f565b969995985093965092949392505050565b5f5f6040838503121561509f575f5ffd5b82356150aa81614b6c565b915060208301356001600160401b038111156150c4575f5ffd5b830160a081860312156150d5575f5ffd5b809150509250929050565b828152604060208201525f610b716040830184614ef7565b5f5f60408385031215615109575f5ffd5b823561511481614b6c565b915060208301356150d581614b6c565b5f8151808452602084019350602083015f5b82811015614d435761516f86835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101615136565b604081525f6151976040830185614d08565b82810360208401526114e78185615124565b5f8151808452602084019350602083015f5b82811015614d435781516001600160a01b03168652602095860195909101906001016151bb565b602081525f61087d60208301846151a9565b5f5f60408385031215615205575f5ffd5b82356001600160401b0381111561521a575f5ffd5b61522685828601614e11565b92505060208301356150d581614b6c565b602080825282518282018190525f918401906040840190835b818110156152775783516001600160401b0316835260209384019390920191600101615250565b509095945050505050565b5f5f5f5f60608587031215615295575f5ffd5b84356152a081614b6c565b93506152ae60208601614b80565b925060408501356001600160401b038111156152c8575f5ffd5b6152d487828801614d5f565b95989497509550505050565b5f5f604083850312156152f1575f5ffd5b82356152fc81614b6c565b915060208301356001600160401b03811115615316575f5ffd5b613e6b85828601614e11565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60408385031215615368575f5ffd5b823561537381614b6c565b9150614caf60208401614b80565b5f60208284031215615391575f5ffd5b813560ff8116811461087d575f5ffd5b5f606082840312156153b1575f5ffd5b50919050565b5f602082840312156153c7575f5ffd5b81356001600160401b038111156153dc575f5ffd5b61092e848285016153a1565b5f5f5f608084860312156153fa575f5ffd5b83356001600160401b0381111561540f575f5ffd5b61541b86828701614e11565b935050614c368560208601614b93565b602081525f61087d6020830184615124565b5f5f5f6060848603121561544f575f5ffd5b833561545a81614b6c565b925060208401356001600160401b03811115615474575f5ffd5b61548086828701614e11565b92505061548f60408501614b80565b90509250925092565b5f5f604083850312156154a9575f5ffd5b82356154b481614b6c565b915060208301356001600160401b038111156154ce575f5ffd5b8301601f810185136154de575f5ffd5b80356154ec614e2e82614def565b8082825260208201915060208360051b85010192508783111561550d575f5ffd5b602084015b838110156156325780356001600160401b0381111561552f575f5ffd5b85016080818b03601f19011215615544575f5ffd5b61554c614b14565b6155598b60208401614b93565b815260608201356001600160401b03811115615573575f5ffd5b6155828c602083860101614e11565b60208301525060808201356001600160401b038111156155a0575f5ffd5b6020818401019250508a601f8301126155b7575f5ffd5b81356155c5614e2e82614def565b8082825260208201915060208360051b86010192508d8311156155e6575f5ffd5b6020850194505b8285101561561c5784356001600160401b038116811461560b575f5ffd5b8252602094850194909101906155ed565b6040840152505084525060209283019201615512565b50809450505050509250929050565b5f5f5f60408486031215615653575f5ffd5b833561565e81614b6c565b925060208401356001600160401b03811115615678575f5ffd5b8401601f81018613615688575f5ffd5b80356001600160401b0381111561569d575f5ffd5b8660208284010111156156ae575f5ffd5b939660209190910195509293505050565b5f5f604083850312156156d0575f5ffd5b82356156db81614b6c565b915060208301356001600160401b038111156156f5575f5ffd5b613e6b858286016153a1565b634e487b7160e01b5f52603260045260245ffd5b5f8235603e19833603018112615729575f5ffd5b9190910192915050565b5f60208284031215615743575f5ffd5b61087d82614b80565b5f5f8335601e19843603018112615761575f5ffd5b8301803591506001600160401b0382111561577a575f5ffd5b6020019150600581901b3603821315611045575f5ffd5b5f602082840312156157a1575f5ffd5b813561ffff8116811461087d575f5ffd5b5f602082840312156157c2575f5ffd5b8151801515811461087d575f5ffd5b604081016109328284614cea565b634e487b7160e01b5f52601160045260245ffd5b63ffffffff8181168382160190811115610932576109326157df565b8183526020830192505f815f5b84811015614d435763ffffffff61583283614b80565b168652602095860195919091019060010161581c565b6001600160a01b038581168252841660208201526060604082018190525f906108b3908301848661580f565b6001600160a01b038616815260c081016158916020830187614cea565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f610b716020830184866158c5565b5f5f8335601e19843603018112615915575f5ffd5b8301803591506001600160401b0382111561592e575f5ffd5b602001915036819003821315611045575f5ffd5b6001600160a01b038781168252861660208201526080604082018190525f9061596e908301868861580f565b82810360608401526159818185876158c5565b9998505050505050505050565b6060810161599c8285614cea565b6001600160a01b039290921660409190910152919050565b805160208083015191908110156153b1575f1960209190910360031b1b16919050565b604081525f6159e960408301856151a9565b82810360208401526114e781856151a9565b5f60208284031215615a0b575f5ffd5b81516001600160401b03811115615a20575f5ffd5b8201601f81018413615a30575f5ffd5b8051615a3e614e2e82614def565b8082825260208201915060208360051b850101925086831115615a5f575f5ffd5b602084015b83811015615afc5780516001600160401b03811115615a81575f5ffd5b8501603f81018913615a91575f5ffd5b6020810151615aa2614e2e82614def565b808282526020820191506020808460051b8601010192508b831115615ac5575f5ffd5b6040840193505b82841015615ae7578351825260209384019390910190615acc565b86525050602093840193919091019050615a64565b509695505050505050565b5f60018201615b1857615b186157df565b5060010190565b81810381811115610932576109326157df565b6001600160401b038281168282160390811115610932576109326157df565b5f81600f0b60016001607f1b03198103615b6d57615b6d6157df565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b031982121715610932576109326157df565b6001600160a01b038716815260e08101615bbf6020830188614cea565b60608201959095526001600160a01b039390931660808401526001600160401b0391821660a08401521660c09091015292915050565b5f60208284031215615c05575f5ffd5b5051919050565b6001600160a01b03881681525f60c08201615c2a602084018a614cea565b60c060608401528690528660e083015f5b88811015615c6b578235615c4e81614b6c565b6001600160a01b0316825260209283019290910190600101615c3b565b508381036080850152615c7e8188614ef7565b91505082810360a0840152615c948185876158c5565b9a9950505050505050505050565b5f81615cb057615cb06157df565b505f190190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b0382131715610932576109326157df565b5f60208284031215615cf4575f5ffd5b815161087d81614b6c565b8082018281125f831280158216821582161715615d1e57615d1e6157df565b505092915050565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b634e487b7160e01b5f52602160045260245ffd5b80820180821115610932576109326157df565b5f82615d8f57634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212204822a3705860d0223c89242417e05d3a5345087df963e57606c2b5c3d238326364736f6c634300081c003300", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "33": { - "address": "0x998abeb3E57409262aE5b751f60747921B33613E", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000065": "0x000000000000000000000000000000000000000000084595161401484a000000", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x00000000000000000000000095401dc811bb5740090279ba06cfa8fcf6113778", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000f5059a5d33d5853360d16c683c16e67980206f36", - "0x0000000000000000000000000000000000000000000000000000000000000064": "0x00000000000000000000000000000000000000000000d3c21bcecceda1000000", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "36": { - "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", - "code": "0x608060405260043610610021575f3560e01c8063439fab911461008a5761003f565b3661003f5760405163858d70bd60e01b815260040160405180910390fd5b5f6100687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050365f5f375f5f365f845af43d5f5f3e808015610084573d5ff35b3d5ffd5b005b348015610095575f5ffd5b506100886100a43660046100bc565b6040516282b42960e81b815260040160405180910390fd5b5f5f602083850312156100cd575f5ffd5b823567ffffffffffffffff8111156100e3575f5ffd5b8301601f810185136100f3575f5ffd5b803567ffffffffffffffff811115610109575f5ffd5b85602082840101111561011a575f5ffd5b602091909101959094509250505056fea264697066735822122042eb79be1c5c1bf83d453ef1bcf09a68daefc0a952ec517c315a6e1a8ca586e264736f6c634300081c003300", - "storage": { - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c231": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", - "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf", - "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x626b8e6b0a06114fed7a662a5b224ce123b32b155eef2616324caf5d9adeb4fa": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c233": "0x0000000000000000000000000000000000000000000000000000000000000112", - "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", - "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", - "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", - "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c" - } - }, - "5": { - "address": "0x8A791620dd6260079BF849Dc5567aDC3F2FdC318", - "code": "0x738a791620dd6260079bf849dc5567adc3f2fdc3183014608060405260043610610090575f3560e01c8063ab55562e11610063578063ab55562e146100fd578063af18d14214610105578063c82b5f451461010d578063ded905d514610115575f5ffd5b80632db726161461009457806379d0e91c146100bc5780637cb1a954146100e05780639ce504ff146100f6575b5f5ffd5b6100a76100a23660046109da565b61011c565b60405190151581526020015b60405180910390f35b6100c7600160f81b81565b6040516001600160f81b031990911681526020016100b3565b6100e8600581565b6040519081526020016100b3565b6100c75f81565b6100e8600681565b6100e8600481565b6100e8600881565b6100e85f81565b5f6101318461012b8580610a64565b84610278565b61013c57505f61026f565b6101496020840184610a82565b6020013583806020019061015d9190610a82565b351061016a57505f61026f565b5f61017e866101798680610a64565b610419565b90505f6101c7826101926020880188610a82565b356101a06020890189610a82565b602001358880602001906101b49190610a82565b6101c2906040810190610a96565b610434565b90505f6101e56101df36889003880160408901610b1d565b836104da565b90506001600160a01b03891663a401662b826102056101008a018a610a96565b8a61012001356040518563ffffffff1660e01b815260040161022a9493929190610bbc565b602060405180830381865afa158015610245573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102699190610c00565b93505050505b95945050505050565b5f5f82610285575f61028b565b600160f81b5b90505f5b61029c6080860186610a96565b905081101561040c575f6102b36080870187610a96565b838181106102c3576102c3610c1b565b90506020028101906102d59190610a82565b3514801561032157506102eb6080860186610a96565b828181106102fb576102fb610c1b565b905060200281019061030d9190610a82565b61031b906040810190610c2f565b90506021145b801561039657506001600160f81b031982166103406080870187610a96565b8381811061035057610350610c1b565b90506020028101906103629190610a82565b610370906040810190610c2f565b5f81811061038057610380610c1b565b9050013560f81c60f81b6001600160f81b031916145b80156103f457506103aa6080860186610a96565b828181106103ba576103ba610c1b565b90506020028101906103cc9190610a82565b6103da906040810190610c2f565b6103e8916001908290610c72565b6103f191610c99565b86145b1561040457600192505050610412565b60010161028f565b505f9150505b9392505050565b5f610424838361062c565b8051906020012090505b92915050565b5f85815b838110156104cf57866001166001148061045457508587600101145b1561048b5761048485858381811061046e5761046e610c1b565b90506020020135835f9182526020526040902090565b91506104b9565b6104b6828686848181106104a1576104a1610c1b565b905060200201355f9182526020526040902090565b91505b600196871c965f19909601861c86019501610438565b509695505050505050565b81515f90819060f81b6105128560200151600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1760e01b90565b856040015161058887606001515f65ff000000ff00600883811b91821664ff000000ff9185901c91821617601090811b67ff000000ff0000009390931666ff000000ff00009290921691909117901c17602081811b6bffffffffffffffff000000001691901c63ffffffff161760c01b92915050565b6080880151600881811b63ff00ff001662ff00ff9290911c9190911617601081811b91901c1760e01b60a08901516040516001600160f81b031990961660208701526001600160e01b0319948516602187015260258601939093526001600160c01b0319909116604585015291909116604d83015260518201526071810184905260910160408051808303601f190181529190528051602090910120949350505050565b60605f823561063e60208501356106b8565b6040850135606086013561065d6106586080890189610a96565b6106e8565b604051602001610671959493929190610ccd565b60405160208183030381529060405290508361068d82516106b8565b826040516020016106a093929190610d00565b60405160208183030381529060405291505092915050565b606063ffffffff8211156106df57604051637404cccd60e11b815260040160405180910390fd5b61042e82610778565b60408051602081019091525f808252606091905b8381101561075c578161073186868481811061071a5761071a610c1b565b905060200281019061072c9190610a82565b6108d3565b604051602001610742929190610d24565b60408051601f1981840301815291905291506001016106fc565b50610766836106b8565b816040516020016106a0929190610d24565b6060603f8263ffffffff16116107b557604051603f60fa1b60fa84901b1660208201526021015b6040516020818303038152906040529050919050565b613fff8263ffffffff1611610814576107f16107dd6403fffffffc600285901b166001610d3a565b600881811b62ffff001691901c60ff161790565b60405160200161079f919060f09190911b6001600160f01b031916815260020190565b633fffffff8263ffffffff16116108865761086360028363ffffffff16901b600261083f9190610d3a565b600881811c62ff00ff1663ff00ff009290911b9190911617601081811c91901b1790565b60405160200161079f919060e09190911b6001600160e01b031916815260040190565b604051600360f81b60208201526001600160e01b0319600884811c62ff00ff1663ff00ff009186901b9190911617601081811c91901b1760e01b16602182015260250161079f565b919050565b60608135600614806108e6575081356004145b806108f2575081356005145b1561094457813560f81b61090c6040840160208501610d62565b61092361091c6040860186610c2f565b90506106b8565b6109306040860186610c2f565b60405160200161079f959493929190610d7b565b813561097b575f61095b61091c6040850185610c2f565b6109686040850185610c2f565b60405160200161079f9493929190610dbb565b60071982350161099a57604051600160fb1b602082015260210161079f565b604051635422005560e11b815260040160405180910390fd5b80356001600160e01b0319811681146108ce575f5ffd5b80151581146109d7575f5ffd5b50565b5f5f5f5f5f60a086880312156109ee575f5ffd5b85356001600160a01b0381168114610a04575f5ffd5b9450610a12602087016109b3565b935060408601359250606086013567ffffffffffffffff811115610a34575f5ffd5b86016101408189031215610a46575f5ffd5b91506080860135610a56816109ca565b809150509295509295909350565b5f8235609e19833603018112610a78575f5ffd5b9190910192915050565b5f8235605e19833603018112610a78575f5ffd5b5f5f8335601e19843603018112610aab575f5ffd5b83018035915067ffffffffffffffff821115610ac5575f5ffd5b6020019150600581901b3603821315610adc575f5ffd5b9250929050565b803560ff811681146108ce575f5ffd5b803563ffffffff811681146108ce575f5ffd5b803567ffffffffffffffff811681146108ce575f5ffd5b5f60c0828403128015610b2e575f5ffd5b5060405160c0810167ffffffffffffffff81118282101715610b5e57634e487b7160e01b5f52604160045260245ffd5b604052610b6a83610ae3565b8152610b7860208401610af3565b602082015260408381013590820152610b9360608401610b06565b6060820152610ba460808401610af3565b608082015260a0928301359281019290925250919050565b84815260606020820181905281018390525f6001600160fb1b03841115610be1575f5ffd5b8360051b80866080850137604083019390935250016080019392505050565b5f60208284031215610c10575f5ffd5b8151610412816109ca565b634e487b7160e01b5f52603260045260245ffd5b5f5f8335601e19843603018112610c44575f5ffd5b83018035915067ffffffffffffffff821115610c5e575f5ffd5b602001915036819003821315610adc575f5ffd5b5f5f85851115610c80575f5ffd5b83861115610c8c575f5ffd5b5050820193919092039150565b8035602083101561042e575f19602084900360031b1b1692915050565b5f81518060208401855e5f93019283525090919050565b8581525f610cde6020830187610cb6565b858152846020820152610cf46040820185610cb6565b98975050505050505050565b6001600160e01b0319841681525f61026f610d1e6004840186610cb6565b84610cb6565b5f610d32610d1e8386610cb6565b949350505050565b63ffffffff818116838216019081111561042e57634e487b7160e01b5f52601160045260245ffd5b5f60208284031215610d72575f5ffd5b610412826109b3565b6001600160f81b0319861681526001600160e01b0319851660018201525f610da66005830186610cb6565b838582375f9301928352509095945050505050565b6001600160f81b0319851681525f610dd66001830186610cb6565b838582375f9301928352509094935050505056fea2646970667358221220367283a645a6f2ff4567a6b7f3c48a7618ad09eda48237419b569370b356fa4d64736f6c634300081c0033000000", + "11": { + "address": "0x9fE46736679d2D9a65F0992F2272dE9f3c7fa6e0", + "code": "0x739fe46736679d2d9a65f0992f2272de9f3c7fa6e03014608060405260043610610055575f3560e01c80634a283cd91461005957806376b1d08f1461007a578063fd10ebe514610099578063fe65a388146100d2575b5f5ffd5b818015610064575f5ffd5b50610078610073366004610aed565b6100f1565b005b610082600881565b60405160ff90911681526020015b60405180910390f35b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0546040516001600160401b039091168152602001610090565b8180156100dd575f5ffd5b506100786100ec366004610b67565b610202565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab906001600160a01b0316806101e4578260405161015990610ae0565b908152602001604051809103905ff080158015610178573d5f5f3e3d5ffd5b505f84815260028401602090815260409182902080546001600160a01b0319166001600160a01b0385169081179091558251878152918201529192507f7c96960a1ebd8cc753b10836ea25bd7c9c4f8cd43590db1e8b3648cb0ec4cc89910160405180910390a1505050565b604051630d82532d60e21b815260040160405180910390fd5b505050565b61028d336102448a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061029792505050565b61024e888a610c98565b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508992508891506102bf9050565b5050505050505050565b6040805180820182525f80825260606020928301528251808401909352825281019190915290565b6102c761056c565b6001600160801b033411156102ef576040516330e972ad60e01b815260040160405180910390fd5b6102f98183610d8e565b6001600160801b03163410156103225760405163044044a560e21b815260040160405180910390fd5b5f61034c7f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b796105c5565b90506103616001600160a01b0382163461061d565b8451600810156103845760405163df8153c760e01b815260040160405180910390fd5b5f85516001600160401b0381111561039e5761039e610c54565b6040519080825280602002602001820160405280156103e357816020015b604080518082019091525f8152606060208201528152602001906001900390816103bc5790505b5090505f5b86518110156104385761041387828151811061040657610406610dad565b6020026020010151610646565b82828151811061042557610425610dad565b60209081029190910101526001016103e8565b507e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96b0547e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab9061048f906001600160401b03166001610dc1565b816005015f6101000a8154816001600160401b0302191690836001600160401b031602179055505f6040518060e001604052808b6001600160a01b031681526020018481526020018a81526020018881526020018688346104f09190610de0565b6104fa9190610de0565b6001600160801b03908116825288811660208301528716604091820152600584015490519192507f550e2067494b1736ea5573f2d19cdc0ac95b410fff161bf16f11c6229655ec9c91610558916001600160401b0316908490610e56565b60405180910390a150505050505050505050565b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab80545f9060ff1660018111156105a4576105a4610f6b565b146105c257604051633ac4266d60e11b815260040160405180910390fd5b50565b5f8181527e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ad60205260409020546001600160a01b0316806106185760405163d3227c9b60e01b815260040160405180910390fd5b919050565b5f5f5f5f5f85875af19050806101fd57604051633d2cec6f60e21b815260040160405180910390fd5b604080518082019091525f815260606020820152602082015160ff165f819003610698575f5f848060200190518101906106809190610f7f565b925092505061068f82826106b1565b95945050505050565b604051636448d6e960e11b815260040160405180910390fd5b604080518082019091525f8152606060208201525f7f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e6001600160a01b0385165f90815260208290526040902080549192509060ff166107245760405163259ba1ad60e01b815260040160405180910390fd5b5f846001600160801b03161161074d5760405163162908e360e11b815260040160405180910390fd5b6001810154610783576001820154610770906001600160a01b0316863387610821565b61077a858561089d565b9250505061081b565b61078c81610919565b1561080257604051632770a7eb60e21b81523360048201526001600160801b03851660248201526001600160a01b03861690639dc29fac906044015f604051808303815f87803b1580156107de575f5ffd5b505af11580156107f0573d5f5f3e3d5ffd5b5050505061077a81600101548561092d565b604051636890662960e01b815260040160405180910390fd5b92915050565b610833836001600160a01b0316610987565b6108505760405163c1ab6dc160e01b815260040160405180910390fd5b806001600160801b03165f036108795760405163162908e360e11b815260040160405180910390fd5b6108976001600160a01b03841683866001600160801b0385166109cd565b50505050565b604080518082019091525f8152606060208201526040805180820182525f8152815180830183526001600160a01b0386168082526001600160801b0380871660209384019081528551808501939093525116938101939093529091908201906060015b60408051601f1981840301815291905290529392505050565b5f61092682600101541590565b1592915050565b6040805180820182525f8152606060208083018290528351808501855260018152845180860186528781526001600160801b0387811691840191825286518085018a90529151169581019590955292939083019101610900565b5f6001600160a01b0382163f1580159061081b5750506001600160a01b03163f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470141590565b6040516001600160a01b038085166024830152831660448201526064810182905261089790859060840160408051601f198184030181529190526020810180516001600160e01b03166323b872dd60e01b1790525f5f836001600160a01b031683604051610a3b9190610fd9565b5f604051808303815f865af19150503d805f8114610a74576040519150601f19603f3d011682016040523d82523d5f602084013e610a79565b606091505b50915091505f828015610aa4575081511580610aa4575081806020019051810190610aa49190610fef565b9050801580610abb57506001600160a01b0385163b155b15610ad95760405163022e258160e11b815260040160405180910390fd5b5050505050565b61032e8061101683390190565b5f60208284031215610afd575f5ffd5b5035919050565b5f5f83601f840112610b14575f5ffd5b5081356001600160401b03811115610b2a575f5ffd5b602083019150836020828501011115610b41575f5ffd5b9250929050565b6001600160801b03811681146105c2575f5ffd5b803561061881610b48565b5f5f5f5f5f5f5f5f60a0898b031215610b7e575f5ffd5b88356001600160401b03811115610b93575f5ffd5b610b9f8b828c01610b04565b90995097505060208901356001600160401b03811115610bbd575f5ffd5b8901601f81018b13610bcd575f5ffd5b80356001600160401b03811115610be2575f5ffd5b8b60208260051b8401011115610bf6575f5ffd5b6020919091019650945060408901356001600160401b03811115610c18575f5ffd5b610c248b828c01610b04565b9095509350610c37905060608a01610b5c565b9150610c4560808a01610b5c565b90509295985092959890939650565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715610c9057610c90610c54565b604052919050565b5f6001600160401b03831115610cb057610cb0610c54565b8260051b610cc060208201610c68565b84815290830190602081019036831115610cd8575f5ffd5b845b83811015610d705780356001600160401b03811115610cf7575f5ffd5b860136601f820112610d07575f5ffd5b80356001600160401b03811115610d2057610d20610c54565b610d33601f8201601f1916602001610c68565b818152366020838501011115610d47575f5ffd5b816020840160208301375f60208383010152808652505050602083019250602081019050610cda565b5095945050505050565b634e487b7160e01b5f52601160045260245ffd5b6001600160801b03818116838216019081111561081b5761081b610d7a565b634e487b7160e01b5f52603260045260245ffd5b6001600160401b03818116838216019081111561081b5761081b610d7a565b6001600160801b03828116828216039081111561081b5761081b610d7a565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60ff81511682525f602082015160406020850152610e4e6040850182610dff565b949350505050565b6001600160401b0383168152604060208201525f610120820160018060a01b038451166040840152602084015160e06060850152818151808452610140860191506101408160051b87010193506020830192505f5b81811015610edd5761013f19878603018352610ec8858551610e2d565b94506020938401939290920191600101610eab565b505050506040840151838203603f19016080850152610efc8282610e2d565b9150506060840151603f198483030160a0850152610f1a8282610dff565b9150506080840151610f3760c08501826001600160801b03169052565b5060a08401516001600160801b03811660e08501525060c08401516001600160801b03811661010085015250949350505050565b634e487b7160e01b5f52602160045260245ffd5b5f5f5f60608486031215610f91575f5ffd5b835160ff81168114610fa1575f5ffd5b60208501519093506001600160a01b0381168114610fbd575f5ffd5b6040850151909250610fce81610b48565b809150509250925092565b5f82518060208501845e5f920191825250919050565b5f60208284031215610fff575f5ffd5b8151801515811461100e575f5ffd5b939250505056fe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a2646970667358221220d6b7192f32171e73f3ca8608f2cb38bc543e4d751099308262bcc0a34560c16464736f6c634300081c003300", "storage": {} }, - "21": { - "address": "0x00000000219ab540356cBB839Cbe05303d7705Fa", - "code": "0x60806040526004361061003f5760003560e01c806301ffc9a71461004457806322895118146100a4578063621fd130146101ba578063c5f2892f14610244575b600080fd5b34801561005057600080fd5b506100906004803603602081101561006757600080fd5b50357fffffffff000000000000000000000000000000000000000000000000000000001661026b565b604080519115158252519081900360200190f35b6101b8600480360360808110156100ba57600080fd5b8101906020810181356401000000008111156100d557600080fd5b8201836020820111156100e757600080fd5b8035906020019184600183028401116401000000008311171561010957600080fd5b91939092909160208101903564010000000081111561012757600080fd5b82018360208201111561013957600080fd5b8035906020019184600183028401116401000000008311171561015b57600080fd5b91939092909160208101903564010000000081111561017957600080fd5b82018360208201111561018b57600080fd5b803590602001918460018302840111640100000000831117156101ad57600080fd5b919350915035610304565b005b3480156101c657600080fd5b506101cf6110b5565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102095781810151838201526020016101f1565b50505050905090810190601f1680156102365780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561025057600080fd5b506102596110c7565b60408051918252519081900360200190f35b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806102fe57507fffffffff0000000000000000000000000000000000000000000000000000000082167f8564090700000000000000000000000000000000000000000000000000000000145b92915050565b6030861461035d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118056026913960400191505060405180910390fd5b602084146103b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603681526020018061179c6036913960400191505060405180910390fd5b6060821461040f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806118786029913960400191505060405180910390fd5b670de0b6b3a7640000341015610470576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806118526026913960400191505060405180910390fd5b633b9aca003406156104cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260338152602001806117d26033913960400191505060405180910390fd5b633b9aca00340467ffffffffffffffff811115610535576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602781526020018061182b6027913960400191505060405180910390fd5b6060610540826114ba565b90507f649bbc62d0e31342afea4e5cd82d4049e7e1ee912fc0889aa790803be39038c589898989858a8a6105756020546114ba565b6040805160a0808252810189905290819060208201908201606083016080840160c085018e8e80828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910187810386528c815260200190508c8c808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690920188810386528c5181528c51602091820193918e019250908190849084905b83811015610648578181015183820152602001610630565b50505050905090810190601f1680156106755780820380516001836020036101000a031916815260200191505b5086810383528881526020018989808284376000838201819052601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018881038452895181528951602091820193918b019250908190849084905b838110156106ef5781810151838201526020016106d7565b50505050905090810190601f16801561071c5780820380516001836020036101000a031916815260200191505b509d505050505050505050505050505060405180910390a1600060028a8a600060801b604051602001808484808284377fffffffffffffffffffffffffffffffff0000000000000000000000000000000090941691909301908152604080517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0818403018152601090920190819052815191955093508392506020850191508083835b602083106107fc57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016107bf565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610859573d6000803e3d6000fd5b5050506040513d602081101561086e57600080fd5b5051905060006002806108846040848a8c6116fe565b6040516020018083838082843780830192505050925050506040516020818303038152906040526040518082805190602001908083835b602083106108f857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016108bb565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610955573d6000803e3d6000fd5b5050506040513d602081101561096a57600080fd5b5051600261097b896040818d6116fe565b60405160009060200180848480828437919091019283525050604080518083038152602092830191829052805190945090925082918401908083835b602083106109f457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016109b7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610a51573d6000803e3d6000fd5b5050506040513d6020811015610a6657600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610ada57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610a9d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610b37573d6000803e3d6000fd5b5050506040513d6020811015610b4c57600080fd5b50516040805160208101858152929350600092600292839287928f928f92018383808284378083019250505093505050506040516020818303038152906040526040518082805190602001908083835b60208310610bd957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610b9c565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610c36573d6000803e3d6000fd5b5050506040513d6020811015610c4b57600080fd5b50516040518651600291889160009188916020918201918291908601908083835b60208310610ca957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610c6c565b6001836020036101000a0380198251168184511680821785525050505050509050018367ffffffffffffffff191667ffffffffffffffff1916815260180182815260200193505050506040516020818303038152906040526040518082805190602001908083835b60208310610d4e57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610d11565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610dab573d6000803e3d6000fd5b5050506040513d6020811015610dc057600080fd5b5051604080516020818101949094528082019290925280518083038201815260609092019081905281519192909182918401908083835b60208310610e3457805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610df7565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015610e91573d6000803e3d6000fd5b5050506040513d6020811015610ea657600080fd5b50519050858114610f02576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260548152602001806117486054913960600191505060405180910390fd5b60205463ffffffff11610f60576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806117276021913960400191505060405180910390fd5b602080546001019081905560005b60208110156110a9578160011660011415610fa0578260008260208110610f9157fe5b0155506110ac95505050505050565b600260008260208110610faf57fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061102557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610fe8565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa158015611082573d6000803e3d6000fd5b5050506040513d602081101561109757600080fd5b50519250600282049150600101610f6e565b50fe5b50505050505050565b60606110c26020546114ba565b905090565b6020546000908190815b60208110156112f05781600116600114156111e6576002600082602081106110f557fe5b01548460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061116b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161112e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156111c8573d6000803e3d6000fd5b5050506040513d60208110156111dd57600080fd5b505192506112e2565b600283602183602081106111f657fe5b015460405160200180838152602001828152602001925050506040516020818303038152906040526040518082805190602001908083835b6020831061126b57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161122e565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa1580156112c8573d6000803e3d6000fd5b5050506040513d60208110156112dd57600080fd5b505192505b6002820491506001016110d1565b506002826112ff6020546114ba565b600060401b6040516020018084815260200183805190602001908083835b6020831061135a57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161131d565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790527fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000095909516920191825250604080518083037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8018152601890920190819052815191955093508392850191508083835b6020831061143f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611402565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790526040519190930194509192505080830381855afa15801561149c573d6000803e3d6000fd5b5050506040513d60208110156114b157600080fd5b50519250505090565b60408051600880825281830190925260609160208201818036833701905050905060c082901b8060071a60f81b826000815181106114f457fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060061a60f81b8260018151811061153757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060051a60f81b8260028151811061157a57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060041a60f81b826003815181106115bd57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060031a60f81b8260048151811061160057fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060021a60f81b8260058151811061164357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060011a60f81b8260068151811061168657fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508060001a60f81b826007815181106116c957fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050919050565b6000808585111561170d578182fd5b83861115611719578182fd5b505082019391909203915056fe4465706f736974436f6e74726163743a206d65726b6c6520747265652066756c6c4465706f736974436f6e74726163743a207265636f6e7374727563746564204465706f7369744461746120646f6573206e6f74206d6174636820737570706c696564206465706f7369745f646174615f726f6f744465706f736974436f6e74726163743a20696e76616c6964207769746864726177616c5f63726564656e7469616c73206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c7565206e6f74206d756c7469706c65206f6620677765694465706f736974436f6e74726163743a20696e76616c6964207075626b6579206c656e6774684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f20686967684465706f736974436f6e74726163743a206465706f7369742076616c756520746f6f206c6f774465706f736974436f6e74726163743a20696e76616c6964207369676e6174757265206c656e677468a2646970667358221220dceca8706b29e917dacf25fceef95acac8d90d765ac926663ce4096195952b6164736f6c634300060b0033000000000000000000", - "storage": { - "0x000000000000000000000000000000000000000000000000000000000000002c": "0x6cf04127db05441cd833107a52be852868890e4317e6a02ab47683aa75964220", - "0x0000000000000000000000000000000000000000000000000000000000000035": "0xcddba7b592e3133393c16194fac7431abf2f5485ed711db282183c819e08ebaa", - "0x0000000000000000000000000000000000000000000000000000000000000025": "0x536d98837f2dd165a55d5eeae91485954472d56f246df256bf3cae19352a123c", - "0x0000000000000000000000000000000000000000000000000000000000000034": "0xf893e908917775b62bff23294dbbe3a1cd8e6cc1c35b4801887b646a6f81f17f", - "0x0000000000000000000000000000000000000000000000000000000000000030": "0xd49a7502ffcfb0340b1d7885688500ca308161a7f96b62df9d083b71fcc8f2bb", - "0x0000000000000000000000000000000000000000000000000000000000000037": "0xfeb3c337d7a51a6fbf00b9e34c52e1c9195c969bd4e7a0bfd51d5c5bed9c1167", - "0x0000000000000000000000000000000000000000000000000000000000000026": "0x9efde052aa15429fae05bad4d0b1d7c64da64d03d7a1854a588c2cb8430c0d30", - "0x0000000000000000000000000000000000000000000000000000000000000038": "0xe71f0aa83cc32edfbefa9f4d3e0174ca85182eec9f3a09f6a6c0df6377a510d7", - "0x0000000000000000000000000000000000000000000000000000000000000023": "0xdb56114e00fdd4c1f85c892bf35ac9a89289aaecb1ebd0a96cde606a748b5d71", - "0x000000000000000000000000000000000000000000000000000000000000003a": "0x21352bfecbeddde993839f614c3dac0a3ee37543f9b412b16199dc158e23b544", - "0x000000000000000000000000000000000000000000000000000000000000003f": "0xb5fe28e79f1b850f8658246ce9b6a1e7b49fc06db7143e8fe0b4f2b0c5523a5c", - "0x0000000000000000000000000000000000000000000000000000000000000032": "0x8d0d63c39ebade8509e0ae3c9c3876fb5fa112be18f905ecacfecb92057603ab", - "0x000000000000000000000000000000000000000000000000000000000000003d": "0x848930bd7ba8cac54661072113fb278869e07bb8587f91392933374d017bcbe1", - "0x0000000000000000000000000000000000000000000000000000000000000024": "0xc78009fdf07fc56a11f122370658a353aaa542ed63e44c4bc15ff4cd105ab33c", - "0x000000000000000000000000000000000000000000000000000000000000002e": "0xdf6af5f5bbdb6be9ef8aa618e4bf8073960867171e29676f8b284dea6a08a85e", - "0x000000000000000000000000000000000000000000000000000000000000002d": "0xb7d05f875f140027ef5118a2247bbb84ce8f2f0f1123623085daf7960c329f5f", - "0x0000000000000000000000000000000000000000000000000000000000000036": "0x8a8d7fe3af8caa085a7639a832001457dfb9128a8061142ad0335629ff23ff9c", - "0x0000000000000000000000000000000000000000000000000000000000000029": "0x26846476fd5fc54a5d43385167c95144f2643f533cc85bb9d16b782f8d7db193", - "0x000000000000000000000000000000000000000000000000000000000000003e": "0x8869ff2c22b28cc10510d9853292803328be4fb0e80495e8bb8d271f5b889636", - "0x0000000000000000000000000000000000000000000000000000000000000039": "0x31206fa80a50bb6abe29085058f16212212a60eec8f049fecb92d8c8e0a84bc0", - "0x000000000000000000000000000000000000000000000000000000000000003b": "0x619e312724bb6d7c3153ed9de791d764a366b389af13c58bf8a8d90481a46765", - "0x000000000000000000000000000000000000000000000000000000000000002a": "0x506d86582d252405b840018792cad2bf1259f1ef5aa5f887e13cb2f0094f51e1", - "0x0000000000000000000000000000000000000000000000000000000000000022": "0xf5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b", - "0x000000000000000000000000000000000000000000000000000000000000003c": "0x7cdd2986268250628d0c10e385c58c6191e6fbe05191bcc04f133f2cea72c1c4", - "0x0000000000000000000000000000000000000000000000000000000000000028": "0x87eb0ddba57e35f6d286673802a4af5975e22506c7cf4c64bb6be5ee11527f2c", - "0x0000000000000000000000000000000000000000000000000000000000000033": "0x95eec8b2e541cad4e91de38385f2e046619f54496c2382cb6cacd5b98c26f5a4", - "0x0000000000000000000000000000000000000000000000000000000000000040": "0x985e929f70af28d0bdd1a90a808f977f597c7c778c489e98d3bd8910d31ac0f7", - "0x000000000000000000000000000000000000000000000000000000000000002b": "0xffff0ad7e659772f9534c195c815efc4014ef1e1daed4404c06385d11192e92b", - "0x0000000000000000000000000000000000000000000000000000000000000031": "0x8fe6b1689256c0d385f42f5bbe2027a22c1996e110ba97c171d3e5948de92beb", - "0x0000000000000000000000000000000000000000000000000000000000000027": "0xd88ddfeed400a8755596b21942c1497e114c302e6118290f91e6772976041fa1", - "0x000000000000000000000000000000000000000000000000000000000000002f": "0xb58d900f5e182e3c50ef74969ea16c7726c549757cc23523c369587da7293784" - } - }, - "6": { - "address": "0x0165878A594ca255338adfa4d48449f69242Eb8F", - "code": "0x730165878a594ca255338adfa4d48449f69242eb8f3014608060405260043610610034575f3560e01c8063439fab9114610038575b5f5ffd5b818015610043575f5ffd5b50610057610052366004610683565b610059565b005b5f6100827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b6001600160a01b0316036100a8576040516282b42960e81b815260040160405180910390fd5b7e96e2f02350077f4ff1746770dbe5db3c04b7db2c8763c8fc21bf66b35e96ab5f6100d584840185610760565b8051835491925090839060ff1916600183818111156100f6576100f6610802565b02179055505f7f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f1b60405161012b90610676565b908152602001604051809103905ff08015801561014a573d5f5f3e3d5ffd5b507f03170a2e7597b7b7e3d84c05391d139a62b157e78786d8c082f29dcf4c1113145f908152600285016020908152604080832080546001600160a01b0319166001600160a01b0386169081179091558151608081018352848152808401859052808301859052606081019190915260018085528089019093529220825181549495509293909291839160ff19169083818111156101ea576101ea610802565b02179055506020828101518254604080860151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178355606093840151600193840180546001600160a01b0319166001600160a01b0392831617905581516080810183525f808252818501819052818401819052918716958101959095526002815287840190925290208251815491929091839160ff199091169083818111156102ae576102ae610802565b021790555060208201518154604080850151610100600160881b031990921661010067ffffffffffffffff9485160267ffffffffffffffff60481b191617600160481b9390921692909202178255606090920151600190910180546001600160a01b0319166001600160a01b03909216919091179055515f907f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b799061035290610676565b908152602001604051809103905ff080158015610371573d5f5f3e3d5ffd5b507f81c5ab2571199e3188135178f3c2c8e2d268be1313d029b30f534fa579b69b795f908152600286016020908152604080832080546001600160a01b0319166001600160a01b038616908117909155815160808101835284815280840185905280830185905260608101919091528151637061726160e01b81850152607d60e31b6024820152825180820360080181526028909101835280519084012084526001808a019093529220825181549495509293909291839160ff191690838181111561043f5761043f610802565b021790555060208201518154604084015167ffffffffffffffff908116600160481b0267ffffffffffffffff60481b19919093166101000216610100600160881b031990911617178155606090910151600190910180546001600160a01b039092166001600160a01b03199092169190911790555f6104db7f59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f690565b60408501518155602080860151600180840180546fffffffffffffffffffffffffffffffff19166001600160801b0393841617905560c08801516002909401939093557f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f80546001600160a01b03969096166001600160c01b031990961695909517607d60a31b1790945560a08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23155606086015160808701518516600160801b02908516177f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c2305560e08601517f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c23380546101009889015190961690970270ffffffffffffffffffffffffffffffffff1990951660ff9091161793909317909455505f80527f8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22e9052507f8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d805460ff19169091179055505050565b61032e8061081783390190565b5f5f60208385031215610694575f5ffd5b823567ffffffffffffffff8111156106aa575f5ffd5b8301601f810185136106ba575f5ffd5b803567ffffffffffffffff8111156106d0575f5ffd5b8560208284010111156106e1575f5ffd5b6020919091019590945092505050565b604051610120810167ffffffffffffffff8111828210171561072157634e487b7160e01b5f52604160045260245ffd5b60405290565b803560028110610735575f5ffd5b919050565b80356001600160801b0381168114610735575f5ffd5b803560ff81168114610735575f5ffd5b5f610120828403128015610772575f5ffd5b5061077b6106f1565b61078483610727565b81526107926020840161073a565b6020820152604083810135908201526107ad6060840161073a565b60608201526107be6080840161073a565b608082015260a0838101359082015260c080840135908201526107e360e08401610750565b60e08201526107f5610100840161073a565b6101008201529392505050565b634e487b7160e01b5f52602160045260245ffdfe60c0604052348015600e575f5ffd5b5060405161032e38038061032e833981016040819052602b916036565b6080523360a052604c565b5f602082840312156045575f5ffd5b5051919050565b60805160a0516102bc6100725f395f81816052015261010d01525f60cf01526102bc5ff3fe608060405260043610610036575f3560e01c8063338c5371146100415780639bb66b2814610091578063e905182a146100be575f5ffd5b3661003d57005b5f5ffd5b34801561004c575f5ffd5b506100747f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561009c575f5ffd5b506100b06100ab3660046101ae565b6100ff565b604051610088929190610239565b3480156100c9575f5ffd5b506100f17f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610088565b5f6060336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461014a576040516282b42960e81b815260040160405180910390fd5b846001600160a01b03168484604051610164929190610277565b5f60405180830381855af49150503d805f811461019c576040519150601f19603f3d011682016040523d82523d5f602084013e6101a1565b606091505b5091509150935093915050565b5f5f5f604084860312156101c0575f5ffd5b83356001600160a01b03811681146101d6575f5ffd5b9250602084013567ffffffffffffffff8111156101f1575f5ffd5b8401601f81018613610201575f5ffd5b803567ffffffffffffffff811115610217575f5ffd5b866020828401011115610228575f5ffd5b939660209190910195509293505050565b8215158152604060208201525f82518060408401528060208501606085015e5f606082850101526060601f19601f8301168401019150509392505050565b818382375f910190815291905056fea26469706673582212208fe760f358faedf4a90fd4b23c39c8397def11c5b035ea1406af976ecc426bbf64736f6c634300081c0033a264697066735822122048797f739f4990ae363e6737b404ae972b4684803172bd809c64956b6bae7dc264736f6c634300081c003300000000000000", - "storage": {} - }, - "28": { - "address": "0x0DCd1Bf9A1b36cE34237eEaFef220932846BCD82", + "31": { + "address": "0x959922bE3CAee4b8Cd9a407cc3ac1C251C2007B1", "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000322813fd9a801c5507c9de605d63cea4f2ce6c44", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000007a2088a1bfc9d81c55368ae168c2c02570cb814f" + } + }, + "33": { + "address": "0x9A676e781A523b5d0C0e43731313A708CB607508", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0xedc9a600799bdec0e14ee5042ef794e1b4738abf52d225059d6b470373867218": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000033": "0x00000000000000000000000015d34aaf54267db7d7c367839aaf71a00a2c6a65", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000065": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x00000000000000000000000000000000000000000000000000000000000000cb": "0x0000000000000000000000009965507d1a55bcc2695c58ba16fb37d819b0a4dc", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000a85233c63b9ee964add6f2cffe00fd84eb32338f" + } + }, + "29": { + "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", + "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", + "storage": { + "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", + "0x54ab5bc83c0127df10d352dbba9557880cef93f87419916bd513c73a26e9de39": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x9254291d7d424716ad6728e8cf28d7329070cafa88280734e18f0a5f711cc416": "0x000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e", + "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788", + "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001" + } + }, + "35": { + "address": "0x9d4454B023096f34B160D6B654540c56A1F81688", + "code": "0x608060405260043610610021575f3560e01c8063439fab911461008a5761003f565b3661003f5760405163858d70bd60e01b815260040160405180910390fd5b5f6100687f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b9050365f5f375f5f365f845af43d5f5f3e808015610084573d5ff35b3d5ffd5b005b348015610095575f5ffd5b506100886100a43660046100bc565b6040516282b42960e81b815260040160405180910390fd5b5f5f602083850312156100cd575f5ffd5b823567ffffffffffffffff8111156100e3575f5ffd5b8301601f810185136100f3575f5ffd5b803567ffffffffffffffff811115610109575f5ffd5b85602082840101111561011a575f5ffd5b602091909101959094509250505056fea264697066735822122042eb79be1c5c1bf83d453ef1bcf09a68daefc0a952ec517c315a6e1a8ca586e264736f6c634300081c003300", + "storage": { + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c233": "0x0000000000000000000000000000000000000000000000000000000000000112", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c22f": "0x0000000000000000000003e8df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x626b8e6b0a06114fed7a662a5b224ce123b32b155eef2616324caf5d9adeb4fa": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c231": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x173ec3ea915b0ecad49b752ec145e745446de67d464520dc696504b3980fccda": "0x000000000000000000000000ac06641381166cf085281c45292147f833c622d7", + "0x91839d9989408fbab863f2059ae80fee5216f58ec04fa3bffb021275bf7d4f24": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0x8510b5c501cdfc97210e26067e7b0bee5b5cd43d52d902454bc5e2b62167df1d": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x8d3b47662f045c362f825b520d7ddf7a0e5f6703a828606de6840b3652b8c230": "0x0000000000000000000000000000000100000000000000000000000000000001", + "0x24c230e7f96dea56c14d16c737ac85f999d444fd74b5f3f00170ca4640c77b8f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x0000000000000000000000008f86403a4de0bb5791fa46b8e795c547942fe4cf", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f6": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f8": "0x0000000000000000000000000000000000000000000000000000000000000001", + "0x6bd2118f0148c813209325d23233ce0b7f1042ab160c97a1c605fdedff377204": "0x000000000000000000000000df077f5f72071df6e8b0a78071e496ba17b5ee0c", + "0xdf92d0c198eb2c08351629e12172b863967bc505b5d2fa9fdf58f7b97e45495f": "0x000000000000000000000000beaafda2e17fc95e69dc06878039d274e0d2b21a", + "0x59ef95eb9983b1a4650e1bc666384b8507689fc8aca3edd429d7e07c0ca9d2f7": "0x0000000000000000000000000000000000000000000000000000000000000001" } }, "39": { @@ -588,45 +606,9 @@ "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } }, - "47": { - "address": "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e", - "code": "0x608060405234801561000f575f5ffd5b506004361061004a575f3560e01c806346fbf68e1461004e5780638568520614610085578063ce5484281461009a578063eab66d7a146100ad575b5f5ffd5b61007061005c36600461027a565b5f6020819052908152604090205460ff1681565b60405190151581526020015b60405180910390f35b61009861009336600461029a565b6100d8565b005b6100986100a836600461027a565b610111565b6001546100c0906001600160a01b031681565b6040516001600160a01b03909116815260200161007c565b6001546001600160a01b031633146101035760405163794821ff60e01b815260040160405180910390fd5b61010d8282610148565b5050565b6001546001600160a01b0316331461013c5760405163794821ff60e01b815260040160405180910390fd5b610145816101cf565b50565b6001600160a01b03821661016f576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0382165f8181526020818152604091829020805460ff19168515159081179091558251938452908301527f65d3a1fd4c13f05cba164f80d03ce90fb4b5e21946bfc3ab7dbd434c2d0b9152910160405180910390a15050565b6001600160a01b0381166101f6576040516339b190bb60e11b815260040160405180910390fd5b600154604080516001600160a01b03928316815291831660208301527f06b4167a2528887a1e97a366eefe8549bfbf1ea3e6ac81cb2564a934d20e8892910160405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b80356001600160a01b0381168114610275575f5ffd5b919050565b5f6020828403121561028a575f5ffd5b6102938261025f565b9392505050565b5f5f604083850312156102ab575f5ffd5b6102b48361025f565b9150602083013580151581146102c8575f5ffd5b80915050925092905056fea2646970667358221220d968f6e7b0fa23955f1f9580db081bbf816d7e99d0b3ab6d1bf5c644ea927f8d64736f6c634300081c003300", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000001": "0x0000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc", - "0x14e04a66bf74771820a7400ff6cf065175b3d7eb25805a5bd1633b161af5d101": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x723077b8a1b173adc35e5f0e7e3662fd1208212cb629f9c128551ea7168da722": "0x0000000000000000000000000000000000000000000000000000000000000001" - } - }, - "25": { - "address": "0x0000BBdDc7CE488642fb579F8B00f3a590007251", - "code": "0x3373fffffffffffffffffffffffffffffffffffffffe1460d35760115f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1461019a57600182026001905f5b5f82111560685781019083028483029004916001019190604d565b9093900492505050366060146088573661019a573461019a575f5260205ff35b341061019a57600154600101600155600354806004026004013381556001015f358155600101602035815560010160403590553360601b5f5260605f60143760745fa0600101600355005b6003546002548082038060021160e7575060025b5f5b8181146101295782810160040260040181607402815460601b815260140181600101548152602001816002015481526020019060030154905260010160e9565b910180921461013b5790600255610146565b90505f6002555f6003555b5f54807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff141561017357505f5b6001546001828201116101885750505f61018e565b01600190035b5f555f6001556074025ff35b5f5ffd00", - "storage": {} - }, - "3": { - "address": "0x09635F643e140090A9A8Dcd712eD6285858ceBef", - "code": "0x608060405234801561000f575f5ffd5b50600436106103b3575f3560e01c8063886f1195116101f5578063de02e50311610114578063f6efbb59116100a9578063fabc1cbc11610079578063fabc1cbc14610a33578063fbf1e2c114610a46578063fce36c7d14610a59578063ff9f6cce14610a6c575f5ffd5b8063f6efbb59146109e7578063f74e8eac146109fa578063f8cd844814610a0d578063f96abf2e14610a20575f5ffd5b8063ed71e6a2116100e4578063ed71e6a214610967578063f22cef8514610994578063f2f07ab4146109a7578063f2fde38b146109d4575f5ffd5b8063de02e50314610907578063e063f81f1461091a578063e810ce211461092d578063ea4d3c9b14610940575f5ffd5b8063a50a1d9c1161018a578063bf21a8aa1161015a578063bf21a8aa14610879578063c46db606146108a0578063ca8aa7c7146108cd578063dcbb03b3146108f4575f5ffd5b8063a50a1d9c14610807578063aebd8bae1461081a578063b3dbb0e014610847578063bb7e451f1461085a575f5ffd5b80639cb9a5fa116101c55780639cb9a5fa146107a75780639d45c281146107ba5780639de4b35f146107e1578063a0169ddd146107f4575f5ffd5b8063886f11951461074c5780638da5cb5b146107735780639104c319146107845780639be3d4e41461079f575f5ffd5b80634596021c116102e15780635c975abb11610276578063715018a611610246578063715018a6146106ff5780637b8f8b0514610707578063863cb9a91461070f578063865c695314610722575f5ffd5b80635c975abb146106a25780635e9d8348146106aa57806363f6a798146106bd5780636d21117e146106d2575f5ffd5b806354fd4d50116102b157806354fd4d501461064f57806358baaa3e14610664578063595c6a67146106775780635ac86ab71461067f575f5ffd5b80634596021c146105d85780634657e26a146105eb5780634b943960146106125780634d18cc3514610638575f5ffd5b8063149bc8721161035757806339b70e381161032757806339b70e38146105745780633a8c07861461059b5780633ccc861d146105b25780633efe1db6146105c5575f5ffd5b8063149bc872146104d95780632b9f64a4146104fa57806336af41fa1461053a57806337838ed01461054d575f5ffd5b80630e9a53cf116103925780630e9a53cf1461043f5780630eb383451461048c578063131433b41461049f578063136439dd146104c6575f5ffd5b806218572c146103b757806304a0c502146103ee5780630ca298991461042a575b5f5ffd5b6103d96103c5366004613a33565b60d16020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6104157f0000000000000000000000000000000000000000000000000000000000278d0081565b60405163ffffffff90911681526020016103e5565b61043d610438366004613aab565b610a7f565b005b610447610d25565b6040516103e591905f6080820190508251825263ffffffff602084015116602083015263ffffffff604084015116604083015260608301511515606083015292915050565b61043d61049a366004613b07565b610e25565b6104157f0000000000000000000000000000000000000000000000000000000065fb788081565b61043d6104d4366004613b3e565b610ea5565b6104ec6104e7366004613b55565b610edf565b6040519081526020016103e5565b610522610508366004613a33565b60cc6020525f90815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016103e5565b61043d610548366004613b6f565b610f54565b6104157f000000000000000000000000000000000000000000000000000000000076a70081565b6105227f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b60cb5461041590600160a01b900463ffffffff1681565b61043d6105c0366004613bbe565b6110c5565b61043d6105d3366004613c14565b6110ec565b61043d6105e6366004613c3e565b6112c2565b6105227f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b610625610620366004613a33565b611325565b60405161ffff90911681526020016103e5565b60cb5461041590600160c01b900463ffffffff1681565b610657611380565b6040516103e59190613c90565b61043d610672366004613cc5565b6113b0565b61043d6113c4565b6103d961068d366004613cde565b606654600160ff9092169190911b9081161490565b6066546104ec565b6103d96106b8366004613cfe565b6113d8565b60cb5461062590600160e01b900461ffff1681565b6103d96106e0366004613d2f565b60cf60209081525f928352604080842090915290825290205460ff1681565b61043d611463565b60ca546104ec565b61043d61071d366004613a33565b611474565b6104ec610730366004613d59565b60cd60209081525f928352604080842090915290825290205481565b6105227f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6033546001600160a01b0316610522565b61052273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610447611485565b61043d6107b5366004613d85565b611521565b6104157f000000000000000000000000000000000000000000000000000000000001518081565b6106256107ef366004613dbc565b61169c565b61043d610802366004613a33565b61171f565b61043d610815366004613df8565b61172a565b6103d9610828366004613d2f565b60d260209081525f928352604080842090915290825290205460ff1681565b61043d610855366004613e11565b61173b565b6104ec610868366004613a33565b60ce6020525f908152604090205481565b6104157f00000000000000000000000000000000000000000000000000000000005c490081565b6103d96108ae366004613d2f565b60d060209081525f928352604080842090915290825290205460ff1681565b6105227f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b61043d610902366004613e3b565b611866565b610447610915366004613b3e565b6119b3565b610625610928366004613d59565b611a43565b61041561093b366004613b3e565b611aa8565b6105227f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd8281565b6103d9610975366004613d2f565b60d360209081525f928352604080842090915290825290205460ff1681565b61043d6109a2366004613d59565b611b29565b6103d96109b5366004613d2f565b60d760209081525f928352604080842090915290825290205460ff1681565b61043d6109e2366004613a33565b611c93565b61043d6109f5366004613e7f565b611d0e565b61043d610a08366004613edd565b611e43565b6104ec610a1b366004613b55565b61200a565b61043d610a2e366004613cc5565b61201a565b61043d610a41366004613b3e565b61214b565b60cb54610522906001600160a01b031681565b61043d610a67366004613b6f565b6121b8565b61043d610a7a366004613b6f565b6122e9565b6009610a8a8161244a565b610a976020850185613a33565b610aa081612475565b610abd5760405163932d94f760e01b815260040160405180910390fd5b610ac561251f565b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890610b11908890600401613f48565b602060405180830381865afa158015610b2c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b509190613f56565b610b6d57604051631fb1705560e21b815260040160405180910390fd5b5f5b83811015610d135736858583818110610b8a57610b8a613f71565b9050602002810190610b9c9190613f85565b90505f60ce81610baf60208b018b613a33565b6001600160a01b031681526020808201929092526040015f90812054925090610bda908a018a613a33565b8284604051602001610bee939291906141ad565b6040516020818303038152906040528051906020012090505f610c1084612578565b9050600160d75f610c2460208e018e613a33565b6001600160a01b0316815260208082019290925260409081015f9081208682529092529020805460ff1916911515919091179055610c638360016141f0565b60ce5f610c7360208e018e613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f208190555081336001600160a01b03167ffff0759ccb371dfb5691798724e70b4fa61cb3bfe730a33ac19fb86a48efc7568c8688604051610cd493929190614203565b60405180910390a3610d03333083610cf26040890160208a01613a33565b6001600160a01b0316929190612763565b505060019092019150610b6f9050565b50610d1e6001609755565b5050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca545b8015610dfd575f60ca610d60600184614228565b81548110610d7057610d70613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161580156060830181905291925090610ddf5750806040015163ffffffff164210155b15610dea5792915050565b5080610df58161423b565b915050610d4c565b5050604080516080810182525f80825260208201819052918101829052606081019190915290565b610e2d6127ce565b6001600160a01b0382165f81815260d1602052604080822054905160ff9091169284151592841515927f4de6293e668df1398422e1def12118052c1539a03cbfedc145895d48d7685f1c9190a4506001600160a01b03919091165f90815260d160205260409020805460ff1916911515919091179055565b610ead612828565b6066548181168114610ed25760405163c61dca5d60e01b815260040160405180910390fd5b610edb826128cb565b5050565b5f80610eee6020840184613a33565b8360200135604051602001610f379392919060f89390931b6001600160f81b031916835260609190911b6bffffffffffffffffffffffff19166001830152601582015260350190565b604051602081830303815290604052805190602001209050919050565b6001610f5f8161244a565b335f90815260d1602052604090205460ff16610f8e57604051635c427cd960e01b815260040160405180910390fd5b610f9661251f565b5f5b828110156110b55736848483818110610fb357610fb3613f71565b9050602002810190610fc59190614250565b335f81815260ce60209081526040808320549051949550939192610fef92909185918791016142e2565b60405160208183030381529060405280519060200120905061101083612908565b335f90815260d0602090815260408083208484529091529020805460ff191660019081179091556110429083906141f0565b335f81815260ce602052604090819020929092559051829184917f51088b8c89628df3a8174002c2a034d0152fce6af8415d651b2a4734bf27048290611089908890614308565b60405180910390a46110aa333060408601803590610cf29060208901613a33565b505050600101610f98565b506110c06001609755565b505050565b60026110d08161244a565b6110d861251f565b6110e283836129f3565b6110c06001609755565b60036110f78161244a565b60cb546001600160a01b0316331461112257604051635c427cd960e01b815260040160405180910390fd5b60cb5463ffffffff600160c01b90910481169083161161115557604051631ca7e50b60e21b815260040160405180910390fd5b428263ffffffff161061117b576040516306957c9160e11b815260040160405180910390fd5b60ca5460cb545f9061119a90600160a01b900463ffffffff164261431a565b6040805160808101825287815263ffffffff87811660208084018281528684168587018181525f6060880181815260ca8054600181018255925297517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee160029092029182015592517f42d72674974f694b5f5159593243114d38a5c39c89d6b62fee061ff523240ee290930180549151975193871667ffffffffffffffff1990921691909117600160201b978716979097029690961760ff60401b1916600160401b921515929092029190911790945560cb805463ffffffff60c01b1916600160c01b840217905593519283529394508892908616917fecd866c3c158fa00bf34d803d5f6023000b57080bcb48af004c2b4b46b3afd08910160405180910390a45050505050565b60026112cd8161244a565b6112d561251f565b5f5b838110156113145761130c8585838181106112f4576112f4613f71565b90506020028101906113069190614336565b846129f3565b6001016112d7565b5061131f6001609755565b50505050565b6001600160a01b0381165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff169082015261137a90612c7b565b92915050565b60606113ab7f76312e302e300000000000000000000000000000000000000000000000000006612ceb565b905090565b6113b86127ce565b6113c181612d28565b50565b6113cc612828565b6113d65f196128cb565b565b5f61145b8260ca6113ec6020830183613cc5565b63ffffffff168154811061140257611402613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152612d99565b506001919050565b61146b6127ce565b6113d65f612f3c565b61147c6127ce565b6113c181612f8d565b604080516080810182525f80825260208201819052918101829052606081019190915260ca80546114b890600190614228565b815481106114c8576114c8613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff1615156060820152919050565b600561152c8161244a565b8361153681612475565b6115535760405163932d94f760e01b815260040160405180910390fd5b61155b61251f565b5f5b83811015610d13573685858381811061157857611578613f71565b905060200281019061158a9190613f85565b6001600160a01b0388165f90815260ce60209081526040808320549051939450926115bb918b9185918791016141ad565b6040516020818303038152906040528051906020012090505f6115dd84612578565b6001600160a01b038b165f90815260d3602090815260408083208684529091529020805460ff1916600190811790915590915061161b9084906141f0565b6001600160a01b038b165f81815260ce60205260409081902092909255905183919033907ffc8888bffd711da60bc5092b33f677d81896fe80ecc677b84cfab8184462b6e09061166e9088908a9061434a565b60405180910390a461168c333083610cf26040890160208a01613a33565b50506001909201915061155d9050565b6001600160a01b0382165f90815260d66020526040812061171890826116cf6116ca36879003870187614362565b612fe8565b815260208082019290925260409081015f208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152612c7b565b9392505050565b33610edb818361304b565b6117326127ce565b6113c1816130ae565b60076117468161244a565b8261175081612475565b61176d5760405163932d94f760e01b815260040160405180910390fd5b60cb545f9061178990600160a01b900463ffffffff164261431a565b6001600160a01b0386165f90815260d5602090815260408083208151606081018352905461ffff80821683526201000082041693820193909352600160201b90920463ffffffff1690820152919250906117e290612c7b565b6001600160a01b0387165f90815260d560205260409020909150611807908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388169133917fd1e028bd664486a46ad26040e999cd2d22e1e9a094ee6afe19fcf64678f16f749181900360600190a3505050505050565b60066118718161244a565b8361187b81612475565b6118985760405163932d94f760e01b815260040160405180910390fd5b60cb545f906118b490600160a01b900463ffffffff164261431a565b6001600160a01b038781165f90815260d460209081526040808320938a1683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff169281019290925291925061191b90612c7b565b6001600160a01b038089165f90815260d460209081526040808320938b1683529290522090915061194d908684613119565b6040805163ffffffff8416815261ffff838116602083015287168183015290516001600160a01b0388811692908a169133917f48e198b6ae357e529204ee53a8e514c470ff77d9cc8e4f7207f8b5d490ae6934919081900360600190a450505050505050565b604080516080810182525f80825260208201819052918101829052606081019190915260ca82815481106119e9576119e9613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff161515606082015292915050565b6001600160a01b038281165f90815260d46020908152604080832093851683529281528282208351606081018552905461ffff80821683526201000082041692820192909252600160201b90910463ffffffff16928101929092529061171890612c7b565b60ca545f905b63ffffffff811615611b0f578260ca611ac86001846143ca565b63ffffffff1681548110611ade57611ade613f71565b905f5260205f2090600202015f015403611afd576117186001826143ca565b80611b07816143e6565b915050611aae565b5060405163504570e360e01b815260040160405180910390fd5b81611b3381612475565b611b505760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0384811660048301527f0000000000000000000000000dcd1bf9a1b36ce34237eeafef220932846bcd821690636d70f7ae90602401602060405180830381865afa158015611bb4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bd89190613f56565b80611c6c575060405163ba1a84e560e01b81526001600160a01b0384811660048301525f917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed9091169063ba1a84e590602401602060405180830381865afa158015611c46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c6a9190614404565b115b611c895760405163fb494ea160e01b815260040160405180910390fd5b6110c0838361304b565b611c9b6127ce565b6001600160a01b038116611d055760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b6113c181612f3c565b5f54610100900460ff1615808015611d2c57505f54600160ff909116105b80611d455750303b158015611d4557505f5460ff166001145b611da85760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611cfc565b5f805460ff191660011790558015611dc9575f805461ff0019166101001790555b611dd2856128cb565b611ddb86612f3c565b611de484612f8d565b611ded83612d28565b611df6826130ae565b8015611e3b575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050505050565b6008611e4e8161244a565b83611e5881612475565b611e755760405163932d94f760e01b815260040160405180910390fd5b6040516304c1b8eb60e31b81526001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063260dc75890611ec1908790600401613f48565b602060405180830381865afa158015611edc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f009190613f56565b611f1d57604051631fb1705560e21b815260040160405180910390fd5b60cb545f90611f3990600160a01b900463ffffffff164261431a565b6001600160a01b0387165f90815260d66020526040812091925090611f6b90826116cf6116ca368b90038b018b614362565b6001600160a01b0388165f90815260d660205260408120919250611fb09190611f9c6116ca368b90038b018b614362565b81526020019081526020015f208684613119565b866001600160a01b0316336001600160a01b03167f14918b3834ab6752eb2e1b489b6663a67810efb5f56f3944a97ede8ecf1fd9f18885858a604051611ff9949392919061441b565b60405180910390a350505050505050565b5f6001610eee6020840184613a33565b60036120258161244a565b60cb546001600160a01b0316331461205057604051635c427cd960e01b815260040160405180910390fd5b60ca5463ffffffff831610612078576040516394a8d38960e01b815260040160405180910390fd5b5f60ca8363ffffffff168154811061209257612092613f71565b905f5260205f20906002020190508060010160089054906101000a900460ff16156120d057604051631b14174b60e01b815260040160405180910390fd5b6001810154600160201b900463ffffffff16421061210157604051630c36f66560e21b815260040160405180910390fd5b60018101805460ff60401b1916600160401b17905560405163ffffffff8416907fd850e6e5dfa497b72661fa73df2923464eaed9dc2ff1d3cb82bccbfeabe5c41e905f90a2505050565b6121536131e8565b6066548019821981161461217a5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f6121c28161244a565b6121ca61251f565b5f5b828110156110b557368484838181106121e7576121e7613f71565b90506020028101906121f99190614250565b335f81815260ce6020908152604080832054905194955093919261222392909185918791016142e2565b60405160208183030381529060405280519060200120905061224483612908565b335f90815260cf602090815260408083208484529091529020805460ff191660019081179091556122769083906141f0565b335f81815260ce602052604090819020929092559051829184917f450a367a380c4e339e5ae7340c8464ef27af7781ad9945cfe8abd828f89e6281906122bd908890614308565b60405180910390a46122de333060408601803590610cf29060208901613a33565b5050506001016121cc565b60046122f48161244a565b335f90815260d1602052604090205460ff1661232357604051635c427cd960e01b815260040160405180910390fd5b61232b61251f565b5f5b828110156110b5573684848381811061234857612348613f71565b905060200281019061235a9190614250565b335f81815260ce6020908152604080832054905194955093919261238492909185918791016142e2565b6040516020818303038152906040528051906020012090506123a583612908565b335f90815260d2602090815260408083208484529091529020805460ff191660019081179091556123d79083906141f0565b335f81815260ce602052604090819020929092559051829184917f5251b6fdefcb5d81144e735f69ea4c695fd43b0289ca53dc075033f5fc80068b9061241e908890614308565b60405180910390a461243f333060408601803590610cf29060208901613a33565b50505060010161232d565b606654600160ff83161b908116036113c15760405163840a48d560e01b815260040160405180910390fd5b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156124fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061137a9190613f56565b6002609754036125715760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611cfc565b6002609755565b5f6125ab612586838061444f565b6125966080860160608701613cc5565b6125a660a0870160808801613cc5565b613299565b5f6125b9604084018461444f565b9050116125d95760405163796cc52560e01b815260040160405180910390fd5b426125ea60a0840160808501613cc5565b6125fa6080850160608601613cc5565b612604919061431a565b63ffffffff16106126285760405163150358a160e21b815260040160405180910390fd5b5f80805b612639604086018661444f565b905081101561272a5736612650604087018761444f565b8381811061266057612660613f71565b6040029190910191505f90506126796020830183613a33565b6001600160a01b0316036126a057604051630863a45360e11b815260040160405180910390fd5b6126ad6020820182613a33565b6001600160a01b0316836001600160a01b0316106126de576040516310fb47f160e31b815260040160405180910390fd5b5f816020013511612702576040516310eb483f60e21b815260040160405180910390fd5b61270f6020820182613a33565b925061271f6020820135856141f0565b93505060010161262c565b506f4b3b4ca85a86c47a098a223fffffffff82111561275c5760405163070b5a6f60e21b815260040160405180910390fd5b5092915050565b6040516001600160a01b038085166024830152831660448201526064810182905261131f9085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613597565b6033546001600160a01b031633146113d65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611cfc565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa15801561288a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ae9190613f56565b6113d657604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b612935612915828061444f565b6129256080850160608601613cc5565b6125a660a0860160808701613cc5565b5f816040013511612959576040516310eb483f60e21b815260040160405180910390fd5b6f4b3b4ca85a86c47a098a223fffffffff8160400135111561298e5760405163070b5a6f60e21b815260040160405180910390fd5b6129be63ffffffff7f0000000000000000000000000000000000000000000000000000000000278d0016426141f0565b6129ce6080830160608401613cc5565b63ffffffff1611156113c157604051637ee2b44360e01b815260040160405180910390fd5b5f60ca612a036020850185613cc5565b63ffffffff1681548110612a1957612a19613f71565b5f91825260209182902060408051608081018252600293909302909101805483526001015463ffffffff80821694840194909452600160201b810490931690820152600160401b90910460ff16151560608201529050612a798382612d99565b5f612a8a6080850160608601613a33565b6001600160a01b038082165f90815260cc60205260409020549192501680612aaf5750805b336001600160a01b03821614612ad857604051635c427cd960e01b815260040160405180910390fd5b5f5b612ae760a0870187614494565b9050811015611e3b5736612afe60e088018861444f565b83818110612b0e57612b0e613f71565b6001600160a01b0387165f90815260cd602090815260408083209302949094019450929091508290612b4290850185613a33565b6001600160a01b03166001600160a01b031681526020019081526020015f2054905080826020013511612b885760405163aa385e8160e01b815260040160405180910390fd5b5f612b97826020850135614228565b6001600160a01b0387165f90815260cd60209081526040822092935085018035929190612bc49087613a33565b6001600160a01b031681526020808201929092526040015f2091909155612c059089908390612bf590870187613a33565b6001600160a01b0316919061366a565b86516001600160a01b03808a1691878216918916907f9543dbd55580842586a951f0386e24d68a5df99ae29e3b216588b45fd684ce3190612c496020890189613a33565b604080519283526001600160a01b039091166020830152810186905260600160405180910390a4505050600101612ada565b5f816040015163ffffffff165f1480612cad5750815161ffff908116148015612cad5750816040015163ffffffff1642105b15612cc557505060cb54600160e01b900461ffff1690565b816040015163ffffffff16421015612cde57815161137a565b506020015190565b919050565b60605f612cf78361369a565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b60cb546040805163ffffffff600160a01b9093048316815291831660208301527faf557c6c02c208794817a705609cfa935f827312a1adfdd26494b6b95dd2b4b3910160405180910390a160cb805463ffffffff909216600160a01b0263ffffffff60a01b19909216919091179055565b806060015115612dbc57604051631b14174b60e01b815260040160405180910390fd5b806040015163ffffffff16421015612de757604051631437a2bb60e31b815260040160405180910390fd5b612df460c0830183614494565b9050612e0360a0840184614494565b905014612e23576040516343714afd60e01b815260040160405180910390fd5b612e3060e083018361444f565b9050612e3f60c0840184614494565b905014612e5f576040516343714afd60e01b815260040160405180910390fd5b8051612e8b90612e756040850160208601613cc5565b612e8260408601866144d9565b866060016136c1565b5f5b612e9a60a0840184614494565b90508110156110c057612f346080840135612eb860a0860186614494565b84818110612ec857612ec8613f71565b9050602002016020810190612edd9190613cc5565b612eea60c0870187614494565b85818110612efa57612efa613f71565b9050602002810190612f0c91906144d9565b612f1960e089018961444f565b87818110612f2957612f29613f71565b905060400201613765565b600101612e8d565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b60cb546040516001600160a01b038084169216907f237b82f438d75fc568ebab484b75b01d9287b9e98b490b7c23221623b6705dbb905f90a360cb80546001600160a01b0319166001600160a01b0392909216919091179055565b5f815f0151826020015163ffffffff1660405160200161303392919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261137a9061451b565b6001600160a01b038083165f81815260cc602052604080822080548686166001600160a01b0319821681179092559151919094169392849290917fbab947934d42e0ad206f25c9cab18b5bb6ae144acfb00f40b4e3aa59590ca3129190a4505050565b60cb546040805161ffff600160e01b9093048316815291831660208301527fe6cd4edfdcc1f6d130ab35f73d72378f3a642944fb4ee5bd84b7807a81ea1c4e910160405180910390a160cb805461ffff909216600160e01b0261ffff60e01b19909216919091179055565b61271061ffff831611156131405760405163891c63df60e01b815260040160405180910390fd5b8254600160201b900463ffffffff16421161316e57604051637b1e25c560e01b815260040160405180910390fd5b8254600160201b900463ffffffff165f0361319557825461ffff191661ffff1783556131ac565b825462010000810461ffff1661ffff199091161783555b825463ffffffff909116600160201b0267ffffffff000000001961ffff90931662010000029290921667ffffffffffff00001990911617179055565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613244573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613268919061453e565b6001600160a01b0316336001600160a01b0316146113d65760405163794821ff60e01b815260040160405180910390fd5b826132b75760405163796cc52560e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000005c490063ffffffff168163ffffffff16111561330457604051630dd0b9f560e21b815260040160405180910390fd5b61332e7f00000000000000000000000000000000000000000000000000000000000151808261456d565b63ffffffff16156133525760405163ee66470560e01b815260040160405180910390fd5b5f8163ffffffff16116133785760405163cb3f434d60e01b815260040160405180910390fd5b6133a27f00000000000000000000000000000000000000000000000000000000000151808361456d565b63ffffffff16156133c657604051633c1a94f160e21b815260040160405180910390fd5b8163ffffffff167f000000000000000000000000000000000000000000000000000000000076a70063ffffffff16426133ff9190614228565b1115801561343957508163ffffffff167f0000000000000000000000000000000000000000000000000000000065fb788063ffffffff1611155b6134565760405163041aa75760e11b815260040160405180910390fd5b5f805b84811015611e3b575f86868381811061347457613474613f71565b61348a9260206040909202019081019150613a33565b60405163198f077960e21b81526001600160a01b0380831660048301529192507f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063663c1de490602401602060405180830381865afa1580156134f3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135179190613f56565b8061353e57506001600160a01b03811673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0145b61355b57604051632efd965160e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03161061358d5760405163dfad9ca160e01b815260040160405180910390fd5b9150600101613459565b5f6135eb826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137a39092919063ffffffff16565b905080515f148061360b57508080602001905181019061360b9190613f56565b6110c05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401611cfc565b6040516001600160a01b0383166024820152604481018290526110c090849063a9059cbb60e01b90606401612797565b5f60ff8216601f81111561137a57604051632cd44ac360e21b815260040160405180910390fd5b6136cc602083614594565b6001901b8463ffffffff16106136f45760405162c6c39d60e71b815260040160405180910390fd5b5f6136fe82610edf565b905061374884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508591505063ffffffff89166137b9565b611e3b576040516369ca16c960e01b815260040160405180910390fd5b613770602083614594565b6001901b8463ffffffff16106137995760405163054ff4df60e51b815260040160405180910390fd5b5f6136fe8261200a565b60606137b184845f856137ee565b949350505050565b5f836137d8576040516329e7276760e11b815260040160405180910390fd5b836137e48685856138c5565b1495945050505050565b60608247101561384f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401611cfc565b5f5f866001600160a01b0316858760405161386a91906145a7565b5f6040518083038185875af1925050503d805f81146138a4576040519150601f19603f3d011682016040523d82523d5f602084013e6138a9565b606091505b50915091506138ba87838387613982565b979650505050505050565b5f83515f036138d5575081611718565b602084516138e391906145bd565b15613901576040516313717da960e21b815260040160405180910390fd5b8260205b85518111613962576139186002856145bd565b5f0361393957815f528086015160205260405f209150600284049350613950565b808601515f528160205260405f2091506002840493505b61395b6020826141f0565b9050613905565b5082156137b1576040516363df817160e01b815260040160405180910390fd5b606083156139f05782515f036139e9576001600160a01b0385163b6139e95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611cfc565b50816137b1565b6137b18383815115613a055781518083602001fd5b8060405162461bcd60e51b8152600401611cfc9190613c90565b6001600160a01b03811681146113c1575f5ffd5b5f60208284031215613a43575f5ffd5b813561171881613a1f565b5f60408284031215613a5e575f5ffd5b50919050565b5f5f83601f840112613a74575f5ffd5b5081356001600160401b03811115613a8a575f5ffd5b6020830191508360208260051b8501011115613aa4575f5ffd5b9250929050565b5f5f5f60608486031215613abd575f5ffd5b613ac78585613a4e565b925060408401356001600160401b03811115613ae1575f5ffd5b613aed86828701613a64565b9497909650939450505050565b80151581146113c1575f5ffd5b5f5f60408385031215613b18575f5ffd5b8235613b2381613a1f565b91506020830135613b3381613afa565b809150509250929050565b5f60208284031215613b4e575f5ffd5b5035919050565b5f60408284031215613b65575f5ffd5b6117188383613a4e565b5f5f60208385031215613b80575f5ffd5b82356001600160401b03811115613b95575f5ffd5b613ba185828601613a64565b90969095509350505050565b5f6101008284031215613a5e575f5ffd5b5f5f60408385031215613bcf575f5ffd5b82356001600160401b03811115613be4575f5ffd5b613bf085828601613bad565b9250506020830135613b3381613a1f565b803563ffffffff81168114612ce6575f5ffd5b5f5f60408385031215613c25575f5ffd5b82359150613c3560208401613c01565b90509250929050565b5f5f5f60408486031215613c50575f5ffd5b83356001600160401b03811115613c65575f5ffd5b613c7186828701613a64565b9094509250506020840135613c8581613a1f565b809150509250925092565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215613cd5575f5ffd5b61171882613c01565b5f60208284031215613cee575f5ffd5b813560ff81168114611718575f5ffd5b5f60208284031215613d0e575f5ffd5b81356001600160401b03811115613d23575f5ffd5b6137b184828501613bad565b5f5f60408385031215613d40575f5ffd5b8235613d4b81613a1f565b946020939093013593505050565b5f5f60408385031215613d6a575f5ffd5b8235613d7581613a1f565b91506020830135613b3381613a1f565b5f5f5f60408486031215613d97575f5ffd5b8335613da281613a1f565b925060208401356001600160401b03811115613ae1575f5ffd5b5f5f60608385031215613dcd575f5ffd5b8235613dd881613a1f565b9150613c358460208501613a4e565b803561ffff81168114612ce6575f5ffd5b5f60208284031215613e08575f5ffd5b61171882613de7565b5f5f60408385031215613e22575f5ffd5b8235613e2d81613a1f565b9150613c3560208401613de7565b5f5f5f60608486031215613e4d575f5ffd5b8335613e5881613a1f565b92506020840135613e6881613a1f565b9150613e7660408501613de7565b90509250925092565b5f5f5f5f5f60a08688031215613e93575f5ffd5b8535613e9e81613a1f565b9450602086013593506040860135613eb581613a1f565b9250613ec360608701613c01565b9150613ed160808701613de7565b90509295509295909350565b5f5f5f60808486031215613eef575f5ffd5b8335613efa81613a1f565b9250613f098560208601613a4e565b9150613e7660608501613de7565b8035613f2281613a1f565b6001600160a01b0316825263ffffffff613f3e60208301613c01565b1660208301525050565b6040810161137a8284613f17565b5f60208284031215613f66575f5ffd5b815161171881613afa565b634e487b7160e01b5f52603260045260245ffd5b5f823560be19833603018112613f99575f5ffd5b9190910192915050565b5f5f8335601e19843603018112613fb8575f5ffd5b83016020810192503590506001600160401b03811115613fd6575f5ffd5b8060061b3603821315613aa4575f5ffd5b8183526020830192505f815f5b8481101561404a57813561400781613a1f565b6001600160a01b0316865260208201356bffffffffffffffffffffffff8116808214614031575f5ffd5b6020880152506040958601959190910190600101613ff4565b5093949350505050565b5f5f8335601e19843603018112614069575f5ffd5b83016020810192503590506001600160401b03811115614087575f5ffd5b803603821315613aa4575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f6140c88283613fa3565b60c085526140da60c086018284613fe7565b91505060208301356140eb81613a1f565b6001600160a01b031660208501526141066040840184613fa3565b858303604087015280835290915f91906020015b8183101561415557833561412d81613a1f565b6001600160a01b0316815260208481013590820152604093840193600193909301920161411a565b61416160608701613c01565b63ffffffff81166060890152935061417b60808701613c01565b63ffffffff81166080890152935061419660a0870187614054565b9450925086810360a08801526138ba818585614095565b60018060a01b0384168152826020820152606060408201525f6141d360608301846140bd565b95945050505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561137a5761137a6141dc565b61420d8185613f17565b826040820152608060608201525f6141d360808301846140bd565b8181038181111561137a5761137a6141dc565b5f81614249576142496141dc565b505f190190565b5f8235609e19833603018112613f99575f5ffd5b5f61426f8283613fa3565b60a0855261428160a086018284613fe7565b915050602083013561429281613a1f565b6001600160a01b031660208501526040838101359085015263ffffffff6142bb60608501613c01565b16606085015263ffffffff6142d260808501613c01565b1660808501528091505092915050565b60018060a01b0384168152826020820152606060408201525f6141d36060830184614264565b602081525f6117186020830184614264565b63ffffffff818116838216019081111561137a5761137a6141dc565b5f823560fe19833603018112613f99575f5ffd5b828152604060208201525f6137b160408301846140bd565b5f6040828403128015614373575f5ffd5b50604080519081016001600160401b03811182821017156143a257634e487b7160e01b5f52604160045260245ffd5b60405282356143b081613a1f565b81526143be60208401613c01565b60208201529392505050565b63ffffffff828116828216039081111561137a5761137a6141dc565b5f63ffffffff8216806143fb576143fb6141dc565b5f190192915050565b5f60208284031215614414575f5ffd5b5051919050565b60a081016144298287613f17565b63ffffffff94909416604082015261ffff92831660608201529116608090910152919050565b5f5f8335601e19843603018112614464575f5ffd5b8301803591506001600160401b0382111561447d575f5ffd5b6020019150600681901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144a9575f5ffd5b8301803591506001600160401b038211156144c2575f5ffd5b6020019150600581901b3603821315613aa4575f5ffd5b5f5f8335601e198436030181126144ee575f5ffd5b8301803591506001600160401b03821115614507575f5ffd5b602001915036819003821315613aa4575f5ffd5b80516020808301519190811015613a5e575f1960209190910360031b1b16919050565b5f6020828403121561454e575f5ffd5b815161171881613a1f565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff83168061458257614582614559565b8063ffffffff84160691505092915050565b5f826145a2576145a2614559565b500490565b5f82518060208501845e5f920191825250919050565b5f826145cb576145cb614559565b50069056fea26469706673582212209764e0fe3693a179c5f7a81fc907220c85c1a49189bc26fd152ee3a6c5a36b1e64736f6c634300081c0033000000000000000000", - "storage": { - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" - } - }, - "30": { - "address": "0x68B1D87F95878fE05B998F19b66F4baba5De1aed", - "code": "0x60806040523661001357610011610017565b005b6100115b61001f610168565b6001600160a01b0316330361015e5760606001600160e01b03195f35166364d3180d60e11b81016100595761005261019a565b9150610156565b63587086bd60e11b6001600160e01b0319821601610079576100526101ed565b63070d7c6960e41b6001600160e01b031982160161009957610052610231565b621eb96f60e61b6001600160e01b03198216016100b857610052610261565b63a39f25e560e01b6001600160e01b03198216016100d8576100526102a0565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101666102b3565b565b5f7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101a46102c3565b5f6101b23660048184610668565b8101906101bf91906106aa565b90506101da8160405180602001604052805f8152505f6102cd565b505060408051602081019091525f815290565b60605f806101fe3660048184610668565b81019061020b91906106d7565b9150915061021b828260016102cd565b60405180602001604052805f8152509250505090565b606061023b6102c3565b5f6102493660048184610668565b81019061025691906106aa565b90506101da816102f8565b606061026b6102c3565b5f610274610168565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102aa6102c3565b5f61027461034f565b6101666102be61034f565b61035d565b3415610166575f5ffd5b6102d68361037b565b5f825111806102e25750805b156102f3576102f183836103ba565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f610321610168565b604080516001600160a01b03928316815291841660208301520160405180910390a161034c816103e6565b50565b5f61035861048f565b905090565b365f5f375f5f365f845af43d5f5f3e808015610377573d5ff35b3d5ffd5b610384816104b6565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b60606103df83836040518060600160405280602781526020016107e76027913961054a565b9392505050565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014d565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61018b565b6001600160a01b0381163b6105235760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014d565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61046e565b60605f5f856001600160a01b031685604051610566919061079b565b5f60405180830381855af49150503d805f811461059e576040519150601f19603f3d011682016040523d82523d5f602084013e6105a3565b606091505b50915091506105b4868383876105be565b9695505050505050565b6060831561062c5782515f03610625576001600160a01b0385163b6106255760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014d565b5081610636565b610636838361063e565b949350505050565b81511561064e5781518083602001fd5b8060405162461bcd60e51b815260040161014d91906107b1565b5f5f85851115610676575f5ffd5b83861115610682575f5ffd5b5050820193919092039150565b80356001600160a01b03811681146106a5575f5ffd5b919050565b5f602082840312156106ba575f5ffd5b6103df8261068f565b634e487b7160e01b5f52604160045260245ffd5b5f5f604083850312156106e8575f5ffd5b6106f18361068f565b9150602083013567ffffffffffffffff81111561070c575f5ffd5b8301601f8101851361071c575f5ffd5b803567ffffffffffffffff811115610736576107366106c3565b604051601f8201601f19908116603f0116810167ffffffffffffffff81118282101715610765576107656106c3565b60405281815282820160200187101561077c575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f920191825250919050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220861fd99925c9a795ce816251fa5b602392756b97b9314cad5a76d14fa0bea07364736f6c634300081c003300", - "storage": { - "0x4bad58e84dc127f47e7265bd5e504be070126f63f93af282fe2a4f1acbb07707": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc": "0x000000000000000000000000c5a5c42992decbae36851359345fe25997f5c42d", - "0x288c6faa56b91953378099dc2014a331affa988ca357fe83ca55e72915585282": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x0000000000000000000000000000000000000000000000000000000000000000": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x165183f4d7a8ecead93a30c1491a78d70b212627d72d451cc2b61e9844bb6182": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x54ab5bc83c0127df10d352dbba9557880cef93f87419916bd513c73a26e9de39": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x38de7073e27519f272741044a68ab5a51022aa002af20801e32867226a9bb4bd": "0x0000000000000000000000000000000000000000000000000000000000000001", - "0x9254291d7d424716ad6728e8cf28d7329070cafa88280734e18f0a5f711cc416": "0x000000000000000000000000998abeb3e57409262ae5b751f60747921b33613e", - "0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103": "0x000000000000000000000000610178da211fef7d417bc0e6fed39f05609ad788" - } - }, - "10": { - "address": "0xf5059a5D33d5853360D16C683c16e67980206f36", - "code": "0x608060405234801561000f575f5ffd5b5060043610610187575f3560e01c80637a8b2637116100d9578063c4d66de811610093578063df6fadc11161006e578063df6fadc114610361578063e3dae51c1461037c578063f3e738751461038f578063fabc1cbc146103a2575f5ffd5b8063c4d66de814610328578063ce7c2ac21461033b578063d9caed121461034e575f5ffd5b80637a8b2637146102ad578063886f1195146102c05780638c871019146102e75780638f6a6240146102fa578063a6ab36f21461030d578063ab5921e114610320575f5ffd5b806347e7ef2411610144578063595c6a671161011f578063595c6a67146102655780635ac86ab71461026d5780635c975abb1461029c57806361b01b5d146102a4575f5ffd5b806347e7ef241461022a57806354fd4d501461023d578063553ca5f814610252575f5ffd5b806311c70c9d1461018b578063136439dd146101a05780632495a599146101b357806339b70e38146101e35780633a98ef391461020a57806343fe08b014610221575b5f5ffd5b61019e6101993660046111b1565b6103b5565b005b61019e6101ae3660046111d1565b6103cb565b6032546101c6906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101c67f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b61021360335481565b6040519081526020016101da565b61021360645481565b6102136102383660046111fc565b610401565b610245610530565b6040516101da9190611226565b61021361026036600461125b565b610560565b61019e610573565b61028c61027b36600461128b565b6001805460ff9092161b9081161490565b60405190151581526020016101da565b600154610213565b61021360655481565b6102136102bb3660046111d1565b610587565b6101c67f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b6102136102f53660046111d1565b6105d0565b61021361030836600461125b565b6105da565b61019e61031b3660046112a6565b6105e7565b6102456106c2565b61019e61033636600461125b565b6106e2565b61021361034936600461125b565b6107a8565b61021361035c3660046112dc565b61083a565b606454606554604080519283526020830191909152016101da565b61021361038a3660046111d1565b61093c565b61021361039d3660046111d1565b610973565b61019e6103b03660046111d1565b61097d565b6103bd6109ea565b6103c78282610a9b565b5050565b6103d3610b3f565b60015481811681146103f85760405163c61dca5d60e01b815260040160405180910390fd5b6103c782610be2565b5f5f61040c81610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075081614610455576040516348da714f60e01b815260040160405180910390fd5b61045f8484610c55565b6033545f61046f6103e88361132e565b90505f6103e861047d610cac565b610487919061132e565b90505f6104948783611341565b9050806104a18489611354565b6104ab919061136b565b9550855f036104cd57604051630c392ed360e11b815260040160405180910390fd5b6104d7868561132e565b60338190556f4b3b4ca85a86c47a098a223fffffffff101561050c57604051632f14e8a360e11b815260040160405180910390fd5b610525826103e8603354610520919061132e565b610d16565b505050505092915050565b606061055b7f76312e302e300000000000000000000000000000000000000000000000000006610d62565b905090565b5f61056d6102bb836107a8565b92915050565b61057b610b3f565b6105855f19610be2565b565b5f5f6103e8603354610599919061132e565b90505f6103e86105a7610cac565b6105b1919061132e565b9050816105be8583611354565b6105c8919061136b565b949350505050565b5f61056d8261093c565b5f61056d61039d836107a8565b5f54610100900460ff161580801561060557505f54600160ff909116105b8061061e5750303b15801561061e57505f5460ff166001145b6106435760405162461bcd60e51b815260040161063a9061138a565b60405180910390fd5b5f805460ff191660011790558015610664575f805461ff0019166101001790555b61066e8484610a9b565b61067782610d9f565b80156106bc575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b60606040518060800160405280604d815260200161145b604d9139905090565b5f54610100900460ff161580801561070057505f54600160ff909116105b806107195750303b15801561071957505f5460ff166001145b6107355760405162461bcd60e51b815260040161063a9061138a565b5f805460ff191660011790558015610756575f805461ff0019166101001790555b61075f82610d9f565b80156103c7575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15050565b60405163fe243a1760e01b81526001600160a01b0382811660048301523060248301525f917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075089091169063fe243a1790604401602060405180830381865afa158015610816573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061056d91906113d8565b5f600161084681610c1f565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161461088f576040516348da714f60e01b815260040160405180910390fd5b61089a858585610eea565b603354808411156108be57604051630b469df360e41b815260040160405180910390fd5b5f6108cb6103e88361132e565b90505f6103e86108d9610cac565b6108e3919061132e565b9050816108f08783611354565b6108fa919061136b565b94506109068684611341565b6033556109266109168683611341565b6103e8603354610520919061132e565b610931888887610f1d565b505050509392505050565b5f5f6103e860335461094e919061132e565b90505f6103e861095c610cac565b610966919061132e565b9050806105be8386611354565b5f61056d82610587565b6109856109ea565b600154801982198116146109ac5760405163c61dca5d60e01b815260040160405180910390fd5b600182905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a46573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a6a91906113ef565b6001600160a01b0316336001600160a01b0316146105855760405163794821ff60e01b815260040160405180910390fd5b60645460408051918252602082018490527ff97ed4e083acac67830025ecbc756d8fe847cdbdca4cee3fe1e128e98b54ecb5910160405180910390a160655460408051918252602082018390527f6ab181e0440bfbf4bacdf2e99674735ce6638005490688c5f994f5399353e452910160405180910390a180821115610b345760405163052b07b760e21b815260040160405180910390fd5b606491909155606555565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015610ba1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc5919061140a565b61058557604051631d77d47760e21b815260040160405180910390fd5b600181905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b610c34816001805460ff9092161b9081161490565b15610c525760405163840a48d560e01b815260040160405180910390fd5b50565b606454811115610c785760405163052b07b760e21b815260040160405180910390fd5b606554610c83610cac565b1115610ca25760405163d86bae6760e01b815260040160405180910390fd5b6103c78282610f31565b6032546040516370a0823160e01b81523060048201525f916001600160a01b0316906370a0823190602401602060405180830381865afa158015610cf2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055b91906113d8565b7fd2494f3479e5da49d386657c292c610b5b01df313d07c62eb0cfa49924a31be881610d4a84670de0b6b3a7640000611354565b610d54919061136b565b60405190815260200161079c565b60605f610d6e83610f5f565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f54610100900460ff16610e095760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b606482015260840161063a565b603280546001600160a01b0319166001600160a01b038316179055610e2d5f610be2565b7f1c540707b00eb5427b6b774fc799d756516a54aee108b64b327acc55af55750760325f9054906101000a90046001600160a01b0316826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e9f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ec39190611429565b604080516001600160a01b03909316835260ff90911660208301520160405180910390a150565b6032546001600160a01b03838116911614610f1857604051630312abdd60e61b815260040160405180910390fd5b505050565b610f186001600160a01b0383168483610f86565b6032546001600160a01b038381169116146103c757604051630312abdd60e61b815260040160405180910390fd5b5f60ff8216601f81111561056d57604051632cd44ac360e21b815260040160405180910390fd5b604080516001600160a01b03848116602483015260448083018590528351808403909101815260649092018352602080830180516001600160e01b031663a9059cbb60e01b17905283518085019094528084527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656490840152610f18928692915f91611015918516908490611094565b905080515f1480611035575080806020019051810190611035919061140a565b610f185760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161063a565b60606105c884845f85855f5f866001600160a01b031685876040516110b99190611444565b5f6040518083038185875af1925050503d805f81146110f3576040519150601f19603f3d011682016040523d82523d5f602084013e6110f8565b606091505b509150915061110987838387611114565b979650505050505050565b606083156111825782515f0361117b576001600160a01b0385163b61117b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161063a565b50816105c8565b6105c883838151156111975781518083602001fd5b8060405162461bcd60e51b815260040161063a9190611226565b5f5f604083850312156111c2575f5ffd5b50508035926020909101359150565b5f602082840312156111e1575f5ffd5b5035919050565b6001600160a01b0381168114610c52575f5ffd5b5f5f6040838503121561120d575f5ffd5b8235611218816111e8565b946020939093013593505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f6020828403121561126b575f5ffd5b8135611276816111e8565b9392505050565b60ff81168114610c52575f5ffd5b5f6020828403121561129b575f5ffd5b81356112768161127d565b5f5f5f606084860312156112b8575f5ffd5b833592506020840135915060408401356112d1816111e8565b809150509250925092565b5f5f5f606084860312156112ee575f5ffd5b83356112f9816111e8565b92506020840135611309816111e8565b929592945050506040919091013590565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561056d5761056d61131a565b8181038181111561056d5761056d61131a565b808202811582820484141761056d5761056d61131a565b5f8261138557634e487b7160e01b5f52601260045260245ffd5b500490565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b5f602082840312156113e8575f5ffd5b5051919050565b5f602082840312156113ff575f5ffd5b8151611276816111e8565b5f6020828403121561141a575f5ffd5b81518015158114611276575f5ffd5b5f60208284031215611439575f5ffd5b81516112768161127d565b5f82518060208501845e5f92019182525091905056fe4261736520537472617465677920696d706c656d656e746174696f6e20746f20696e68657269742066726f6d20666f72206d6f726520636f6d706c657820696d706c656d656e746174696f6e73a2646970667358221220bfdf80ca4b361e8018a5f82c2bf79ca0703b2a580a1928bf0168143ae266103964736f6c634300081c0033000000000000000000", + "40": { + "address": "0x322813Fd9A801c5507c9de605d63CEA4f2CE6c44", + "code": "0x608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636d70f7ae1161017b578063bb45fef2116100e4578063e4cc3f901161009e578063f698da2511610079578063f698da25146107ce578063fabc1cbc146107d6578063fd8aa88d146107e9578063fe4b84df146107fc575f5ffd5b8063e4cc3f9014610788578063eea9064b1461079b578063f0e0e676146107ae575f5ffd5b8063bb45fef2146106b9578063bfae3fd2146106e6578063c448feb8146106f9578063c978f7ac1461072d578063ca8aa7c71461074e578063da8be86414610775575f5ffd5b80639104c319116101355780639104c319146106175780639435bb431461063257806399f5371b14610645578063a178848414610665578063a33a343314610684578063b7f06ebe14610697575f5ffd5b80636d70f7ae1461057a5780636e1744481461058d578063778e55f3146105a057806378296ec5146105ca578063886f1195146105dd5780639004134714610604575f5ffd5b806354b7c96c1161021d5780635c975abb116101d75780635c975abb146104d45780635d975e88146104dc5780635dd68579146104fd57806360a0d1ce1461051e57806365da12641461053157806366d5ba9314610559575f5ffd5b806354b7c96c1461045b57806354fd4d501461046e578063595c6a6714610483578063597b36da1461048b5780635ac86ab71461049e5780635ae679a7146104c1575f5ffd5b806339b70e381161026e57806339b70e381461036a5780633c651cf2146103a95780633cdeb5e0146103bc5780633e28391d146103ea5780634657e26a1461040d5780634665bcda14610434575f5ffd5b806304a4f979146102b55780630b9f487a146102ef5780630dd8dd0214610302578063136439dd1461032257806325df922e146103375780632aa6d88814610357575b5f5ffd5b6102dc7f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad81565b6040519081526020015b60405180910390f35b6102dc6102fd366004614a7f565b61080f565b610315610310366004614b16565b610897565b6040516102e69190614b54565b610335610330366004614b8b565b610b09565b005b61034a610345366004614d20565b610b43565b6040516102e69190614dce565b610335610365366004614e30565b610ca3565b6103917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750881565b6040516001600160a01b0390911681526020016102e6565b6103356103b7366004614e8e565b610df7565b6103916103ca366004614ed1565b6001600160a01b039081165f908152609960205260409020600101541690565b6103fd6103f8366004614ed1565b610f4a565b60405190151581526020016102e6565b6103917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c81565b6103917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b181565b610335610469366004614eec565b610f69565b610476610fd7565b6040516102e69190614f51565b610335611007565b6102dc61049936600461501f565b61101b565b6103fd6104ac366004615050565b606654600160ff9092169190911b9081161490565b6102dc6104cf366004615084565b61104a565b6066546102dc565b6104ef6104ea366004614b8b565b6111bc565b6040516102e69291906151b9565b61051061050b366004614ed1565b6111d9565b6040516102e692919061522b565b61033561052c366004615298565b611303565b61039161053f366004614ed1565b609a6020525f90815260409020546001600160a01b031681565b61056c610567366004614ed1565b6114ae565b6040516102e69291906152d7565b6103fd610588366004614ed1565b6117ae565b6102dc61059b366004614eec565b6117e6565b6102dc6105ae366004614eec565b609860209081525f928352604080842090915290825290205481565b6103356105d83660046152e9565b611890565b6103917f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e81565b61034a610612366004615339565b611926565b61039173beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac081565b610335610640366004615385565b6119fc565b610658610653366004614b8b565b611ab7565b6040516102e69190615421565b6102dc610673366004614ed1565b609f6020525f908152604090205481565b610315610692366004615433565b611bd3565b6103fd6106a5366004614b8b565b609e6020525f908152604090205460ff1681565b6103fd6106c736600461551a565b609c60209081525f928352604080842090915290825290205460ff1681565b6102dc6106f4366004614eec565b611beb565b60405163ffffffff7f00000000000000000000000000000000000000000000000000000000000000321681526020016102e6565b61074061073b366004615339565b611c27565b6040516102e6929190615544565b6103917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed81565b610315610783366004614ed1565b611eb4565b610335610796366004615563565b611fdd565b6103356107a9366004615433565b612015565b6107c16107bc3660046155e1565b612080565b6040516102e6919061568e565b6102dc612125565b6103356107e4366004614b8b565b6121de565b6103156107f7366004614ed1565b61224c565b61033561080a366004614b8b565b61226f565b604080517f14bde674c9f64b2ad00eaaee4a8bed1fabef35c7507e3c5b9cfc9436909a2dad60208201526001600160a01b03808616928201929092528187166060820152908516608082015260a0810183905260c081018290525f9061088d9060e00160405160208183030381529060405280519060200120612380565b9695505050505050565b606060016108a4816123ae565b6108ac6123dc565b5f836001600160401b038111156108c5576108c5614ba2565b6040519080825280602002602001820160405280156108ee578160200160208202803683370190505b50335f908152609a60205260408120549192506001600160a01b03909116905b85811015610afa57868682818110610928576109286156a0565b905060200281019061093a91906156b4565b6109489060208101906156d2565b905087878381811061095c5761095c6156a0565b905060200281019061096e91906156b4565b61097890806156d2565b905014610998576040516343714afd60e01b815260040160405180910390fd5b5f610a0233848a8a868181106109b0576109b06156a0565b90506020028101906109c291906156b4565b6109cc90806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525061243592505050565b9050610ad433848a8a86818110610a1b57610a1b6156a0565b9050602002810190610a2d91906156b4565b610a3790806156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f920191909152508e92508d9150889050818110610a7c57610a7c6156a0565b9050602002810190610a8e91906156b4565b610a9c9060208101906156d2565b808060200260200160405190810160405280939291908181526020018383602002808284375f92019190915250889250612587915050565b848381518110610ae657610ae66156a0565b60209081029190910101525060010161090e565b5050600160c955949350505050565b610b11612b22565b6066548181168114610b365760405163c61dca5d60e01b815260040160405180910390fd5b610b3f82612bc5565b5050565b6001600160a01b038084165f908152609a60205260408120546060921690610b6c868387612435565b90505f85516001600160401b03811115610b8857610b88614ba2565b604051908082528060200260200182016040528015610bb1578160200160208202803683370190505b5090505f5b8651811015610c96576001600160a01b0388165f90815260a260205260408120885182908a9085908110610bec57610bec6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050610c70878381518110610c3e57610c3e6156a0565b6020026020010151858481518110610c5857610c586156a0565b602002602001015183612c029092919063ffffffff16565b838381518110610c8257610c826156a0565b602090810291909101015250600101610bb6565b50925050505b9392505050565b610cab6123dc565b610cb433610f4a565b15610cd257604051633bf2b50360e11b815260040160405180910390fd5b604051632b6241f360e11b815233600482015263ffffffff841660248201527f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b0316906356c483e6906044015f604051808303815f87803b158015610d3c575f5ffd5b505af1158015610d4e573d5f5f3e3d5ffd5b50505050610d5c3385612c20565b610d663333612c82565b6040516001600160a01b038516815233907fa453db612af59e5521d6ab9284dc3e2d06af286eb1b1b7b771fce4716c19f2c19060200160405180910390a2336001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908383604051610ddf929190615717565b60405180910390a2610df1600160c955565b50505050565b336001600160a01b037f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb607508161480610e565750336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b116145b610e735760405163045206a560e21b815260040160405180910390fd5b610e7b6123dc565b6001600160a01b038481165f908152609a602052604080822054905163152667d960e31b8152908316600482018190528684166024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015610efb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1f9190615745565b90505f610f2d878784612f0b565b9050610f3d838888888886612fed565b505050610df1600160c955565b6001600160a01b039081165f908152609a602052604090205416151590565b81610f7381613132565b610f905760405163932d94f760e01b815260040160405180910390fd5b610f986123dc565b610fa1836117ae565b610fbe576040516325ec6c1f60e01b815260040160405180910390fd5b610fc88383612c20565b610fd2600160c955565b505050565b60606110027f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b905090565b61100f612b22565b6110195f19612bc5565b565b5f8160405160200161102d9190615421565b604051602081830303815290604052805190602001209050919050565b5f336001600160a01b037f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed1614611094576040516323d871a560e01b815260040160405180910390fd5b61109c6123dc565b6001600160a01b038088165f9081526098602090815260408083209388168352929052908120546110da906001600160401b03808716908616613219565b90505f6110e989878787613231565b90506110f58183615774565b9250611103895f88856132ee565b604080516001600160a01b038881168252602082018690528b16917fdd611f4ef63f4385f1756c86ce1f1f389a9013ba6fa07daba8528291bc2d3c30910160405180910390a261115286613368565b6001600160a01b0316633fb99ca5898989876040518563ffffffff1660e01b81526004016111839493929190615787565b5f604051808303815f87803b15801561119a575f5ffd5b505af11580156111ac573d5f5f3e3d5ffd5b50505050505061088d600160c955565b6111c4614940565b60606111cf836133da565b9094909350915050565b6060805f6111e68461224c565b8051909150806001600160401b0381111561120357611203614ba2565b60405190808252806020026020018201604052801561123c57816020015b611229614940565b8152602001906001900390816112215790505b509350806001600160401b0381111561125757611257614ba2565b60405190808252806020026020018201604052801561128a57816020015b60608152602001906001900390816112755790505b5092505f5b818110156112fb576112b98382815181106112ac576112ac6156a0565b60200260200101516133da565b8683815181106112cb576112cb6156a0565b602002602001018684815181106112e4576112e46156a0565b60209081029190910101919091525260010161128f565b505050915091565b336001600160a01b037f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1161461134c57604051633213a66160e21b815260040160405180910390fd5b6113546123dc565b61135d83610f4a565b15610fc8576001600160a01b038381165f908152609a602052604080822054905163152667d960e31b81529083166004820181905273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06024830152927f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa1580156113f4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114189190615745565b6001600160a01b0386165f90815260a26020908152604080832073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac084528252808320815192830190915254815291925061147e866114766001600160401b0380871690891661362d565b849190613641565b90506114a0848873beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0846132ee565b50505050610fd2600160c955565b6040516394f649dd60e01b81526001600160a01b03828116600483015260609182915f9182917f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb60750816906394f649dd906024015f60405180830381865afa15801561151a573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526115419190810190615837565b60405163fe243a1760e01b81526001600160a01b03888116600483015273beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac060248301529294509092505f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b1169063fe243a1790604401602060405180830381865afa1580156115c7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115eb91906158f2565b9050805f036115ff57509094909350915050565b5f8351600161160e9190615774565b6001600160401b0381111561162557611625614ba2565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b5090505f845160016116609190615774565b6001600160401b0381111561167757611677614ba2565b6040519080825280602002602001820160405280156116a0578160200160208202803683370190505b50905073beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0828651815181106116cb576116cb6156a0565b60200260200101906001600160a01b031690816001600160a01b03168152505082818651815181106116ff576116ff6156a0565b60209081029190910101525f5b85518110156117a057858181518110611727576117276156a0565b6020026020010151838281518110611741576117416156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050848181518110611773576117736156a0565b602002602001015182828151811061178d5761178d6156a0565b602090810291909101015260010161170c565b509097909650945050505050565b5f6001600160a01b038216158015906117e057506001600160a01b038083165f818152609a6020526040902054909116145b92915050565b60405163152667d960e31b81526001600160a01b03838116600483015282811660248301525f9182917f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed169063a9333ec890604401602060405180830381865afa158015611856573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187a9190615745565b90506118888484835f613231565b949350505050565b8261189a81613132565b6118b75760405163932d94f760e01b815260040160405180910390fd5b6118c0846117ae565b6118dd576040516325ec6c1f60e01b815260040160405180910390fd5b836001600160a01b03167f02a919ed0e2acad1dd90f17ef2fa4ae5462ee1339170034a8531cca4b67080908484604051611918929190615717565b60405180910390a250505050565b60605f82516001600160401b0381111561194257611942614ba2565b60405190808252806020026020018201604052801561196b578160200160208202803683370190505b5090505f5b83518110156119f4576001600160a01b0385165f90815260986020526040812085519091908690849081106119a7576119a76156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548282815181106119e1576119e16156a0565b6020908102919091010152600101611970565b509392505050565b6002611a07816123ae565b611a0f6123dc565b855f5b81811015611aa257611a9a898983818110611a2f57611a2f6156a0565b9050602002810190611a419190615909565b611a4a9061591d565b888884818110611a5c57611a5c6156a0565b9050602002810190611a6e91906156d2565b888886818110611a8057611a806156a0565b9050602002016020810190611a959190615928565b61365f565b600101611a12565b5050611aae600160c955565b50505050505050565b611abf614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b03908116825260018301548116828501526002830154168185015260038201546060820152600482015463ffffffff1660808201526005820180548551818602810186019096528086529194929360a08601939290830182828015611b6d57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311611b4f575b5050505050815260200160068201805480602002602001604051908101604052809291908181526020018280548015611bc357602002820191905f5260205f20905b815481526020019060010190808311611baf575b5050505050815250509050919050565b6060611bde33611eb4565b9050610c9c848484612015565b6001600160a01b038083165f90815260a260209081526040808320938516835292815282822083519182019093529154825290610c9c90613aa1565b60608082516001600160401b03811115611c4357611c43614ba2565b604051908082528060200260200182016040528015611c6c578160200160208202803683370190505b50915082516001600160401b03811115611c8857611c88614ba2565b604051908082528060200260200182016040528015611cb1578160200160208202803683370190505b506001600160a01b038086165f908152609a6020526040812054929350911690611cdc868387612435565b90505f5b8551811015611ea9575f611d0c878381518110611cff57611cff6156a0565b6020026020010151613368565b9050806001600160a01b031663fe243a1789898581518110611d3057611d306156a0565b60200260200101516040518363ffffffff1660e01b8152600401611d6a9291906001600160a01b0392831681529116602082015260400190565b602060405180830381865afa158015611d85573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da991906158f2565b858381518110611dbb57611dbb6156a0565b6020026020010181815250505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f898581518110611dfe57611dfe6156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050611e82868481518110611e5057611e506156a0565b6020026020010151858581518110611e6a57611e6a6156a0565b6020026020010151836136419092919063ffffffff16565b878481518110611e9457611e946156a0565b60209081029190910101525050600101611ce0565b5050505b9250929050565b6060611ebe6123dc565b611ec782610f4a565b611ee45760405163a5c7c44560e01b815260040160405180910390fd5b611eed826117ae565b15611f0b576040516311ca333560e31b815260040160405180910390fd5b336001600160a01b03831614611fc3576001600160a01b038083165f908152609a602052604090205416611f3e81613132565b80611f6457506001600160a01b038181165f908152609960205260409020600101541633145b611f8157604051631e499a2360e11b815260040160405180910390fd5b806001600160a01b0316836001600160a01b03167ff0eddf07e6ea14f388b47e1e94a0f464ecbd9eed4171130e0fc0e99fb4030a8a60405160405180910390a3505b611fcc82613ac0565b9050611fd8600160c955565b919050565b6002611fe8816123ae565b611ff06123dc565b612004611ffc8661591d565b85858561365f565b61200e600160c955565b5050505050565b61201d6123dc565b61202633610f4a565b1561204457604051633bf2b50360e11b815260040160405180910390fd5b61204d836117ae565b61206a576040516325ec6c1f60e01b815260040160405180910390fd5b61207633848484613d00565b610fc83384612c82565b60605f83516001600160401b0381111561209c5761209c614ba2565b6040519080825280602002602001820160405280156120cf57816020015b60608152602001906001900390816120ba5790505b5090505f5b84518110156119f4576121008582815181106120f2576120f26156a0565b602002602001015185611926565b828281518110612112576121126156a0565b60209081029190910101526001016120d4565b60408051808201909152600a81526922b4b3b2b72630bcb2b960b11b6020909101525f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f71b625cfad44bac63b13dba07f2e1d6084ee04b6f8752101ece6126d584ee6ea612192613dbf565b805160209182012060408051928301949094529281019190915260608101919091524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6121e6613e34565b6066548019821981161461220d5760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c906020015b60405180910390a25050565b6001600160a01b0381165f90815260a3602052604090206060906117e090613ee5565b5f54610100900460ff161580801561228d57505f54600160ff909116105b806122a65750303b1580156122a657505f5460ff166001145b61230e5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff19166001179055801561232f575f805461ff0019166101001790555b61233882612bc5565b8015610b3f575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b5f612389612125565b60405161190160f01b602082015260228101919091526042810183905260620161102d565b606654600160ff83161b908116036123d95760405163840a48d560e01b815260040160405180910390fd5b50565b600260c9540361242e5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401612305565b600260c955565b60605f82516001600160401b0381111561245157612451614ba2565b60405190808252806020026020018201604052801561247a578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b031663547afb8786866040518363ffffffff1660e01b81526004016124cc929190615943565b5f60405180830381865afa1580156124e6573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261250d9190810190615966565b90505f5b845181101561257c5761255787868381518110612530576125306156a0565b602002602001015184848151811061254a5761254a6156a0565b6020026020010151612f0b565b838281518110612569576125696156a0565b6020908102919091010152600101612511565b509095945050505050565b5f6001600160a01b0386166125af576040516339b190bb60e11b815260040160405180910390fd5b83515f036125d05760405163796cc52560e01b815260040160405180910390fd5b5f84516001600160401b038111156125ea576125ea614ba2565b604051908082528060200260200182016040528015612613578160200160208202803683370190505b5090505f85516001600160401b0381111561263057612630614ba2565b604051908082528060200260200182016040528015612659578160200160208202803683370190505b5090505f5b8651811015612955575f61267d888381518110611cff57611cff6156a0565b90505f60a25f8c6001600160a01b03166001600160a01b031681526020019081526020015f205f8a85815181106126b6576126b66156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20905061272f8884815181106126f4576126f46156a0565b602002602001015188858151811061270e5761270e6156a0565b60209081029190910181015160408051928301905284548252909190613641565b848481518110612741576127416156a0565b602002602001018181525050612780888481518110612762576127626156a0565b60209081029190910181015160408051928301905283548252613ef1565b858481518110612792576127926156a0565b60209081029190910101526001600160a01b038a1615612827576127e98a8a85815181106127c2576127c26156a0565b60200260200101518786815181106127dc576127dc6156a0565b6020026020010151613f05565b6128278a8c8b8681518110612800576128006156a0565b602002602001015187878151811061281a5761281a6156a0565b60200260200101516132ee565b5f826001600160a01b031663724af4238d8c878151811061284a5761284a6156a0565b60200260200101518c8881518110612864576128646156a0565b60200260200101516040518463ffffffff1660e01b815260040161288a939291906159f5565b6020604051808303815f875af11580156128a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128ca91906158f2565b9050805f03612947575f82557f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f8c8b868151811061290a5761290a6156a0565b602002602001015161292f856040518060200160405290815f82015481525050613aa1565b60405161293e939291906159f5565b60405180910390a15b50505080600101905061265e565b506001600160a01b0388165f908152609f6020526040812080549182919061297c83615a19565b91905055505f6040518060e001604052808b6001600160a01b031681526020018a6001600160a01b031681526020018b6001600160a01b031681526020018381526020014363ffffffff1681526020018981526020018581525090505f6129e28261101b565b5f818152609e602090815260408083208054600160ff19909116811790915560a4835292819020865181546001600160a01b03199081166001600160a01b039283161783558885015195830180548216968316969096179095559187015160028201805490951692169190911790925560608501516003830155608085015160048301805463ffffffff191663ffffffff90921691909117905560a085015180519394508593612a989260058501920190614999565b5060c08201518051612ab49160068401916020909101906149fc565b5050506001600160a01b038b165f90815260a360205260409020612ad89082613f6f565b507f26b2aae26516e8719ef50ea2f6831a2efbd4e37dccdf0f6936b27bc08e793e30818386604051612b0c93929190615a31565b60405180910390a19a9950505050505050505050565b60405163237dfb4760e11b81523360048201527f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b0316906346fbf68e90602401602060405180830381865afa158015612b84573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba89190615a5b565b61101957604051631d77d47760e21b815260040160405180910390fd5b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61188882612c1a612c1387613aa1565b8690613f7a565b90613f7a565b6001600160a01b038281165f8181526099602090815260409182902060010180546001600160a01b0319169486169485179055905192835290917f773b54c04d756fcc5e678111f7d730de3be98192000799eee3d63716055a87c69101612240565b5f612c8c816123ae565b5f5f612c97856114ae565b915091505f612ca75f8685612435565b6001600160a01b038781165f818152609a602052604080822080546001600160a01b031916948b16948517905551939450919290917fc3ee9f2e5fda98e8066a1f745b2df9285f416fe98cf2559cd21484b3d874330491a35f5b8351811015611aae5773beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac06001600160a01b0316848281518110612d3a57612d3a6156a0565b60200260200101516001600160a01b031603612eaa5760405163a3d75e0960e01b81526001600160a01b0388811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612db8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ddc9190615745565b90505f60a25f8a6001600160a01b03166001600160a01b031681526020019081526020015f205f878581518110612e1557612e156156a0565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206040518060200160405290815f820154815250509050612e89858481518110612e6757612e676156a0565b6020026020010151836001600160401b0316836136419092919063ffffffff16565b858481518110612e9b57612e9b6156a0565b60200260200101818152505050505b612f038688868481518110612ec157612ec16156a0565b60200260200101515f878681518110612edc57612edc6156a0565b6020026020010151878781518110612ef657612ef66156a0565b6020026020010151612fed565b600101612d01565b5f73beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeabf196001600160a01b03841601612fdd5760405163a3d75e0960e01b81526001600160a01b0385811660048301525f917f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b19091169063a3d75e0990602401602060405180830381865afa158015612f99573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612fbd9190615745565b9050612fd56001600160401b0384811690831661362d565b915050610c9c565b506001600160401b031692915050565b805f0361300d57604051630a33bc6960e21b815260040160405180910390fd5b811561312a576001600160a01b038086165f90815260a26020908152604080832093881683529290522061304381858585613f8e565b6040805160208101909152815481527f8be932bac54561f27260f95463d9b8ab37e06b2842e5ee2404157cc13df6eb8f908790879061308190613aa1565b604051613090939291906159f5565b60405180910390a16130a186610f4a565b15611aae576001600160a01b038088165f908152609860209081526040808320938916835292905290812080548592906130dc908490615774565b92505081905550866001600160a01b03167f1ec042c965e2edd7107b51188ee0f383e22e76179041ab3a9d18ff151405166c878786604051613120939291906159f5565b60405180910390a2505b505050505050565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f0000000000000000000000003aa5ebb10dc797cac828524e59a333d0a371443c9091169063df595cb8906084016020604051808303815f875af11580156131b8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117e09190615a5b565b60605f6131e883614024565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b5f613227848385600161404b565b6118889085615a76565b6001600160a01b038085165f90815260a56020908152604080832093871683529290529081208190613262906140a6565b90505f6132c860016132947f000000000000000000000000000000000000000000000000000000000000003243615a89565b61329e9190615a89565b6001600160a01b03808a165f90815260a560209081526040808320938c16835292905220906140c0565b90505f6132d58284615a76565b90506132e28187876140dc565b98975050505050505050565b6001600160a01b038085165f90815260986020908152604080832093861683529290529081208054839290613324908490615a76565b92505081905550836001600160a01b03167f6909600037b75d7b4733aedd815442b5ec018a827751c832aaff64eba5d6d2dd848484604051611918939291906159f5565b5f6001600160a01b03821673beac0eeeeeeeeeeeeeeeeeeeeeeeeeeeeeebeac0146133b3577f0000000000000000000000009a676e781a523b5d0c0e43731313a708cb6075086117e0565b7f000000000000000000000000959922be3caee4b8cd9a407cc3ac1c251c2007b192915050565b6133e2614940565b5f82815260a46020908152604091829020825160e08101845281546001600160a01b0390811682526001830154811682850152600283015416818501526003820154606082810191909152600483015463ffffffff1660808301526005830180548651818702810187019097528087529195929460a0860193929083018282801561349457602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311613476575b50505050508152602001600682018054806020026020016040519081016040528092919081815260200182805480156134ea57602002820191905f5260205f20905b8154815260200190600101908083116134d6575b50505050508152505091508160a00151516001600160401b0381111561351257613512614ba2565b60405190808252806020026020018201604052801561353b578160200160208202803683370190505b5090505f7f0000000000000000000000000000000000000000000000000000000000000032836080015161356f9190615aa5565b90505f4363ffffffff168263ffffffff16106135a05761359b845f015185602001518660a00151612435565b6135b7565b6135b7845f015185602001518660a00151856140fa565b90505f5b8460a00151518110156112fb576136088560c0015182815181106135e1576135e16156a0565b60200260200101518383815181106135fb576135fb6156a0565b6020026020010151614228565b84828151811061361a5761361a6156a0565b60209081029190910101526001016135bb565b5f610c9c8383670de0b6b3a7640000614233565b5f6118888261365961365287613aa1565b869061362d565b9061362d565b60a0840151518214613684576040516343714afd60e01b815260040160405180910390fd5b83604001516001600160a01b0316336001600160a01b0316146136ba576040516316110d3560e21b815260040160405180910390fd5b5f6136c48561101b565b5f818152609e602052604090205490915060ff166136f5576040516387c9d21960e01b815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000003287608001516137289190615aa5565b90508063ffffffff164363ffffffff1611613756576040516378f67ae160e11b815260040160405180910390fd5b61376d875f015188602001518960a00151846140fa565b87516001600160a01b03165f90815260a360205260409020909250613793915083614318565b505f82815260a46020526040812080546001600160a01b031990811682556001820180548216905560028201805490911690556003810182905560048101805463ffffffff19169055906137ea6005830182614a35565b6137f7600683015f614a35565b50505f828152609e602052604090819020805460ff19169055517f1f40400889274ed07b24845e5054a87a0cab969eb1277aafe61ae352e7c32a00906138409084815260200190565b60405180910390a185516001600160a01b039081165f908152609a6020526040812054885160a08a0151919093169261387a918490612435565b90505f5b8860a0015151811015613a96575f6138a58a60a001518381518110611cff57611cff6156a0565b90505f6138db8b60c0015184815181106138c1576138c16156a0565b60200260200101518785815181106135fb576135fb6156a0565b9050805f036138eb575050613a8e565b87156139b957816001600160a01b0316632eae418c8c5f01518d60a00151868151811061391a5761391a6156a0565b60200260200101518d8d88818110613934576139346156a0565b90506020020160208101906139499190614ed1565b60405160e085901b6001600160e01b03191681526001600160a01b03938416600482015291831660248301529091166044820152606481018490526084015f604051808303815f87803b15801561399e575f5ffd5b505af11580156139b0573d5f5f3e3d5ffd5b50505050613a8b565b5f5f836001600160a01b03166350ff72258e5f01518f60a0015188815181106139e4576139e46156a0565b6020026020010151866040518463ffffffff1660e01b8152600401613a0b939291906159f5565b60408051808303815f875af1158015613a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a4a9190615ac1565b91509150613a88878e5f01518f60a001518881518110613a6c57613a6c6156a0565b602002602001015185858b8b81518110612ef657612ef66156a0565b50505b50505b60010161387e565b505050505050505050565b80515f9015613ab15781516117e0565b670de0b6b3a764000092915050565b60606001613acd816123ae565b6001600160a01b038084165f818152609a602052604080822080546001600160a01b0319811690915590519316928392917ffee30966a256b71e14bc0ebfc94315e28ef4a97a7131a9e2b7a310a73af4467691a35f5f613b2c866114ae565b9150915081515f03613b4057505050613cfa565b81516001600160401b03811115613b5957613b59614ba2565b604051908082528060200260200182016040528015613b82578160200160208202803683370190505b5094505f613b91878585612435565b90505f5b8351811015613cf4576040805160018082528183019092525f916020808301908036833750506040805160018082528183019092529293505f9291506020808301908036833750506040805160018082528183019092529293505f92915060208083019080368337019050509050868481518110613c1557613c156156a0565b6020026020010151835f81518110613c2f57613c2f6156a0565b60200260200101906001600160a01b031690816001600160a01b031681525050858481518110613c6157613c616156a0565b6020026020010151825f81518110613c7b57613c7b6156a0565b602002602001018181525050848481518110613c9957613c996156a0565b6020026020010151815f81518110613cb357613cb36156a0565b602002602001018181525050613ccc8b89858585612587565b8a8581518110613cde57613cde6156a0565b6020908102919091010152505050600101613b95565b50505050505b50919050565b6001600160a01b038084165f908152609960205260409020600101541680613d285750610df1565b6001600160a01b0381165f908152609c6020908152604080832085845290915290205460ff1615613d6c57604051630d4c4c9160e21b815260040160405180910390fd5b6001600160a01b0381165f908152609c602090815260408083208584528252909120805460ff1916600117905583015161200e908290613db390889088908490889061080f565b85516020870151614323565b60605f613deb7f76312e302e3000000000000000000000000000000000000000000000000000066131dc565b9050805f81518110613dff57613dff6156a0565b016020908101516040516001600160f81b03199091169181019190915260210160405160208183030381529060405291505090565b7f000000000000000000000000b7f8bc63bbcad18155201308c8f3540b07f84f5e6001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613e90573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613eb49190615ae3565b6001600160a01b0316336001600160a01b0316146110195760405163794821ff60e01b815260040160405180910390fd5b60605f610c9c83614375565b5f610c9c613efe84613aa1565b839061362d565b6001600160a01b038084165f90815260a5602090815260408083209386168352929052908120613f34906140a6565b9050610df143613f448484615774565b6001600160a01b038088165f90815260a560209081526040808320938a1683529290522091906143ce565b5f610c9c83836143d9565b5f610c9c83670de0b6b3a764000084614233565b825f03613fba57604080516020810190915284548152613fb3908290612c1a90613aa1565b8455610df1565b6040805160208101909152845481525f90613fd6908584613641565b90505f613fe38483615774565b90505f613ffe84612c1a613ff7888a615774565b8590613f7a565b80885590505f819003611aae5760405163172cec7360e31b815260040160405180910390fd5b5f60ff8216601f8111156117e057604051632cd44ac360e21b815260040160405180910390fd5b5f5f614058868686614233565b9050600183600281111561406e5761406e615afe565b14801561408a57505f848061408557614085615b12565b868809115b1561409d5761409a600182615774565b90505b95945050505050565b5f6140b18282614425565b6001600160e01b031692915050565b5f6140cc83838361446a565b6001600160e01b03169392505050565b5f6118886140ea8385615b26565b85906001600160401b031661362d565b60605f83516001600160401b0381111561411657614116614ba2565b60405190808252806020026020018201604052801561413f578160200160208202803683370190505b5090505f7f00000000000000000000000068b1d87f95878fe05b998f19b66f4baba5de1aed6001600160a01b03166394d7d00c8787876040518463ffffffff1660e01b815260040161419393929190615b45565b5f60405180830381865afa1580156141ad573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141d49190810190615966565b90505f5b855181101561421c576141f788878381518110612530576125306156a0565b838281518110614209576142096156a0565b60209081029190910101526001016141d8565b50909695505050505050565b5f610c9c838361362d565b5f80805f19858709858702925082811083820303915050805f0361426a5783828161426057614260615b12565b0492505050610c9c565b8084116142b15760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612305565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f610c9c83836144b3565b4281101561434457604051630819bdcd60e01b815260040160405180910390fd5b6143586001600160a01b0385168484614596565b610df157604051638baa579f60e01b815260040160405180910390fd5b6060815f018054806020026020016040519081016040528092919081815260200182805480156143c257602002820191905f5260205f20905b8154815260200190600101908083116143ae575b50505050509050919050565b610fd28383836145ea565b5f81815260018301602052604081205461441e57508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556117e0565b505f6117e0565b81545f9080156144625761444b8461443e600184615a76565b5f91825260209091200190565b5464010000000090046001600160e01b0316611888565b509092915050565b82545f908161447b868683856146f0565b905080156144a9576144928661443e600184615a76565b5464010000000090046001600160e01b031661088d565b5091949350505050565b5f818152600183016020526040812054801561458d575f6144d5600183615a76565b85549091505f906144e890600190615a76565b9050818114614547575f865f018281548110614506576145066156a0565b905f5260205f200154905080875f018481548110614526576145266156a0565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061455857614558615b7e565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506117e0565b5f9150506117e0565b5f5f5f6145a38585614743565b90925090505f8160048111156145bb576145bb615afe565b1480156145d95750856001600160a01b0316826001600160a01b0316145b8061088d575061088d868686614782565b825480156146a2575f6146028561443e600185615a76565b60408051808201909152905463ffffffff8082168084526401000000009092046001600160e01b0316602084015291925090851610156146555760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036146a057826146768661443e600186615a76565b80546001600160e01b03929092166401000000000263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216640100000000029190921617910155565b5f5b818310156119f4575f6147058484614869565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561472f5780925061473d565b61473a816001615774565b93505b506146f2565b5f5f8251604103614777576020830151604084015160608501515f1a61476b87828585614883565b94509450505050611ead565b505f90506002611ead565b5f5f5f856001600160a01b0316631626ba7e60e01b86866040516024016147aa929190615b92565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b03199094169390931790925290516147e89190615baa565b5f60405180830381855afa9150503d805f8114614820576040519150601f19603f3d011682016040523d82523d5f602084013e614825565b606091505b509150915081801561483957506020815110155b801561088d57508051630b135d3f60e11b9061485e90830160209081019084016158f2565b149695505050505050565b5f6148776002848418615bc0565b610c9c90848416615774565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156148b857505f90506003614937565b604080515f8082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614909573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116614931575f60019250925050614937565b91505f90505b94509492505050565b6040518060e001604052805f6001600160a01b031681526020015f6001600160a01b031681526020015f6001600160a01b031681526020015f81526020015f63ffffffff16815260200160608152602001606081525090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906149b7565b506149f8929150614a4c565b5090565b828054828255905f5260205f209081019282156149ec579160200282015b828111156149ec578251825591602001919060010190614a1a565b5080545f8255905f5260205f20908101906123d991905b5b808211156149f8575f8155600101614a4d565b6001600160a01b03811681146123d9575f5ffd5b8035611fd881614a60565b5f5f5f5f5f60a08688031215614a93575f5ffd5b8535614a9e81614a60565b94506020860135614aae81614a60565b93506040860135614abe81614a60565b94979396509394606081013594506080013592915050565b5f5f83601f840112614ae6575f5ffd5b5081356001600160401b03811115614afc575f5ffd5b6020830191508360208260051b8501011115611ead575f5ffd5b5f5f60208385031215614b27575f5ffd5b82356001600160401b03811115614b3c575f5ffd5b614b4885828601614ad6565b90969095509350505050565b602080825282518282018190525f918401906040840190835b8181101561257c578351835260209384019390920191600101614b6d565b5f60208284031215614b9b575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b60405160e081016001600160401b0381118282101715614bd857614bd8614ba2565b60405290565b604080519081016001600160401b0381118282101715614bd857614bd8614ba2565b604051601f8201601f191681016001600160401b0381118282101715614c2857614c28614ba2565b604052919050565b5f6001600160401b03821115614c4857614c48614ba2565b5060051b60200190565b5f82601f830112614c61575f5ffd5b8135614c74614c6f82614c30565b614c00565b8082825260208201915060208360051b860101925085831115614c95575f5ffd5b602085015b83811015614cbb578035614cad81614a60565b835260209283019201614c9a565b5095945050505050565b5f82601f830112614cd4575f5ffd5b8135614ce2614c6f82614c30565b8082825260208201915060208360051b860101925085831115614d03575f5ffd5b602085015b83811015614cbb578035835260209283019201614d08565b5f5f5f60608486031215614d32575f5ffd5b8335614d3d81614a60565b925060208401356001600160401b03811115614d57575f5ffd5b614d6386828701614c52565b92505060408401356001600160401b03811115614d7e575f5ffd5b614d8a86828701614cc5565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614dc4578151865260209586019590910190600101614da6565b5093949350505050565b602081525f610c9c6020830184614d94565b803563ffffffff81168114611fd8575f5ffd5b5f5f83601f840112614e03575f5ffd5b5081356001600160401b03811115614e19575f5ffd5b602083019150836020828501011115611ead575f5ffd5b5f5f5f5f60608587031215614e43575f5ffd5b8435614e4e81614a60565b9350614e5c60208601614de0565b925060408501356001600160401b03811115614e76575f5ffd5b614e8287828801614df3565b95989497509550505050565b5f5f5f5f60808587031215614ea1575f5ffd5b8435614eac81614a60565b93506020850135614ebc81614a60565b93969395505050506040820135916060013590565b5f60208284031215614ee1575f5ffd5b8135610c9c81614a60565b5f5f60408385031215614efd575f5ffd5b8235614f0881614a60565b91506020830135614f1881614a60565b809150509250929050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c9c6020830184614f23565b5f60e08284031215614f73575f5ffd5b614f7b614bb6565b9050614f8682614a74565b8152614f9460208301614a74565b6020820152614fa560408301614a74565b604082015260608281013590820152614fc060808301614de0565b608082015260a08201356001600160401b03811115614fdd575f5ffd5b614fe984828501614c52565b60a08301525060c08201356001600160401b03811115615007575f5ffd5b61501384828501614cc5565b60c08301525092915050565b5f6020828403121561502f575f5ffd5b81356001600160401b03811115615044575f5ffd5b61188884828501614f63565b5f60208284031215615060575f5ffd5b813560ff81168114610c9c575f5ffd5b6001600160401b03811681146123d9575f5ffd5b5f5f5f5f5f5f86880360e081121561509a575f5ffd5b87356150a581614a60565b96506040601f19820112156150b8575f5ffd5b506020870194506060870135935060808701356150d481614a60565b925060a08701356150e481615070565b915060c08701356150f481615070565b809150509295509295509295565b5f8151808452602084019350602083015f5b82811015614dc45781516001600160a01b0316865260209586019590910190600101615114565b80516001600160a01b03908116835260208083015182169084015260408083015190911690830152606080820151908301526080808201515f916151869085018263ffffffff169052565b5060a082015160e060a08501526151a060e0850182615102565b905060c083015184820360c086015261409d8282614d94565b604081525f6151cb604083018561513b565b828103602084015261409d8185614d94565b5f82825180855260208501945060208160051b830101602085015f5b8381101561421c57601f19858403018852615215838351614d94565b60209889019890935091909101906001016151f9565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b8281101561528257605f1987860301845261526d85835161513b565b94506020938401939190910190600101615251565b50505050828103602084015261409d81856151dd565b5f5f5f606084860312156152aa575f5ffd5b83356152b581614a60565b92506020840135915060408401356152cc81615070565b809150509250925092565b604081525f6151cb6040830185615102565b5f5f5f604084860312156152fb575f5ffd5b833561530681614a60565b925060208401356001600160401b03811115615320575f5ffd5b61532c86828701614df3565b9497909650939450505050565b5f5f6040838503121561534a575f5ffd5b823561535581614a60565b915060208301356001600160401b0381111561536f575f5ffd5b61537b85828601614c52565b9150509250929050565b5f5f5f5f5f5f6060878903121561539a575f5ffd5b86356001600160401b038111156153af575f5ffd5b6153bb89828a01614ad6565b90975095505060208701356001600160401b038111156153d9575f5ffd5b6153e589828a01614ad6565b90955093505060408701356001600160401b03811115615403575f5ffd5b61540f89828a01614ad6565b979a9699509497509295939492505050565b602081525f610c9c602083018461513b565b5f5f5f60608486031215615445575f5ffd5b833561545081614a60565b925060208401356001600160401b0381111561546a575f5ffd5b84016040818703121561547b575f5ffd5b615483614bde565b81356001600160401b03811115615498575f5ffd5b8201601f810188136154a8575f5ffd5b80356001600160401b038111156154c1576154c1614ba2565b6154d4601f8201601f1916602001614c00565b8181528960208385010111156154e8575f5ffd5b816020840160208301375f60209282018301528352928301359282019290925293969395505050506040919091013590565b5f5f6040838503121561552b575f5ffd5b823561553681614a60565b946020939093013593505050565b604081525f6151cb6040830185614d94565b80151581146123d9575f5ffd5b5f5f5f5f60608587031215615576575f5ffd5b84356001600160401b0381111561558b575f5ffd5b850160e0818803121561559c575f5ffd5b935060208501356001600160401b038111156155b6575f5ffd5b6155c287828801614ad6565b90945092505060408501356155d681615556565b939692955090935050565b5f5f604083850312156155f2575f5ffd5b82356001600160401b03811115615607575f5ffd5b8301601f81018513615617575f5ffd5b8035615625614c6f82614c30565b8082825260208201915060208360051b850101925087831115615646575f5ffd5b6020840193505b8284101561567157833561566081614a60565b82526020938401939091019061564d565b945050505060208301356001600160401b0381111561536f575f5ffd5b602081525f610c9c60208301846151dd565b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126156c8575f5ffd5b9190910192915050565b5f5f8335601e198436030181126156e7575f5ffd5b8301803591506001600160401b03821115615700575f5ffd5b6020019150600581901b3603821315611ead575f5ffd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60208284031215615755575f5ffd5b8151610c9c81615070565b634e487b7160e01b5f52601160045260245ffd5b808201808211156117e0576117e0615760565b60a08101853561579681614a60565b6001600160a01b0316825263ffffffff6157b260208801614de0565b16602083015260408201949094526001600160a01b03929092166060830152608090910152919050565b5f82601f8301126157eb575f5ffd5b81516157f9614c6f82614c30565b8082825260208201915060208360051b86010192508583111561581a575f5ffd5b602085015b83811015614cbb57805183526020928301920161581f565b5f5f60408385031215615848575f5ffd5b82516001600160401b0381111561585d575f5ffd5b8301601f8101851361586d575f5ffd5b805161587b614c6f82614c30565b8082825260208201915060208360051b85010192508783111561589c575f5ffd5b6020840193505b828410156158c75783516158b681614a60565b8252602093840193909101906158a3565b8095505050505060208301516001600160401b038111156158e6575f5ffd5b61537b858286016157dc565b5f60208284031215615902575f5ffd5b5051919050565b5f823560de198336030181126156c8575f5ffd5b5f6117e03683614f63565b5f60208284031215615938575f5ffd5b8135610c9c81615556565b6001600160a01b03831681526040602082018190525f9061188890830184615102565b5f60208284031215615976575f5ffd5b81516001600160401b0381111561598b575f5ffd5b8201601f8101841361599b575f5ffd5b80516159a9614c6f82614c30565b8082825260208201915060208360051b8501019250868311156159ca575f5ffd5b6020840193505b8284101561088d5783516159e481615070565b8252602093840193909101906159d1565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60018201615a2a57615a2a615760565b5060010190565b838152606060208201525f615a49606083018561513b565b828103604084015261088d8185614d94565b5f60208284031215615a6b575f5ffd5b8151610c9c81615556565b818103818111156117e0576117e0615760565b63ffffffff82811682821603908111156117e0576117e0615760565b63ffffffff81811683821601908111156117e0576117e0615760565b5f5f60408385031215615ad2575f5ffd5b505080516020909101519092909150565b5f60208284031215615af3575f5ffd5b8151610c9c81614a60565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b6001600160401b0382811682821603908111156117e0576117e0615760565b6001600160a01b03841681526060602082018190525f90615b6890830185615102565b905063ffffffff83166040830152949350505050565b634e487b7160e01b5f52603160045260245ffd5b828152604060208201525f6118886040830184614f23565b5f82518060208501845e5f920191825250919050565b5f82615bda57634e487b7160e01b5f52601260045260245ffd5b50049056fea2646970667358221220a9eb7922fcc5d3342ff9b5ab7a8bf23e57a11428d7ebabb9151464adde75010f64736f6c634300081c003300000000000000000000", "storage": { "0x0000000000000000000000000000000000000000000000000000000000000000": "0x00000000000000000000000000000000000000000000000000000000000000ff" } diff --git a/contracts/script/deploy/Config.sol b/contracts/script/deploy/Config.sol index 4d076407..e3a84b99 100644 --- a/contracts/script/deploy/Config.sol +++ b/contracts/script/deploy/Config.sol @@ -18,7 +18,7 @@ contract Config { // AVS parameters struct AVSConfig { address avsOwner; - address rewardsInitiator; + address snowbridgeInitiator; address[] validatorsStrategies; address validatorSetSubmitter; } diff --git a/contracts/script/deploy/DeployBase.s.sol b/contracts/script/deploy/DeployBase.s.sol index 27f0d6fd..a43a06e8 100644 --- a/contracts/script/deploy/DeployBase.s.sol +++ b/contracts/script/deploy/DeployBase.s.sol @@ -44,7 +44,7 @@ import {ValidatorsUtils} from "../../script/utils/ValidatorsUtils.sol"; // Shared structs struct ServiceManagerInitParams { address avsOwner; - address rewardsInitiator; + address snowbridgeInitiator; IRewardsCoordinatorTypes.StrategyAndMultiplier[] validatorsStrategiesAndMultipliers; address gateway; address validatorSetSubmitter; @@ -271,7 +271,7 @@ abstract contract DeployBase is Script, DeployParams, Accounts { // Create service manager initialisation parameters struct ServiceManagerInitParams memory initParams = ServiceManagerInitParams({ avsOwner: avsConfig.avsOwner, - rewardsInitiator: agentAddress, + snowbridgeInitiator: agentAddress, validatorsStrategiesAndMultipliers: strategiesAndMultipliers, gateway: address(gateway), validatorSetSubmitter: avsConfig.validatorSetSubmitter, diff --git a/contracts/script/deploy/DeployLive.s.sol b/contracts/script/deploy/DeployLive.s.sol index 6530a6c9..0a4aa93f 100644 --- a/contracts/script/deploy/DeployLive.s.sol +++ b/contracts/script/deploy/DeployLive.s.sol @@ -124,7 +124,7 @@ contract DeployLive is DeployBase { bytes memory initData = abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, params.avsOwner, - params.rewardsInitiator, + params.snowbridgeInitiator, params.validatorsStrategiesAndMultipliers, params.gateway, params.validatorSetSubmitter, diff --git a/contracts/script/deploy/DeployLocal.s.sol b/contracts/script/deploy/DeployLocal.s.sol index 4c41cb0e..12e8dbf0 100644 --- a/contracts/script/deploy/DeployLocal.s.sol +++ b/contracts/script/deploy/DeployLocal.s.sol @@ -205,7 +205,7 @@ contract DeployLocal is DeployBase { bytes memory initData = abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, params.avsOwner, - params.rewardsInitiator, + params.snowbridgeInitiator, params.validatorsStrategiesAndMultipliers, params.gateway, params.validatorSetSubmitter, diff --git a/contracts/script/deploy/DeployParams.s.sol b/contracts/script/deploy/DeployParams.s.sol index c77f99b9..725ab0a2 100644 --- a/contracts/script/deploy/DeployParams.s.sol +++ b/contracts/script/deploy/DeployParams.s.sol @@ -74,7 +74,7 @@ contract DeployParams is Script, Config { } else { config.avsOwner = vm.parseJsonAddress(configJson, ".avs.avsOwner"); } - config.rewardsInitiator = vm.parseJsonAddress(configJson, ".avs.rewardsInitiator"); + config.snowbridgeInitiator = vm.parseJsonAddress(configJson, ".avs.snowbridgeInitiator"); config.validatorsStrategies = vm.parseJsonAddressArray(configJson, ".avs.validatorsStrategies"); diff --git a/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol b/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol index ffaa0018..4c1ec0ab 100644 --- a/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol +++ b/contracts/script/fixtures/DataHavenServiceManagerBadLayout.sol @@ -12,7 +12,7 @@ contract DataHavenServiceManagerBadLayout is OwnableUpgradeable { uint256 public layoutBreaker; // Original variables (shifted by one slot) - address public rewardsInitiator; + address public snowbridgeInitiator; mapping(address => bool) public validatorsAllowlist; IGatewayV2 private _snowbridgeGateway; mapping(address => address) public validatorEthAddressToSolochainAddress; diff --git a/contracts/src/DataHavenServiceManager.sol b/contracts/src/DataHavenServiceManager.sol index 9876a697..20c1f5fc 100644 --- a/contracts/src/DataHavenServiceManager.sol +++ b/contracts/src/DataHavenServiceManager.sol @@ -58,7 +58,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave // ============ State Variables ============ /// @notice The address authorized to initiate rewards submissions - address public rewardsInitiator; + address public snowbridgeInitiator; /// @inheritdoc IDataHavenServiceManager mapping(address => bool) public validatorsAllowlist; @@ -93,8 +93,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave // ============ Modifiers ============ /// @notice Restricts function to the rewards initiator - modifier onlyRewardsInitiator() { - _checkRewardsInitiator(); + modifier onlySnowbridgeInitiator() { + _checkSnowbridgeInitiator(); _; } @@ -132,14 +132,13 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave require(msg.sender == proxyAdmin, NotProxyAdmin()); } - function _checkRewardsInitiator() internal view { - require(msg.sender == rewardsInitiator, OnlyRewardsInitiator()); + function _checkSnowbridgeInitiator() internal view { + require(msg.sender == snowbridgeInitiator, OnlyRewardsInitiator()); } function _checkValidator() internal view { - OperatorSet memory operatorSet = OperatorSet({avs: address(this), id: VALIDATORS_SET_ID}); require( - _ALLOCATION_MANAGER.isMemberOfOperatorSet(msg.sender, operatorSet), + _ALLOCATION_MANAGER.isMemberOfOperatorSet(msg.sender, _validatorsOperatorSet()), CallerIsNotValidator() ); } @@ -169,21 +168,21 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave /// @inheritdoc IDataHavenServiceManager function initialize( address initialOwner, - address _rewardsInitiator, + address _snowbridgeInitiator, IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory validatorsStrategiesAndMultipliers, address _snowbridgeGatewayAddress, address _validatorSetSubmitter, string memory initialVersion ) public virtual initializer { require(initialOwner != address(0), ZeroAddress()); - require(_rewardsInitiator != address(0), ZeroAddress()); + require(_snowbridgeInitiator != address(0), ZeroAddress()); require(_snowbridgeGatewayAddress != address(0), ZeroAddress()); require(bytes(initialVersion).length > 0, EmptyVersion()); __Ownable_init(); _transferOwnership(initialOwner); - rewardsInitiator = _rewardsInitiator; - emit RewardsInitiatorSet(address(0), _rewardsInitiator); + snowbridgeInitiator = _snowbridgeInitiator; + emit SnowbridgeInitiatorSet(address(0), _snowbridgeInitiator); // Set version from parameter (allows flexibility per deployment environment) _version = initialVersion; @@ -340,7 +339,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave address oldSolochainAddress = validatorEthAddressToSolochainAddress[msg.sender]; require(oldSolochainAddress != solochainAddress, SolochainAddressAlreadyAssigned()); - address existingEthOperator = validatorSolochainAddressToEthAddress[solochainAddress]; + address existingEthOperator = _consumeExpiredSolochainMapping(solochainAddress); require(existingEthOperator == address(0), SolochainAddressAlreadyAssigned()); delete validatorSolochainAddressToEthAddress[oldSolochainAddress]; @@ -383,10 +382,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave ); address solochainAddress = _toAddress(data); - require( - validatorSolochainAddressToEthAddress[solochainAddress] == address(0), - SolochainAddressAlreadyAssigned() - ); + address existingEthOperator = _consumeExpiredSolochainMapping(solochainAddress); + require(existingEthOperator == address(0), SolochainAddressAlreadyAssigned()); validatorEthAddressToSolochainAddress[operator] = solochainAddress; validatorSolochainAddressToEthAddress[solochainAddress] = operator; @@ -407,9 +404,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave validatorEthAddressToSolochainAddress[operator] != address(0), OperatorNotRegistered() ); - address oldSolochainAddress = validatorEthAddressToSolochainAddress[operator]; delete validatorEthAddressToSolochainAddress[operator]; - delete validatorSolochainAddressToEthAddress[oldSolochainAddress]; emit OperatorDeregistered(operator, operatorSetIds[0]); } @@ -437,6 +432,13 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave address validator ) external onlyOwner { validatorsAllowlist[validator] = false; + + if (validatorEthAddressToSolochainAddress[validator] != address(0)) { + uint32[] memory operatorSetIds = new uint32[](1); + operatorSetIds[0] = VALIDATORS_SET_ID; + _deregisterOperatorFromOperatorSets(validator, operatorSetIds); + } + emit ValidatorRemovedFromAllowlist(validator); } @@ -526,7 +528,7 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave function submitRewards( uint32 eraIndex, IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission calldata submission - ) external override onlyRewardsInitiator { + ) external override onlySnowbridgeInitiator { IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission memory translatedSubmission = submission; @@ -536,9 +538,8 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave uint256 totalAmount = 0; uint256 resolvedCount = 0; for (uint256 i = 0; i < len; i++) { - address ethOp = validatorSolochainAddressToEthAddress[ - translatedSubmission.operatorRewards[i].operator - ]; + address ethOp = + _resolveSlashableEthOperator(translatedSubmission.operatorRewards[i].operator); if (ethOp == address(0)) continue; translated[resolvedCount] = translatedSubmission.operatorRewards[i]; translated[resolvedCount].operator = ethOp; @@ -556,7 +557,17 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave if (resolvedCount == 0) return; - _sortOperatorRewards(translatedSubmission.operatorRewards); + uint256 uniqueCount = _sortAndMergeDuplicateOperators(translatedSubmission.operatorRewards); + + // Shrink the array to the unique count if duplicates were merged + if (uniqueCount < translatedSubmission.operatorRewards.length) { + IRewardsCoordinatorTypes.OperatorReward[] memory trimmed = + new IRewardsCoordinatorTypes.OperatorReward[](uniqueCount); + for (uint256 i = 0; i < uniqueCount; i++) { + trimmed[i] = translatedSubmission.operatorRewards[i]; + } + translatedSubmission.operatorRewards = trimmed; + } address token = address(submission.token); require( @@ -577,13 +588,13 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave } /// @inheritdoc IDataHavenServiceManager - function setRewardsInitiator( - address newRewardsInitiator + function setSnowbridgeInitiator( + address newSnowbridgeInitiator ) external override onlyOwner { - require(newRewardsInitiator != address(0), ZeroAddress()); - address oldInitiator = rewardsInitiator; - rewardsInitiator = newRewardsInitiator; - emit RewardsInitiatorSet(oldInitiator, newRewardsInitiator); + require(newSnowbridgeInitiator != address(0), ZeroAddress()); + address oldInitiator = snowbridgeInitiator; + snowbridgeInitiator = newSnowbridgeInitiator; + emit SnowbridgeInitiatorSet(oldInitiator, newSnowbridgeInitiator); } // ============ AVS Management Functions ============ @@ -600,6 +611,13 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave address operator, uint32[] calldata operatorSetIds ) external onlyOwner { + _deregisterOperatorFromOperatorSets(operator, operatorSetIds); + } + + function _deregisterOperatorFromOperatorSets( + address operator, + uint32[] memory operatorSetIds + ) internal { IAllocationManagerTypes.DeregisterParams memory params = IAllocationManagerTypes.DeregisterParams({ operator: operator, avs: address(this), operatorSetIds: operatorSetIds @@ -615,9 +633,9 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave */ function slashValidatorsOperator( SlashingRequest[] calldata slashings - ) external onlyRewardsInitiator { + ) external onlySnowbridgeInitiator { for (uint256 i = 0; i < slashings.length; i++) { - address ethOperator = validatorSolochainAddressToEthAddress[slashings[i].operator]; + address ethOperator = _resolveSlashableEthOperator(slashings[i].operator); if (ethOperator == address(0)) continue; IAllocationManagerTypes.SlashingParams memory slashingParams = IAllocationManagerTypes.SlashingParams({ @@ -653,14 +671,20 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave // ============ Internal Functions ============ /** - * @notice Sorts operator rewards array by operator address in ascending order using insertion sort - * @dev Insertion sort is optimal for small arrays (validator set capped at 32) - * @param rewards The operator rewards array to sort in-place + * @notice Sorts operator rewards by address and merges consecutive duplicates + * @dev After solochain→ETH address translation, multiple solochain addresses may map to the + * same ETH operator (e.g. operator deregistered and re-registered with a new solochain + * address within the same reward window). EigenLayer's RewardsCoordinator requires + * strictly ascending unique operators, so duplicates must be merged. + * @param rewards The operator rewards array to sort and merge in-place + * @return uniqueCount The number of unique operators after merging */ - function _sortOperatorRewards( + function _sortAndMergeDuplicateOperators( IRewardsCoordinatorTypes.OperatorReward[] memory rewards - ) private pure { + ) private pure returns (uint256) { uint256 len = rewards.length; + + // Insertion sort (optimal for small arrays; validator set capped at 32) for (uint256 i = 1; i < len; i++) { IRewardsCoordinatorTypes.OperatorReward memory key = rewards[i]; uint256 j = i; @@ -670,6 +694,19 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave } rewards[j] = key; } + + // Merge consecutive duplicates + if (len <= 1) return len; + uint256 write = 0; + for (uint256 read = 1; read < len; read++) { + if (rewards[read].operator == rewards[write].operator) { + rewards[write].amount += rewards[read].amount; + } else { + write++; + rewards[write] = rewards[read]; + } + } + return write + 1; } /** @@ -707,4 +744,32 @@ contract DataHavenServiceManager is OwnableUpgradeable, IAVSRegistrar, IDataHave } return opA < opB; } + + function _validatorsOperatorSet() internal view returns (OperatorSet memory) { + return OperatorSet({avs: address(this), id: VALIDATORS_SET_ID}); + } + + function _resolveSlashableEthOperator( + address solochainAddress + ) internal view returns (address) { + address ethOperator = validatorSolochainAddressToEthAddress[solochainAddress]; + if (ethOperator == address(0)) return address(0); + if (!_ALLOCATION_MANAGER.isOperatorSlashable(ethOperator, _validatorsOperatorSet())) { + return address(0); + } + return ethOperator; + } + + function _consumeExpiredSolochainMapping( + address solochainAddress + ) internal returns (address) { + address existingEthOperator = validatorSolochainAddressToEthAddress[solochainAddress]; + if (existingEthOperator == address(0)) return address(0); + if (_ALLOCATION_MANAGER.isOperatorSlashable(existingEthOperator, _validatorsOperatorSet())) + { + return existingEthOperator; + } + delete validatorSolochainAddressToEthAddress[solochainAddress]; + return address(0); + } } diff --git a/contracts/src/interfaces/IDataHavenServiceManager.sol b/contracts/src/interfaces/IDataHavenServiceManager.sol index b999262a..23d14bab 100644 --- a/contracts/src/interfaces/IDataHavenServiceManager.sol +++ b/contracts/src/interfaces/IDataHavenServiceManager.sol @@ -94,10 +94,10 @@ interface IDataHavenServiceManagerEvents { /// @param operatorCount The number of operators that received rewards event RewardsSubmitted(uint256 totalAmount, uint256 operatorCount); - /// @notice Emitted when the rewards initiator address is updated - /// @param oldInitiator The previous rewards initiator address - /// @param newInitiator The new rewards initiator address - event RewardsInitiatorSet(address indexed oldInitiator, address indexed newInitiator); + /// @notice Emitted when the snowbridge initiator address is updated + /// @param oldInitiator The previous snowbridge initiator address + /// @param newInitiator The new snowbridge initiator address + event SnowbridgeInitiatorSet(address indexed oldInitiator, address indexed newInitiator); /// @notice Emitted when a validator updates their solochain address /// @param validator Address of the validator @@ -202,7 +202,7 @@ interface IDataHavenServiceManager is /** * @notice Initializes the DataHaven Service Manager * @param initialOwner Address of the initial owner (AVS owner) - * @param rewardsInitiator Address authorized to initiate rewards + * @param snowbridgeInitiator Address authorized to initiate rewards * @param validatorsStrategiesAndMultipliers Array of strategy-multiplier pairs for the validators * operator set. Each multiplier must be non-zero. * @param _snowbridgeGatewayAddress Address of the Snowbridge Gateway @@ -211,7 +211,7 @@ interface IDataHavenServiceManager is */ function initialize( address initialOwner, - address rewardsInitiator, + address snowbridgeInitiator, IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory validatorsStrategiesAndMultipliers, address _snowbridgeGatewayAddress, address _validatorSetSubmitter, @@ -274,8 +274,10 @@ interface IDataHavenServiceManager is ) external; /** - * @notice Removes a validator from the allowlist + * @notice Removes a validator from the allowlist and revokes its active validator membership * @param validator Address of the validator to remove + * @dev If the validator is currently registered in the validators operator set, + * this also force-deregisters it from EigenLayer for `VALIDATORS_SET_ID`. */ function removeValidatorFromAllowlist( address validator @@ -359,11 +361,11 @@ interface IDataHavenServiceManager is ) external; /** - * @notice Set the rewards initiator address authorized to submit rewards - * @param initiator The address of the rewards initiator (Snowbridge Agent) + * @notice Set the snowbridge initiator address authorized to submit rewards + * @param initiator The address of the snowbridge initiator (Snowbridge Agent) * @dev Only callable by the owner */ - function setRewardsInitiator( + function setSnowbridgeInitiator( address initiator ) external; diff --git a/contracts/storage-snapshots/DataHavenServiceManager.storage.json b/contracts/storage-snapshots/DataHavenServiceManager.storage.json index 9a1c8d71..af8653a0 100644 --- a/contracts/storage-snapshots/DataHavenServiceManager.storage.json +++ b/contracts/storage-snapshots/DataHavenServiceManager.storage.json @@ -43,7 +43,7 @@ { "astId": 23887, "contract": "src/DataHavenServiceManager.sol:DataHavenServiceManager", - "label": "rewardsInitiator", + "label": "snowbridgeInitiator", "offset": 0, "slot": "101", "type": "t_address" diff --git a/contracts/test/OperatorAddressMappings.t.sol b/contracts/test/OperatorAddressMappings.t.sol index 6600c3f5..cb5a7f44 100644 --- a/contracts/test/OperatorAddressMappings.t.sol +++ b/contracts/test/OperatorAddressMappings.t.sol @@ -6,6 +6,7 @@ import {DataHavenServiceManager} from "../src/DataHavenServiceManager.sol"; import { IAllocationManagerTypes } from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; +import {OperatorSet} from "eigenlayer-contracts/src/contracts/libraries/OperatorSetLib.sol"; import {Test} from "forge-std/Test.sol"; contract OperatorAddressMappingsTest is AVSDeployer { @@ -20,7 +21,7 @@ contract OperatorAddressMappingsTest is AVSDeployer { // Configure the rewards initiator (not strictly needed for these tests, // but keeps setup consistent with other suites). vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); } function _registerOperator( @@ -158,8 +159,8 @@ contract OperatorAddressMappingsTest is AVSDeployer { ); assertEq( serviceManager.validatorSolochainAddressToEthAddress(solo1), - address(0), - "reverse mapping should be cleared" + operator1, + "reverse mapping should remain slashable until deallocation delay passes" ); } @@ -172,6 +173,107 @@ contract OperatorAddressMappingsTest is AVSDeployer { serviceManager.deregisterOperator(operator1, address(serviceManager), operatorSetIds); } + function test_removeValidatorFromAllowlist_deregistersRegisteredOperator() public { + address solo1 = address(0xBEEF); + _registerOperator(operator1, solo1); + + assertEq( + serviceManager.validatorEthAddressToSolochainAddress(operator1), + solo1, + "forward mapping should be set before removal" + ); + assertTrue( + serviceManager.validatorsAllowlist(operator1), "operator should start allowlisted" + ); + assertTrue( + allocationManager.isMemberOfOperatorSet( + operator1, + OperatorSet({avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID()}) + ), + "operator should start in validator set" + ); + + vm.prank(avsOwner); + serviceManager.removeValidatorFromAllowlist(operator1); + + assertFalse( + serviceManager.validatorsAllowlist(operator1), + "operator should be removed from allowlist" + ); + assertFalse( + allocationManager.isMemberOfOperatorSet( + operator1, + OperatorSet({avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID()}) + ), + "operator should be removed from validator set" + ); + assertEq( + serviceManager.validatorEthAddressToSolochainAddress(operator1), + address(0), + "forward mapping should be cleared" + ); + assertEq( + serviceManager.validatorSolochainAddressToEthAddress(solo1), + operator1, + "reverse mapping should remain slashable until deallocation delay passes" + ); + } + + function test_removeValidatorFromAllowlist_succeedsForUnregisteredValidator() public { + vm.prank(avsOwner); + serviceManager.addValidatorToAllowlist(operator1); + + assertTrue( + serviceManager.validatorsAllowlist(operator1), "operator should start allowlisted" + ); + + vm.prank(avsOwner); + serviceManager.removeValidatorFromAllowlist(operator1); + + assertFalse( + serviceManager.validatorsAllowlist(operator1), + "operator should be removed from allowlist" + ); + assertEq( + serviceManager.validatorEthAddressToSolochainAddress(operator1), + address(0), + "forward mapping should remain empty" + ); + } + + function test_registerOperator_reclaimsExpiredSolochainMapping() public { + address solo1 = address(0xBEEF); + _registerOperator(operator1, solo1); + + vm.prank(avsOwner); + serviceManager.removeValidatorFromAllowlist(operator1); + + vm.roll(block.number + uint32(7 days) + 1); + + vm.prank(avsOwner); + serviceManager.addValidatorToAllowlist(operator2); + vm.prank(operator2); + delegationManager.registerAsOperator(address(0), 0, ""); + + uint32[] memory operatorSetIds = new uint32[](1); + operatorSetIds[0] = serviceManager.VALIDATORS_SET_ID(); + IAllocationManagerTypes.RegisterParams memory registerParams = + IAllocationManagerTypes.RegisterParams({ + avs: address(serviceManager), + operatorSetIds: operatorSetIds, + data: abi.encodePacked(solo1) + }); + + vm.prank(operator2); + allocationManager.registerForOperatorSets(operator2, registerParams); + + assertEq( + serviceManager.validatorSolochainAddressToEthAddress(solo1), + operator2, + "expired reverse mapping should be reclaimed by the new operator" + ); + } + function test_updateSolochainAddressForValidator_revertsIfSameAddress() public { address solo1 = address(0xBEEF); diff --git a/contracts/test/RewardsSubmitter.t.sol b/contracts/test/RewardsSubmitter.t.sol index b4bfc19f..efc881e6 100644 --- a/contracts/test/RewardsSubmitter.t.sol +++ b/contracts/test/RewardsSubmitter.t.sol @@ -14,12 +14,14 @@ import { } from "eigenlayer-contracts/src/contracts/interfaces/IAllocationManager.sol"; import {OperatorSet} from "eigenlayer-contracts/src/contracts/libraries/OperatorSetLib.sol"; +import {StdStorage, stdStorage} from "forge-std/StdStorage.sol"; import {AVSDeployer} from "./utils/AVSDeployer.sol"; import {ERC20FixedSupply} from "./utils/ERC20FixedSupply.sol"; import {IDataHavenServiceManagerEvents} from "../src/interfaces/IDataHavenServiceManager.sol"; contract RewardsSubmitterTest is AVSDeployer { using SafeERC20 for IERC20; + using stdStorage for StdStorage; // Test addresses address public snowbridgeAgent = address(uint160(uint256(keccak256("snowbridgeAgent")))); @@ -40,7 +42,7 @@ contract RewardsSubmitterTest is AVSDeployer { // Configure the rewards initiator vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); // Fund the service manager with reward tokens IERC20(address(rewardToken)).safeTransfer(address(serviceManager), 100000e18); @@ -106,21 +108,21 @@ contract RewardsSubmitterTest is AVSDeployer { // ============ Configuration Tests ============ - function test_setRewardsInitiator() public { + function test_setSnowbridgeInitiator() public { address newInitiator = address(0x123); vm.prank(avsOwner); vm.expectEmit(true, true, false, false); - emit IDataHavenServiceManagerEvents.RewardsInitiatorSet(snowbridgeAgent, newInitiator); - serviceManager.setRewardsInitiator(newInitiator); + emit IDataHavenServiceManagerEvents.SnowbridgeInitiatorSet(snowbridgeAgent, newInitiator); + serviceManager.setSnowbridgeInitiator(newInitiator); - assertEq(serviceManager.rewardsInitiator(), newInitiator); + assertEq(serviceManager.snowbridgeInitiator(), newInitiator); } - function test_setRewardsInitiator_revertsIfNotOwner() public { + function test_setSnowbridgeInitiator_revertsIfNotOwner() public { vm.prank(operator1); vm.expectRevert(bytes("Ownable: caller is not the owner")); - serviceManager.setRewardsInitiator(address(0x123)); + serviceManager.setSnowbridgeInitiator(address(0x123)); } // ============ Access Control Tests ============ @@ -407,6 +409,137 @@ contract RewardsSubmitterTest is AVSDeployer { serviceManager.submitRewards(_eraIndexForStart(submission.startTimestamp), submission); } + function test_submitRewards_afterAllowlistRemovalStillTranslatesDuringDeallocationDelay() + public + { + address solochainOperator = address(0xBEEF); + _registerOperator(operator1, solochainOperator); + + vm.prank(avsOwner); + serviceManager.removeValidatorFromAllowlist(operator1); + + uint256 rewardAmount = 1000e18; + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission memory submission = + _buildSubmission(rewardAmount, solochainOperator); + + vm.warp(submission.startTimestamp + submission.duration + 1); + + IRewardsCoordinatorTypes.OperatorReward[] memory expectedOperatorRewards = + new IRewardsCoordinatorTypes.OperatorReward[](1); + expectedOperatorRewards[0] = + IRewardsCoordinatorTypes.OperatorReward({operator: operator1, amount: rewardAmount}); + + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission memory expectedSubmission = + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission({ + strategiesAndMultipliers: submission.strategiesAndMultipliers, + token: submission.token, + operatorRewards: expectedOperatorRewards, + startTimestamp: submission.startTimestamp, + duration: submission.duration, + description: submission.description + }); + + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[] memory submissions = + new IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[](1); + submissions[0] = expectedSubmission; + + OperatorSet memory operatorSet = + OperatorSet({avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID()}); + vm.expectCall( + address(rewardsCoordinator), + abi.encodeCall( + IRewardsCoordinator.createOperatorDirectedOperatorSetRewardsSubmission, + (operatorSet, submissions) + ) + ); + + vm.prank(snowbridgeAgent); + serviceManager.submitRewards(_eraIndexForStart(submission.startTimestamp), submission); + } + + function test_submitRewards_mergesDuplicateTranslatedOperators() public { + // Register operator1 with solochain1 + address solochain1 = address(0xAA01); + address solochain2 = address(0xAA02); + _registerOperator(operator1, solochain1); + + // Simulate the scenario where solochain2 also maps to operator1 + // (e.g. operator deregistered and re-registered with a new solochain address + // within the same reward window, so the pallet accumulated points under both) + stdstore.target(address(serviceManager)) + .sig("validatorSolochainAddressToEthAddress(address)").with_key(solochain2) + .checked_write(operator1); + + // Build submission with two entries for different solochain addresses + // that both map to the same ETH operator + uint256 amount1 = 600e18; + uint256 amount2 = 400e18; + uint256 totalAmount = amount1 + amount2; + + IRewardsCoordinatorTypes.StrategyAndMultiplier[] memory strategiesAndMultipliers = + new IRewardsCoordinatorTypes.StrategyAndMultiplier[](deployedStrategies.length); + for (uint256 i = 0; i < deployedStrategies.length; i++) { + strategiesAndMultipliers[i] = IRewardsCoordinatorTypes.StrategyAndMultiplier({ + strategy: deployedStrategies[i], multiplier: uint96((i + 1) * 1e18) + }); + } + + IRewardsCoordinatorTypes.OperatorReward[] memory operatorRewards = + new IRewardsCoordinatorTypes.OperatorReward[](2); + operatorRewards[0] = + IRewardsCoordinatorTypes.OperatorReward({operator: solochain1, amount: amount1}); + operatorRewards[1] = + IRewardsCoordinatorTypes.OperatorReward({operator: solochain2, amount: amount2}); + + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission memory submission = + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission({ + strategiesAndMultipliers: strategiesAndMultipliers, + token: IERC20(address(rewardToken)), + operatorRewards: operatorRewards, + startTimestamp: GENESIS_REWARDS_TIMESTAMP, + duration: TEST_CALCULATION_INTERVAL, + description: "DataHaven rewards" + }); + + vm.warp(submission.startTimestamp + submission.duration + 1); + + // Expect the RewardsCoordinator to receive a single merged entry + IRewardsCoordinatorTypes.OperatorReward[] memory expectedOperatorRewards = + new IRewardsCoordinatorTypes.OperatorReward[](1); + expectedOperatorRewards[0] = + IRewardsCoordinatorTypes.OperatorReward({operator: operator1, amount: totalAmount}); + + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission memory expectedSubmission = + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission({ + strategiesAndMultipliers: strategiesAndMultipliers, + token: submission.token, + operatorRewards: expectedOperatorRewards, + startTimestamp: submission.startTimestamp, + duration: submission.duration, + description: submission.description + }); + + IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[] memory submissions = + new IRewardsCoordinatorTypes.OperatorDirectedRewardsSubmission[](1); + submissions[0] = expectedSubmission; + + OperatorSet memory operatorSet = + OperatorSet({avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID()}); + vm.expectCall( + address(rewardsCoordinator), + abi.encodeCall( + IRewardsCoordinator.createOperatorDirectedOperatorSetRewardsSubmission, + (operatorSet, submissions) + ) + ); + + // Event should emit with total amount and ORIGINAL operator count (2) + vm.prank(snowbridgeAgent); + vm.expectEmit(false, false, false, true); + emit IDataHavenServiceManagerEvents.RewardsSubmitted(totalAmount, 2); + serviceManager.submitRewards(_eraIndexForStart(submission.startTimestamp), submission); + } + function test_submitRewards_sortsTranslatedOperatorsByAddress() public { (address ethLow, address ethHigh) = operator1 < operator2 ? (operator1, operator2) : (operator2, operator1); diff --git a/contracts/test/Slashing.t.sol b/contracts/test/Slashing.t.sol index 7c73f1dd..1307d19e 100644 --- a/contracts/test/Slashing.t.sol +++ b/contracts/test/Slashing.t.sol @@ -34,7 +34,7 @@ contract SlashingTest is AVSDeployer { // Configure the rewards initiator (because only the reward agent can submit slashing request) vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); vm.prank(operator); delegationManager.registerAsOperator(address(0), 0, ""); @@ -93,7 +93,7 @@ contract SlashingTest is AVSDeployer { // Configure the rewards initiator (because only the reward agent can submit slashing request) vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); vm.prank(operator); delegationManager.registerAsOperator(address(0), 0, ""); @@ -147,7 +147,7 @@ contract SlashingTest is AVSDeployer { function test_fulfilSlashingRequest_skipsUnknownSolochainAddress() public { // Configure the rewards initiator (because only the reward agent can submit slashing request) vm.prank(avsOwner); - serviceManager.setRewardsInitiator(snowbridgeAgent); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); address unknownSolochainOperator = address(0xDEAD); DataHavenServiceManager.SlashingRequest[] memory slashings = @@ -165,4 +165,60 @@ contract SlashingTest is AVSDeployer { emit IDataHavenServiceManagerEvents.SlashingComplete(); serviceManager.slashValidatorsOperator(slashings); } + + function test_fulfilSlashingRequest_afterAllowlistRemovalStillResolvesDuringDeallocationDelay() + public + { + address solochainOperator = address(0xBEEF); + + vm.prank(avsOwner); + serviceManager.addValidatorToAllowlist(operator); + + vm.prank(avsOwner); + serviceManager.setSnowbridgeInitiator(snowbridgeAgent); + + vm.prank(operator); + delegationManager.registerAsOperator(address(0), 0, ""); + + uint32[] memory operatorSetIds = new uint32[](1); + operatorSetIds[0] = serviceManager.VALIDATORS_SET_ID(); + IAllocationManagerTypes.RegisterParams memory registerParams = + IAllocationManagerTypes.RegisterParams({ + avs: address(serviceManager), + operatorSetIds: operatorSetIds, + data: abi.encodePacked(solochainOperator) + }); + + vm.prank(operator); + allocationManager.registerForOperatorSets(operator, registerParams); + + vm.prank(avsOwner); + serviceManager.removeValidatorFromAllowlist(operator); + + DataHavenServiceManager.SlashingRequest[] memory slashings = + new DataHavenServiceManager.SlashingRequest[](1); + uint256[] memory wadsToSlash = new uint256[](3); + wadsToSlash[0] = 1e16; + wadsToSlash[1] = 1e16; + wadsToSlash[2] = 1e16; + + OperatorSet memory operatorSet = + OperatorSet({avs: address(serviceManager), id: serviceManager.VALIDATORS_SET_ID()}); + IStrategy[] memory strategies = allocationManager.getStrategiesInOperatorSet(operatorSet); + + slashings[0] = IDataHavenServiceManager.SlashingRequest( + solochainOperator, strategies, wadsToSlash, "Testing slashing" + ); + + uint256[] memory wadsToSlashed = new uint256[](3); + + vm.prank(snowbridgeAgent); + vm.expectEmit(); + emit IAllocationManagerEvents.OperatorSlashed( + operator, operatorSet, strategies, wadsToSlashed, "Testing slashing" + ); + vm.expectEmit(); + emit IDataHavenServiceManagerEvents.SlashingComplete(); + serviceManager.slashValidatorsOperator(slashings); + } } diff --git a/contracts/test/ValidatorSetSelection.t.sol b/contracts/test/ValidatorSetSelection.t.sol index d58be58c..7a2a3c99 100644 --- a/contracts/test/ValidatorSetSelection.t.sol +++ b/contracts/test/ValidatorSetSelection.t.sol @@ -519,6 +519,33 @@ contract ValidatorSetSelectionTest is SnowbridgeAndAVSDeployer { ); } + function test_removeValidatorFromAllowlist_excludesOperatorFromValidatorSetMessage() public { + _setupMultipliers(_uniformMultipliers()); + + address op1 = vm.addr(601); + address solochain1 = address(uint160(0x4001)); + _registerOperator(op1, solochain1, _uniformStakes(100 ether)); + + address op2 = vm.addr(602); + address solochain2 = address(uint160(0x4002)); + _registerOperator(op2, solochain2, _uniformStakes(200 ether)); + + _advancePastAllocationConfigDelay(); + _allocateForOperator(op1); + _allocateForOperator(op2); + _advancePastAllocationEffect(); + + vm.prank(avsOwner); + serviceManager.removeValidatorFromAllowlist(op2); + + address[] memory expected = new address[](1); + expected[0] = solochain1; + + assertEq( + serviceManager.buildNewValidatorSetMessageForEra(0), _buildExpectedMessage(expected, 0) + ); + } + // Test #6: A zero multiplier is accepted and causes that strategy's stake to contribute // no weight. The operator is still included if other strategies have non-zero multipliers. function test_zeroMultiplier_accepted_contributesNoWeight() public { diff --git a/contracts/test/ValidatorSetSubmitter.t.sol b/contracts/test/ValidatorSetSubmitter.t.sol index 081b9501..218badd6 100644 --- a/contracts/test/ValidatorSetSubmitter.t.sol +++ b/contracts/test/ValidatorSetSubmitter.t.sol @@ -194,7 +194,7 @@ contract ValidatorSetSubmitterTest is SnowbridgeAndAVSDeployer { abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, avsOwner, - rewardsInitiator, + snowbridgeInitiator, emptyStrategies, address(snowbridgeGatewayMock), address(0), diff --git a/contracts/test/storage/StorageLayout.t.sol b/contracts/test/storage/StorageLayout.t.sol index 69a3cd92..c0b4f540 100644 --- a/contracts/test/storage/StorageLayout.t.sol +++ b/contracts/test/storage/StorageLayout.t.sol @@ -20,18 +20,18 @@ contract StorageLayoutTest is AVSDeployer { function test_upgradePreservesState() public { // 1. Populate state address testValidator = address(0x1234); - address newRewardsInitiator = address(0x9999); + address newSnowbridgeInitiator = address(0x9999); address testSubmitter = address(0x5678); vm.startPrank(avsOwner); serviceManager.addValidatorToAllowlist(testValidator); - serviceManager.setRewardsInitiator(newRewardsInitiator); + serviceManager.setSnowbridgeInitiator(newSnowbridgeInitiator); serviceManager.setValidatorSetSubmitter(testSubmitter); vm.stopPrank(); // 2. Record state before upgrade bool allowlistBefore = serviceManager.validatorsAllowlist(testValidator); - address rewardsInitiatorBefore = serviceManager.rewardsInitiator(); + address snowbridgeInitiatorBefore = serviceManager.snowbridgeInitiator(); address ownerBefore = serviceManager.owner(); address gatewayBefore = serviceManager.snowbridgeGateway(); address submitterBefore = serviceManager.validatorSetSubmitter(); @@ -51,9 +51,9 @@ contract StorageLayoutTest is AVSDeployer { "validatorsAllowlist should be preserved" ); assertEq( - serviceManager.rewardsInitiator(), - rewardsInitiatorBefore, - "rewardsInitiator should be preserved" + serviceManager.snowbridgeInitiator(), + snowbridgeInitiatorBefore, + "snowbridgeInitiator should be preserved" ); assertEq(serviceManager.owner(), ownerBefore, "owner should be preserved"); assertEq( diff --git a/contracts/test/utils/AVSDeployer.sol b/contracts/test/utils/AVSDeployer.sol index 007c236e..1678342d 100644 --- a/contracts/test/utils/AVSDeployer.sol +++ b/contracts/test/utils/AVSDeployer.sol @@ -67,7 +67,8 @@ contract AVSDeployer is Test { address public proxyAdminOwner = address(uint160(uint256(keccak256("proxyAdminOwner")))); address public regularDeployer = address(uint160(uint256(keccak256("regularDeployer")))); address public avsOwner = address(uint160(uint256(keccak256("avsOwner")))); - address public rewardsInitiator = address(uint160(uint256(keccak256("rewardsInitiator")))); + address public snowbridgeInitiator = + address(uint160(uint256(keccak256("snowbridgeInitiator")))); address public pauser = address(uint160(uint256(keccak256("pauser")))); address public unpauser = address(uint160(uint256(keccak256("unpauser")))); address public rewardsUpdater = address(uint160(uint256(keccak256("rewardsUpdater")))); @@ -246,7 +247,7 @@ contract AVSDeployer is Test { abi.encodeWithSelector( DataHavenServiceManager.initialize.selector, avsOwner, - rewardsInitiator, + snowbridgeInitiator, defaultStrategyAndMultipliers, address(snowbridgeGatewayMock), avsOwner, diff --git a/operator/Cargo.lock b/operator/Cargo.lock index 586435c3..5ccff712 100644 --- a/operator/Cargo.lock +++ b/operator/Cargo.lock @@ -343,7 +343,7 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb00293ba84f51ce3bd026bd0de55899c4e68f0a39a5728cebae3a73ffdc0a4f" dependencies = [ - "ark-ec", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-std 0.4.0", ] @@ -354,12 +354,24 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c775f0d12169cba7aae4caeb547bb6a50781c7449a8aa53793827c9ec4abf488" dependencies = [ - "ark-ec", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-serialize 0.4.2", "ark-std 0.4.0", ] +[[package]] +name = "ark-bls12-381" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3df4dcc01ff89867cd86b0da835f23c3f02738353aaee7dde7495af71363b8d5" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-ec" version = "0.4.2" @@ -367,7 +379,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defd9a439d56ac24968cca0571f598a61bc8c55f71d50a89cda591cb750670ba" dependencies = [ "ark-ff 0.4.2", - "ark-poly", + "ark-poly 0.4.2", "ark-serialize 0.4.2", "ark-std 0.4.0", "derivative", @@ -377,6 +389,39 @@ dependencies = [ "zeroize", ] +[[package]] +name = "ark-ec" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43d68f2d516162846c1238e755a7c4d131b892b70cc70c471a8e3ca3ed818fce" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", + "itertools 0.13.0", + "num-bigint", + "num-integer", + "num-traits", + "zeroize", +] + +[[package]] +name = "ark-ed-on-bls12-381-bandersnatch" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1786b2e3832f6f0f7c8d62d5d5a282f6952a1ab99981c54cd52b6ac1d8f02df5" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-std 0.5.0", +] + [[package]] name = "ark-ff" version = "0.3.0" @@ -516,6 +561,21 @@ dependencies = [ "hashbrown 0.13.2", ] +[[package]] +name = "ark-poly" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579305839da207f02b89cd1679e50e67b4331e2f9294a57693e5051b7703fe27" +dependencies = [ + "ahash", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "educe", + "fnv", + "hashbrown 0.15.5", +] + [[package]] name = "ark-serialize" version = "0.3.0" @@ -532,7 +592,7 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adb7b85a02b83d2f22f89bd5cac66c9c89474240cb6207cb1efc16d098e822a5" dependencies = [ - "ark-serialize-derive", + "ark-serialize-derive 0.4.2", "ark-std 0.4.0", "digest 0.10.7", "num-bigint", @@ -544,6 +604,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f4d068aaf107ebcd7dfb52bc748f8030e0fc930ac8e360146ca54c1203088f7" dependencies = [ + "ark-serialize-derive 0.5.0", "ark-std 0.5.0", "arrayvec 0.7.6", "digest 0.10.7", @@ -561,6 +622,17 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "ark-serialize-derive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "213888f660fddcca0d257e88e54ac05bca01885f258ccdf695bafd77031bb69d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "ark-std" version = "0.3.0" @@ -591,6 +663,39 @@ dependencies = [ "rand 0.8.5", ] +[[package]] +name = "ark-transcript" +version = "0.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c1c928edb9d8ff24cb5dcb7651d3a98494fff3099eee95c2404cd813a9139f" +dependencies = [ + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_core 0.6.4", + "sha3", +] + +[[package]] +name = "ark-vrf" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d63e9780640021b74d02b32895d8cec1b4abe8e5547b560a6bda6b14b78c6da" +dependencies = [ + "ark-bls12-381 0.5.0", + "ark-ec 0.5.0", + "ark-ed-on-bls12-381-bandersnatch", + "ark-ff 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "digest 0.10.7", + "rand_chacha 0.3.1", + "sha2 0.10.9", + "w3f-ring-proof", + "zeroize", +] + [[package]] name = "array-bytes" version = "6.2.3" @@ -620,12 +725,12 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "asn1-rs" -version = "0.5.2" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7f6fd5ddaf0351dff5b8da21b2fb4ff8e08ddd02857f0bf69c47639106c0fff0" +checksum = "5493c3bedbacf7fd7382c6346bbd66687d12bbaad3a89a2d2c303ee6cf20b048" dependencies = [ - "asn1-rs-derive 0.4.0", - "asn1-rs-impl 0.1.0", + "asn1-rs-derive 0.5.1", + "asn1-rs-impl", "displaydoc", "nom", "num-traits", @@ -641,7 +746,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56624a96882bb8c26d61312ae18cb45868e5a9992ea73c58e45c3101e56a1e60" dependencies = [ "asn1-rs-derive 0.6.0", - "asn1-rs-impl 0.2.0", + "asn1-rs-impl", "displaydoc", "nom", "num-traits", @@ -652,14 +757,14 @@ dependencies = [ [[package]] name = "asn1-rs-derive" -version = "0.4.0" +version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "726535892e8eae7e70657b4c8ea93d26b8553afb1ce617caee529ef96d7dee6c" +checksum = "965c2d33e53cb6b267e148a4cb0760bc01f4904c1cd4bb4002a085bb016d1490" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", - "synstructure 0.12.6", + "syn 2.0.106", + "synstructure 0.13.2", ] [[package]] @@ -674,17 +779,6 @@ dependencies = [ "synstructure 0.13.2", ] -[[package]] -name = "asn1-rs-impl" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2777730b2039ac0f95f093556e61b6d26cebed5393ca6f152717777cec3a42ed" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "asn1-rs-impl" version = "0.2.0" @@ -897,6 +991,19 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "asynchronous-codec" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a860072022177f903e59730004fb5dc13db9275b79bb2aef7ba8ce831956c233" +dependencies = [ + "bytes", + "futures-sink", + "futures-util", + "memchr", + "pin-project-lite", +] + [[package]] name = "atoi" version = "2.0.0" @@ -1068,12 +1175,6 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6107fe1be6682a68940da878d9e9f5e90ca5745b3dec9fd1bb393c8777d4f581" -[[package]] -name = "base64" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" - [[package]] name = "base64" version = "0.21.7" @@ -1104,15 +1205,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "beef" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a8241f3ebb85c056b509d4327ad0358fbbba6ffb340bf388f26350aeda225b1" -dependencies = [ - "serde", -] - [[package]] name = "bigdecimal" version = "0.4.8" @@ -1130,7 +1222,7 @@ dependencies = [ [[package]] name = "binary-merkle-tree" version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hash-db", "log", @@ -1208,7 +1300,7 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "43d193de1f7487df1914d3a568b772458861d33f9c54249612cc2893d6915054" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.13.0", "serde", "unicode-normalization", ] @@ -1234,6 +1326,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" +[[package]] +name = "bitcoin-io" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dee39a0ee5b4095224a0cfc6bf4cc1baf0f9624b96b367e53b66d974e51d953" + [[package]] name = "bitcoin_hashes" version = "0.13.0" @@ -1241,7 +1339,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" dependencies = [ "bitcoin-internals", - "hex-conservative", + "hex-conservative 0.1.2", +] + +[[package]] +name = "bitcoin_hashes" +version = "0.14.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26ec84b80c482df901772e931a9a681e26a1b9ee2302edeff23cb30328745c8b" +dependencies = [ + "bitcoin-io", + "hex-conservative 0.2.2", ] [[package]] @@ -1389,8 +1497,8 @@ dependencies = [ [[package]] name = "bp-header-chain" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-runtime", "finality-grandpa", @@ -1406,8 +1514,8 @@ dependencies = [ [[package]] name = "bp-messages" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-header-chain", "bp-runtime", @@ -1422,8 +1530,8 @@ dependencies = [ [[package]] name = "bp-parachains" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-header-chain", "bp-polkadot-core", @@ -1439,8 +1547,8 @@ dependencies = [ [[package]] name = "bp-polkadot-core" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-messages", "bp-runtime", @@ -1456,8 +1564,8 @@ dependencies = [ [[package]] name = "bp-relayers" -version = "0.19.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bp-header-chain", "bp-messages", @@ -1474,8 +1582,8 @@ dependencies = [ [[package]] name = "bp-runtime" -version = "0.19.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -1492,24 +1600,7 @@ dependencies = [ "sp-state-machine", "sp-std", "sp-trie", - "trie-db 0.29.1", -] - -[[package]] -name = "bridge-hub-common" -version = "0.12.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" -dependencies = [ - "cumulus-primitives-core", - "frame-support", - "pallet-message-queue", - "parity-scale-codec", - "scale-info", - "snowbridge-core 0.12.2", - "sp-core", - "sp-runtime", - "sp-std", - "staging-xcm", + "trie-db 0.30.0", ] [[package]] @@ -1521,7 +1612,25 @@ dependencies = [ "pallet-message-queue", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", + "snowbridge-core 0.30.0", + "sp-core", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + +[[package]] +name = "bridge-hub-common" +version = "0.13.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "cumulus-primitives-core", + "frame-support", + "pallet-message-queue", + "parity-scale-codec", + "scale-info", + "snowbridge-core 0.13.2", "sp-core", "sp-runtime", "sp-std", @@ -1833,7 +1942,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim 0.11.1", + "strsim", "terminal_size", ] @@ -2286,6 +2395,21 @@ dependencies = [ "subtle 2.6.1", ] +[[package]] +name = "crypto_secretbox" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9d6cf87adf719ddf43a805e92c6870a531aedda35ff640442cbaf8674e141e1" +dependencies = [ + "aead", + "cipher 0.4.4", + "generic-array 0.14.7", + "poly1305", + "salsa20", + "subtle 2.6.1", + "zeroize", +] + [[package]] name = "ctr" version = "0.9.2" @@ -2297,8 +2421,8 @@ dependencies = [ [[package]] name = "cumulus-client-parachain-inherent" -version = "0.15.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2307,20 +2431,18 @@ dependencies = [ "cumulus-test-relay-sproof-builder", "parity-scale-codec", "sc-client-api", - "sp-api", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-inherents", "sp-runtime", "sp-state-machine", "sp-storage", - "sp-trie", "tracing", ] [[package]] name = "cumulus-primitives-core" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "polkadot-core-primitives", @@ -2335,8 +2457,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-parachain-inherent" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.18.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "cumulus-primitives-core", @@ -2349,8 +2471,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-proof-size-hostfunction" -version = "0.11.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-externalities", "sp-runtime-interface", @@ -2359,8 +2481,8 @@ dependencies = [ [[package]] name = "cumulus-primitives-storage-weight-reclaim" -version = "9.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "11.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "cumulus-primitives-core", "cumulus-primitives-proof-size-hostfunction", @@ -2376,13 +2498,13 @@ dependencies = [ [[package]] name = "cumulus-relay-chain-interface" -version = "0.21.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.23.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "cumulus-primitives-core", "futures", - "jsonrpsee-core 0.24.9", + "jsonrpsee-core", "parity-scale-codec", "polkadot-overseer", "sc-client-api", @@ -2395,8 +2517,8 @@ dependencies = [ [[package]] name = "cumulus-test-relay-sproof-builder" -version = "0.17.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.19.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "cumulus-primitives-core", "parity-scale-codec", @@ -2496,38 +2618,14 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee" dependencies = [ - "darling_core 0.20.11", - "darling_macro 0.20.11", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim 0.10.0", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -2540,28 +2638,17 @@ dependencies = [ "ident_case", "proc-macro2", "quote", - "strsim 0.11.1", + "strsim", "syn 2.0.106", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead" dependencies = [ - "darling_core 0.20.11", + "darling_core", "quote", "syn 2.0.106", ] @@ -2607,12 +2694,13 @@ dependencies = [ [[package]] name = "datahaven-mainnet-runtime" -version = "0.26.0" +version = "0.30.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", "datahaven-runtime-common", "dhp-bridge", + "ethereum", "fp-account", "fp-evm", "fp-rpc", @@ -2720,11 +2808,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -2733,7 +2821,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives", + "snowbridge-verification-primitives 0.30.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -2748,7 +2836,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-tracing", "sp-transaction-pool", @@ -2764,7 +2851,7 @@ dependencies = [ [[package]] name = "datahaven-node" -version = "0.26.0" +version = "0.30.0" dependencies = [ "async-channel 1.9.0", "clap", @@ -2790,7 +2877,7 @@ dependencies = [ "frame-system-rpc-runtime-api", "futures", "hex-literal 0.3.4", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "mmr-gadget", "mmr-rpc", @@ -2877,7 +2964,7 @@ dependencies = [ [[package]] name = "datahaven-runtime-common" -version = "0.26.0" +version = "0.30.0" dependencies = [ "alloy-core", "fp-account", @@ -2901,22 +2988,22 @@ dependencies = [ "polkadot-runtime-common", "precompile-utils", "scale-info", - "snowbridge-outbound-queue-primitives", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", ] [[package]] name = "datahaven-stagenet-runtime" -version = "0.26.0" +version = "0.30.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", "datahaven-runtime-common", "dhp-bridge", + "ethereum", "fp-account", "fp-evm", "fp-rpc", @@ -3024,11 +3111,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -3037,7 +3124,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives", + "snowbridge-verification-primitives 0.30.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -3052,7 +3139,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-tracing", "sp-transaction-pool", @@ -3068,12 +3154,13 @@ dependencies = [ [[package]] name = "datahaven-testnet-runtime" -version = "0.26.0" +version = "0.30.0" dependencies = [ "alloy-core", "bridge-hub-common 0.13.1", "datahaven-runtime-common", "dhp-bridge", + "ethereum", "fp-account", "fp-evm", "fp-rpc", @@ -3181,11 +3268,11 @@ dependencies = [ "shp-treasury-funding", "shp-tx-implicits-runtime-api", "smallvec", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-outbound-queue-v2-runtime-api", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-ethereum-client-fixtures", @@ -3194,7 +3281,7 @@ dependencies = [ "snowbridge-pallet-system", "snowbridge-pallet-system-v2", "snowbridge-system-v2-runtime-api", - "snowbridge-verification-primitives", + "snowbridge-verification-primitives 0.30.0", "sp-api", "sp-block-builder", "sp-consensus-babe", @@ -3209,7 +3296,6 @@ dependencies = [ "sp-runtime", "sp-session", "sp-staking", - "sp-std", "sp-storage", "sp-tracing", "sp-transaction-pool", @@ -3238,11 +3324,11 @@ dependencies = [ [[package]] name = "der-parser" -version = "8.2.0" +version = "9.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbd676fbbab537128ef0278adb5576cf363cff6aa22a7b24effe97347cfab61e" +checksum = "5cd0a5c643689626bec213c4d8bd4d96acc8ffdb4ad4bb6bc16abf27d5f4b553" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.6.2", "displaydoc", "nom", "num-bigint", @@ -3374,7 +3460,7 @@ dependencies = [ [[package]] name = "dhp-bridge" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-support", "frame-system", @@ -3382,10 +3468,9 @@ dependencies = [ "pallet-datahaven-native-transfer", "pallet-external-validators", "parity-scale-codec", - "snowbridge-core 0.26.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "sp-core", - "sp-std", ] [[package]] @@ -3460,12 +3545,6 @@ version = "0.1.13" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" -[[package]] -name = "difflib" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6184e33543162437515c2e2b48714794e37845ec9851711914eec9d308f6ebe8" - [[package]] name = "digest" version = "0.8.1" @@ -3515,6 +3594,15 @@ dependencies = [ "dirs-sys-next", ] +[[package]] +name = "dirs" +version = "5.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44c45a9d03d6676652bcb5e724c7e988de1acad23a711b5217ab9cbecbec2225" +dependencies = [ + "dirs-sys", +] + [[package]] name = "dirs-sys" version = "0.4.1" @@ -3606,7 +3694,7 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "139ae9aca7527f85f26dd76483eb38533fd84bd571065da1739656ef71c5ff5b" dependencies = [ - "darling 0.20.11", + "darling", "either", "heck 0.5.0", "proc-macro2", @@ -3765,18 +3853,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "enum-as-inner" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9720bba047d567ffc8a3cba48bf19126600e249ab7f128e9233e6376976a116" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "enum-as-inner" version = "0.6.1" @@ -3895,20 +3971,22 @@ dependencies = [ "fixed-hash", "impl-codec 0.7.1", "impl-rlp", - "impl-serde 0.5.0", + "impl-serde", "scale-info", "tiny-keccak", ] [[package]] name = "ethereum" -version = "0.15.0" -source = "git+https://github.com/rust-ethereum/ethereum?rev=3be0d8fd4c2ad1ba216b69ef65b9382612efc8ba#3be0d8fd4c2ad1ba216b69ef65b9382612efc8ba" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ee371ebb7479ed3258617557ab0b3247e741075cb6b02b820d188f68da44441" dependencies = [ "bytes", "ethereum-types", "hash-db", "hash256-std-hasher", + "k256", "parity-scale-codec", "rlp 0.6.1", "scale-info", @@ -3927,7 +4005,7 @@ dependencies = [ "fixed-hash", "impl-codec 0.7.1", "impl-rlp", - "impl-serde 0.5.0", + "impl-serde", "primitive-types 0.13.1", "scale-info", "uint 0.10.0", @@ -3939,16 +4017,6 @@ version = "2.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" -[[package]] -name = "event-listener" -version = "4.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" -dependencies = [ - "concurrent-queue", - "pin-project-lite", -] - [[package]] name = "event-listener" version = "5.4.1" @@ -3972,8 +4040,9 @@ dependencies = [ [[package]] name = "evm" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b54f188e7563c1702ecefdef92c8b2c4be8941b84a50684907a747f87121aace" dependencies = [ "auto_impl", "environmental", @@ -3992,8 +4061,9 @@ dependencies = [ [[package]] name = "evm-core" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ef956f8cc0c25a2d8be1dea7d659782b7c5f201f7e8057878f2051eec78350" dependencies = [ "parity-scale-codec", "primitive-types 0.13.1", @@ -4003,8 +4073,9 @@ dependencies = [ [[package]] name = "evm-gasometer" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54aa0327b242bad8dd83ba524effd1d798e9102ff592910dfdded79c6bde4ff3" dependencies = [ "environmental", "evm-core", @@ -4014,8 +4085,9 @@ dependencies = [ [[package]] name = "evm-runtime" -version = "0.42.0" -source = "git+https://github.com/rust-ethereum/evm?rev=6d86fe2d3bcc14887c2575f62958a67ac2d523db#6d86fe2d3bcc14887c2575f62958a67ac2d523db" +version = "0.43.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf22109a8f12b6d9ae60475584c80f2c9d48cf12427eac651b69ce14e5b95666" dependencies = [ "auto_impl", "environmental", @@ -4115,7 +4187,7 @@ dependencies = [ [[package]] name = "fc-api" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "async-trait", "fp-storage", @@ -4127,7 +4199,7 @@ dependencies = [ [[package]] name = "fc-cli" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "clap", "ethereum-types", @@ -4145,7 +4217,7 @@ dependencies = [ [[package]] name = "fc-consensus" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "async-trait", "fp-consensus", @@ -4155,13 +4227,13 @@ dependencies = [ "sp-block-builder", "sp-consensus", "sp-runtime", - "thiserror 1.0.69", + "thiserror 2.0.17", ] [[package]] name = "fc-db" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "async-trait", "ethereum", @@ -4191,7 +4263,7 @@ dependencies = [ [[package]] name = "fc-mapping-sync" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fc-db", "fc-storage", @@ -4214,7 +4286,7 @@ dependencies = [ [[package]] name = "fc-rpc" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4228,20 +4300,19 @@ dependencies = [ "fp-storage", "futures", "hex", - "jsonrpsee 0.24.9", + "jsonrpsee", "libsecp256k1", "log", "pallet-evm", "parity-scale-codec", "prometheus", - "rand 0.8.5", + "rand 0.9.2", "rlp 0.6.1", "sc-client-api", "sc-network", "sc-network-sync", "sc-rpc", "sc-service", - "sc-transaction-pool", "sc-transaction-pool-api", "sc-utils", "schnellru", @@ -4257,30 +4328,31 @@ dependencies = [ "sp-runtime", "sp-state-machine", "sp-storage", + "sp-trie", "substrate-prometheus-endpoint", - "thiserror 1.0.69", + "thiserror 2.0.17", "tokio", ] [[package]] name = "fc-rpc-core" version = "1.1.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", - "jsonrpsee 0.24.9", + "jsonrpsee", "rlp 0.6.1", "rustc-hex", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", ] [[package]] name = "fc-storage" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4374,16 +4446,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0399f9d26e5191ce32c498bebd31e7a3ceabc2745f0ac54af3f335126c3f24b3" -[[package]] -name = "finito" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2384245d85162258a14b43567a9ee3598f5ae746a1581fb5d3d2cb780f0dbf95" -dependencies = [ - "futures-timer", - "pin-project", -] - [[package]] name = "fixed-hash" version = "0.8.0" @@ -4414,15 +4476,6 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b7ac824320a75a52197e8f2d787f6a38b6718bb6897a35142d749af3c0e8f4fe" -[[package]] -name = "float-cmp" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] - [[package]] name = "flume" version = "0.10.14" @@ -4483,7 +4536,7 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "fork-tree" version = "13.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", ] @@ -4510,10 +4563,10 @@ dependencies = [ [[package]] name = "fp-account" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "hex", - "impl-serde 0.5.0", + "impl-serde", "libsecp256k1", "log", "parity-scale-codec", @@ -4529,7 +4582,7 @@ dependencies = [ [[package]] name = "fp-consensus" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "parity-scale-codec", @@ -4540,7 +4593,7 @@ dependencies = [ [[package]] name = "fp-ethereum" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4552,7 +4605,7 @@ dependencies = [ [[package]] name = "fp-evm" version = "3.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "environmental", "evm", @@ -4568,7 +4621,7 @@ dependencies = [ [[package]] name = "fp-rpc" version = "3.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -4584,7 +4637,7 @@ dependencies = [ [[package]] name = "fp-self-contained" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "frame-support", "parity-scale-codec", @@ -4596,7 +4649,7 @@ dependencies = [ [[package]] name = "fp-storage" version = "2.0.0" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "parity-scale-codec", "serde", @@ -4610,8 +4663,8 @@ checksum = "28dd6caf6059519a65843af8fe2a3ae298b14b80179855aeb4adc2c1934ee619" [[package]] name = "frame-benchmarking" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.2.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-support-procedural", @@ -4634,8 +4687,8 @@ dependencies = [ [[package]] name = "frame-benchmarking-cli" -version = "46.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "48.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "array-bytes", @@ -4649,7 +4702,6 @@ dependencies = [ "frame-system", "gethostname", "handlebars", - "hex", "itertools 0.11.0", "linked-hash-map", "log", @@ -4664,7 +4716,7 @@ dependencies = [ "sc-client-api", "sc-client-db", "sc-executor", - "sc-executor-common", + "sc-runtime-utilities", "sc-service", "sc-sysinfo", "serde", @@ -4673,7 +4725,6 @@ dependencies = [ "sp-block-builder", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", "sp-database", "sp-externalities", "sp-genesis-builder", @@ -4694,10 +4745,24 @@ dependencies = [ "thousands", ] +[[package]] +name = "frame-decode" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6027a409bac4fe95b4d107f965fcdbc252fc89d884a360d076b3070b6128c094" +dependencies = [ + "frame-metadata 17.0.0", + "parity-scale-codec", + "scale-decode 0.14.0", + "scale-info", + "scale-type-resolver", + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "frame-election-provider-solution-type" -version = "14.0.2" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "16.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -4707,8 +4772,8 @@ dependencies = [ [[package]] name = "frame-election-provider-support" -version = "39.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-election-provider-solution-type", "frame-support", @@ -4723,8 +4788,8 @@ dependencies = [ [[package]] name = "frame-executive" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "aquamarine", "frame-support", @@ -4741,20 +4806,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "15.1.0" +version = "17.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "878babb0b136e731cc77ec2fd883ff02745ff21e6fb662729953d44923df009c" -dependencies = [ - "cfg-if", - "parity-scale-codec", - "scale-info", -] - -[[package]] -name = "frame-metadata" -version = "16.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "87cf1549fba25a6fcac22785b61698317d958e96cac72a59102ea45b9ae64692" +checksum = "701bac17e9b55e0f95067c428ebcb46496587f08e8cf4ccc0fe5903bea10dbb8" dependencies = [ "cfg-if", "parity-scale-codec", @@ -4764,9 +4818,9 @@ dependencies = [ [[package]] name = "frame-metadata" -version = "18.0.0" +version = "20.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daaf440c68eb2c3d88e5760fe8c7af3f9fee9181fab6c2f2c4e7cc48dcc40bb8" +checksum = "26de808fa6461f2485dc51811aefed108850064994fb4a62b3ac21ffa62ac8df" dependencies = [ "cfg-if", "parity-scale-codec", @@ -4776,8 +4830,8 @@ dependencies = [ [[package]] name = "frame-metadata-hash-extension" -version = "0.7.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.8.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "const-hex", @@ -4792,8 +4846,8 @@ dependencies = [ [[package]] name = "frame-support" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "aquamarine", "array-bytes", @@ -4801,7 +4855,7 @@ dependencies = [ "bitflags 1.3.2", "docify", "environmental", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "frame-support-procedural", "impl-trait-for-tuples", "k256", @@ -4812,7 +4866,6 @@ dependencies = [ "scale-info", "serde", "serde_json", - "smallvec", "sp-api", "sp-arithmetic", "sp-core", @@ -4829,14 +4882,13 @@ dependencies = [ "sp-tracing", "sp-trie", "sp-weights", - "static_assertions", "tt-call", ] [[package]] name = "frame-support-procedural" -version = "31.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "33.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "cfg-expr", @@ -4846,17 +4898,17 @@ dependencies = [ "frame-support-procedural-tools", "itertools 0.11.0", "macro_magic", - "proc-macro-warning 1.84.1", + "proc-macro-warning", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "syn 2.0.106", ] [[package]] name = "frame-support-procedural-tools" version = "13.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support-procedural-tools-derive", "proc-macro-crate 3.4.0", @@ -4868,7 +4920,7 @@ dependencies = [ [[package]] name = "frame-support-procedural-tools-derive" version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro2", "quote", @@ -4878,11 +4930,11 @@ dependencies = [ [[package]] name = "frame-support-test" version = "3.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-executive", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "frame-support", "frame-support-test-pallet", "frame-system", @@ -4905,7 +4957,7 @@ dependencies = [ [[package]] name = "frame-support-test-pallet" version = "4.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -4917,8 +4969,8 @@ dependencies = [ [[package]] name = "frame-system" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "cfg-if", "docify", @@ -4930,15 +4982,14 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-version", "sp-weights", ] [[package]] name = "frame-system-benchmarking" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -4951,8 +5002,8 @@ dependencies = [ [[package]] name = "frame-system-rpc-runtime-api" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "parity-scale-codec", @@ -4961,8 +5012,8 @@ dependencies = [ [[package]] name = "frame-try-runtime" -version = "0.45.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "parity-scale-codec", @@ -5012,9 +5063,9 @@ dependencies = [ [[package]] name = "futures-bounded" -version = "0.1.0" +version = "0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b07bbbe7d7e78809544c6f718d875627addc73a7c3582447abc052cd3dc67e0" +checksum = "91f328e7fb845fc832912fb6a34f40cf6d1888c92f974d1893a54e97b5ff542e" dependencies = [ "futures-timer", "futures-util", @@ -5091,12 +5142,13 @@ dependencies = [ [[package]] name = "futures-rustls" -version = "0.24.0" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35bd3cf68c183738046838e300353e4716c674dc5e56890de4826801a6622a28" +checksum = "a8f2f12607f92c69b12ed746fabf9ca4f5c482cba46679c1a75b874ed7c26adb" dependencies = [ "futures-io", - "rustls 0.21.12", + "rustls", + "rustls-pki-types", ] [[package]] @@ -5234,9 +5286,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.28.1" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" dependencies = [ "fallible-iterator 0.3.0", "stable_deref_trait", @@ -5485,6 +5537,15 @@ version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "212ab92002354b4819390025006c897e8140934349e8635c9b077f47b4dcbd20" +[[package]] +name = "hex-conservative" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fda06d18ac606267c40c04e41b9947729bf8b9efe74bd4e82b61a5f26a510b9f" +dependencies = [ + "arrayvec 0.7.6", +] + [[package]] name = "hex-literal" version = "0.3.4" @@ -5497,6 +5558,31 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46" +[[package]] +name = "hickory-proto" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92652067c9ce6f66ce53cc38d1169daa36e6e7eb7dd3b63b5103bd9d97117248" +dependencies = [ + "async-trait", + "cfg-if", + "data-encoding", + "enum-as-inner", + "futures-channel", + "futures-io", + "futures-util", + "idna", + "ipnet", + "once_cell", + "rand 0.8.5", + "socket2 0.5.10", + "thiserror 1.0.69", + "tinyvec", + "tokio", + "tracing", + "url", +] + [[package]] name = "hickory-proto" version = "0.25.2" @@ -5506,11 +5592,11 @@ dependencies = [ "async-trait", "cfg-if", "data-encoding", - "enum-as-inner 0.6.1", + "enum-as-inner", "futures-channel", "futures-io", "futures-util", - "idna 1.1.0", + "idna", "ipnet", "once_cell", "rand 0.9.2", @@ -5522,6 +5608,27 @@ dependencies = [ "url", ] +[[package]] +name = "hickory-resolver" +version = "0.24.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbb117a1ca520e111743ab2f6688eddee69db4e0ea242545a604dce8a66fd22e" +dependencies = [ + "cfg-if", + "futures-util", + "hickory-proto 0.24.4", + "ipconfig", + "lru-cache", + "once_cell", + "parking_lot 0.12.5", + "rand 0.8.5", + "resolv-conf", + "smallvec", + "thiserror 1.0.69", + "tokio", + "tracing", +] + [[package]] name = "hickory-resolver" version = "0.25.2" @@ -5530,7 +5637,7 @@ checksum = "dc62a9a99b0bfb44d2ab95a7208ac952d31060efc16241c87eaf36406fecf87a" dependencies = [ "cfg-if", "futures-util", - "hickory-proto", + "hickory-proto 0.25.2", "ipconfig", "moka", "once_cell", @@ -5656,6 +5763,16 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "135b12329e5e3ce057a9f972339ea52bc954fe1e9358ef27f95e89716fbc5424" +[[package]] +name = "humantime-serde" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a3db5ea5923d99402c94e9feb261dc5ee9b4efa158b0315f788cf549cc200c" +dependencies = [ + "humantime", + "serde", +] + [[package]] name = "hyper" version = "0.14.32" @@ -5703,22 +5820,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.24.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.32", - "log", - "rustls 0.21.12", - "rustls-native-certs 0.6.3", - "tokio", - "tokio-rustls 0.24.1", -] - [[package]] name = "hyper-rustls" version = "0.27.7" @@ -5729,11 +5830,11 @@ dependencies = [ "hyper 1.7.0", "hyper-util", "log", - "rustls 0.23.32", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tower-service", "webpki-roots 1.0.3", ] @@ -5878,27 +5979,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" -[[package]] -name = "idna" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8" -dependencies = [ - "matches", - "unicode-bidi", - "unicode-normalization", -] - -[[package]] -name = "idna" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d20d6b07bfbc108882d88ed8e37d39636dcc260e15e30c45e6ba089610b917c" -dependencies = [ - "unicode-bidi", - "unicode-normalization", -] - [[package]] name = "idna" version = "1.1.0" @@ -6010,15 +6090,6 @@ dependencies = [ "rlp 0.6.1", ] -[[package]] -name = "impl-serde" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc88fc67028ae3db0c853baa36269d398d5f45b6982f95549ff5def78c935cd" -dependencies = [ - "serde", -] - [[package]] name = "impl-serde" version = "0.5.0" @@ -6229,20 +6300,6 @@ version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" -[[package]] -name = "jni" -version = "0.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6df18c2e3db7e453d3c6ac5b3e9d5182664d28788126d39b91f2d1e22b017ec" -dependencies = [ - "cesu8", - "combine", - "jni-sys", - "log", - "thiserror 1.0.69", - "walkdir", -] - [[package]] name = "jni" version = "0.21.1" @@ -6285,132 +6342,45 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "jsonrpsee" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfdb12a2381ea5b2e68c3469ec604a007b367778cdb14d09612c8069ebd616ad" -dependencies = [ - "jsonrpsee-client-transport 0.22.5", - "jsonrpsee-core 0.22.5", - "jsonrpsee-http-client", - "jsonrpsee-types 0.22.5", -] - -[[package]] -name = "jsonrpsee" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62b089779ad7f80768693755a031cc14a7766aba707cbe886674e3f79e9b7e47" -dependencies = [ - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", - "jsonrpsee-ws-client", -] - [[package]] name = "jsonrpsee" version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37b26c20e2178756451cfeb0661fb74c47dd5988cb7e3939de7e9241fd604d42" dependencies = [ - "jsonrpsee-core 0.24.9", + "jsonrpsee-client-transport", + "jsonrpsee-core", "jsonrpsee-proc-macros", "jsonrpsee-server", - "jsonrpsee-types 0.24.9", + "jsonrpsee-types", + "jsonrpsee-ws-client", "tokio", "tracing", ] [[package]] name = "jsonrpsee-client-transport" -version = "0.22.5" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4978087a58c3ab02efc5b07c5e5e2803024536106fd5506f558db172c889b3aa" -dependencies = [ - "futures-util", - "http 0.2.12", - "jsonrpsee-core 0.22.5", - "pin-project", - "rustls-native-certs 0.7.3", - "rustls-pki-types", - "soketto 0.7.1", - "thiserror 1.0.69", - "tokio", - "tokio-rustls 0.25.0", - "tokio-util", - "tracing", - "url", -] - -[[package]] -name = "jsonrpsee-client-transport" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08163edd8bcc466c33d79e10f695cdc98c00d1e6ddfb95cec41b6b0279dd5432" +checksum = "bacb85abf4117092455e1573625e21b8f8ef4dec8aff13361140b2dc266cdff2" dependencies = [ "base64 0.22.1", "futures-util", "http 1.3.1", - "jsonrpsee-core 0.23.2", + "jsonrpsee-core", "pin-project", - "rustls 0.23.32", + "rustls", "rustls-pki-types", - "rustls-platform-verifier 0.3.4", - "soketto 0.8.1", + "rustls-platform-verifier", + "soketto", "thiserror 1.0.69", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "tracing", "url", ] -[[package]] -name = "jsonrpsee-core" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b4b257e1ec385e07b0255dde0b933f948b5c8b8c28d42afda9587c3a967b896d" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "hyper 0.14.32", - "jsonrpsee-types 0.22.5", - "pin-project", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tracing", -] - -[[package]] -name = "jsonrpsee-core" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79712302e737d23ca0daa178e752c9334846b08321d439fd89af9a384f8c830b" -dependencies = [ - "anyhow", - "async-trait", - "beef", - "futures-timer", - "futures-util", - "jsonrpsee-types 0.23.2", - "pin-project", - "rustc-hash 1.1.0", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tracing", -] - [[package]] name = "jsonrpsee-core" version = "0.24.9" @@ -6419,41 +6389,24 @@ checksum = "456196007ca3a14db478346f58c7238028d55ee15c1df15115596e411ff27925" dependencies = [ "async-trait", "bytes", + "futures-timer", "futures-util", "http 1.3.1", "http-body 1.0.1", "http-body-util", - "jsonrpsee-types 0.24.9", + "jsonrpsee-types", "parking_lot 0.12.5", + "pin-project", "rand 0.8.5", "rustc-hash 2.1.1", "serde", "serde_json", "thiserror 1.0.69", "tokio", + "tokio-stream", "tracing", ] -[[package]] -name = "jsonrpsee-http-client" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ccf93fc4a0bfe05d851d37d7c32b7f370fe94336b52a2f0efc5f1981895c2e5" -dependencies = [ - "async-trait", - "hyper 0.14.32", - "hyper-rustls 0.24.2", - "jsonrpsee-core 0.22.5", - "jsonrpsee-types 0.22.5", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tower 0.4.13", - "tracing", - "url", -] - [[package]] name = "jsonrpsee-proc-macros" version = "0.24.9" @@ -6479,13 +6432,13 @@ dependencies = [ "http-body-util", "hyper 1.7.0", "hyper-util", - "jsonrpsee-core 0.24.9", - "jsonrpsee-types 0.24.9", + "jsonrpsee-core", + "jsonrpsee-types", "pin-project", "route-recognizer", "serde", "serde_json", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", "tokio", "tokio-stream", @@ -6494,32 +6447,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "jsonrpsee-types" -version = "0.22.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "150d6168405890a7a3231a3c74843f58b8959471f6df76078db2619ddee1d07d" -dependencies = [ - "anyhow", - "beef", - "serde", - "serde_json", - "thiserror 1.0.69", -] - -[[package]] -name = "jsonrpsee-types" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9c465fbe385238e861fdc4d1c85e04ada6c1fd246161d26385c1b311724d2af" -dependencies = [ - "beef", - "http 1.3.1", - "serde", - "serde_json", - "thiserror 1.0.69", -] - [[package]] name = "jsonrpsee-types" version = "0.24.9" @@ -6534,14 +6461,14 @@ dependencies = [ [[package]] name = "jsonrpsee-ws-client" -version = "0.23.2" +version = "0.24.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c28759775f5cb2f1ea9667672d3fe2b0e701d1f4b7b67954e60afe7fd058b5e" +checksum = "01b3323d890aa384f12148e8d2a1fd18eb66e9e7e825f9de4fa53bcc19b93eef" dependencies = [ "http 1.3.1", - "jsonrpsee-client-transport 0.23.2", - "jsonrpsee-core 0.23.2", - "jsonrpsee-types 0.23.2", + "jsonrpsee-client-transport", + "jsonrpsee-core", + "jsonrpsee-types", "url", ] @@ -6581,11 +6508,11 @@ dependencies = [ [[package]] name = "keccak-hash" -version = "0.10.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b286e6b663fb926e1eeb68528e69cb70ed46c6d65871a21b2215ae8154c6d3c" +checksum = "3e1b8590eb6148af2ea2d75f38e7d29f5ca970d5a4df456b3ef19b8b415d0264" dependencies = [ - "primitive-types 0.12.2", + "primitive-types 0.13.1", "tiny-keccak", ] @@ -6710,16 +6637,15 @@ checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" [[package]] name = "libp2p" -version = "0.52.4" +version = "0.54.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94495eb319a85b70a68b85e2389a95bb3555c71c49025b78c691a854a7e6464" +checksum = "bbbe80f9c7e00526cd6b838075b9c171919404a4732cb2fa8ece0a093223bfc4" dependencies = [ "bytes", "either", "futures", "futures-timer", "getrandom 0.2.16", - "instant", "libp2p-allow-block-list", "libp2p-connection-limits", "libp2p-core", @@ -6736,7 +6662,6 @@ dependencies = [ "libp2p-swarm", "libp2p-tcp", "libp2p-upnp", - "libp2p-wasm-ext", "libp2p-websocket", "libp2p-yamux", "multiaddr 0.18.2", @@ -6747,9 +6672,9 @@ dependencies = [ [[package]] name = "libp2p-allow-block-list" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55b46558c5c0bf99d3e2a1a38fd54ff5476ca66dd1737b12466a1824dd219311" +checksum = "d1027ccf8d70320ed77e984f273bc8ce952f623762cb9bf2d126df73caef8041" dependencies = [ "libp2p-core", "libp2p-identity", @@ -6759,9 +6684,9 @@ dependencies = [ [[package]] name = "libp2p-connection-limits" -version = "0.2.1" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f5107ad45cb20b2f6c3628c7b6014b996fcb13a88053f4569c872c6e30abf58" +checksum = "8d003540ee8baef0d254f7b6bfd79bac3ddf774662ca0abf69186d517ef82ad8" dependencies = [ "libp2p-core", "libp2p-identity", @@ -6771,17 +6696,15 @@ dependencies = [ [[package]] name = "libp2p-core" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd44289ab25e4c9230d9246c475a22241e301b23e8f4061d3bdef304a1a99713" +checksum = "a61f26c83ed111104cd820fe9bc3aaabbac5f1652a1d213ed6e900b7918a1298" dependencies = [ "either", "fnv", "futures", "futures-timer", - "instant", "libp2p-identity", - "log", "multiaddr 0.18.2", "multihash 0.19.3", "multistream-select", @@ -6793,33 +6716,35 @@ dependencies = [ "rw-stream-sink", "smallvec", "thiserror 1.0.69", - "unsigned-varint 0.7.2", + "tracing", + "unsigned-varint 0.8.0", "void", + "web-time", ] [[package]] name = "libp2p-dns" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6a18db73084b4da2871438f6239fef35190b05023de7656e877c18a00541a3b" +checksum = "97f37f30d5c7275db282ecd86e54f29dd2176bd3ac656f06abf43bedb21eb8bd" dependencies = [ "async-trait", "futures", + "hickory-resolver 0.24.4", "libp2p-core", "libp2p-identity", - "log", "parking_lot 0.12.5", "smallvec", - "trust-dns-resolver", + "tracing", ] [[package]] name = "libp2p-identify" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "45a96638a0a176bec0a4bcaebc1afa8cf909b114477209d7456ade52c61cd9cd" +checksum = "1711b004a273be4f30202778856368683bd9a83c4c7dcc8f848847606831a4e3" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.7.0", "either", "futures", "futures-bounded", @@ -6827,12 +6752,12 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "lru 0.12.5", "quick-protobuf", "quick-protobuf-codec", "smallvec", "thiserror 1.0.69", + "tracing", "void", ] @@ -6856,83 +6781,84 @@ dependencies = [ [[package]] name = "libp2p-kad" -version = "0.44.6" +version = "0.46.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ea178dabba6dde6ffc260a8e0452ccdc8f79becf544946692fff9d412fc29d" +checksum = "ced237d0bd84bbebb7c2cad4c073160dacb4fe40534963c32ed6d4c6bb7702a3" dependencies = [ "arrayvec 0.7.6", - "asynchronous-codec", + "asynchronous-codec 0.7.0", "bytes", "either", "fnv", "futures", + "futures-bounded", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "quick-protobuf", "quick-protobuf-codec", "rand 0.8.5", "sha2 0.10.9", "smallvec", "thiserror 1.0.69", + "tracing", "uint 0.9.5", - "unsigned-varint 0.7.2", "void", + "web-time", ] [[package]] name = "libp2p-mdns" -version = "0.44.0" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a2567c305232f5ef54185e9604579a894fd0674819402bb0ac0246da82f52a" +checksum = "14b8546b6644032565eb29046b42744aee1e9f261ed99671b2c93fb140dba417" dependencies = [ "data-encoding", "futures", + "hickory-proto 0.24.4", "if-watch", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", "socket2 0.5.10", "tokio", - "trust-dns-proto 0.22.0", + "tracing", "void", ] [[package]] name = "libp2p-metrics" -version = "0.13.1" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "239ba7d28f8d0b5d77760dc6619c05c7e88e74ec8fbbe97f856f20a56745e620" +checksum = "77ebafa94a717c8442d8db8d3ae5d1c6a15e30f2d347e0cd31d057ca72e42566" dependencies = [ - "instant", + "futures", "libp2p-core", "libp2p-identify", "libp2p-identity", "libp2p-kad", "libp2p-ping", "libp2p-swarm", - "once_cell", + "pin-project", "prometheus-client", + "web-time", ] [[package]] name = "libp2p-noise" -version = "0.43.2" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2eeec39ad3ad0677551907dd304b2f13f17208ccebe333bef194076cd2e8921" +checksum = "36b137cb1ae86ee39f8e5d6245a296518912014eaa87427d24e6ff58cfc1b28c" dependencies = [ + "asynchronous-codec 0.7.0", "bytes", "curve25519-dalek", "futures", "libp2p-core", "libp2p-identity", - "log", "multiaddr 0.18.2", "multihash 0.19.3", "once_cell", @@ -6942,33 +6868,34 @@ dependencies = [ "snow", "static_assertions", "thiserror 1.0.69", + "tracing", "x25519-dalek", "zeroize", ] [[package]] name = "libp2p-ping" -version = "0.43.1" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e702d75cd0827dfa15f8fd92d15b9932abe38d10d21f47c50438c71dd1b5dae3" +checksum = "005a34420359223b974ee344457095f027e51346e992d1e0dcd35173f4cdd422" dependencies = [ "either", "futures", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-quic" -version = "0.9.3" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "130d451d83f21b81eb7b35b360bc7972aeafb15177784adc56528db082e6b927" +checksum = "46352ac5cd040c70e88e7ff8257a2ae2f891a4076abad2c439584a31c15fd24e" dependencies = [ "bytes", "futures", @@ -6977,66 +6904,68 @@ dependencies = [ "libp2p-core", "libp2p-identity", "libp2p-tls", - "log", "parking_lot 0.12.5", - "quinn 0.10.2", + "quinn", "rand 0.8.5", - "ring 0.16.20", - "rustls 0.21.12", + "ring 0.17.14", + "rustls", "socket2 0.5.10", "thiserror 1.0.69", "tokio", + "tracing", ] [[package]] name = "libp2p-request-response" -version = "0.25.3" +version = "0.27.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8e3b4d67870478db72bac87bfc260ee6641d0734e0e3e275798f089c3fecfd4" +checksum = "1356c9e376a94a75ae830c42cdaea3d4fe1290ba409a22c809033d1b7dcab0a6" dependencies = [ "async-trait", "futures", - "instant", + "futures-bounded", + "futures-timer", "libp2p-core", "libp2p-identity", "libp2p-swarm", - "log", "rand 0.8.5", "smallvec", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-swarm" -version = "0.43.7" +version = "0.45.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "580189e0074af847df90e75ef54f3f30059aedda37ea5a1659e8b9fca05c0141" +checksum = "d7dd6741793d2c1fb2088f67f82cf07261f25272ebe3c0b0c311e0c6b50e851a" dependencies = [ "either", "fnv", "futures", "futures-timer", - "instant", "libp2p-core", "libp2p-identity", "libp2p-swarm-derive", - "log", + "lru 0.12.5", "multistream-select", "once_cell", "rand 0.8.5", "smallvec", "tokio", + "tracing", "void", + "web-time", ] [[package]] name = "libp2p-swarm-derive" -version = "0.33.0" +version = "0.35.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4d5ec2a3df00c7836d7696c136274c9c59705bac69133253696a6c932cd1d74" +checksum = "206e0aa0ebe004d778d79fb0966aa0de996c19894e2c0605ba2f8524dd4443d8" dependencies = [ - "heck 0.4.1", - "proc-macro-warning 0.4.2", + "heck 0.5.0", "proc-macro2", "quote", "syn 2.0.106", @@ -7044,9 +6973,9 @@ dependencies = [ [[package]] name = "libp2p-tcp" -version = "0.40.1" +version = "0.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b558dd40d1bcd1aaaed9de898e9ec6a436019ecc2420dd0016e712fbb61c5508" +checksum = "ad964f312c59dcfcac840acd8c555de8403e295d39edf96f5240048b5fcaa314" dependencies = [ "futures", "futures-timer", @@ -7054,92 +6983,80 @@ dependencies = [ "libc", "libp2p-core", "libp2p-identity", - "log", "socket2 0.5.10", "tokio", + "tracing", ] [[package]] name = "libp2p-tls" -version = "0.2.1" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8218d1d5482b122ccae396bbf38abdcb283ecc96fa54760e1dfd251f0546ac61" +checksum = "47b23dddc2b9c355f73c1e36eb0c3ae86f7dc964a3715f0731cfad352db4d847" dependencies = [ "futures", "futures-rustls", "libp2p-core", "libp2p-identity", "rcgen", - "ring 0.16.20", - "rustls 0.21.12", + "ring 0.17.14", + "rustls", "rustls-webpki 0.101.7", "thiserror 1.0.69", - "x509-parser 0.15.1", + "x509-parser 0.16.0", "yasna", ] [[package]] name = "libp2p-upnp" -version = "0.1.1" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82775a47b34f10f787ad3e2a22e2c1541e6ebef4fe9f28f3ac553921554c94c1" +checksum = "01bf2d1b772bd3abca049214a3304615e6a36fa6ffc742bdd1ba774486200b8f" dependencies = [ "futures", "futures-timer", "igd-next", "libp2p-core", "libp2p-swarm", - "log", "tokio", + "tracing", "void", ] -[[package]] -name = "libp2p-wasm-ext" -version = "0.40.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e5d8e3a9e07da0ef5b55a9f26c009c8fb3c725d492d8bb4b431715786eea79c" -dependencies = [ - "futures", - "js-sys", - "libp2p-core", - "send_wrapper", - "wasm-bindgen", - "wasm-bindgen-futures", -] - [[package]] name = "libp2p-websocket" -version = "0.42.2" +version = "0.44.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "004ee9c4a4631435169aee6aad2f62e3984dc031c43b6d29731e8e82a016c538" +checksum = "888b2ff2e5d8dcef97283daab35ad1043d18952b65e05279eecbe02af4c6e347" dependencies = [ "either", "futures", "futures-rustls", "libp2p-core", "libp2p-identity", - "log", "parking_lot 0.12.5", "pin-project-lite", "rw-stream-sink", - "soketto 0.8.1", + "soketto", "thiserror 1.0.69", + "tracing", "url", "webpki-roots 0.25.4", ] [[package]] name = "libp2p-yamux" -version = "0.44.1" +version = "0.46.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8eedcb62824c4300efb9cfd4e2a6edaf3ca097b9e68b36dabe45a44469fd6a85" +checksum = "788b61c80789dba9760d8c669a5bedb642c8267555c803fabd8396e4ca5c5882" dependencies = [ + "either", "futures", "libp2p-core", - "log", "thiserror 1.0.69", + "tracing", "yamux 0.12.1", + "yamux 0.13.7", ] [[package]] @@ -7316,10 +7233,10 @@ dependencies = [ "ed25519-dalek", "futures", "futures-timer", - "hickory-resolver", + "hickory-resolver 0.25.2", "indexmap 2.11.4", "libc", - "mockall 0.13.1", + "mockall", "multiaddr 0.17.1", "multihash 0.17.0", "network-interface", @@ -7524,12 +7441,6 @@ dependencies = [ "regex-automata", ] -[[package]] -name = "matches" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5" - [[package]] name = "matchit" version = "0.8.4" @@ -7609,15 +7520,15 @@ dependencies = [ [[package]] name = "merkleized-metadata" -version = "0.2.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38c592efaf1b3250df14c8f3c2d952233f0302bb81d3586db2f303666c1cd607" +checksum = "dc9b7ac0ce054412d9a85ff39bac27aec27483b06cef8756b57d9c29d448d081" dependencies = [ "array-bytes", "blake3", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "parity-scale-codec", - "scale-decode", + "scale-decode 0.13.1", "scale-info", ] @@ -7723,8 +7634,8 @@ dependencies = [ [[package]] name = "mmr-gadget" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", "log", @@ -7742,10 +7653,10 @@ dependencies = [ [[package]] name = "mmr-rpc" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "serde", "sp-api", @@ -7755,21 +7666,6 @@ dependencies = [ "sp-runtime", ] -[[package]] -name = "mockall" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c84490118f2ee2d74570d114f3d0493cbf02790df303d2707606c3e14e07c96" -dependencies = [ - "cfg-if", - "downcast", - "fragile", - "lazy_static", - "mockall_derive 0.11.4", - "predicates 2.1.5", - "predicates-tree", -] - [[package]] name = "mockall" version = "0.13.1" @@ -7779,23 +7675,11 @@ dependencies = [ "cfg-if", "downcast", "fragile", - "mockall_derive 0.13.1", - "predicates 3.1.3", + "mockall_derive", + "predicates", "predicates-tree", ] -[[package]] -name = "mockall_derive" -version = "0.11.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ce75669015c4f47b289fd4d4f56e894e4c96003ffdf3ac51313126f94c6cbb" -dependencies = [ - "cfg-if", - "proc-macro2", - "quote", - "syn 1.0.109", -] - [[package]] name = "mockall_derive" version = "0.13.1" @@ -7843,6 +7727,12 @@ dependencies = [ "version_check", ] +[[package]] +name = "multi-stash" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "685a9ac4b61f4e728e1d2c6a7844609c16527aeb5e6c865915c08e619c16410f" + [[package]] name = "multiaddr" version = "0.17.1" @@ -8097,12 +7987,6 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b93853da6d84c2e3c7d730d6473e8817692dd89be387eb01b94d7f108ecb5b8c" -[[package]] -name = "no-std-net" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43794a0ace135be66a25d3ae77d41b91615fb68ae937f904090203e81f755b65" - [[package]] name = "nodrop" version = "0.1.14" @@ -8137,12 +8021,6 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "38bf9645c8b145698bb0b18a4637dcacbc421ea49bef2317e4fd8065a387cf21" -[[package]] -name = "normalize-line-endings" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61807f77802ff30975e01f4f071c8ba10c022052f98b3294119f3e615d13e5be" - [[package]] name = "ntapi" version = "0.4.2" @@ -8200,6 +8078,17 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + [[package]] name = "num-format" version = "0.4.4" @@ -8316,9 +8205,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.2" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] @@ -8334,11 +8223,11 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.6.1" +version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bedf36ffb6ba96c2eb7144ef6270557b52e54b20c0a8e1eb2ff99a6c6959bff" +checksum = "a8d8034d9489cdaf79228eb9f6a3b8d7bb32ba00d6645ebd48eef4077ceb5bd9" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.6.2", ] [[package]] @@ -8482,8 +8371,8 @@ dependencies = [ [[package]] name = "pallet-asset-conversion" -version = "21.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -8500,8 +8389,8 @@ dependencies = [ [[package]] name = "pallet-asset-rate" -version = "18.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -8514,8 +8403,8 @@ dependencies = [ [[package]] name = "pallet-authority-discovery" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -8529,8 +8418,8 @@ dependencies = [ [[package]] name = "pallet-authorship" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -8542,8 +8431,8 @@ dependencies = [ [[package]] name = "pallet-babe" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -8565,8 +8454,8 @@ dependencies = [ [[package]] name = "pallet-balances" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -8575,13 +8464,14 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", + "sp-core", "sp-runtime", ] [[package]] name = "pallet-beefy" -version = "40.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -8599,8 +8489,8 @@ dependencies = [ [[package]] name = "pallet-beefy-mmr" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "binary-merkle-tree", @@ -8624,8 +8514,8 @@ dependencies = [ [[package]] name = "pallet-broker" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.19.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "frame-benchmarking", @@ -8642,8 +8532,8 @@ dependencies = [ [[package]] name = "pallet-bucket-nfts" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -8661,13 +8551,12 @@ dependencies = [ "sp-core", "sp-keyring", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-collective" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -8683,8 +8572,8 @@ dependencies = [ [[package]] name = "pallet-conviction-voting" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "assert_matches", "frame-benchmarking", @@ -8699,8 +8588,8 @@ dependencies = [ [[package]] name = "pallet-cr-randomness" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "frame-system", @@ -8714,12 +8603,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-datahaven-native-transfer" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -8727,20 +8615,19 @@ dependencies = [ "pallet-balances", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", ] [[package]] name = "pallet-election-provider-multi-phase" -version = "38.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8761,8 +8648,8 @@ dependencies = [ [[package]] name = "pallet-election-provider-support-benchmarking" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -8775,7 +8662,7 @@ dependencies = [ [[package]] name = "pallet-ethereum" version = "4.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "ethereum", "ethereum-types", @@ -8798,9 +8685,11 @@ dependencies = [ [[package]] name = "pallet-evm" version = "6.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ + "cumulus-primitives-storage-weight-reclaim", "environmental", + "ethereum", "evm", "fp-account", "fp-evm", @@ -8821,7 +8710,7 @@ dependencies = [ [[package]] name = "pallet-evm-chain-id" version = "1.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "frame-support", "frame-system", @@ -8831,7 +8720,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-balances-erc20" -version = "0.26.0" +version = "0.30.0" dependencies = [ "fp-evm", "frame-support", @@ -8849,12 +8738,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-batch" -version = "0.26.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8870,13 +8758,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-blake2" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", ] @@ -8884,7 +8771,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-bn128" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "sp-core", @@ -8893,7 +8780,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-call-permit" -version = "0.26.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8910,7 +8797,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -8933,7 +8819,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -8954,12 +8839,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-datahaven-native-transfer" -version = "0.26.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -8973,18 +8857,17 @@ dependencies = [ "parity-scale-codec", "precompile-utils", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-file-system" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "fp-account", "fp-evm", @@ -8998,7 +8881,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -9015,16 +8897,16 @@ dependencies = [ "parity-scale-codec", "precompile-utils", "scale-info", + "serde", "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-modexp" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "num", @@ -9047,12 +8929,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-proxy" -version = "0.26.0" +version = "0.30.0" dependencies = [ "evm", "fp-evm", @@ -9068,7 +8949,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] @@ -9091,12 +8971,11 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-evm-precompile-registry" -version = "0.26.0" +version = "0.30.0" dependencies = [ "fp-evm", "frame-support", @@ -9115,7 +8994,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-sha3fips" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "tiny-keccak", @@ -9124,7 +9003,7 @@ dependencies = [ [[package]] name = "pallet-evm-precompile-simple" version = "2.0.0-dev" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "fp-evm", "ripemd", @@ -9146,8 +9025,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", @@ -9156,7 +9035,7 @@ dependencies = [ [[package]] name = "pallet-external-validators" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9170,17 +9049,16 @@ dependencies = [ "parity-scale-codec", "rand 0.8.5", "scale-info", - "snowbridge-outbound-queue-primitives", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-external-validators-rewards" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9193,19 +9071,18 @@ dependencies = [ "pallet-timestamp", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", "sp-staking", - "sp-std", ] [[package]] name = "pallet-fast-unstake" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9222,8 +9099,8 @@ dependencies = [ [[package]] name = "pallet-file-system" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9244,28 +9121,26 @@ dependencies = [ "shp-traits", "sp-core", "sp-runtime", - "sp-std", "sp-trie", "sp-weights", ] [[package]] name = "pallet-file-system-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-grandpa" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9286,7 +9161,7 @@ dependencies = [ [[package]] name = "pallet-grandpa-benchmarking" -version = "0.26.0" +version = "0.30.0" dependencies = [ "finality-grandpa", "frame-benchmarking", @@ -9300,13 +9175,12 @@ dependencies = [ "sp-core", "sp-runtime", "sp-session", - "sp-std", ] [[package]] name = "pallet-identity" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "enumflags2", "frame-benchmarking", @@ -9321,8 +9195,8 @@ dependencies = [ [[package]] name = "pallet-im-online" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9340,8 +9214,8 @@ dependencies = [ [[package]] name = "pallet-message-queue" -version = "42.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "43.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "environmental", "frame-benchmarking", @@ -9359,10 +9233,9 @@ dependencies = [ [[package]] name = "pallet-migrations" -version = "9.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "10.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "cfg-if", "docify", "frame-benchmarking", "frame-support", @@ -9370,32 +9243,29 @@ dependencies = [ "impl-trait-for-tuples", "log", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", "sp-core", + "sp-io", "sp-runtime", ] [[package]] name = "pallet-mmr" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", "log", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", - "sp-core", - "sp-io", "sp-mmr-primitives", - "sp-runtime", ] [[package]] name = "pallet-multisig" -version = "39.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "parity-scale-codec", @@ -9405,8 +9275,8 @@ dependencies = [ [[package]] name = "pallet-nfts" -version = "33.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "34.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "enumflags2", "frame-benchmarking", @@ -9422,13 +9292,12 @@ dependencies = [ [[package]] name = "pallet-offences" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", "log", - "pallet-balances", "parity-scale-codec", "scale-info", "serde", @@ -9438,7 +9307,7 @@ dependencies = [ [[package]] name = "pallet-outbound-commitment-store" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-support", "frame-system", @@ -9449,8 +9318,8 @@ dependencies = [ [[package]] name = "pallet-parameters" -version = "0.10.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.11.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9466,8 +9335,8 @@ dependencies = [ [[package]] name = "pallet-payment-streams" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9486,20 +9355,19 @@ dependencies = [ [[package]] name = "pallet-payment-streams-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-preimage" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9514,8 +9382,8 @@ dependencies = [ [[package]] name = "pallet-proofs-dealer" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9533,27 +9401,25 @@ dependencies = [ "sp-core", "sp-keyring", "sp-runtime", - "sp-std", "sp-trie", "sp-weights", ] [[package]] name = "pallet-proofs-dealer-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-proxy" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "polkadot-sdk-frame", @@ -9562,7 +9428,7 @@ dependencies = [ [[package]] name = "pallet-proxy-genesis-companion" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-support", "frame-system", @@ -9574,13 +9440,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-randomness" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9594,13 +9459,12 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-referenda" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "assert_matches", "frame-benchmarking", @@ -9615,10 +9479,94 @@ dependencies = [ "sp-runtime", ] +[[package]] +name = "pallet-revive" +version = "0.6.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "alloy-core", + "derive_more 0.99.20", + "environmental", + "ethabi-decode", + "ethereum-types", + "frame-benchmarking", + "frame-support", + "frame-system", + "hex-literal 0.4.1", + "humantime-serde", + "impl-trait-for-tuples", + "log", + "num-bigint", + "num-integer", + "num-traits", + "pallet-revive-fixtures", + "pallet-revive-proc-macro", + "pallet-revive-uapi", + "pallet-transaction-payment", + "parity-scale-codec", + "paste", + "polkavm 0.21.0", + "polkavm-common 0.21.0", + "rand 0.8.5", + "rand_pcg", + "ripemd", + "rlp 0.6.1", + "scale-info", + "serde", + "sp-api", + "sp-arithmetic", + "sp-consensus-aura", + "sp-consensus-babe", + "sp-consensus-slots", + "sp-core", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "substrate-bn", + "subxt-signer", +] + +[[package]] +name = "pallet-revive-fixtures" +version = "0.3.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "anyhow", + "cargo_metadata", + "pallet-revive-uapi", + "polkavm-linker 0.21.0", + "sp-core", + "sp-io", + "toml 0.8.23", +] + +[[package]] +name = "pallet-revive-proc-macro" +version = "0.3.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "pallet-revive-uapi" +version = "0.4.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "bitflags 1.3.2", + "pallet-revive-proc-macro", + "parity-scale-codec", + "polkavm-derive 0.21.0", + "scale-info", +] + [[package]] name = "pallet-safe-mode" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "21.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9635,8 +9583,8 @@ dependencies = [ [[package]] name = "pallet-scheduler" -version = "40.2.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9652,8 +9600,8 @@ dependencies = [ [[package]] name = "pallet-session" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "frame-system", @@ -9673,7 +9621,7 @@ dependencies = [ [[package]] name = "pallet-session-benchmarking" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -9681,13 +9629,12 @@ dependencies = [ "pallet-session", "parity-scale-codec", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-staking" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-election-provider-support", @@ -9708,8 +9655,8 @@ dependencies = [ [[package]] name = "pallet-staking-reward-fn" -version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "sp-arithmetic", @@ -9717,8 +9664,8 @@ dependencies = [ [[package]] name = "pallet-storage-providers" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-benchmarking", "frame-support", @@ -9733,26 +9680,24 @@ dependencies = [ "shp-traits", "sp-arithmetic", "sp-runtime", - "sp-std", "sp-trie", ] [[package]] name = "pallet-storage-providers-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-runtime", - "sp-std", ] [[package]] name = "pallet-sudo" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9766,8 +9711,8 @@ dependencies = [ [[package]] name = "pallet-timestamp" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9785,8 +9730,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9801,10 +9746,10 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc" -version = "42.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "pallet-transaction-payment-rpc-runtime-api", "parity-scale-codec", "sp-api", @@ -9817,8 +9762,8 @@ dependencies = [ [[package]] name = "pallet-transaction-payment-rpc-runtime-api" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "pallet-transaction-payment", "parity-scale-codec", @@ -9829,8 +9774,8 @@ dependencies = [ [[package]] name = "pallet-treasury" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -9848,25 +9793,22 @@ dependencies = [ [[package]] name = "pallet-tx-pause" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "21.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", - "frame-benchmarking", - "frame-support", - "frame-system", "pallet-balances", "pallet-proxy", "pallet-utility", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", - "sp-runtime", ] [[package]] name = "pallet-utility" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9880,8 +9822,8 @@ dependencies = [ [[package]] name = "pallet-vesting" -version = "39.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-benchmarking", "frame-support", @@ -9894,28 +9836,27 @@ dependencies = [ [[package]] name = "pallet-whitelist" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "frame-benchmarking", - "frame-support", - "frame-system", "parity-scale-codec", + "polkadot-sdk-frame", "scale-info", - "sp-api", - "sp-runtime", ] [[package]] name = "pallet-xcm" -version = "18.1.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.2.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bounded-collections", "frame-benchmarking", "frame-support", "frame-system", + "hex-literal 0.4.1", "pallet-balances", + "pallet-revive", + "pallet-timestamp", "parity-scale-codec", "scale-info", "serde", @@ -9935,7 +9876,7 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4e69bf016dc406eff7d53a7d3f7cf1c2e72c82b9088aac1118591e36dd2cd3e9" dependencies = [ - "bitcoin_hashes", + "bitcoin_hashes 0.13.0", "rand 0.8.5", "rand_core 0.6.4", "serde", @@ -10088,6 +10029,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" dependencies = [ "digest 0.10.7", + "hmac 0.12.1", "password-hash", ] @@ -10099,11 +10041,12 @@ checksum = "19b17cddbe7ec3f8bc800887bab5e717348c95ea2ca0b1bf0837fb964dc67099" [[package]] name = "pem" -version = "1.1.1" +version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8" +checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64 0.13.1", + "base64 0.22.1", + "serde_core", ] [[package]] @@ -10264,9 +10207,9 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" [[package]] name = "polkadot-ckb-merkle-mountain-range" -version = "0.7.0" +version = "0.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4b44320e5f7ce2c18227537a3032ae5b2c476a7e8eddba45333e1011fc31b92" +checksum = "221c71b432b38e494a0fdedb5f720e4cb974edf03a0af09e5b2238dbac7e6947" dependencies = [ "cfg-if", "itertools 0.10.5", @@ -10274,8 +10217,8 @@ dependencies = [ [[package]] name = "polkadot-core-primitives" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "17.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -10285,13 +10228,12 @@ dependencies = [ [[package]] name = "polkadot-node-metrics" -version = "21.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bs58", "futures", "futures-timer", - "log", "parity-scale-codec", "polkadot-primitives", "prioritized-metered-channel", @@ -10299,13 +10241,12 @@ dependencies = [ "sc-service", "sc-tracing", "substrate-prometheus-endpoint", - "tracing-gum", ] [[package]] name = "polkadot-node-network-protocol" -version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-channel 1.9.0", "async-trait", @@ -10329,8 +10270,8 @@ dependencies = [ [[package]] name = "polkadot-node-primitives" -version = "17.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "bounded-vec", @@ -10345,21 +10286,18 @@ dependencies = [ "sp-application-crypto", "sp-consensus-babe", "sp-consensus-slots", - "sp-core", "sp-keystore", "sp-maybe-compressed-blob", - "sp-runtime", "thiserror 1.0.69", "zstd 0.12.4", ] [[package]] name = "polkadot-node-subsystem-types" -version = "21.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", - "bitvec", "derive_more 0.99.20", "fatality", "futures", @@ -10384,21 +10322,19 @@ dependencies = [ [[package]] name = "polkadot-overseer" -version = "21.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "futures-timer", "orchestra", - "parking_lot 0.12.5", "polkadot-node-metrics", "polkadot-node-network-protocol", "polkadot-node-primitives", "polkadot-node-subsystem-types", "polkadot-primitives", "sc-client-api", - "sp-api", "sp-core", "tikv-jemalloc-ctl", "tracing-gum", @@ -10406,8 +10342,8 @@ dependencies = [ [[package]] name = "polkadot-parachain-primitives" -version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "16.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bounded-collections", "derive_more 0.99.20", @@ -10422,8 +10358,8 @@ dependencies = [ [[package]] name = "polkadot-primitives" -version = "17.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "18.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "hex-literal 0.4.1", @@ -10450,8 +10386,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-common" -version = "18.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitvec", "frame-benchmarking", @@ -10482,7 +10418,6 @@ dependencies = [ "rustc-hex", "scale-info", "serde", - "serde_derive", "slot-range-helper", "sp-api", "sp-core", @@ -10501,8 +10436,8 @@ dependencies = [ [[package]] name = "polkadot-runtime-metrics" -version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "20.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bs58", "frame-benchmarking", @@ -10513,12 +10448,11 @@ dependencies = [ [[package]] name = "polkadot-runtime-parachains" -version = "18.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.2.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bitflags 1.3.2", "bitvec", - "derive_more 0.99.20", "frame-benchmarking", "frame-support", "frame-system", @@ -10534,7 +10468,6 @@ dependencies = [ "pallet-session", "pallet-staking", "pallet-timestamp", - "pallet-vesting", "parity-scale-codec", "polkadot-core-primitives", "polkadot-parachain-primitives", @@ -10560,10 +10493,19 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "polkadot-sdk" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb819108697967452fa6d8d96ab4c0d48cbaa423b3156499dcb24f1cf95d6775" +dependencies = [ + "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "polkadot-sdk-frame" -version = "0.8.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.9.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-benchmarking", @@ -10576,6 +10518,7 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", + "serde", "sp-api", "sp-arithmetic", "sp-block-builder", @@ -10596,62 +10539,116 @@ dependencies = [ [[package]] name = "polkadot-statement-table" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "polkadot-primitives", - "sp-core", "tracing-gum", ] [[package]] name = "polkavm" -version = "0.9.3" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a3693e5efdb2bf74e449cd25fd777a28bd7ed87e41f5d5da75eb31b4de48b94" +checksum = "dd044ab1d3b11567ab6b98ca71259a992b4034220d5972988a0e96518e5d343d" dependencies = [ "libc", "log", - "polkavm-assembler", - "polkavm-common", - "polkavm-linux-raw", + "polkavm-assembler 0.18.0", + "polkavm-common 0.18.0", + "polkavm-linux-raw 0.18.0", +] + +[[package]] +name = "polkavm" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfd34e2f74206fff33482ae1718e275f11365ef8c4de7f0e69217f8845303867" +dependencies = [ + "libc", + "log", + "polkavm-assembler 0.21.0", + "polkavm-common 0.21.0", + "polkavm-linux-raw 0.21.0", ] [[package]] name = "polkavm-assembler" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fa96d6d868243acc12de813dd48e756cbadcc8e13964c70d272753266deadc1" +checksum = "eaad38dc420bfed79e6f731471c973ce5ff5e47ab403e63cf40358fef8a6368f" +dependencies = [ + "log", +] + +[[package]] +name = "polkavm-assembler" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f512bc80cb10439391a7c13a9eb2d37cf66b7305e7df0a06d662eff4f5b07625" dependencies = [ "log", ] [[package]] name = "polkavm-common" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d9428a5cfcc85c5d7b9fc4b6a18c4b802d0173d768182a51cc7751640f08b92" +checksum = "31ff33982a807d8567645d4784b9b5d7ab87bcb494f534a57cadd9012688e102" dependencies = [ "log", + "polkavm-assembler 0.18.0", +] + +[[package]] +name = "polkavm-common" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c16b809cfd398f861261c045a8745e6c78b71ea7e0d3ef6f7cc553eb27bc17e" +dependencies = [ + "blake3", + "log", + "polkavm-assembler 0.21.0", ] [[package]] name = "polkavm-derive" -version = "0.9.1" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae8c4bea6f3e11cd89bb18bcdddac10bd9a24015399bd1c485ad68a985a19606" +checksum = "c2eb703f3b6404c13228402e98a5eae063fd16b8f58afe334073ec105ee4117e" dependencies = [ - "polkavm-derive-impl-macro", + "polkavm-derive-impl-macro 0.18.0", +] + +[[package]] +name = "polkavm-derive" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47239245f87329541932c0d7fec750a66a75b13aa87dfe4fbfd637bab86ad387" +dependencies = [ + "polkavm-derive-impl-macro 0.21.0", ] [[package]] name = "polkavm-derive-impl" -version = "0.9.0" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c4fdfc49717fb9a196e74a5d28e0bc764eb394a2c803eb11133a31ac996c60c" +checksum = "2f2116a92e6e96220a398930f4c8a6cda1264206f3e2034fc9982bfd93f261f7" dependencies = [ - "polkavm-common", + "polkavm-common 0.18.0", + "proc-macro2", + "quote", + "syn 2.0.106", +] + +[[package]] +name = "polkavm-derive-impl" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24fd6c6215450c3e57511df5c38a82eb4bde208de15ee15046ac33852f3c3eaa" +dependencies = [ + "polkavm-common 0.21.0", "proc-macro2", "quote", "syn 2.0.106", @@ -10659,34 +10656,67 @@ dependencies = [ [[package]] name = "polkavm-derive-impl-macro" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ba81f7b5faac81e528eb6158a6f3c9e0bb1008e0ffa19653bc8dea925ecb429" +checksum = "48c16669ddc7433e34c1007d31080b80901e3e8e523cb9d4b441c3910cf9294b" dependencies = [ - "polkavm-derive-impl", + "polkavm-derive-impl 0.18.1", + "syn 2.0.106", +] + +[[package]] +name = "polkavm-derive-impl-macro" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36837f6b7edfd6f4498f8d25d81da16cf03bd6992c3e56f3d477dfc90f4fefca" +dependencies = [ + "polkavm-derive-impl 0.21.0", "syn 2.0.106", ] [[package]] name = "polkavm-linker" -version = "0.9.2" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7be503e60cf56c0eb785f90aaba4b583b36bff00e93997d93fef97f9553c39" +checksum = "e9bfe793b094d9ea5c99b7c43ba46e277b0f8f48f4bbfdbabf8d3ebf701a4bd3" dependencies = [ - "gimli 0.28.1", + "dirs", + "gimli 0.31.1", "hashbrown 0.14.5", "log", - "object 0.32.2", - "polkavm-common", + "object 0.36.7", + "polkavm-common 0.18.0", + "regalloc2 0.9.3", + "rustc-demangle", +] + +[[package]] +name = "polkavm-linker" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23bc764986c4a63f9ab9890c3f4eb9b4c13b6ff80d79685bd48ade147234aab4" +dependencies = [ + "dirs", + "gimli 0.31.1", + "hashbrown 0.14.5", + "log", + "object 0.36.7", + "polkavm-common 0.21.0", "regalloc2 0.9.3", "rustc-demangle", ] [[package]] name = "polkavm-linux-raw" -version = "0.9.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26e85d3456948e650dff0cfc85603915847faf893ed1e66b020bb82ef4557120" +checksum = "23eff02c070c70f31878a3d915e88a914ecf3e153741e2fb572dde28cce20fde" + +[[package]] +name = "polkavm-linux-raw" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be6cd1d48c5e7814d287a3e12a339386a5dfa2f3ac72f932335f4cf56467f1b3" [[package]] name = "polling" @@ -10809,7 +10839,7 @@ dependencies = [ [[package]] name = "precompile-utils" version = "0.1.0" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "derive_more 1.0.0", "environmental", @@ -10838,31 +10868,17 @@ dependencies = [ [[package]] name = "precompile-utils-macro" version = "0.1.0" -source = "git+https://github.com/polkadot-evm/frontier?branch=stable2412#75329a2df49e2cc7981485392c31160929d1bd48" +source = "git+https://github.com/polkadot-evm/frontier?branch=stable2503#7d1cff7f13828b563752ad8a71458cab1ea42009" dependencies = [ "case", "num_enum", "prettyplease", "proc-macro2", "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "syn 2.0.106", ] -[[package]] -name = "predicates" -version = "2.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd" -dependencies = [ - "difflib", - "float-cmp", - "itertools 0.10.5", - "normalize-line-endings", - "predicates-core", - "regex", -] - [[package]] name = "predicates" version = "3.1.3" @@ -10917,8 +10933,6 @@ checksum = "0b34d9fd68ae0b74a41b21c03c2f62847aa0ffea044eee893b4c140b37e244e2" dependencies = [ "fixed-hash", "impl-codec 0.6.0", - "impl-serde 0.4.0", - "scale-info", "uint 0.9.5", ] @@ -10932,7 +10946,7 @@ dependencies = [ "impl-codec 0.7.1", "impl-num-traits", "impl-rlp", - "impl-serde 0.5.0", + "impl-serde", "scale-info", "uint 0.10.0", ] @@ -11028,17 +11042,6 @@ dependencies = [ "syn 2.0.106", ] -[[package]] -name = "proc-macro-warning" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1eaa7fa0aa1929ffdf7eeb6eac234dde6268914a14ad44d23521ab6a9b258e" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.106", -] - [[package]] name = "proc-macro-warning" version = "1.84.1" @@ -11075,9 +11078,9 @@ dependencies = [ [[package]] name = "prometheus-client" -version = "0.21.2" +version = "0.22.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c99afa9a01501019ac3a14d71d9f94050346f55ca471ce90c799a15c58f61e2" +checksum = "504ee9ff529add891127c4827eb481bd69dc0ebc72e9a682e187db4caa60c3ca" dependencies = [ "dtoa", "itoa", @@ -11262,33 +11265,15 @@ dependencies = [ [[package]] name = "quick-protobuf-codec" -version = "0.2.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ededb1cd78531627244d51dd0c7139fbe736c7d57af0092a76f0ffb2f56e98" +checksum = "15a0580ab32b169745d7a39db2ba969226ca16738931be152a3209b409de2474" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.7.0", "bytes", "quick-protobuf", "thiserror 1.0.69", - "unsigned-varint 0.7.2", -] - -[[package]] -name = "quinn" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cc2c5017e4b43d5995dcea317bc46c1e09404c0a9664d2908f7f02dfe943d75" -dependencies = [ - "bytes", - "futures-io", - "pin-project-lite", - "quinn-proto 0.10.6", - "quinn-udp 0.4.1", - "rustc-hash 1.1.0", - "rustls 0.21.12", - "thiserror 1.0.69", - "tokio", - "tracing", + "unsigned-varint 0.8.0", ] [[package]] @@ -11299,11 +11284,12 @@ checksum = "b9e20a958963c291dc322d98411f541009df2ced7b5a4f2bd52337638cfccf20" dependencies = [ "bytes", "cfg_aliases 0.2.1", + "futures-io", "pin-project-lite", - "quinn-proto 0.11.13", - "quinn-udp 0.5.14", + "quinn-proto", + "quinn-udp", "rustc-hash 2.1.1", - "rustls 0.23.32", + "rustls", "socket2 0.6.0", "thiserror 2.0.17", "tokio", @@ -11311,23 +11297,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "quinn-proto" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "141bf7dfde2fbc246bfd3fe12f2455aa24b0fbd9af535d8c86c7bd1381ff2b1a" -dependencies = [ - "bytes", - "rand 0.8.5", - "ring 0.16.20", - "rustc-hash 1.1.0", - "rustls 0.21.12", - "slab", - "thiserror 1.0.69", - "tinyvec", - "tracing", -] - [[package]] name = "quinn-proto" version = "0.11.13" @@ -11340,7 +11309,7 @@ dependencies = [ "rand 0.9.2", "ring 0.17.14", "rustc-hash 2.1.1", - "rustls 0.23.32", + "rustls", "rustls-pki-types", "slab", "thiserror 2.0.17", @@ -11349,19 +11318,6 @@ dependencies = [ "web-time", ] -[[package]] -name = "quinn-udp" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "055b4e778e8feb9f93c4e439f71dc2156ef13360b432b799e179a8c4cdf0b1d7" -dependencies = [ - "bytes", - "libc", - "socket2 0.5.10", - "tracing", - "windows-sys 0.48.0", -] - [[package]] name = "quinn-udp" version = "0.5.14" @@ -11522,9 +11478,9 @@ dependencies = [ [[package]] name = "rcgen" -version = "0.10.0" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffbe84efe2f38dea12e9bfc1f65377fdf03e53a18cb3b995faedf7934c7e785b" +checksum = "52c4f3084aa3bc7dfbba4eff4fab2a54db4324965d8872ab933565e6fbd83bc6" dependencies = [ "pem", "ring 0.16.20", @@ -11532,22 +11488,6 @@ dependencies = [ "yasna", ] -[[package]] -name = "reconnecting-jsonrpsee-ws-client" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06fa4f17e09edfc3131636082faaec633c7baa269396b4004040bc6c52f49f65" -dependencies = [ - "cfg_aliases 0.2.1", - "finito", - "futures", - "jsonrpsee 0.23.2", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tracing", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -11680,21 +11620,21 @@ dependencies = [ "http-body 1.0.1", "http-body-util", "hyper 1.7.0", - "hyper-rustls 0.27.7", + "hyper-rustls", "hyper-util", "js-sys", "log", "percent-encoding", "pin-project-lite", - "quinn 0.11.9", - "rustls 0.23.32", + "quinn", + "rustls", "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", "sync_wrapper", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tokio-util", "tower 0.5.2", "tower-http 0.6.6", @@ -11960,32 +11900,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "rustls" -version = "0.21.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-webpki 0.101.7", - "sct", -] - -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring 0.17.14", - "rustls-pki-types", - "rustls-webpki 0.102.8", - "subtle 2.6.1", - "zeroize", -] - [[package]] name = "rustls" version = "0.23.32" @@ -12001,31 +11915,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-native-certs" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" -dependencies = [ - "openssl-probe", - "rustls-pemfile 1.0.4", - "schannel", - "security-framework 2.11.1", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5bfb394eeed242e909609f56089eecfe5fda225042e8b171791b9c95f5931e5" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.2.0", - "rustls-pki-types", - "schannel", - "security-framework 2.11.1", -] - [[package]] name = "rustls-native-certs" version = "0.8.1" @@ -12038,15 +11927,6 @@ dependencies = [ "security-framework 3.5.1", ] -[[package]] -name = "rustls-pemfile" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" -dependencies = [ - "base64 0.21.7", -] - [[package]] name = "rustls-pemfile" version = "2.2.0" @@ -12066,27 +11946,6 @@ dependencies = [ "zeroize", ] -[[package]] -name = "rustls-platform-verifier" -version = "0.3.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "afbb878bdfdf63a336a5e63561b1835e7a8c91524f51621db870169eac84b490" -dependencies = [ - "core-foundation 0.9.4", - "core-foundation-sys", - "jni 0.19.0", - "log", - "once_cell", - "rustls 0.23.32", - "rustls-native-certs 0.7.3", - "rustls-platform-verifier-android", - "rustls-webpki 0.102.8", - "security-framework 2.11.1", - "security-framework-sys", - "webpki-roots 0.26.11", - "winapi", -] - [[package]] name = "rustls-platform-verifier" version = "0.5.3" @@ -12095,11 +11954,11 @@ checksum = "19787cda76408ec5404443dc8b31795c87cd8fec49762dc75fa727740d34acc1" dependencies = [ "core-foundation 0.10.1", "core-foundation-sys", - "jni 0.21.1", + "jni", "log", "once_cell", - "rustls 0.23.32", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-platform-verifier-android", "rustls-webpki 0.103.7", "security-framework 3.5.1", @@ -12124,17 +11983,6 @@ dependencies = [ "untrusted 0.9.0", ] -[[package]] -name = "rustls-webpki" -version = "0.102.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" -dependencies = [ - "ring 0.17.14", - "rustls-pki-types", - "untrusted 0.9.0", -] - [[package]] name = "rustls-webpki" version = "0.103.7" @@ -12166,13 +12014,12 @@ dependencies = [ [[package]] name = "ruzstd" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58c4eb8a81997cf040a091d1f7e1938aeab6749d3a0dfa73af43cdc32393483d" +checksum = "5174a470eeb535a721ae9fdd6e291c2411a906b96592182d05217591d5c5cf7b" dependencies = [ "byteorder", "derive_more 0.99.20", - "twox-hash", ] [[package]] @@ -12201,6 +12048,15 @@ dependencies = [ "bytemuck", ] +[[package]] +name = "salsa20" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" +dependencies = [ + "cipher 0.4.4", +] + [[package]] name = "same-file" version = "1.0.6" @@ -12212,8 +12068,8 @@ dependencies = [ [[package]] name = "sc-allocator" -version = "30.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "31.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "sp-core", @@ -12223,17 +12079,15 @@ dependencies = [ [[package]] name = "sc-authority-discovery" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "futures-timer", "ip_network", - "libp2p", "linked_hash_set", "log", - "multihash 0.19.3", "parity-scale-codec", "prost 0.12.6", "prost-build 0.13.5", @@ -12253,11 +12107,10 @@ dependencies = [ [[package]] name = "sc-basic-authorship" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", - "futures-timer", "log", "parity-scale-codec", "sc-block-builder", @@ -12275,8 +12128,8 @@ dependencies = [ [[package]] name = "sc-block-builder" -version = "0.43.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.44.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "sp-api", @@ -12290,12 +12143,11 @@ dependencies = [ [[package]] name = "sc-chain-spec" -version = "41.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "43.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "docify", - "log", "memmap2 0.9.8", "parity-scale-codec", "sc-chain-spec-derive", @@ -12307,7 +12159,7 @@ dependencies = [ "serde_json", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-genesis-builder", "sp-io", "sp-runtime", @@ -12318,7 +12170,7 @@ dependencies = [ [[package]] name = "sc-chain-spec-derive" version = "12.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -12328,8 +12180,8 @@ dependencies = [ [[package]] name = "sc-cli" -version = "0.50.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.52.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "chrono", @@ -12370,8 +12222,8 @@ dependencies = [ [[package]] name = "sc-client-api" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "fnv", "futures", @@ -12389,7 +12241,6 @@ dependencies = [ "sp-externalities", "sp-runtime", "sp-state-machine", - "sp-statement-store", "sp-storage", "sp-trie", "substrate-prometheus-endpoint", @@ -12397,8 +12248,8 @@ dependencies = [ [[package]] name = "sc-client-db" -version = "0.45.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.46.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hash-db", "kvdb", @@ -12423,19 +12274,18 @@ dependencies = [ [[package]] name = "sc-consensus" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "log", - "mockall 0.11.4", + "mockall", "parking_lot 0.12.5", "sc-client-api", "sc-network-types", "sc-utils", "serde", - "sp-api", "sp-blockchain", "sp-consensus", "sp-core", @@ -12447,8 +12297,8 @@ dependencies = [ [[package]] name = "sc-consensus-aura" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", @@ -12476,8 +12326,8 @@ dependencies = [ [[package]] name = "sc-consensus-babe" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "fork-tree", @@ -12502,7 +12352,7 @@ dependencies = [ "sp-consensus-babe", "sp-consensus-slots", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-inherents", "sp-keystore", "sp-runtime", @@ -12512,13 +12362,12 @@ dependencies = [ [[package]] name = "sc-consensus-beefy" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", "async-trait", - "fnv", "futures", "log", "parity-scale-codec", @@ -12537,7 +12386,6 @@ dependencies = [ "sp-consensus", "sp-consensus-beefy", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -12548,11 +12396,11 @@ dependencies = [ [[package]] name = "sc-consensus-beefy-rpc" -version = "27.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "29.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -12568,8 +12416,8 @@ dependencies = [ [[package]] name = "sc-consensus-epochs" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "fork-tree", "parity-scale-codec", @@ -12581,8 +12429,8 @@ dependencies = [ [[package]] name = "sc-consensus-grandpa" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ahash", "array-bytes", @@ -12616,7 +12464,7 @@ dependencies = [ "sp-consensus", "sp-consensus-grandpa", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-keystore", "sp-runtime", "substrate-prometheus-endpoint", @@ -12625,14 +12473,14 @@ dependencies = [ [[package]] name = "sc-consensus-manual-seal" -version = "0.49.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.51.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "assert_matches", "async-trait", "futures", "futures-timer", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "sc-client-api", @@ -12660,8 +12508,8 @@ dependencies = [ [[package]] name = "sc-consensus-slots" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", @@ -12683,8 +12531,8 @@ dependencies = [ [[package]] name = "sc-executor" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -12706,10 +12554,10 @@ dependencies = [ [[package]] name = "sc-executor-common" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "polkavm", + "polkavm 0.18.0", "sc-allocator", "sp-maybe-compressed-blob", "sp-wasm-interface", @@ -12719,23 +12567,21 @@ dependencies = [ [[package]] name = "sc-executor-polkavm" -version = "0.33.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.35.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", - "polkavm", + "polkavm 0.18.0", "sc-executor-common", "sp-wasm-interface", ] [[package]] name = "sc-executor-wasmtime" -version = "0.36.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "anyhow", - "cfg-if", - "libc", "log", "parking_lot 0.12.5", "rustix 0.36.17", @@ -12748,8 +12594,8 @@ dependencies = [ [[package]] name = "sc-informant" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "console", "futures", @@ -12757,7 +12603,6 @@ dependencies = [ "log", "sc-client-api", "sc-network", - "sc-network-common", "sc-network-sync", "sp-blockchain", "sp-runtime", @@ -12765,8 +12610,8 @@ dependencies = [ [[package]] name = "sc-keystore" -version = "34.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "35.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "parking_lot 0.12.5", @@ -12779,8 +12624,8 @@ dependencies = [ [[package]] name = "sc-mixnet" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "arrayvec 0.7.6", @@ -12790,7 +12635,6 @@ dependencies = [ "futures-timer", "log", "mixnet", - "multiaddr 0.18.2", "parity-scale-codec", "parking_lot 0.12.5", "sc-client-api", @@ -12808,13 +12652,13 @@ dependencies = [ [[package]] name = "sc-network" -version = "0.48.4" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", "async-trait", - "asynchronous-codec", + "asynchronous-codec 0.6.2", "bytes", "cid 0.9.0", "either", @@ -12826,8 +12670,7 @@ dependencies = [ "linked_hash_set", "litep2p", "log", - "mockall 0.11.4", - "once_cell", + "mockall", "parity-scale-codec", "parking_lot 0.12.5", "partial_sort", @@ -12859,26 +12702,18 @@ dependencies = [ [[package]] name = "sc-network-common" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.48.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "async-trait", "bitflags 1.3.2", - "futures", - "libp2p-identity", "parity-scale-codec", - "prost-build 0.13.5", - "sc-consensus", - "sc-network-types", - "sp-consensus", - "sp-consensus-grandpa", "sp-runtime", ] [[package]] name = "sc-network-gossip" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ahash", "futures", @@ -12896,8 +12731,8 @@ dependencies = [ [[package]] name = "sc-network-light" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", @@ -12917,17 +12752,16 @@ dependencies = [ [[package]] name = "sc-network-sync" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "async-channel 1.9.0", "async-trait", "fork-tree", "futures", - "futures-timer", "log", - "mockall 0.11.4", + "mockall", "parity-scale-codec", "prost 0.12.6", "prost-build 0.13.5", @@ -12953,8 +12787,8 @@ dependencies = [ [[package]] name = "sc-network-transactions" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "futures", @@ -12972,12 +12806,14 @@ dependencies = [ [[package]] name = "sc-network-types" -version = "0.15.2" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.16.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bs58", + "bytes", "ed25519-dalek", "libp2p-identity", + "libp2p-kad", "litep2p", "log", "multiaddr 0.18.2", @@ -12989,28 +12825,25 @@ dependencies = [ [[package]] name = "sc-offchain" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "array-bytes", "bytes", "fnv", "futures", "futures-timer", "http-body-util", "hyper 1.7.0", - "hyper-rustls 0.27.7", + "hyper-rustls", "hyper-util", - "log", "num_cpus", "once_cell", "parity-scale-codec", "parking_lot 0.12.5", "rand 0.8.5", - "rustls 0.23.32", + "rustls", "sc-client-api", "sc-network", - "sc-network-common", "sc-network-types", "sc-transaction-pool-api", "sc-utils", @@ -13026,8 +12859,8 @@ dependencies = [ [[package]] name = "sc-proposer-metrics" -version = "0.18.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.20.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -13035,11 +12868,11 @@ dependencies = [ [[package]] name = "sc-rpc" -version = "43.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "45.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -13067,10 +12900,10 @@ dependencies = [ [[package]] name = "sc-rpc-api" -version = "0.47.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.49.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "jsonrpsee 0.24.9", + "jsonrpsee", "parity-scale-codec", "sc-chain-spec", "sc-mixnet", @@ -13087,8 +12920,8 @@ dependencies = [ [[package]] name = "sc-rpc-server" -version = "20.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "dyn-clone", "forwarded-header-value", @@ -13098,7 +12931,7 @@ dependencies = [ "http-body-util", "hyper 1.7.0", "ip_network", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "sc-rpc-api", "serde", @@ -13111,15 +12944,15 @@ dependencies = [ [[package]] name = "sc-rpc-spec-v2" -version = "0.48.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.50.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "futures", "futures-util", "hex", "itertools 0.11.0", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -13136,22 +12969,38 @@ dependencies = [ "sp-rpc", "sp-runtime", "sp-version", + "substrate-prometheus-endpoint", "thiserror 1.0.69", "tokio", "tokio-stream", ] +[[package]] +name = "sc-runtime-utilities" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "parity-scale-codec", + "sc-executor", + "sc-executor-common", + "sp-core", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", + "sp-state-machine", + "sp-wasm-interface", + "thiserror 1.0.69", +] + [[package]] name = "sc-service" -version = "0.49.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.51.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "directories", "exit-future", "futures", "futures-timer", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "parking_lot 0.12.5", @@ -13207,8 +13056,8 @@ dependencies = [ [[package]] name = "sc-state-db" -version = "0.37.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.38.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "parity-scale-codec", @@ -13218,8 +13067,8 @@ dependencies = [ [[package]] name = "sc-sysinfo" -version = "41.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "42.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "derive_more 0.99.20", "futures", @@ -13232,15 +13081,14 @@ dependencies = [ "serde", "serde_json", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-io", - "sp-std", ] [[package]] name = "sc-telemetry" -version = "28.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "28.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "chrono", "futures", @@ -13249,7 +13097,6 @@ dependencies = [ "parking_lot 0.12.5", "pin-project", "rand 0.8.5", - "sc-network", "sc-utils", "serde", "serde_json", @@ -13259,8 +13106,8 @@ dependencies = [ [[package]] name = "sc-tracing" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "chrono", "console", @@ -13287,8 +13134,8 @@ dependencies = [ [[package]] name = "sc-tracing-proc-macro" -version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "11.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro-crate 3.4.0", "proc-macro2", @@ -13298,8 +13145,8 @@ dependencies = [ [[package]] name = "sc-transaction-pool" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", @@ -13317,7 +13164,7 @@ dependencies = [ "sp-api", "sp-blockchain", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-runtime", "sp-tracing", "sp-transaction-pool", @@ -13325,15 +13172,17 @@ dependencies = [ "thiserror 1.0.69", "tokio", "tokio-stream", + "tracing", ] [[package]] name = "sc-transaction-pool-api" -version = "38.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", + "indexmap 2.11.4", "log", "parity-scale-codec", "serde", @@ -13345,8 +13194,8 @@ dependencies = [ [[package]] name = "sc-utils" -version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "18.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-channel 1.9.0", "futures", @@ -13377,7 +13226,20 @@ checksum = "e98f3262c250d90e700bb802eb704e1f841e03331c2eb815e46516c4edbf5b27" dependencies = [ "derive_more 0.99.20", "parity-scale-codec", - "primitive-types 0.12.2", + "scale-bits", + "scale-type-resolver", + "smallvec", +] + +[[package]] +name = "scale-decode" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8ae9cc099ae85ff28820210732b00f019546f36f33225f509fe25d5816864a0" +dependencies = [ + "derive_more 1.0.0", + "parity-scale-codec", + "primitive-types 0.13.1", "scale-bits", "scale-decode-derive", "scale-type-resolver", @@ -13386,25 +13248,25 @@ dependencies = [ [[package]] name = "scale-decode-derive" -version = "0.13.1" +version = "0.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9bb22f574168103cdd3133b19281639ca65ad985e24612728f727339dcaf4021" +checksum = "5ed9401effa946b493f9f84dc03714cca98119b230497df6f3df6b84a2b03648" dependencies = [ - "darling 0.14.4", + "darling", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.106", ] [[package]] name = "scale-encode" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "528464e6ae6c8f98e2b79633bf79ef939552e795e316579dab09c61670d56602" +checksum = "5f9271284d05d0749c40771c46180ce89905fd95aa72a2a2fddb4b7c0aa424db" dependencies = [ - "derive_more 0.99.20", + "derive_more 1.0.0", "parity-scale-codec", - "primitive-types 0.12.2", + "primitive-types 0.13.1", "scale-bits", "scale-encode-derive", "scale-type-resolver", @@ -13413,11 +13275,11 @@ dependencies = [ [[package]] name = "scale-encode-derive" -version = "0.7.2" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef2618f123c88da9cd8853b69d766068f1eddc7692146d7dfe9b89e25ce2efd" +checksum = "102fbc6236de6c53906c0b262f12c7aa69c2bdc604862c12728f5f4d370bc137" dependencies = [ - "darling 0.20.11", + "darling", "proc-macro-crate 3.4.0", "proc-macro2", "quote", @@ -13462,9 +13324,9 @@ dependencies = [ [[package]] name = "scale-typegen" -version = "0.8.0" +version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "498d1aecf2ea61325d4511787c115791639c0fd21ef4f8e11e49dd09eff2bbac" +checksum = "0dc4c70c7fea2eef1740f0081d3fe385d8bee1eef11e9272d3bec7dc8e5438e0" dependencies = [ "proc-macro2", "quote", @@ -13475,18 +13337,17 @@ dependencies = [ [[package]] name = "scale-value" -version = "0.16.3" +version = "0.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cd6ab090d823e75cfdb258aad5fe92e13f2af7d04b43a55d607d25fcc38c811" +checksum = "f5e0ef2a0ee1e02a69ada37feb87ea1616ce9808aca072befe2d3131bf28576e" dependencies = [ "base58", "blake2 0.10.6", - "derive_more 0.99.20", + "derive_more 1.0.0", "either", - "frame-metadata 15.1.0", "parity-scale-codec", "scale-bits", - "scale-decode", + "scale-decode 0.14.0", "scale-encode", "scale-info", "scale-type-resolver", @@ -13555,13 +13416,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d68f2ec51b097e4c1a75b681a8bec621909b5e91f15bb7b840c4f2f7b01148b2" [[package]] -name = "sct" -version = "0.7.1" +name = "scrypt" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" +checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" dependencies = [ - "ring 0.17.14", - "untrusted 0.9.0", + "password-hash", + "pbkdf2", + "salsa20", + "sha2 0.10.9", ] [[package]] @@ -13597,6 +13460,17 @@ dependencies = [ "secp256k1-sys 0.9.2", ] +[[package]] +name = "secp256k1" +version = "0.30.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b50c5943d326858130af85e049f2661ba3c78b26589b8ab98e65e80ae44a1252" +dependencies = [ + "bitcoin_hashes 0.14.1", + "rand 0.8.5", + "secp256k1-sys 0.10.1", +] + [[package]] name = "secp256k1-sys" version = "0.8.2" @@ -13615,6 +13489,15 @@ dependencies = [ "cc", ] +[[package]] +name = "secp256k1-sys" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4387882333d3aa8cb20530a17c69a3752e97837832f34f6dccc760e715001d9" +dependencies = [ + "cc", +] + [[package]] name = "secrecy" version = "0.8.0" @@ -13624,6 +13507,15 @@ dependencies = [ "zeroize", ] +[[package]] +name = "secrecy" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e891af845473308773346dc847b2c23ee78fe442e0472ac50e22a18a93d3ae5a" +dependencies = [ + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -13634,7 +13526,6 @@ dependencies = [ "core-foundation 0.9.4", "core-foundation-sys", "libc", - "num-bigint", "security-framework-sys", ] @@ -13704,12 +13595,6 @@ dependencies = [ "pest", ] -[[package]] -name = "send_wrapper" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" - [[package]] name = "serde" version = "1.0.228" @@ -13823,19 +13708,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha-1" -version = "0.9.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "99cd6713db3cf16b6c84e06321e049a9b9f699826e16096d23bbcc44d15d51a6" -dependencies = [ - "block-buffer 0.9.0", - "cfg-if", - "cpufeatures", - "digest 0.9.0", - "opaque-debug 0.3.1", -] - [[package]] name = "sha1" version = "0.10.6" @@ -13902,8 +13774,8 @@ dependencies = [ [[package]] name = "shc-actors-derive" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "once_cell", "proc-macro2", @@ -13915,8 +13787,8 @@ dependencies = [ [[package]] name = "shc-actors-framework" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "bincode", @@ -13934,8 +13806,8 @@ dependencies = [ [[package]] name = "shc-blockchain-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -13990,8 +13862,8 @@ dependencies = [ [[package]] name = "shc-blockchain-service-db" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "chrono", "diesel", @@ -14000,9 +13872,9 @@ dependencies = [ "futures", "hex", "log", - "rustls 0.23.32", - "rustls-pemfile 2.2.0", - "rustls-platform-verifier 0.5.3", + "rustls", + "rustls-pemfile", + "rustls-platform-verifier", "sc-transaction-pool-api", "serde", "serde_json", @@ -14014,8 +13886,8 @@ dependencies = [ [[package]] name = "shc-client" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -14031,7 +13903,7 @@ dependencies = [ "frame-system", "futures", "hex", - "jsonrpsee 0.24.9", + "jsonrpsee", "kvdb", "kvdb-rocksdb", "lazy_static", @@ -14089,14 +13961,15 @@ dependencies = [ [[package]] name = "shc-common" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "bigdecimal", "bincode", "bytes", "cumulus-primitives-core", + "cumulus-primitives-proof-size-hostfunction", "cumulus-primitives-storage-weight-reclaim", "fp-account", "frame-benchmarking", @@ -14145,17 +14018,16 @@ dependencies = [ "sp-keystore", "sp-rpc", "sp-runtime", - "sp-std", "sp-trie", "substrate-frame-rpc-system", "thiserror 1.0.69", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shc-file-manager" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "bincode", "hash-db", @@ -14174,13 +14046,13 @@ dependencies = [ "sp-trie", "strum 0.26.3", "thiserror 1.0.69", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shc-file-transfer-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -14210,8 +14082,8 @@ dependencies = [ [[package]] name = "shc-fisherman-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "async-trait", "diesel", @@ -14241,8 +14113,8 @@ dependencies = [ [[package]] name = "shc-forest-manager" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "async-trait", @@ -14262,13 +14134,13 @@ dependencies = [ "sp-trie", "thiserror 1.0.69", "tokio", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shc-indexer-db" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "bigdecimal", "chrono", @@ -14278,9 +14150,9 @@ dependencies = [ "futures", "hex", "log", - "rustls 0.23.32", - "rustls-pemfile 2.2.0", - "rustls-platform-verifier 0.5.3", + "rustls", + "rustls-pemfile", + "rustls-platform-verifier", "sc-network", "serde", "serde_json", @@ -14295,8 +14167,8 @@ dependencies = [ [[package]] name = "shc-indexer-service" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "anyhow", "array-bytes", @@ -14346,8 +14218,8 @@ dependencies = [ [[package]] name = "shc-rpc" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "array-bytes", "async-trait", @@ -14355,7 +14227,7 @@ dependencies = [ "futures", "futures-util", "hex", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "mime_guess", "pallet-file-system-runtime-api", @@ -14368,6 +14240,7 @@ dependencies = [ "sc-rpc-api", "serde", "shc-actors-framework", + "shc-blockchain-service", "shc-common", "shc-file-manager", "shc-file-transfer-service", @@ -14392,8 +14265,8 @@ dependencies = [ [[package]] name = "shc-telemetry" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "log", "substrate-prometheus-endpoint", @@ -14409,8 +14282,8 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "shp-constants" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "sp-core", "sp-runtime", @@ -14418,8 +14291,8 @@ dependencies = [ [[package]] name = "shp-data-price-updater" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", @@ -14428,13 +14301,12 @@ dependencies = [ "shp-traits", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "shp-file-key-verifier" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", @@ -14444,15 +14316,14 @@ dependencies = [ "shp-traits", "sp-core", "sp-runtime", - "sp-std", "sp-trie", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shp-file-metadata" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "hex", "num-bigint", @@ -14467,8 +14338,8 @@ dependencies = [ [[package]] name = "shp-forest-verifier" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", @@ -14477,23 +14348,22 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "sp-trie", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "shp-opaque" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "sp-runtime", ] [[package]] name = "shp-session-keys" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "async-trait", "parity-scale-codec", @@ -14502,27 +14372,25 @@ dependencies = [ "sp-inherents", "sp-keystore", "sp-runtime", - "sp-std", ] [[package]] name = "shp-traits" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", "sp-core", "sp-runtime", - "sp-std", "sp-trie", ] [[package]] name = "shp-treasury-funding" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "log", "shp-traits", @@ -14532,21 +14400,20 @@ dependencies = [ [[package]] name = "shp-tx-implicits-runtime-api" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "parity-scale-codec", "scale-info", "sp-api", "sp-core", "sp-runtime", - "sp-std", ] [[package]] name = "shp-types" -version = "0.4.3" -source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.4.3#0176413b97dbbacb9148f1134e2797e174afa713" +version = "0.5.1" +source = "git+https://github.com/Moonsong-Labs/storage-hub.git?tag=v0.5.1#f1d33efb306f972675830e06a6f44e9c5d9d5f71" dependencies = [ "sp-core", "sp-runtime", @@ -14646,8 +14513,8 @@ checksum = "826167069c09b99d56f31e9ae5c99049e932a98c9dc2dac47645b08dbbf76ba7" [[package]] name = "slot-range-helper" -version = "16.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "17.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "enumn", "parity-scale-codec", @@ -14680,14 +14547,14 @@ dependencies = [ [[package]] name = "smoldot" -version = "0.16.0" +version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d1eaa97d77be4d026a1e7ffad1bb3b78448763b357ea6f8188d3e6f736a9b9" +checksum = "966e72d77a3b2171bb7461d0cb91f43670c63558c62d7cf42809cae6c8b6b818" dependencies = [ "arrayvec 0.7.6", "async-lock", "atomic-take", - "base64 0.21.7", + "base64 0.22.1", "bip39", "blake2-rfc", "bs58", @@ -14696,18 +14563,17 @@ dependencies = [ "derive_more 0.99.20", "ed25519-zebra", "either", - "event-listener 4.0.3", + "event-listener 5.4.1", "fnv", "futures-lite", "futures-util", "hashbrown 0.14.5", "hex", "hmac 0.12.1", - "itertools 0.12.1", + "itertools 0.13.0", "libm", "libsecp256k1", "merlin", - "no-std-net", "nom", "num-bigint", "num-rational", @@ -14726,7 +14592,7 @@ dependencies = [ "siphasher 1.0.1", "slab", "smallvec", - "soketto 0.7.1", + "soketto", "twox-hash", "wasmi", "x25519-dalek", @@ -14735,27 +14601,27 @@ dependencies = [ [[package]] name = "smoldot-light" -version = "0.14.0" +version = "0.16.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5496f2d116b7019a526b1039ec2247dd172b8670633b1a64a614c9ea12c9d8c7" +checksum = "2a33b06891f687909632ce6a4e3fd7677b24df930365af3d0bcb078310129f3f" dependencies = [ "async-channel 2.5.0", "async-lock", - "base64 0.21.7", + "base64 0.22.1", "blake2-rfc", + "bs58", "derive_more 0.99.20", "either", - "event-listener 4.0.3", + "event-listener 5.4.1", "fnv", "futures-channel", "futures-lite", "futures-util", "hashbrown 0.14.5", "hex", - "itertools 0.12.1", + "itertools 0.13.0", "log", "lru 0.12.5", - "no-std-net", "parking_lot 0.12.5", "pin-project", "rand 0.8.5", @@ -14804,8 +14670,8 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" -version = "0.12.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.13.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "byte-slice-cast", "frame-support", @@ -14814,7 +14680,7 @@ dependencies = [ "rlp 0.6.1", "scale-info", "serde", - "snowbridge-ethereum 0.11.0", + "snowbridge-ethereum 0.12.0", "snowbridge-milagro-bls", "sp-core", "sp-io", @@ -14826,7 +14692,7 @@ dependencies = [ [[package]] name = "snowbridge-beacon-primitives" -version = "0.26.0" +version = "0.30.0" dependencies = [ "byte-slice-cast", "frame-support", @@ -14841,25 +14707,25 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "ssz_rs", "ssz_rs_derive", ] [[package]] name = "snowbridge-core" -version = "0.12.2" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.13.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ + "bp-relayers", "ethabi-decode", "frame-support", "frame-system", "hex-literal 0.4.1", + "log", "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", "serde", - "snowbridge-beacon-primitives 0.12.1", "sp-arithmetic", "sp-core", "sp-io", @@ -14867,11 +14733,12 @@ dependencies = [ "sp-std", "staging-xcm", "staging-xcm-builder", + "staging-xcm-executor", ] [[package]] name = "snowbridge-core" -version = "0.26.0" +version = "0.30.0" dependencies = [ "bp-relayers", "ethabi-decode", @@ -14888,7 +14755,6 @@ dependencies = [ "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -14912,13 +14778,12 @@ dependencies = [ "serde_json", "sp-io", "sp-runtime", - "sp-std", ] [[package]] name = "snowbridge-ethereum" -version = "0.11.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.12.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ethabi-decode", "ethbloom", @@ -14948,13 +14813,12 @@ dependencies = [ "log", "parity-scale-codec", "scale-info", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", - "snowbridge-verification-primitives", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", + "snowbridge-verification-primitives 0.30.0", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -14962,7 +14826,18 @@ dependencies = [ [[package]] name = "snowbridge-merkle-tree" -version = "0.26.0" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" +dependencies = [ + "parity-scale-codec", + "scale-info", + "sp-core", + "sp-runtime", +] + +[[package]] +name = "snowbridge-merkle-tree" +version = "0.30.0" dependencies = [ "array-bytes", "hex", @@ -14970,7 +14845,7 @@ dependencies = [ "parity-scale-codec", "scale-info", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-runtime", "sp-tracing", ] @@ -14990,33 +14865,22 @@ dependencies = [ "zeroize", ] -[[package]] -name = "snowbridge-outbound-queue-merkle-tree" -version = "0.10.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" -dependencies = [ - "parity-scale-codec", - "scale-info", - "sp-core", - "sp-runtime", -] - [[package]] name = "snowbridge-outbound-queue-primitives" -version = "0.26.0" +version = "0.2.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "alloy-core", "ethabi-decode", "frame-support", "frame-system", - "hex", - "hex-literal 0.3.4", + "hex-literal 0.4.1", "log", "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-verification-primitives", + "snowbridge-core 0.13.2", + "snowbridge-verification-primitives 0.2.0", "sp-arithmetic", "sp-core", "sp-io", @@ -15027,24 +14891,48 @@ dependencies = [ "staging-xcm-executor", ] +[[package]] +name = "snowbridge-outbound-queue-primitives" +version = "0.30.0" +dependencies = [ + "alloy-core", + "ethabi-decode", + "frame-support", + "frame-system", + "hex", + "hex-literal 0.3.4", + "log", + "parity-scale-codec", + "polkadot-parachain-primitives", + "scale-info", + "snowbridge-core 0.30.0", + "snowbridge-verification-primitives 0.30.0", + "sp-arithmetic", + "sp-core", + "sp-io", + "sp-runtime", + "staging-xcm", + "staging-xcm-builder", + "staging-xcm-executor", +] + [[package]] name = "snowbridge-outbound-queue-v2-runtime-api" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-api", - "sp-std", "staging-xcm", ] [[package]] name = "snowbridge-pallet-ethereum-client" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15057,15 +14945,14 @@ dependencies = [ "scale-info", "serde", "serde_json", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-ethereum 0.3.0", "snowbridge-inbound-queue-primitives", "snowbridge-pallet-ethereum-client-fixtures", "sp-core", "sp-io", "sp-runtime", - "sp-std", "static_assertions", ] @@ -15074,16 +14961,15 @@ name = "snowbridge-pallet-ethereum-client-fixtures" version = "0.9.0" dependencies = [ "hex-literal 0.3.4", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "sp-core", - "sp-std", ] [[package]] name = "snowbridge-pallet-inbound-queue-v2" -version = "0.26.0" +version = "0.30.0" dependencies = [ "alloy-core", "bp-relayers", @@ -15097,8 +14983,8 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "snowbridge-pallet-ethereum-client", "snowbridge-pallet-inbound-queue-v2-fixtures", @@ -15107,7 +14993,6 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -15119,19 +15004,18 @@ name = "snowbridge-pallet-inbound-queue-v2-fixtures" version = "0.10.0" dependencies = [ "hex-literal 0.3.4", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", "sp-core", - "sp-std", ] [[package]] name = "snowbridge-pallet-outbound-queue" -version = "0.12.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.13.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "bridge-hub-common 0.12.0", + "bridge-hub-common 0.13.1 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "ethabi-decode", "frame-benchmarking", "frame-support", @@ -15139,8 +15023,9 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-core 0.12.2", - "snowbridge-outbound-queue-merkle-tree", + "snowbridge-core 0.13.2", + "snowbridge-merkle-tree 0.2.0", + "snowbridge-outbound-queue-primitives 0.2.2", "sp-arithmetic", "sp-core", "sp-io", @@ -15150,7 +15035,7 @@ dependencies = [ [[package]] name = "snowbridge-pallet-outbound-queue-v2" -version = "0.26.0" +version = "0.30.0" dependencies = [ "alloy-core", "bp-relayers", @@ -15164,18 +15049,17 @@ dependencies = [ "parity-scale-codec", "scale-info", "serde", - "snowbridge-beacon-primitives 0.26.0", - "snowbridge-core 0.26.0", + "snowbridge-beacon-primitives 0.30.0", + "snowbridge-core 0.30.0", "snowbridge-inbound-queue-primitives", - "snowbridge-merkle-tree", - "snowbridge-outbound-queue-primitives", - "snowbridge-verification-primitives", + "snowbridge-merkle-tree 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", + "snowbridge-verification-primitives 0.30.0", "sp-arithmetic", "sp-core", "sp-io", "sp-keyring", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -15196,20 +15080,19 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-pallet-outbound-queue", "sp-core", "sp-io", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-executor", ] [[package]] name = "snowbridge-pallet-system-v2" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15221,8 +15104,8 @@ dependencies = [ "parity-scale-codec", "polkadot-primitives", "scale-info", - "snowbridge-core 0.26.0", - "snowbridge-outbound-queue-primitives", + "snowbridge-core 0.30.0", + "snowbridge-outbound-queue-primitives 0.30.0", "snowbridge-pallet-outbound-queue-v2", "snowbridge-pallet-system", "snowbridge-test-utils", @@ -15230,25 +15113,23 @@ dependencies = [ "sp-io", "sp-keyring", "sp-runtime", - "sp-std", "staging-xcm", "staging-xcm-executor", ] [[package]] name = "snowbridge-system-v2-runtime-api" -version = "0.26.0" +version = "0.30.0" dependencies = [ "parity-scale-codec", - "snowbridge-core 0.26.0", + "snowbridge-core 0.30.0", "sp-api", - "sp-std", "staging-xcm", ] [[package]] name = "snowbridge-test-utils" -version = "0.26.0" +version = "0.30.0" dependencies = [ "frame-benchmarking", "frame-support", @@ -15258,9 +15139,8 @@ dependencies = [ "pallet-xcm", "parity-scale-codec", "scale-info", - "snowbridge-outbound-queue-primitives", + "snowbridge-outbound-queue-primitives 0.30.0", "sp-core", - "sp-std", "staging-xcm", "staging-xcm-builder", "staging-xcm-executor", @@ -15268,24 +15148,26 @@ dependencies = [ [[package]] name = "snowbridge-verification-primitives" -version = "0.26.0" +version = "0.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "parity-scale-codec", "scale-info", - "snowbridge-beacon-primitives 0.26.0", + "snowbridge-beacon-primitives 0.13.1", "sp-core", "sp-std", ] [[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" +name = "snowbridge-verification-primitives" +version = "0.30.0" dependencies = [ - "libc", - "winapi", + "frame-support", + "parity-scale-codec", + "scale-info", + "snowbridge-beacon-primitives 0.30.0", + "sp-core", ] [[package]] @@ -15308,21 +15190,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "soketto" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41d1c5305e39e09653383c2c7244f2f78b3bcae37cf50c64cb4789c9f5096ec2" -dependencies = [ - "base64 0.13.1", - "bytes", - "futures", - "httparse", - "log", - "rand 0.8.5", - "sha-1", -] - [[package]] name = "soketto" version = "0.8.1" @@ -15341,8 +15208,8 @@ dependencies = [ [[package]] name = "sp-api" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "hash-db", @@ -15363,8 +15230,8 @@ dependencies = [ [[package]] name = "sp-api-proc-macro" -version = "21.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "22.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "blake2 0.10.6", @@ -15377,8 +15244,8 @@ dependencies = [ [[package]] name = "sp-application-crypto" -version = "39.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15389,8 +15256,8 @@ dependencies = [ [[package]] name = "sp-arithmetic" -version = "26.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "26.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "integer-sqrt", @@ -15403,8 +15270,8 @@ dependencies = [ [[package]] name = "sp-authority-discovery" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15415,8 +15282,8 @@ dependencies = [ [[package]] name = "sp-block-builder" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-api", "sp-inherents", @@ -15425,8 +15292,8 @@ dependencies = [ [[package]] name = "sp-blockchain" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "futures", "parity-scale-codec", @@ -15444,13 +15311,12 @@ dependencies = [ [[package]] name = "sp-consensus" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "futures", "log", - "sp-core", "sp-inherents", "sp-runtime", "sp-state-machine", @@ -15459,8 +15325,8 @@ dependencies = [ [[package]] name = "sp-consensus-aura" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -15475,8 +15341,8 @@ dependencies = [ [[package]] name = "sp-consensus-babe" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -15493,8 +15359,8 @@ dependencies = [ [[package]] name = "sp-consensus-beefy" -version = "23.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "24.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15502,7 +15368,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-io", "sp-keystore", "sp-mmr-primitives", @@ -15513,8 +15379,8 @@ dependencies = [ [[package]] name = "sp-consensus-grandpa" -version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "23.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "finality-grandpa", "log", @@ -15530,8 +15396,8 @@ dependencies = [ [[package]] name = "sp-consensus-slots" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15541,9 +15407,10 @@ dependencies = [ [[package]] name = "sp-core" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ + "ark-vrf", "array-bytes", "bitflags 1.3.2", "blake2 0.10.6", @@ -15554,7 +15421,7 @@ dependencies = [ "futures", "hash-db", "hash256-std-hasher", - "impl-serde 0.5.0", + "impl-serde", "itertools 0.11.0", "k256", "libsecp256k1", @@ -15569,9 +15436,9 @@ dependencies = [ "scale-info", "schnorrkel", "secp256k1 0.28.2", - "secrecy", + "secrecy 0.8.0", "serde", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-debug-derive", "sp-externalities", "sp-runtime-interface", @@ -15602,7 +15469,7 @@ dependencies = [ [[package]] name = "sp-crypto-hashing" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "blake2b_simd", "byteorder", @@ -15615,17 +15482,17 @@ dependencies = [ [[package]] name = "sp-crypto-hashing-proc-macro" version = "0.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "quote", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "syn 2.0.106", ] [[package]] name = "sp-database" version = "10.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "kvdb", "parking_lot 0.12.5", @@ -15634,7 +15501,7 @@ dependencies = [ [[package]] name = "sp-debug-derive" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "proc-macro2", "quote", @@ -15644,7 +15511,7 @@ dependencies = [ [[package]] name = "sp-externalities" version = "0.30.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "environmental", "parity-scale-codec", @@ -15653,8 +15520,8 @@ dependencies = [ [[package]] name = "sp-genesis-builder" -version = "0.16.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.17.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15665,8 +15532,8 @@ dependencies = [ [[package]] name = "sp-inherents" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "impl-trait-for-tuples", @@ -15678,8 +15545,8 @@ dependencies = [ [[package]] name = "sp-io" -version = "39.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "40.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bytes", "docify", @@ -15687,11 +15554,11 @@ dependencies = [ "libsecp256k1", "log", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.18.0", "rustversion", "secp256k1 0.28.2", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-externalities", "sp-keystore", "sp-runtime-interface", @@ -15704,8 +15571,8 @@ dependencies = [ [[package]] name = "sp-keyring" -version = "40.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-core", "sp-runtime", @@ -15714,8 +15581,8 @@ dependencies = [ [[package]] name = "sp-keystore" -version = "0.41.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.42.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "parking_lot 0.12.5", @@ -15726,7 +15593,7 @@ dependencies = [ [[package]] name = "sp-maybe-compressed-blob" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "thiserror 1.0.69", "zstd 0.12.4", @@ -15734,18 +15601,18 @@ dependencies = [ [[package]] name = "sp-metadata-ir" -version = "0.8.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.10.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "parity-scale-codec", "scale-info", ] [[package]] name = "sp-mixnet" -version = "0.13.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.14.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15755,8 +15622,8 @@ dependencies = [ [[package]] name = "sp-mmr-primitives" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "log", "parity-scale-codec", @@ -15772,8 +15639,8 @@ dependencies = [ [[package]] name = "sp-npos-elections" -version = "35.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15785,8 +15652,8 @@ dependencies = [ [[package]] name = "sp-offchain" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-api", "sp-core", @@ -15795,8 +15662,8 @@ dependencies = [ [[package]] name = "sp-panic-handler" -version = "13.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "13.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "backtrace", "regex", @@ -15804,8 +15671,8 @@ dependencies = [ [[package]] name = "sp-rpc" -version = "33.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "34.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "rustc-hash 1.1.0", "serde", @@ -15814,8 +15681,8 @@ dependencies = [ [[package]] name = "sp-runtime" -version = "40.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "41.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "binary-merkle-tree", "docify", @@ -15843,13 +15710,13 @@ dependencies = [ [[package]] name = "sp-runtime-interface" -version = "29.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "29.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bytes", "impl-trait-for-tuples", "parity-scale-codec", - "polkavm-derive", + "polkavm-derive 0.18.0", "primitive-types 0.13.1", "sp-externalities", "sp-runtime-interface-proc-macro", @@ -15863,7 +15730,7 @@ dependencies = [ [[package]] name = "sp-runtime-interface-proc-macro" version = "18.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "expander", @@ -15875,8 +15742,8 @@ dependencies = [ [[package]] name = "sp-session" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "38.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "scale-info", @@ -15889,8 +15756,8 @@ dependencies = [ [[package]] name = "sp-staking" -version = "37.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "38.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "impl-trait-for-tuples", "parity-scale-codec", @@ -15902,8 +15769,8 @@ dependencies = [ [[package]] name = "sp-state-machine" -version = "0.44.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.45.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hash-db", "log", @@ -15917,13 +15784,13 @@ dependencies = [ "sp-trie", "thiserror 1.0.69", "tracing", - "trie-db 0.29.1", + "trie-db 0.30.0", ] [[package]] name = "sp-statement-store" -version = "19.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "20.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "aes-gcm", "curve25519-dalek", @@ -15936,7 +15803,7 @@ dependencies = [ "sp-api", "sp-application-crypto", "sp-core", - "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6)", + "sp-crypto-hashing 0.1.0 (git+https://github.com/paritytech/polkadot-sdk?branch=stable2503)", "sp-externalities", "sp-runtime", "sp-runtime-interface", @@ -15947,14 +15814,14 @@ dependencies = [ [[package]] name = "sp-std" version = "14.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" [[package]] name = "sp-storage" version = "22.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "ref-cast", "serde", @@ -15963,8 +15830,8 @@ dependencies = [ [[package]] name = "sp-timestamp" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -15975,8 +15842,8 @@ dependencies = [ [[package]] name = "sp-tracing" -version = "17.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "17.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", "tracing", @@ -15986,8 +15853,8 @@ dependencies = [ [[package]] name = "sp-transaction-pool" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "sp-api", "sp-runtime", @@ -15995,8 +15862,8 @@ dependencies = [ [[package]] name = "sp-transaction-storage-proof" -version = "35.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "36.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "async-trait", "parity-scale-codec", @@ -16009,8 +15876,8 @@ dependencies = [ [[package]] name = "sp-trie" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "ahash", "hash-db", @@ -16025,16 +15892,16 @@ dependencies = [ "sp-externalities", "thiserror 1.0.69", "tracing", - "trie-db 0.29.1", + "trie-db 0.30.0", "trie-root", ] [[package]] name = "sp-version" -version = "38.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "39.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ - "impl-serde 0.5.0", + "impl-serde", "parity-scale-codec", "parity-wasm", "scale-info", @@ -16049,10 +15916,10 @@ dependencies = [ [[package]] name = "sp-version-proc-macro" version = "15.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "parity-scale-codec", - "proc-macro-warning 1.84.1", + "proc-macro-warning", "proc-macro2", "quote", "syn 2.0.106", @@ -16061,7 +15928,7 @@ dependencies = [ [[package]] name = "sp-wasm-interface" version = "21.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "anyhow", "impl-trait-for-tuples", @@ -16072,8 +15939,8 @@ dependencies = [ [[package]] name = "sp-weights" -version = "31.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "31.1.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "bounded-collections", "parity-scale-codec", @@ -16284,12 +16151,12 @@ checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "staging-xcm" -version = "15.1.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "16.2.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "bounded-collections", - "derivative", + "derive-where", "environmental", "frame-support", "hex-literal 0.4.1", @@ -16305,30 +16172,32 @@ dependencies = [ [[package]] name = "staging-xcm-builder" -version = "18.2.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "20.1.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ + "environmental", "frame-support", "frame-system", "impl-trait-for-tuples", - "log", "pallet-asset-conversion", "pallet-transaction-payment", "parity-scale-codec", "polkadot-parachain-primitives", "scale-info", "sp-arithmetic", + "sp-core", "sp-io", "sp-runtime", "sp-weights", "staging-xcm", "staging-xcm-executor", + "tracing", ] [[package]] name = "staging-xcm-executor" -version = "18.0.3" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.1.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "environmental", "frame-benchmarking", @@ -16379,6 +16248,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "string-interner" +version = "0.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c6a0d765f5807e98a091107bae0a56ea3799f66a5de47b2c84c94a39c09974e" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", +] + [[package]] name = "stringprep" version = "0.1.5" @@ -16390,12 +16269,6 @@ dependencies = [ "unicode-properties", ] -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - [[package]] name = "strsim" version = "0.11.1" @@ -16446,7 +16319,7 @@ dependencies = [ [[package]] name = "substrate-bip39" version = "0.6.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "hmac 0.12.1", "pbkdf2", @@ -16471,17 +16344,17 @@ dependencies = [ [[package]] name = "substrate-build-script-utils" version = "11.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" [[package]] name = "substrate-frame-rpc-system" -version = "42.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "44.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "docify", "frame-system-rpc-runtime-api", "futures", - "jsonrpsee 0.24.9", + "jsonrpsee", "log", "parity-scale-codec", "sc-rpc-api", @@ -16495,8 +16368,8 @@ dependencies = [ [[package]] name = "substrate-prometheus-endpoint" -version = "0.17.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.17.3" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "http-body-util", "hyper 1.7.0", @@ -16509,20 +16382,20 @@ dependencies = [ [[package]] name = "substrate-wasm-builder" -version = "25.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "26.0.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "array-bytes", "build-helper", "cargo_metadata", "console", "filetime", - "frame-metadata 18.0.0", + "frame-metadata 20.0.0", "jobserver", "merkleized-metadata", "parity-scale-codec", "parity-wasm", - "polkavm-linker", + "polkavm-linker 0.18.0", "sc-executor", "shlex", "sp-core", @@ -16551,50 +16424,47 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "subxt" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a160cba1edbf3ec4fbbeaea3f1a185f70448116a6bccc8276bb39adb3b3053bd" +checksum = "1c17d7ec2359d33133b63c97e28c8b7cd3f0a5bc6ce567ae3aef9d9e85be3433" dependencies = [ "async-trait", "derive-where", "either", - "frame-metadata 16.0.0", + "frame-metadata 17.0.0", "futures", "hex", - "impl-serde 0.4.0", - "instant", - "jsonrpsee 0.22.5", + "impl-serde", + "jsonrpsee", "parity-scale-codec", - "primitive-types 0.12.2", - "reconnecting-jsonrpsee-ws-client", + "polkadot-sdk", + "primitive-types 0.13.1", "scale-bits", - "scale-decode", + "scale-decode 0.14.0", "scale-encode", "scale-info", "scale-value", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "subxt-core", "subxt-lightclient", "subxt-macro", "subxt-metadata", "thiserror 1.0.69", + "tokio", "tokio-util", "tracing", "url", + "web-time", ] [[package]] name = "subxt-codegen" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d703dca0905cc5272d7cc27a4ac5f37dcaae7671acc7fef0200057cc8c317786" +checksum = "6550ef451c77db6e3bc7c56fb6fe1dca9398a2c8fc774b127f6a396a769b9c5b" dependencies = [ - "frame-metadata 16.0.0", "heck 0.5.0", - "hex", - "jsonrpsee 0.22.5", "parity-scale-codec", "proc-macro2", "quote", @@ -16603,41 +16473,42 @@ dependencies = [ "subxt-metadata", "syn 2.0.106", "thiserror 1.0.69", - "tokio", ] [[package]] name = "subxt-core" -version = "0.37.1" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3af3b36405538a36b424d229dc908d1396ceb0994c90825ce928709eac1a159a" +checksum = "cb7a1bc6c9c1724971636a66e3225a7253cdb35bb6efb81524a6c71c04f08c59" dependencies = [ "base58", "blake2 0.10.6", "derive-where", - "frame-metadata 16.0.0", + "frame-decode", + "frame-metadata 17.0.0", "hashbrown 0.14.5", "hex", - "impl-serde 0.4.0", + "impl-serde", + "keccak-hash", "parity-scale-codec", - "primitive-types 0.12.2", + "polkadot-sdk", + "primitive-types 0.13.1", "scale-bits", - "scale-decode", + "scale-decode 0.14.0", "scale-encode", "scale-info", "scale-value", "serde", "serde_json", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "subxt-metadata", "tracing", ] [[package]] name = "subxt-lightclient" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d9406fbdb9548c110803cb8afa750f8b911d51eefdf95474b11319591d225d9" +checksum = "89ebc9131da4d0ba1f7814495b8cc79698798ccd52cacd7bcefe451e415bd945" dependencies = [ "futures", "futures-util", @@ -16652,56 +16523,74 @@ dependencies = [ [[package]] name = "subxt-macro" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c195f803d70687e409aba9be6c87115b5da8952cd83c4d13f2e043239818fcd" +checksum = "7819c5e09aae0319981ee853869f2fcd1fac4db8babd0d004c17161297aadc05" dependencies = [ - "darling 0.20.11", + "darling", "parity-scale-codec", - "proc-macro-error", + "proc-macro-error2", "quote", "scale-typegen", "subxt-codegen", + "subxt-utils-fetchmetadata", "syn 2.0.106", ] [[package]] name = "subxt-metadata" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738be5890fdeff899bbffff4d9c0f244fe2a952fb861301b937e3aa40ebb55da" +checksum = "aacd4e7484fef58deaa2dcb32d94753a864b208a668c0dd0c28be1d8abeeadb2" dependencies = [ - "frame-metadata 16.0.0", + "frame-decode", + "frame-metadata 17.0.0", "hashbrown 0.14.5", "parity-scale-codec", + "polkadot-sdk", "scale-info", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", ] [[package]] name = "subxt-signer" -version = "0.37.0" +version = "0.38.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f49888ae6ae90fe01b471193528eea5bd4ed52d8eecd2d13f4a2333b87388850" +checksum = "d680352d04665b1e4eb6f9d2a54b800c4d8e1b20478e69be1b7d975b08d9fc34" dependencies = [ + "base64 0.22.1", "bip32", "bip39", "cfg-if", + "crypto_secretbox", "hex", "hmac 0.12.1", "keccak-hash", "parity-scale-codec", "pbkdf2", + "polkadot-sdk", "regex", "schnorrkel", - "secp256k1 0.28.2", - "secrecy", + "scrypt", + "secp256k1 0.30.0", + "secrecy 0.10.3", + "serde", + "serde_json", "sha2 0.10.9", - "sp-crypto-hashing 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", "subxt-core", "zeroize", ] +[[package]] +name = "subxt-utils-fetchmetadata" +version = "0.38.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3c53bc3eeaacc143a2f29ace4082edd2edaccab37b69ad20befba9fb00fdb3d" +dependencies = [ + "hex", + "parity-scale-codec", + "thiserror 1.0.69", +] + [[package]] name = "suppaftp" version = "6.3.0" @@ -16715,7 +16604,7 @@ dependencies = [ "lazy-regex", "log", "pin-project", - "rustls 0.23.32", + "rustls", "thiserror 2.0.17", ] @@ -17118,41 +17007,20 @@ checksum = "27d684bad428a0f2481f42241f821db42c54e2dc81d8c00db8536c506b0a0144" dependencies = [ "const-oid", "ring 0.17.14", - "rustls 0.23.32", + "rustls", "tokio", "tokio-postgres", - "tokio-rustls 0.26.4", + "tokio-rustls", "x509-cert", ] -[[package]] -name = "tokio-rustls" -version = "0.24.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28327cf380ac148141087fbfb9de9d7bd4e84ab5d2c28fbc911d753de8a7081" -dependencies = [ - "rustls 0.21.12", - "tokio", -] - -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-rustls" version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ - "rustls 0.23.32", + "rustls", "tokio", ] @@ -17176,11 +17044,11 @@ checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084" dependencies = [ "futures-util", "log", - "rustls 0.23.32", - "rustls-native-certs 0.8.1", + "rustls", + "rustls-native-certs", "rustls-pki-types", "tokio", - "tokio-rustls 0.26.4", + "tokio-rustls", "tungstenite", ] @@ -17422,8 +17290,8 @@ dependencies = [ [[package]] name = "tracing-gum" -version = "17.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "19.0.0" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "coarsetime", "polkadot-primitives", @@ -17434,7 +17302,7 @@ dependencies = [ [[package]] name = "tracing-gum-proc-macro" version = "5.0.0" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "expander", "proc-macro-crate 3.4.0", @@ -17489,9 +17357,9 @@ dependencies = [ [[package]] name = "trie-db" -version = "0.29.1" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c992b4f40c234a074d48a757efeabb1a6be88af84c0c23f7ca158950cb0ae7f" +checksum = "6c0670ab45a6b7002c7df369fee950a27cf29ae0474343fd3a15aa15f691e7a6" dependencies = [ "hash-db", "log", @@ -17508,78 +17376,6 @@ dependencies = [ "hash-db", ] -[[package]] -name = "trust-dns-proto" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f7f83d1e4a0e4358ac54c5c3681e5d7da5efc5a7a632c90bb6d6669ddd9bc26" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.5.1", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.2.3", - "ipnet", - "lazy_static", - "rand 0.8.5", - "smallvec", - "socket2 0.4.10", - "thiserror 1.0.69", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-proto" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3119112651c157f4488931a01e586aa459736e9d6046d3bd9105ffb69352d374" -dependencies = [ - "async-trait", - "cfg-if", - "data-encoding", - "enum-as-inner 0.6.1", - "futures-channel", - "futures-io", - "futures-util", - "idna 0.4.0", - "ipnet", - "once_cell", - "rand 0.8.5", - "smallvec", - "thiserror 1.0.69", - "tinyvec", - "tokio", - "tracing", - "url", -] - -[[package]] -name = "trust-dns-resolver" -version = "0.23.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "10a3e6c3aff1718b3c73e395d1f35202ba2ffa847c6a62eea0db8fb4cfe30be6" -dependencies = [ - "cfg-if", - "futures-util", - "ipconfig", - "lru-cache", - "once_cell", - "parking_lot 0.12.5", - "rand 0.8.5", - "resolv-conf", - "smallvec", - "thiserror 1.0.69", - "tokio", - "tracing", - "trust-dns-proto 0.23.2", -] - [[package]] name = "try-lock" version = "0.2.5" @@ -17620,7 +17416,7 @@ dependencies = [ "httparse", "log", "rand 0.9.2", - "rustls 0.23.32", + "rustls", "rustls-pki-types", "sha1", "thiserror 2.0.17", @@ -17761,7 +17557,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6889a77d49f1f013504cec6bf97a2c730394adedaeb1deb5ea08949a50541105" dependencies = [ - "asynchronous-codec", + "asynchronous-codec 0.6.2", "bytes", "futures-io", "futures-util", @@ -17796,7 +17592,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08bc136a29a3d1758e07a9cca267be308aeebf5cfd5a10f3f67ab2097683ef5b" dependencies = [ "form_urlencoded", - "idna 1.1.0", + "idna", "percent-encoding", "serde", ] @@ -17873,11 +17669,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6bfb937b3d12077654a9e43e32a4e9c20177dd9fea0f3aba673e7840bb54f32" dependencies = [ "ark-bls12-377", - "ark-bls12-381", - "ark-ec", + "ark-bls12-381 0.4.0", + "ark-ec 0.4.2", "ark-ff 0.4.2", "ark-serialize 0.4.2", - "ark-serialize-derive", + "ark-serialize-derive 0.4.2", "arrayref", "digest 0.10.7", "rand 0.8.5", @@ -17888,6 +17684,52 @@ dependencies = [ "zeroize", ] +[[package]] +name = "w3f-pcs" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbe7a8d5c914b69392ab3b267f679a2e546fe29afaddce47981772ac71bd02e1" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "merlin", +] + +[[package]] +name = "w3f-plonk-common" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aca389e494fe08c5c108b512e2328309036ee1c0bc7bdfdb743fef54d448c8c" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "getrandom_or_panic", + "rand_core 0.6.4", + "w3f-pcs", +] + +[[package]] +name = "w3f-ring-proof" +version = "0.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a639379402ad51504575dbd258740383291ac8147d3b15859bdf1ea48c677de" +dependencies = [ + "ark-ec 0.5.0", + "ark-ff 0.5.0", + "ark-poly 0.5.0", + "ark-serialize 0.5.0", + "ark-std 0.5.0", + "ark-transcript", + "w3f-pcs", + "w3f-plonk-common", +] + [[package]] name = "wait-timeout" version = "0.2.1" @@ -18106,28 +17948,37 @@ dependencies = [ [[package]] name = "wasmi" -version = "0.31.2" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8281d1d660cdf54c76a3efa9ddd0c270cada1383a995db3ccb43d166456c7" +checksum = "50386c99b9c32bd2ed71a55b6dd4040af2580530fae8bdb9a6576571a80d0cca" dependencies = [ + "arrayvec 0.7.6", + "multi-stash", + "num-derive", + "num-traits", "smallvec", "spin 0.9.8", - "wasmi_arena", + "wasmi_collections", "wasmi_core", "wasmparser-nostd", ] [[package]] -name = "wasmi_arena" -version = "0.4.1" +name = "wasmi_collections" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "104a7f73be44570cac297b3035d76b169d6599637631cf37a1703326a0727073" +checksum = "9c128c039340ffd50d4195c3f8ce31aac357f06804cfc494c8b9508d4b30dca4" +dependencies = [ + "ahash", + "hashbrown 0.14.5", + "string-interner", +] [[package]] name = "wasmi_core" -version = "0.13.0" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dcf1a7db34bff95b85c261002720c00c3a6168256dcb93041d3fa2054d19856a" +checksum = "a23b3a7f6c8c3ceeec6b83531ee61f0013c56e51cbf2b14b0f213548b23a4b41" dependencies = [ "downcast-rs", "libm", @@ -18393,15 +18244,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "webpki-roots" -version = "0.26.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9" -dependencies = [ - "webpki-roots 1.0.3", -] - [[package]] name = "webpki-roots" version = "1.0.3" @@ -18978,16 +18820,16 @@ dependencies = [ [[package]] name = "x509-parser" -version = "0.15.1" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7069fba5b66b9193bd2c5d3d4ff12b839118f6bcbef5328efafafb5395cf63da" +checksum = "fcbc162f30700d6f3f82a24bf7cc62ffe7caea42c0b2cba8bf7f3ae50cf51f69" dependencies = [ - "asn1-rs 0.5.2", + "asn1-rs 0.6.2", "data-encoding", - "der-parser 8.2.0", + "der-parser 9.0.0", "lazy_static", "nom", - "oid-registry 0.6.1", + "oid-registry 0.7.1", "rusticata-macros", "thiserror 1.0.69", "time", @@ -19012,8 +18854,8 @@ dependencies = [ [[package]] name = "xcm-procedural" -version = "11.0.1" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "11.0.2" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "Inflector", "proc-macro2", @@ -19023,8 +18865,8 @@ dependencies = [ [[package]] name = "xcm-runtime-apis" -version = "0.5.3" -source = "git+https://github.com/paritytech/polkadot-sdk?tag=polkadot-stable2412-6#bbc435c7667d3283ba280a8fec44676357392753" +version = "0.7.1" +source = "git+https://github.com/paritytech/polkadot-sdk?branch=stable2503#067482ed1703588b2a3eb9805fb45e5e1e868efb" dependencies = [ "frame-support", "parity-scale-codec", diff --git a/operator/Cargo.toml b/operator/Cargo.toml index 40a689e9..208618d6 100644 --- a/operator/Cargo.toml +++ b/operator/Cargo.toml @@ -5,12 +5,11 @@ edition = "2021" homepage = "https://datahaven.xyz/" license = "GPL-3" repository = "https://github.com/datahavenxyz/datahaven" -version = "0.26.0" +version = "0.30.0" [workspace] members = [ "node", - "pallets/outbound-commitment-store", "pallets/*", "precompiles/*", "primitives/bridge", @@ -40,11 +39,11 @@ pallet-evm-precompile-proxy = { path = "./precompiles/proxy", default-features = pallet-evm-precompile-referenda = { path = "./precompiles/referenda", default-features = false } pallet-evm-precompile-registry = { path = "./precompiles/precompile-registry", default-features = false } pallet-external-validator-slashes = { path = "./pallets/external-validator-slashes", default-features = false } +pallet-grandpa-benchmarking = { path = "./pallets/grandpa-benchmarking", default-features = false } pallet-external-validators = { path = "./pallets/external-validators", default-features = false } pallet-external-validators-rewards = { path = "./pallets/external-validators-rewards", default-features = false } pallet-outbound-commitment-store = { path = "./pallets/outbound-commitment-store", default-features = false } pallet-proxy-genesis-companion = { path = "./pallets/proxy-genesis-companion", default-features = false } -pallet-grandpa-benchmarking = { path = "./pallets/grandpa-benchmarking", default-features = false } pallet-session-benchmarking = { path = "./pallets/session-benchmarking", default-features = false } # Crates.io (wasm) @@ -57,7 +56,7 @@ async-trait = { version = "0.1.42" } blake2-rfc = { version = "0.2.18", default-features = false } byte-slice-cast = { version = "1.2.1", default-features = false } clap = { version = "4.5.10", features = ["derive", "env"] } -codec = { version = "3.6.12", default-features = false, package = "parity-scale-codec" } +codec = { version = "3.7.4", default-features = false, package = "parity-scale-codec" } ethabi = { version = "2.0.0", default-features = false, package = "ethabi-decode" } ethbloom = { version = "0.14.1", default-features = false } ethereum-types = { version = "0.15.1", default-features = false } @@ -83,7 +82,7 @@ openssl-sys = { version = "0.9", features = [ "vendored", ] } # This is just to set the "vendored" feature required for the crossbuild, so that OpenSSL builds from source parity-bytes = { version = "0.1.2", default-features = false } -parity-scale-codec = { version = "3.0.0", default-features = false, features = [ +parity-scale-codec = { version = "3.7.4", default-features = false, features = [ "derive", ] } paste = "1.0.14" @@ -108,117 +107,117 @@ tracing-subscriber = { version = "=0.3.19", features = [ url = "2.2.2" # Polkadot SDK -cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-support = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-support-test = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -mmr-gadget = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -mmr-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-babe = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-beefy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-beefy-mmr = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2412-6", default-features = false } -pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-conviction-voting = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-identity = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-migrations = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-mmr = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-nfts = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-offences = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-parameters = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-referenda = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-tx-pause = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-whitelist = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2412-6", default-features = false } -parachains-common = { git = "https://github.com/paritytech/polkadot-sdk.git", tag = "polkadot-stable2412-6", default-features = false } -polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-beefy-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-network = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-service = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-api = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-application-crypto = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-core = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-crypto-hashing = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-io = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-mmr-primitives = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-runtime-interface = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-session = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-staking = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-std = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-storage = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-trie = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -sp-version = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } -xcm = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false, package = "staging-xcm" } -xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false, package = "staging-xcm-builder" } -xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false, package = "staging-xcm-executor" } +cumulus-primitives-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-benchmarking-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-executive = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-metadata-hash-extension = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-support = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-support-test = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system-benchmarking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-system-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +frame-try-runtime = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +mmr-gadget = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +mmr-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-assets = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-babe = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-balances = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-beefy-mmr = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-collator-selection = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "stable2503", default-features = false } +pallet-collective = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-conviction-voting = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-identity = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-im-online = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-message-queue = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-migrations = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-mmr = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-multisig = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-nfts = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-offences = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-parameters = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-preimage = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-proxy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-referenda = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-safe-mode = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-scheduler = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-session = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-staking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-sudo = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-transaction-payment-rpc-runtime-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-treasury = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-tx-pause = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-utility = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-whitelist = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +pallet-xcm = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +parachain-info = { package = "staging-parachain-info", git = "https://github.com/paritytech/polkadot-sdk.git", branch = "stable2503", default-features = false } +parachains-common = { git = "https://github.com/paritytech/polkadot-sdk.git", branch = "stable2503", default-features = false } +polkadot-parachain-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +polkadot-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +polkadot-runtime-common = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-basic-authorship = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-cli = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-client-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-beefy-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-consensus-manual-seal = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-network = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-network-sync = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-rpc = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-service = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-telemetry = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sc-transaction-pool-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-api = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-application-crypto = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-arithmetic = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-block-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-blockchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-babe = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-beefy = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-grandpa = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-consensus-slots = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-core = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-crypto-hashing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-genesis-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-inherents = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-io = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-keyring = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-keystore = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-mmr-primitives = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-offchain = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-runtime = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-runtime-interface = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-session = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-staking = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-storage = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-timestamp = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-tracing = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-transaction-pool = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-trie = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +sp-version = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-build-script-utils = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-frame-rpc-system = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-prometheus-endpoint = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +substrate-wasm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } +xcm = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false, package = "staging-xcm" } +xcm-builder = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false, package = "staging-xcm-builder" } +xcm-executor = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false, package = "staging-xcm-executor" } # Snowbridge -bp-relayers = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } +bp-relayers = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } bridge-hub-common = { path = "primitives/snowbridge/bridge-hub-common", default-features = false } snowbridge-beacon-primitives = { path = "primitives/snowbridge/beacon", default-features = false } snowbridge-core = { path = "primitives/snowbridge/core", default-features = false } @@ -231,7 +230,7 @@ snowbridge-pallet-ethereum-client = { path = "pallets/ethereum-client", default- snowbridge-pallet-ethereum-client-fixtures = { path = "pallets/ethereum-client/fixtures", default-features = false } snowbridge-pallet-inbound-queue-v2 = { path = "pallets/inbound-queue-v2", default-features = false } snowbridge-pallet-inbound-queue-v2-fixtures = { path = "pallets/inbound-queue-v2/fixtures", default-features = false } -snowbridge-pallet-outbound-queue = { git = "https://github.com/paritytech/polkadot-sdk", tag = "polkadot-stable2412-6", default-features = false } +snowbridge-pallet-outbound-queue = { git = "https://github.com/paritytech/polkadot-sdk", branch = "stable2503", default-features = false } snowbridge-pallet-outbound-queue-v2 = { path = "pallets/outbound-queue-v2", default-features = false } snowbridge-pallet-system = { path = "pallets/system", default-features = false } snowbridge-pallet-system-v2 = { path = "pallets/system-v2", default-features = false } @@ -240,74 +239,77 @@ snowbridge-test-utils = { path = "primitives/snowbridge/test-utils", default-fea snowbridge-verification-primitives = { path = "primitives/snowbridge/verification", default-features = false } # Frontier (wasm) -evm = { git = "https://github.com/rust-ethereum/evm", rev = "6d86fe2d3bcc14887c2575f62958a67ac2d523db", default-features = false } -fp-account = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-evm = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-self-contained = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fp-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-base-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-dynamic-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-ethereum = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -pallet-evm = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -pallet-evm-chain-id = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -pallet-evm-precompile-blake2 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-bn128 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-modexp = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-sha3fips = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-evm-precompile-simple = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -pallet-hotfix-sufficients = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -precompile-utils = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2412", default-features = false } -precompile-utils-macro = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } +evm = { version = "0.43.2", default-features = false } +fp-account = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-evm = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-self-contained = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fp-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-base-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-dynamic-fee = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-ethereum = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +pallet-evm = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +pallet-evm-chain-id = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +pallet-evm-precompile-blake2 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-bn128 = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-modexp = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-sha3fips = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-evm-precompile-simple = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +pallet-hotfix-sufficients = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +precompile-utils = { git = "https://github.com/polkadot-evm/frontier/", branch = "stable2503", default-features = false } +precompile-utils-macro = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +ethereum = { version = "0.18.2", default-features = false, features = [ + "with-scale", +] } # Frontier (client) -fc-api = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-cli = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-consensus = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-db = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412" } -fc-mapping-sync = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-rpc-core = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } -fc-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2412", default-features = false } +fc-api = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-cli = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-consensus = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-db = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503" } +fc-mapping-sync = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-rpc = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-rpc-core = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } +fc-storage = { git = "https://github.com/polkadot-evm/frontier", branch = "stable2503", default-features = false } # StorageHub ## Runtime -pallet-bucket-nfts = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-cr-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-file-system-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-payment-streams = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-payment-streams-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-proofs-dealer = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-proofs-dealer-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-storage-providers = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -pallet-storage-providers-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-constants = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-data-price-updater = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-file-key-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-file-metadata = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-forest-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-traits = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-treasury-funding = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } +pallet-bucket-nfts = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-cr-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-file-system-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-payment-streams = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-payment-streams-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-proofs-dealer = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-proofs-dealer-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-randomness = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-storage-providers = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +pallet-storage-providers-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-constants = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-data-price-updater = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-file-key-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-file-metadata = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-forest-verifier = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-traits = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-treasury-funding = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } ## Client -shc-actors-derive = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-actors-framework = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-blockchain-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-client = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-common = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-file-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-file-transfer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-fisherman-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-forest-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-indexer-db = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-indexer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shc-rpc = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-opaque = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-tx-implicits-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } -shp-types = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } +shc-actors-derive = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-actors-framework = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-blockchain-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-client = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-common = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-file-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-file-transfer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-fisherman-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-forest-manager = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-indexer-db = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-indexer-service = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shc-rpc = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-opaque = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-tx-implicits-runtime-api = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } +shp-types = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } ## Precompiles -pallet-evm-precompile-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.4.3", default-features = false } +pallet-evm-precompile-file-system = { git = "https://github.com/Moonsong-Labs/storage-hub.git", tag = "v0.5.1", default-features = false } # Static linking diff --git a/operator/benchmarking/frame-weight-template.hbs b/operator/benchmarking/frame-weight-template.hbs index 9fcc72c5..5a220d5a 100644 --- a/operator/benchmarking/frame-weight-template.hbs +++ b/operator/benchmarking/frame-weight-template.hbs @@ -18,7 +18,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `{{pallet}}`. pub struct WeightInfo(PhantomData); diff --git a/operator/node/src/benchmarking.rs b/operator/node/src/benchmarking.rs index 648cd574..9f4bf4e1 100644 --- a/operator/node/src/benchmarking.rs +++ b/operator/node/src/benchmarking.rs @@ -147,6 +147,7 @@ pub fn create_benchmark_extrinsic( frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(0), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ); let raw_payload = runtime::SignedPayload::from_raw( @@ -162,6 +163,7 @@ pub fn create_benchmark_extrinsic( (), (), None, + (), ), ); let signature = raw_payload.using_encoded(|e| sender.sign(e)); diff --git a/operator/node/src/command.rs b/operator/node/src/command.rs index bcd4a3a4..6a8533fa 100644 --- a/operator/node/src/command.rs +++ b/operator/node/src/command.rs @@ -427,78 +427,72 @@ pub fn run() -> sc_cli::Result<()> { }; match config.network.network_backend { - // TODO: Litep2p becomes standard with Polkadot SDK stable2412-7 (should move None to other arm) - // cfr. https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-7 - Some(sc_network::config::NetworkBackendType::Libp2p) | None => { - match config.chain_spec { - ref spec if spec.is_mainnet() => { - service::new_full::< - datahaven_mainnet_runtime::Runtime, - datahaven_mainnet_runtime::RuntimeApi, - sc_network::NetworkWorker<_, _>, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - ref spec if spec.is_testnet() => { - service::new_full::< - datahaven_testnet_runtime::Runtime, - datahaven_testnet_runtime::RuntimeApi, - sc_network::NetworkWorker<_, _>, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - _ => { - service::new_full::< - datahaven_stagenet_runtime::Runtime, - datahaven_stagenet_runtime::RuntimeApi, - sc_network::NetworkWorker<_, _>, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } + sc_network::config::NetworkBackendType::Libp2p => match config.chain_spec { + ref spec if spec.is_mainnet() => { + service::new_full::< + datahaven_mainnet_runtime::Runtime, + datahaven_mainnet_runtime::RuntimeApi, + sc_network::NetworkWorker<_, _>, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await } - .map_err(sc_cli::Error::Service) - } - Some(sc_network::config::NetworkBackendType::Litep2p) => { - match config.chain_spec { - ref spec if spec.is_mainnet() => { - service::new_full::< - datahaven_mainnet_runtime::Runtime, - datahaven_mainnet_runtime::RuntimeApi, - sc_network::Litep2pNetworkBackend, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - ref spec if spec.is_testnet() => { - service::new_full::< - datahaven_testnet_runtime::Runtime, - datahaven_testnet_runtime::RuntimeApi, - sc_network::Litep2pNetworkBackend, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } - _ => { - service::new_full::< - datahaven_stagenet_runtime::Runtime, - datahaven_stagenet_runtime::RuntimeApi, - sc_network::Litep2pNetworkBackend, - >( - config, cli.eth, role_options, indexer_options, sealing_mode - ) - .await - } + ref spec if spec.is_testnet() => { + service::new_full::< + datahaven_testnet_runtime::Runtime, + datahaven_testnet_runtime::RuntimeApi, + sc_network::NetworkWorker<_, _>, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + _ => { + service::new_full::< + datahaven_stagenet_runtime::Runtime, + datahaven_stagenet_runtime::RuntimeApi, + sc_network::NetworkWorker<_, _>, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await } - .map_err(sc_cli::Error::Service) } + .map_err(sc_cli::Error::Service), + sc_network::config::NetworkBackendType::Litep2p => match config.chain_spec { + ref spec if spec.is_mainnet() => { + service::new_full::< + datahaven_mainnet_runtime::Runtime, + datahaven_mainnet_runtime::RuntimeApi, + sc_network::Litep2pNetworkBackend, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + ref spec if spec.is_testnet() => { + service::new_full::< + datahaven_testnet_runtime::Runtime, + datahaven_testnet_runtime::RuntimeApi, + sc_network::Litep2pNetworkBackend, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + _ => { + service::new_full::< + datahaven_stagenet_runtime::Runtime, + datahaven_stagenet_runtime::RuntimeApi, + sc_network::Litep2pNetworkBackend, + >( + config, cli.eth, role_options, indexer_options, sealing_mode + ) + .await + } + } + .map_err(sc_cli::Error::Service), } }) } diff --git a/operator/node/src/rpc.rs b/operator/node/src/rpc.rs index 25380cdb..7aeaf1a5 100644 --- a/operator/node/src/rpc.rs +++ b/operator/node/src/rpc.rs @@ -40,7 +40,7 @@ use sc_consensus_beefy::communication::notification::{ }; use sc_consensus_manual_seal::rpc::{EngineCommand, ManualSeal, ManualSealApiServer}; use sc_network_sync::SyncingService; -use sc_transaction_pool::{ChainApi, Pool}; +use sc_transaction_pool::ChainApi; use sc_transaction_pool_api::TransactionPool; use shc_client::types::FileStorageT; use shc_common::traits::StorageEnableRuntime; @@ -54,7 +54,7 @@ use shc_rpc::StorageHubClientRpcConfig; use sp_consensus_babe::{BabeApi, SlotDuration}; use sp_consensus_beefy::AuthorityIdBound; use sp_core::H256; -use sp_runtime::traits::BlakeTwo256; +use sp_runtime::traits::{BlakeTwo256, Block as BlockT, Header as HeaderT}; use std::collections::BTreeMap; use std::sync::Arc; @@ -69,9 +69,10 @@ pub struct BeefyDeps { } /// Full client dependencies. -pub struct FullDeps +pub struct FullDeps where Runtime: StorageEnableRuntime, + FS: ForestStorageHandler + Clone + Send + Sync + 'static, { /// The client instance to use. pub client: Arc>, @@ -80,7 +81,7 @@ where /// BEEFY dependencies. pub beefy: BeefyDeps, /// Graph pool instance. - pub graph: Arc>, + pub graph: Arc

, /// Backend used by the node. pub backend: Arc, /// Network service @@ -112,8 +113,8 @@ where } /// Instantiate all full RPC extensions. -pub fn create_full( - deps: FullDeps, +pub fn create_full( + deps: FullDeps, subscription_task_executor: sc_rpc::SubscriptionTaskExecutor, pubsub_notification_sinks: Arc< fc_mapping_sync::EthereumBlockNotificationSinks< @@ -122,11 +123,10 @@ pub fn create_full( >, ) -> Result, Box> where - P: TransactionPool + 'static, + P: TransactionPool::Hash> + 'static, BE: Backend + Send + Sync + 'static, BE::State: StateBackend, AuthorityId: AuthorityIdBound, - A: ChainApi + 'static, Runtime: StorageEnableRuntime, Runtime::RuntimeApi: StorageEnableRuntimeApi< RuntimeApi: mmr_rpc::MmrRuntimeApi< @@ -139,7 +139,7 @@ where >, StorageHubClient: StorageProvider, FL: FileStorageT, - FSH: ForestStorageHandler + Send + Sync + 'static, + FSH: ForestStorageHandler + Clone + Send + Sync + 'static, { use mmr_rpc::{Mmr, MmrApiServer}; use pallet_transaction_payment_rpc::{TransactionPayment, TransactionPaymentApiServer}; @@ -225,7 +225,7 @@ where }; module.merge( - Eth::<_, _, _, _, _, _, _, DefaultEthConfig, BE>>::new( + Eth::<_, _, _, _, _, _, DefaultEthConfig, BE>>::new( Arc::clone(&client), Arc::clone(&pool), graph.clone(), diff --git a/operator/node/src/service.rs b/operator/node/src/service.rs index 7b307420..18f79c32 100644 --- a/operator/node/src/service.rs +++ b/operator/node/src/service.rs @@ -572,7 +572,7 @@ where Vec::default(), )); - let (network, system_rpc_tx, tx_handler_controller, network_starter, sync_service) = + let (network, system_rpc_tx, tx_handler_controller, sync_service) = sc_service::build_network(sc_service::BuildNetworkParams { config: &config, net_config, @@ -698,7 +698,7 @@ where let deps = crate::rpc::FullDeps { client: client.clone(), pool: pool.clone(), - graph: pool.pool().clone(), + graph: pool.clone(), beefy: BeefyDeps:: { beefy_finality_proof_stream: beefy_rpc_links .from_voter_justif_stream @@ -996,7 +996,6 @@ where .await?; } - network_starter.start_network(); Ok(task_manager) } @@ -1375,7 +1374,6 @@ where .with_blockchain( client.clone(), keystore.clone(), - Arc::new(rpc_handlers), rocks_db_path.clone(), maintenance_mode, ) diff --git a/operator/pallets/datahaven-native-transfer/Cargo.toml b/operator/pallets/datahaven-native-transfer/Cargo.toml index da35d0d0..ee85cc10 100644 --- a/operator/pallets/datahaven-native-transfer/Cargo.toml +++ b/operator/pallets/datahaven-native-transfer/Cargo.toml @@ -20,7 +20,6 @@ frame-support = { workspace = true } frame-system = { workspace = true } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } snowbridge-core = { workspace = true } snowbridge-outbound-queue-primitives = { workspace = true } @@ -48,7 +47,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm/std", "xcm-builder/std", "pallet-balances/std", diff --git a/operator/pallets/datahaven-native-transfer/src/lib.rs b/operator/pallets/datahaven-native-transfer/src/lib.rs index a60315b0..91fad635 100644 --- a/operator/pallets/datahaven-native-transfer/src/lib.rs +++ b/operator/pallets/datahaven-native-transfer/src/lib.rs @@ -29,7 +29,9 @@ //! It uses a dedicated Ethereum sovereign account to hold locked tokens during transfers. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec; use frame_support::{ pallet_prelude::*, traits::{ @@ -41,7 +43,6 @@ use snowbridge_core::TokenId; use snowbridge_outbound_queue_primitives::v2::{Command, Message as OutboundMessage, SendMessage}; use sp_core::{H160, H256}; use sp_runtime::{traits::Saturating, BoundedVec}; -use sp_std::vec; pub use pallet::*; diff --git a/operator/pallets/datahaven-native-transfer/src/mock.rs b/operator/pallets/datahaven-native-transfer/src/mock.rs index f9bc4f12..172d3293 100644 --- a/operator/pallets/datahaven-native-transfer/src/mock.rs +++ b/operator/pallets/datahaven-native-transfer/src/mock.rs @@ -166,9 +166,12 @@ pub fn new_test_ext() -> sp_io::TestExternalities { (BOB, INITIAL_BALANCE), (CHARLIE, INITIAL_BALANCE), ]; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .unwrap(); let mut ext: sp_io::TestExternalities = t.into(); ext.execute_with(|| { diff --git a/operator/pallets/ethereum-client/Cargo.toml b/operator/pallets/ethereum-client/Cargo.toml index bc354399..752a46fb 100644 --- a/operator/pallets/ethereum-client/Cargo.toml +++ b/operator/pallets/ethereum-client/Cargo.toml @@ -28,7 +28,6 @@ frame-system = { workspace = true } sp-core = { workspace = true } sp-io = { optional = true, workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } pallet-timestamp = { optional = true, workspace = true } snowbridge-beacon-primitives = { workspace = true } @@ -77,7 +76,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", 'frame-benchmarking/std', ] try-runtime = [ diff --git a/operator/pallets/ethereum-client/fixtures/Cargo.toml b/operator/pallets/ethereum-client/fixtures/Cargo.toml index 49a545c6..f5aa84fa 100644 --- a/operator/pallets/ethereum-client/fixtures/Cargo.toml +++ b/operator/pallets/ethereum-client/fixtures/Cargo.toml @@ -20,7 +20,6 @@ snowbridge-beacon-primitives = { workspace = true } snowbridge-core = { workspace = true } snowbridge-inbound-queue-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -33,5 +32,4 @@ std = [ "snowbridge-core/std", "snowbridge-inbound-queue-primitives/std", "sp-core/std", - "sp-std/std", ] diff --git a/operator/pallets/ethereum-client/fixtures/src/lib.rs b/operator/pallets/ethereum-client/fixtures/src/lib.rs index ff949352..c4b43884 100644 --- a/operator/pallets/ethereum-client/fixtures/src/lib.rs +++ b/operator/pallets/ethereum-client/fixtures/src/lib.rs @@ -3,7 +3,9 @@ // Generated, do not edit! // See README.md for instructions to generate #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::{boxed::Box, vec}; use hex_literal::hex; use snowbridge_beacon_primitives::{ types::deneb, AncestryProof, BeaconHeader, ExecutionProof, NextSyncCommitteeUpdate, @@ -11,7 +13,6 @@ use snowbridge_beacon_primitives::{ }; use snowbridge_inbound_queue_primitives::{EventProof, InboundQueueFixture, Log, Proof}; use sp_core::U256; -use sp_std::{boxed::Box, vec}; const SC_SIZE: usize = 512; const SC_BITS_SIZE: usize = 64; diff --git a/operator/pallets/ethereum-client/src/benchmarking/util.rs b/operator/pallets/ethereum-client/src/benchmarking/util.rs index 44403226..e1dab30b 100644 --- a/operator/pallets/ethereum-client/src/benchmarking/util.rs +++ b/operator/pallets/ethereum-client/src/benchmarking/util.rs @@ -2,8 +2,9 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate::{ decompress_sync_committee_bits, Config, CurrentSyncCommittee, Pallet as EthereumBeaconClient, - Update, ValidatorsRoot, Vec, + Update, ValidatorsRoot, }; +use alloc::vec::Vec; use snowbridge_beacon_primitives::PublicKeyPrepared; use sp_core::H256; diff --git a/operator/pallets/ethereum-client/src/impls.rs b/operator/pallets/ethereum-client/src/impls.rs index c1702ef4..e0546982 100644 --- a/operator/pallets/ethereum-client/src/impls.rs +++ b/operator/pallets/ethereum-client/src/impls.rs @@ -4,6 +4,7 @@ use super::*; use frame_support::ensure; use snowbridge_beacon_primitives::ExecutionProof; +use alloc::vec::Vec; use snowbridge_beacon_primitives::merkle_proof::{generalized_index_length, subtree_index}; use snowbridge_ethereum::Receipt; use snowbridge_inbound_queue_primitives::{ diff --git a/operator/pallets/ethereum-client/src/lib.rs b/operator/pallets/ethereum-client/src/lib.rs index dfe9c131..ca6d5909 100644 --- a/operator/pallets/ethereum-client/src/lib.rs +++ b/operator/pallets/ethereum-client/src/lib.rs @@ -16,6 +16,7 @@ //! //! * [`Call::submit`]: Submit a finalized beacon header with an optional sync committee update #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod config; pub mod functions; @@ -38,6 +39,7 @@ mod tests_electra; #[cfg(feature = "runtime-benchmarks")] mod benchmarking; +use alloc::boxed::Box; use frame_support::{ dispatch::{DispatchResult, PostDispatchInfo}, pallet_prelude::OptionQuery, @@ -53,7 +55,6 @@ use snowbridge_beacon_primitives::{ }; use snowbridge_core::{BasicOperatingMode, RingBufferMap}; use sp_core::H256; -use sp_std::prelude::*; pub use weights::WeightInfo; use functions::{ @@ -71,6 +72,7 @@ pub const LOG_TARGET: &str = "ethereum-client"; pub mod pallet { use super::*; + use alloc::vec::Vec; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; diff --git a/operator/pallets/ethereum-client/src/mock.rs b/operator/pallets/ethereum-client/src/mock.rs index 6c1ca8a7..cb3963be 100644 --- a/operator/pallets/ethereum-client/src/mock.rs +++ b/operator/pallets/ethereum-client/src/mock.rs @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate as ethereum_beacon_client; use crate::config; +use alloc::default::Default; use frame_support::{derive_impl, dispatch::DispatchResult, parameter_types}; use pallet_timestamp; use snowbridge_beacon_primitives::{Fork, ForkVersions}; use snowbridge_inbound_queue_primitives::{Log, Proof}; -use sp_std::default::Default; use std::{fs::File, path::PathBuf}; type Block = frame_system::mocking::MockBlock; @@ -136,6 +136,10 @@ parameter_types! { }, electra: Fork { version: [5, 0, 0, 0], // 0x05000000 + epoch: 0, + }, + fulu: Fork { + version: [6, 0, 0, 0], // 0x06000000 epoch: 80000000000, } }; diff --git a/operator/pallets/ethereum-client/src/mock_electra.rs b/operator/pallets/ethereum-client/src/mock_electra.rs index 740bbb89..bb6ba573 100644 --- a/operator/pallets/ethereum-client/src/mock_electra.rs +++ b/operator/pallets/ethereum-client/src/mock_electra.rs @@ -2,11 +2,11 @@ // SPDX-FileCopyrightText: 2023 Snowfork use crate as ethereum_beacon_client; use crate::config; +use alloc::default::Default; use frame_support::{derive_impl, dispatch::DispatchResult, parameter_types}; use pallet_timestamp; use snowbridge_beacon_primitives::{Fork, ForkVersions}; use snowbridge_inbound_queue_primitives::{Log, Proof}; -use sp_std::default::Default; use std::{fs::File, path::PathBuf}; type Block = frame_system::mocking::MockBlock; @@ -117,6 +117,10 @@ parameter_types! { electra: Fork { version: [5, 0, 0, 0], // 0x05000000 epoch: 0, + }, + fulu: Fork { + version: [6, 0, 0, 0], // 0x06000000 + epoch: 0, } }; } diff --git a/operator/pallets/ethereum-client/src/tests.rs b/operator/pallets/ethereum-client/src/tests.rs index 143315b6..c56817d8 100644 --- a/operator/pallets/ethereum-client/src/tests.rs +++ b/operator/pallets/ethereum-client/src/tests.rs @@ -248,6 +248,10 @@ fn compute_fork_version() { version: [0, 0, 0, 5], epoch: 50, }, + fulu: Fork { + version: [0, 0, 0, 6], + epoch: 60, + }, }; new_tester().execute_with(|| { assert_eq!( diff --git a/operator/pallets/ethereum-client/src/tests_electra.rs b/operator/pallets/ethereum-client/src/tests_electra.rs index 73666b2c..aed3dce5 100644 --- a/operator/pallets/ethereum-client/src/tests_electra.rs +++ b/operator/pallets/ethereum-client/src/tests_electra.rs @@ -247,6 +247,10 @@ fn compute_fork_version() { version: [0, 0, 0, 5], epoch: 50, }, + fulu: Fork { + version: [0, 0, 0, 6], + epoch: 60, + }, }; new_tester().execute_with(|| { assert_eq!( @@ -281,6 +285,10 @@ fn compute_fork_version() { EthereumBeaconClient::select_fork_version(&mock_fork_versions, 50), [0, 0, 0, 5] ); + assert_eq!( + EthereumBeaconClient::select_fork_version(&mock_fork_versions, 60), + [0, 0, 0, 6] + ); }); } diff --git a/operator/pallets/ethereum-client/src/weights.rs b/operator/pallets/ethereum-client/src/weights.rs index e4629746..5361fabf 100644 --- a/operator/pallets/ethereum-client/src/weights.rs +++ b/operator/pallets/ethereum-client/src/weights.rs @@ -29,7 +29,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for ethereum_beacon_client. pub trait WeightInfo { diff --git a/operator/pallets/external-validator-slashes/Cargo.toml b/operator/pallets/external-validator-slashes/Cargo.toml index 7dd77a28..b14c99d1 100644 --- a/operator/pallets/external-validator-slashes/Cargo.toml +++ b/operator/pallets/external-validator-slashes/Cargo.toml @@ -45,6 +45,7 @@ std = [ "parity-scale-codec/std", "pallet-external-validators/std", "scale-info/std", + "serde/std", "snowbridge-core/std", "snowbridge-outbound-queue-primitives/std", "sp-core/std", diff --git a/operator/pallets/external-validator-slashes/src/benchmarking.rs b/operator/pallets/external-validator-slashes/src/benchmarking.rs index 7e8d7a00..5575c914 100644 --- a/operator/pallets/external-validator-slashes/src/benchmarking.rs +++ b/operator/pallets/external-validator-slashes/src/benchmarking.rs @@ -35,20 +35,24 @@ const MAX_SLASHES: u32 = 1000; mod benchmarks { use super::*; + fn dummy_slash(slash_id: T::SlashId) -> Slash { + let dummy = || T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + Slash { + validator: dummy(), + reporters: vec![], + slash_id, + percentage: Perbill::from_percent(1), + confirmed: false, + offence_kind: OffenceKind::LivenessOffence, + } + } + #[benchmark] fn cancel_deferred_slash(s: Linear<1, MAX_SLASHES>) -> Result<(), BenchmarkError> { let mut existing_slashes = Vec::new(); let era = T::EraIndexProvider::active_era().index; - let dummy = || T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); for _ in 0..MAX_SLASHES { - existing_slashes.push(Slash { - validator: dummy(), - reporters: vec![], - slash_id: One::one(), - percentage: Perbill::from_percent(1), - confirmed: false, - offence_kind: OffenceKind::LivenessOffence, - }); + existing_slashes.push(dummy_slash::(One::one())); } Slashes::::insert( era.saturating_add(T::SlashDeferDuration::get()) @@ -102,35 +106,55 @@ mod benchmarks { #[benchmark] fn process_slashes_queue(s: Linear<1, 200>) -> Result<(), BenchmarkError> { - let mut queue = VecDeque::new(); - let dummy = || T::AccountId::decode(&mut TrailingZeroInput::zeroes()).unwrap(); + let first_batch = (0..s) + .map(|_| dummy_slash::(One::one())) + .collect::>(); + let second_batch = vec![dummy_slash::(One::one())]; - for _ in 0..(s + 1) { - queue.push_back(Slash { - validator: dummy(), - reporters: vec![], - slash_id: One::one(), - percentage: Perbill::from_percent(1), - confirmed: false, - offence_kind: OffenceKind::LivenessOffence, - }); - } - - UnreportedSlashesQueue::::set(queue); + assert!(ExternalValidatorSlashes::::unsent_queue_push(( + 1, + first_batch + ))); + assert!(ExternalValidatorSlashes::::unsent_queue_push(( + 2, + second_batch + ))); let processed; #[block] { - processed = Pallet::::process_slashes_queue(s).unwrap(); + processed = match Pallet::::process_slashes_queue() { + crate::ProcessSlashesQueueOutcome::Sent(count) => count, + crate::ProcessSlashesQueueOutcome::Empty + | crate::ProcessSlashesQueueOutcome::Requeued(_) => { + return Err(BenchmarkError::Stop("unexpected slashes queue outcome")) + } + }; } - assert_eq!(UnreportedSlashesQueue::::get().len(), 1); + assert_eq!(ExternalValidatorSlashes::::unsent_queue_len(), 1); assert_eq!(processed, s); Ok(()) } + #[benchmark] + fn retry_unsent_slash_era() -> Result<(), BenchmarkError> { + let batch = vec![dummy_slash::(One::one())]; + assert!(ExternalValidatorSlashes::::unsent_queue_push((1, batch))); + + let origin = + T::GovernanceOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; + + #[extrinsic_call] + _(origin as T::RuntimeOrigin, 1u32); + + assert!(ExternalValidatorSlashes::::unsent_queue_is_empty()); + + Ok(()) + } + #[benchmark] fn set_slashing_mode() -> Result<(), BenchmarkError> { #[extrinsic_call] diff --git a/operator/pallets/external-validator-slashes/src/lib.rs b/operator/pallets/external-validator-slashes/src/lib.rs index b24b85db..19da25c3 100644 --- a/operator/pallets/external-validator-slashes/src/lib.rs +++ b/operator/pallets/external-validator-slashes/src/lib.rs @@ -31,7 +31,7 @@ extern crate alloc; use pallet_external_validators::apply; use snowbridge_outbound_queue_primitives::SendError; use { - alloc::{collections::vec_deque::VecDeque, string::String, vec, vec::Vec}, + alloc::{string::String, vec, vec::Vec}, frame_support::{pallet_prelude::*, traits::DefensiveSaturating}, frame_system::pallet_prelude::*, log::log, @@ -132,10 +132,21 @@ pub mod pallet { }, /// The slashes message was sent correctly. SlashesMessageSent { message_id: H256 }, + /// The slashes message failed to send and the batch was moved to the back + /// of the queue for retry. + SlashesMessageSendFailed { era: EraIndex, count: u32 }, + /// A queued slashes batch was retried manually and sent successfully. + SlashesMessageRetried { + message_id: H256, + era: EraIndex, + count: u32, + }, /// We injected a slash SlashInjected { slash_id: T::SlashId, era: u32 }, /// Number of slashes processed SlashAddedToQueue { number: u32, era: u32 }, + /// The unsent queue is full; this slash era could not be enqueued. + UnsentQueueFull { era: EraIndex }, } #[pallet::config] @@ -199,6 +210,9 @@ pub mod pallet { /// The weight information of this pallet. type WeightInfo: WeightInfo; + + /// Origin for governance calls such as retrying an unsent slash batch. + type GovernanceOrigin: EnsureOrigin; } #[pallet::error] @@ -226,6 +240,10 @@ pub mod pallet { /// No PendingOffenceKind found for (session, validator) — offence was not /// reported through EquivocationReportWrapper, so the offence kind is unknown. MissingOffenceKind, + /// The specified era is not in the unsent slash queue. + EraNotInUnsentQueue, + /// The message delivery still failed on retry. + MessageSendFailed, } #[apply(derive_storage_traits)] @@ -269,12 +287,26 @@ pub mod pallet { pub type Slashes = StorageMap<_, Twox64Concat, EraIndex, Vec>, ValueQuery>; - /// All unreported slashes that will be processed in the future. + /// Maximum number of unsent slash batches in the retry ring buffer. + pub const UNSENT_QUEUE_CAPACITY: u32 = 64; + + /// Ring buffer of slash batches whose outbound message still needs to be sent. + /// Each slot stores the original slash era together with a bounded-size batch + /// of slash records. Retries keep the original era so the outbound message id + /// remains stable across later blocks and eras. #[pallet::storage] #[pallet::unbounded] - #[pallet::getter(fn unreported_slashes)] - pub type UnreportedSlashesQueue = - StorageValue<_, VecDeque>, ValueQuery>; + pub type UnsentSlashBatch = + StorageMap<_, Twox64Concat, u32, (EraIndex, Vec>)>; + + /// Ring buffer head: next slot to be processed by `on_initialize`. + #[pallet::storage] + pub type UnsentSlashHead = StorageValue<_, u32, ValueQuery>; + + /// Ring buffer tail: next slot to write a new entry into. + /// When head == tail the buffer is empty. + #[pallet::storage] + pub type UnsentSlashTail = StorageValue<_, u32, ValueQuery>; // Turns slashing on or off #[pallet::storage] @@ -415,6 +447,44 @@ pub mod pallet { Ok(()) } + #[pallet::call_index(2)] + #[pallet::weight(T::WeightInfo::retry_unsent_slash_era())] + pub fn retry_unsent_slash_era(origin: OriginFor, era_index: EraIndex) -> DispatchResult { + T::GovernanceOrigin::ensure_origin(origin)?; + + let head = UnsentSlashHead::::get(); + let tail = UnsentSlashTail::::get(); + let mut found = None; + let mut slot = head; + while slot != tail { + if let Some(entry @ (idx, _)) = UnsentSlashBatch::::get(slot) { + if idx == era_index { + found = Some((slot, entry)); + break; + } + } + slot = (slot + 1) % UNSENT_QUEUE_CAPACITY; + } + + let (slot, (era, slashes)) = found.ok_or(Error::::EraNotInUnsentQueue)?; + let count = slashes.len() as u32; + let slashes_to_send = slashes + .iter() + .map(Self::slash_to_send_data) + .collect::>(); + let message_id = Self::send_slashes_message(&slashes_to_send, era) + .ok_or(Error::::MessageSendFailed)?; + + Self::unsent_queue_remove_slot(slot); + Self::deposit_event(Event::::SlashesMessageRetried { + message_id, + era, + count, + }); + + Ok(()) + } + #[pallet::call_index(3)] #[pallet::weight(T::WeightInfo::set_slashing_mode())] pub fn set_slashing_mode(origin: OriginFor, mode: SlashingModeOption) -> DispatchResult { @@ -429,12 +499,12 @@ pub mod pallet { #[pallet::hooks] impl Hooks> for Pallet { fn on_initialize(_n: BlockNumberFor) -> Weight { - let processed = Self::process_slashes_queue(T::QueuedSlashesProcessedPerBlock::get()); - - if let Some(p) = processed { - T::WeightInfo::process_slashes_queue(p) - } else { - T::WeightInfo::process_slashes_queue(0) + match Self::process_slashes_queue() { + ProcessSlashesQueueOutcome::Empty => T::WeightInfo::process_slashes_queue(0), + ProcessSlashesQueueOutcome::Sent(count) + | ProcessSlashesQueueOutcome::Requeued(count) => { + T::WeightInfo::process_slashes_queue(count) + } } } } @@ -655,70 +725,65 @@ where impl Pallet { fn add_era_slashes_to_queue(active_era: EraIndex) { - let mut slashes: VecDeque<_> = Slashes::::get(active_era).into(); + let slashes = Slashes::::get(active_era); + if slashes.is_empty() { + return; + } - let len = slashes.len(); + let batch_size = T::QueuedSlashesProcessedPerBlock::get().max(1) as usize; + let mut enqueued = 0u32; - UnreportedSlashesQueue::::mutate(|queue| queue.append(&mut slashes)); + for batch in slashes.chunks(batch_size) { + if Self::unsent_queue_push((active_era, batch.to_vec())) { + enqueued = enqueued.saturating_add(batch.len() as u32); + } else { + log::warn!( + target: "ext_validators_slashes", + "Unsent slash queue full, cannot enqueue era {active_era}", + ); + Self::deposit_event(Event::::UnsentQueueFull { era: active_era }); + break; + } + } - if len > 0 { + if enqueued > 0 { Self::deposit_event(Event::::SlashAddedToQueue { - number: len as u32, + number: enqueued, era: active_era, }); } } - /// Returns number of slashes that were sent to ethereum. - fn process_slashes_queue(amount: u32) -> Option { - let mut slashes_to_send: Vec> = vec![]; - let era_index = T::EraIndexProvider::active_era().index; + fn slash_to_send_data(slash: &Slash) -> SlashData { + // Keep the original slash batch intact until delivery succeeds so failed + // batches can be moved to the back of the queue instead of being dropped. + let max_wad = T::MaxSlashWad::get(); + let wad_to_slash = (slash.percentage.deconstruct() as u128) + .saturating_mul(max_wad) + .checked_div(1_000_000_000u128) + .unwrap_or(0) + .min(max_wad); - UnreportedSlashesQueue::::mutate(|queue| { - for _ in 0..amount { - let Some(slash) = queue.pop_front() else { - // no more slashes to process in the queue - break; - }; - - // Convert Perbill to EigenLayer WAD format with linear mapping. - // Perbill(100%) → MaxSlashWad (e.g. 5% WAD = 5e16). - // Formula: perbill_inner * MaxSlashWad / 1e9 - // Clamp to MaxSlashWad to guard against overflow if governance - // sets MaxSlashWad high enough for saturating_mul to hit u128::MAX. - let max_wad = T::MaxSlashWad::get(); - let wad_to_slash = (slash.percentage.deconstruct() as u128) - .saturating_mul(max_wad) - .checked_div(1_000_000_000u128) - .unwrap_or(0) - .min(max_wad); - - slashes_to_send.push(SlashData { - validator: slash.validator, - wad_to_slash, - description: slash.offence_kind.to_description(), - }); - } - }); - - if slashes_to_send.is_empty() { - return None; + SlashData { + validator: slash.validator.clone(), + wad_to_slash, + description: slash.offence_kind.to_description(), } + } - let slashes_count = slashes_to_send.len() as u32; + fn send_slashes_message( + slashes_to_send: &[SlashData], + era_index: EraIndex, + ) -> Option { + let outbound = + T::SendMessage::build(&slashes_to_send.to_vec(), era_index).or_else(|| { + log::warn!(target: "ext_validators_slashes", "Failed to build outbound message"); + None + })?; - let outbound = match T::SendMessage::build(&slashes_to_send, era_index) { - Some(send_msg) => send_msg, - None => { - log::error!(target: "ext_validators_slashes", "Failed to build outbound message"); - return None; - } - }; - - // Validate and deliver the message let ticket = T::SendMessage::validate(outbound) .map_err(|e| { - log::error!( + log::warn!( target: "ext_validators_slashes", "Failed to validate outbound message: {:?}", e @@ -726,20 +791,126 @@ impl Pallet { }) .ok()?; - let message_id = T::SendMessage::deliver(ticket) + T::SendMessage::deliver(ticket) .map_err(|e| { - log::error!( + log::warn!( target: "ext_validators_slashes", "Failed to deliver outbound message: {:?}", e ); }) - .ok()?; - - Self::deposit_event(Event::::SlashesMessageSent { message_id }); - - Some(slashes_count) + .ok() } + + #[allow(dead_code)] + pub(crate) fn unsent_queue_is_empty() -> bool { + UnsentSlashHead::::get() == UnsentSlashTail::::get() + } + + #[allow(dead_code)] + pub(crate) fn unsent_queue_len() -> u32 { + let head = UnsentSlashHead::::get(); + let tail = UnsentSlashTail::::get(); + tail.wrapping_sub(head) % UNSENT_QUEUE_CAPACITY + } + + pub(crate) fn unsent_queue_push( + entry: (EraIndex, Vec>), + ) -> bool { + let head = UnsentSlashHead::::get(); + let tail = UnsentSlashTail::::get(); + let next_tail = (tail + 1) % UNSENT_QUEUE_CAPACITY; + if next_tail == head { + return false; + } + + UnsentSlashBatch::::insert(tail, entry); + UnsentSlashTail::::put(next_tail); + true + } + + fn unsent_queue_remove_slot(slot: u32) { + let tail = UnsentSlashTail::::get(); + let mut cur = slot; + loop { + let next = (cur + 1) % UNSENT_QUEUE_CAPACITY; + if next == tail { + break; + } + + if let Some(entry) = UnsentSlashBatch::::get(next) { + UnsentSlashBatch::::insert(cur, entry); + } + cur = next; + } + + UnsentSlashBatch::::remove(cur); + let new_tail = if tail == 0 { + UNSENT_QUEUE_CAPACITY - 1 + } else { + tail - 1 + }; + UnsentSlashTail::::put(new_tail); + + let head = UnsentSlashHead::::get(); + if head == tail { + UnsentSlashHead::::put(new_tail); + } + } + + /// Retry contract shared with rewards: + /// - process the current head batch, + /// - if send succeeds, remove it from the queue, + /// - if send fails, move the same batch to the back so later slash batches can progress. + pub(crate) fn process_slashes_queue() -> ProcessSlashesQueueOutcome { + let head = UnsentSlashHead::::get(); + let tail = UnsentSlashTail::::get(); + + if head == tail { + return ProcessSlashesQueueOutcome::Empty; + } + + let Some((era_index, slashes)) = UnsentSlashBatch::::get(head) else { + UnsentSlashHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); + return ProcessSlashesQueueOutcome::Empty; + }; + + let slashes_count = slashes.len() as u32; + let slashes_to_send = slashes + .iter() + .map(Self::slash_to_send_data) + .collect::>(); + + match Self::send_slashes_message(&slashes_to_send, era_index) { + Some(message_id) => { + UnsentSlashBatch::::remove(head); + UnsentSlashHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); + Self::deposit_event(Event::::SlashesMessageSent { message_id }); + ProcessSlashesQueueOutcome::Sent(slashes_count) + } + None => { + UnsentSlashBatch::::remove(head); + UnsentSlashHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); + UnsentSlashBatch::::insert(tail, (era_index, slashes)); + UnsentSlashTail::::put((tail + 1) % UNSENT_QUEUE_CAPACITY); + log::warn!( + target: "ext_validators_slashes", + "Failed to send {slashes_count} slash entries for era {era_index}, moved batch to back of queue", + ); + Self::deposit_event(Event::::SlashesMessageSendFailed { + era: era_index, + count: slashes_count, + }); + ProcessSlashesQueueOutcome::Requeued(slashes_count) + } + } + } +} + +pub(crate) enum ProcessSlashesQueueOutcome { + Empty, + Sent(u32), + Requeued(u32), } /// A pending slash record. The value of the slash has been computed but not applied yet, diff --git a/operator/pallets/external-validator-slashes/src/mock.rs b/operator/pallets/external-validator-slashes/src/mock.rs index efe2c509..8ec92539 100644 --- a/operator/pallets/external-validator-slashes/src/mock.rs +++ b/operator/pallets/external-validator-slashes/src/mock.rs @@ -134,7 +134,9 @@ thread_local! { pub static SENT_ETHEREUM_MESSAGE_NONCE: RefCell = const { RefCell::new(0) }; pub static MOCK_REPORT_OFFENCE_SHOULD_FAIL: RefCell = const { RefCell::new(false) }; pub static MOCK_REPORT_OFFENCE_CALLED: RefCell = const { RefCell::new(false) }; + pub static MOCK_SEND_MESSAGE_SHOULD_FAIL: RefCell = const { RefCell::new(false) }; pub static LAST_SENT_SLASHES: RefCell>> = RefCell::new(Vec::new()); + pub static LAST_BUILT_ERA: RefCell> = const { RefCell::new(None) }; } impl MockEraIndexProvider { @@ -171,6 +173,7 @@ impl pallet_session::Config for Test { type ValidatorIdOf = ConvertInto; type NextSessionRotation = pallet_session::PeriodicSessions; type WeightInfo = (); + type DisablingStrategy = (); } sp_runtime::impl_opaque_keys! { @@ -221,19 +224,32 @@ impl MockOkOutboundQueue { pub fn last_sent_slashes() -> Vec> { LAST_SENT_SLASHES.with(|r| r.borrow().clone()) } + + pub fn last_built_era() -> Option { + LAST_BUILT_ERA.with(|r| *r.borrow()) + } + + pub fn set_should_fail(fail: bool) { + MOCK_SEND_MESSAGE_SHOULD_FAIL.with(|r| *r.borrow_mut() = fail); + } } impl crate::SendMessage for MockOkOutboundQueue { type Ticket = (); type Message = (); - fn build(slashes: &Vec>, _: u32) -> Option { + fn build(slashes: &Vec>, era: u32) -> Option { LAST_SENT_SLASHES.with(|r| *r.borrow_mut() = slashes.clone()); + LAST_BUILT_ERA.with(|r| *r.borrow_mut() = Some(era)); Some(()) } fn validate(_: Self::Ticket) -> Result { Ok(()) } fn deliver(_: Self::Ticket) -> Result { - Ok(H256::zero()) + if MOCK_SEND_MESSAGE_SHOULD_FAIL.with(|r| *r.borrow()) { + Err(SendError::MessageTooLarge) + } else { + Ok(H256::zero()) + } } } @@ -270,6 +286,7 @@ impl external_validator_slashes::Config for Test { type QueuedSlashesProcessedPerBlock = ConstU32<20>; type WeightInfo = (); type SendMessage = MockOkOutboundQueue; + type GovernanceOrigin = frame_system::EnsureRoot; } pub struct FullIdentificationOf; @@ -285,6 +302,9 @@ impl pallet_session::historical::Config for Test { } // Build genesis storage according to the mock runtime. pub fn new_test_ext() -> sp_io::TestExternalities { + MOCK_SEND_MESSAGE_SHOULD_FAIL.with(|r| *r.borrow_mut() = false); + LAST_SENT_SLASHES.with(|r| r.borrow_mut().clear()); + LAST_BUILT_ERA.with(|r| *r.borrow_mut() = None); system::GenesisConfig::::default() .build_storage() .unwrap() diff --git a/operator/pallets/external-validator-slashes/src/tests.rs b/operator/pallets/external-validator-slashes/src/tests.rs index 126485b8..350af20f 100644 --- a/operator/pallets/external-validator-slashes/src/tests.rs +++ b/operator/pallets/external-validator-slashes/src/tests.rs @@ -28,6 +28,40 @@ use { sp_staking::offence::ReportOffence, }; +fn queued_slash_ids() -> Vec { + let mut queued = Vec::new(); + let mut slot = UnsentSlashHead::::get(); + let tail = UnsentSlashTail::::get(); + + while slot != tail { + if let Some((_, batch)) = UnsentSlashBatch::::get(slot) { + queued.extend(batch.into_iter().map(|slash| slash.slash_id)); + } + slot = (slot + 1) % UNSENT_QUEUE_CAPACITY; + } + + queued +} + +fn queued_batch_eras() -> Vec { + let mut queued = Vec::new(); + let mut slot = UnsentSlashHead::::get(); + let tail = UnsentSlashTail::::get(); + + while slot != tail { + if let Some((era, _)) = UnsentSlashBatch::::get(slot) { + queued.push(era); + } + slot = (slot + 1) % UNSENT_QUEUE_CAPACITY; + } + + queued +} + +fn unsent_queue_len() -> u32 { + ExternalValidatorSlashes::unsent_queue_len() +} + #[test] fn root_can_inject_manual_offence() { new_test_ext().execute_with(|| { @@ -574,14 +608,228 @@ fn test_on_offence_defer_period_0_messages_get_queued() { assert_eq!(Slashes::::get(get_slashing_era(1)).len(), 25); start_era(2, 2, 2); - assert_eq!(UnreportedSlashesQueue::::get().len(), 25); + assert_eq!(unsent_queue_len(), 2); + assert_eq!(queued_batch_eras(), vec![2, 2]); // this triggers on_initialize run_block(); - assert_eq!(UnreportedSlashesQueue::::get().len(), 5); + assert_eq!(unsent_queue_len(), 1); + assert_eq!(queued_slash_ids(), (20..25).collect::>()); run_block(); - assert_eq!(UnreportedSlashesQueue::::get().len(), 0); + assert!(ExternalValidatorSlashes::unsent_queue_is_empty()); + }); +} + +#[test] +fn failed_slashes_batch_is_moved_to_back_of_queue() { + new_test_ext().execute_with(|| { + crate::mock::DeferPeriodGetter::with_defer_period(0); + MockOkOutboundQueue::set_should_fail(true); + + start_era(0, 0, 0); + start_era(1, 1, 1); + + for i in 0..25 { + PendingOffenceKind::::insert(0, 3 + i, OffenceKind::LivenessOffence); + Pallet::::on_offence( + &[OffenceDetails { + offender: (3 + i, ()), + reporters: vec![], + }], + &[Perbill::from_percent(75)], + 0, + ); + } + + start_era(2, 2, 2); + assert_eq!(queued_slash_ids(), (0..25).collect::>()); + assert_eq!(queued_batch_eras(), vec![2, 2]); + + run_block(); + + assert_eq!(unsent_queue_len(), 2); + assert_eq!( + queued_slash_ids(), + (20..25).chain(0..20).collect::>() + ); + System::assert_has_event(RuntimeEvent::ExternalValidatorSlashes( + crate::Event::SlashesMessageSendFailed { era: 2, count: 20 }, + )); + }); +} + +#[test] +fn failed_slashes_batch_retries_after_send_is_reenabled() { + new_test_ext().execute_with(|| { + crate::mock::DeferPeriodGetter::with_defer_period(0); + MockOkOutboundQueue::set_should_fail(true); + + start_era(0, 0, 0); + start_era(1, 1, 1); + + for i in 0..25 { + PendingOffenceKind::::insert(0, 3 + i, OffenceKind::LivenessOffence); + Pallet::::on_offence( + &[OffenceDetails { + offender: (3 + i, ()), + reporters: vec![], + }], + &[Perbill::from_percent(75)], + 0, + ); + } + + start_era(2, 2, 2); + run_block(); + assert_eq!( + queued_slash_ids(), + (20..25).chain(0..20).collect::>() + ); + + start_era(3, 3, 3); + MockOkOutboundQueue::set_should_fail(false); + + run_block(); + assert_eq!(unsent_queue_len(), 1); + assert_eq!(queued_slash_ids(), (0..20).collect::>()); + assert_eq!(MockOkOutboundQueue::last_sent_slashes().len(), 5); + assert_eq!(MockOkOutboundQueue::last_built_era(), Some(2)); + System::assert_has_event(RuntimeEvent::ExternalValidatorSlashes( + crate::Event::SlashesMessageSent { + message_id: Default::default(), + }, + )); + + run_block(); + assert!(ExternalValidatorSlashes::unsent_queue_is_empty()); + }); +} + +#[test] +fn retry_extrinsic_succeeds_for_matching_era() { + new_test_ext().execute_with(|| { + crate::mock::DeferPeriodGetter::with_defer_period(0); + + start_era(0, 0, 0); + start_era(1, 1, 1); + + for i in 0..25 { + PendingOffenceKind::::insert(0, 3 + i, OffenceKind::LivenessOffence); + Pallet::::on_offence( + &[OffenceDetails { + offender: (3 + i, ()), + reporters: vec![], + }], + &[Perbill::from_percent(75)], + 0, + ); + } + + start_era(2, 2, 2); + start_era(5, 5, 5); + + assert_ok!(ExternalValidatorSlashes::retry_unsent_slash_era( + RuntimeOrigin::root(), + 2, + )); + + assert_eq!(unsent_queue_len(), 1); + assert_eq!(queued_slash_ids(), (20..25).collect::>()); + assert_eq!(MockOkOutboundQueue::last_built_era(), Some(2)); + }); +} + +#[test] +fn retry_extrinsic_errors_when_era_not_queued() { + new_test_ext().execute_with(|| { + assert_noop!( + ExternalValidatorSlashes::retry_unsent_slash_era(RuntimeOrigin::root(), 2), + Error::::EraNotInUnsentQueue + ); + }); +} + +#[test] +fn retry_extrinsic_requires_root() { + new_test_ext().execute_with(|| { + assert_noop!( + ExternalValidatorSlashes::retry_unsent_slash_era(RuntimeOrigin::signed(1), 2), + sp_runtime::DispatchError::BadOrigin + ); + }); +} + +#[test] +fn retry_extrinsic_preserves_failed_batch_when_send_still_fails() { + new_test_ext().execute_with(|| { + crate::mock::DeferPeriodGetter::with_defer_period(0); + MockOkOutboundQueue::set_should_fail(true); + + start_era(0, 0, 0); + start_era(1, 1, 1); + + for i in 0..25 { + PendingOffenceKind::::insert(0, 3 + i, OffenceKind::LivenessOffence); + Pallet::::on_offence( + &[OffenceDetails { + offender: (3 + i, ()), + reporters: vec![], + }], + &[Perbill::from_percent(75)], + 0, + ); + } + + start_era(2, 2, 2); + let before = queued_slash_ids(); + + assert_noop!( + ExternalValidatorSlashes::retry_unsent_slash_era(RuntimeOrigin::root(), 2), + Error::::MessageSendFailed + ); + + assert_eq!(queued_slash_ids(), before); + assert_eq!(unsent_queue_len(), 2); + }); +} + +#[test] +fn unsent_queue_full_emits_event() { + new_test_ext().execute_with(|| { + crate::mock::DeferPeriodGetter::with_defer_period(0); + + for i in 0..63u32 { + let slash = Slash { + validator: 1000 + i as u64, + reporters: vec![], + slash_id: i, + percentage: Perbill::from_percent(1), + confirmed: true, + offence_kind: OffenceKind::LivenessOffence, + }; + assert!(ExternalValidatorSlashes::unsent_queue_push(( + 1, + vec![slash] + ))); + } + + Slashes::::insert( + 2, + vec![Slash { + validator: 5000u64, + reporters: vec![], + slash_id: 999, + percentage: Perbill::from_percent(10), + confirmed: true, + offence_kind: OffenceKind::LivenessOffence, + }], + ); + + start_era(2, 2, 2); + + assert_eq!(unsent_queue_len(), 63); + assert_eq!(Slashes::::get(2).len(), 1); }); } @@ -628,14 +876,13 @@ fn test_on_offence_defer_period_0_messages_get_queued_across_eras() { } assert_eq!(Slashes::::get(get_slashing_era(1)).len(), 25); start_era(2, 2, 2); - assert_eq!(UnreportedSlashesQueue::::get().len(), 25); + assert_eq!(unsent_queue_len(), 2); // this triggers on_initialize run_block(); - assert_eq!(UnreportedSlashesQueue::::get().len(), 5); + assert_eq!(unsent_queue_len(), 1); + assert_eq!(queued_slash_ids(), (20..25).collect::>()); - // We have 5 non-dispatched, which should accumulate - // We shoulld have 30 after we initialie era 3 for i in 0..25 { PendingOffenceKind::::insert(2, 3 + i, OffenceKind::LivenessOffence); Pallet::::on_offence( @@ -651,15 +898,20 @@ fn test_on_offence_defer_period_0_messages_get_queued_across_eras() { } start_era(3, 3, 3); - assert_eq!(UnreportedSlashesQueue::::get().len(), 30); + assert_eq!(unsent_queue_len(), 3); + assert_eq!(queued_batch_eras(), vec![2, 3, 3]); // this triggers on_initialize run_block(); - assert_eq!(UnreportedSlashesQueue::::get().len(), 10); + assert_eq!(unsent_queue_len(), 2); + assert_eq!(queued_batch_eras(), vec![3, 3]); // this triggers on_initialize run_block(); - assert_eq!(UnreportedSlashesQueue::::get().len(), 0); + assert_eq!(unsent_queue_len(), 1); + + run_block(); + assert!(ExternalValidatorSlashes::unsent_queue_is_empty()); }); } diff --git a/operator/pallets/external-validator-slashes/src/weights.rs b/operator/pallets/external-validator-slashes/src/weights.rs index 011374bd..22971e79 100644 --- a/operator/pallets/external-validator-slashes/src/weights.rs +++ b/operator/pallets/external-validator-slashes/src/weights.rs @@ -57,6 +57,7 @@ pub trait WeightInfo { fn force_inject_slash() -> Weight; fn root_test_send_msg_to_eth() -> Weight; fn process_slashes_queue(s: u32, ) -> Weight; + fn retry_unsent_slash_era() -> Weight; fn set_slashing_mode() -> Weight; } @@ -136,6 +137,11 @@ impl WeightInfo for SubstrateWeight { .saturating_add(Weight::from_parts(0, 42).saturating_mul(s.into())) } + fn retry_unsent_slash_era() -> Weight { + // Same as the success path for one queued batch. + Self::process_slashes_queue(10) + } + fn set_slashing_mode() -> Weight { Weight::from_parts(7_402_000, 3601) .saturating_add(T::DbWeight::get().reads(1_u64)) @@ -221,6 +227,10 @@ impl WeightInfo for () { .saturating_add(Weight::from_parts(0, 42).saturating_mul(s.into())) } + fn retry_unsent_slash_era() -> Weight { + Self::process_slashes_queue(10) + } + fn set_slashing_mode() -> Weight { Weight::from_parts(7_402_000, 3601) .saturating_add(RocksDbWeight::get().reads(1_u64)) diff --git a/operator/pallets/external-validators-rewards/Cargo.toml b/operator/pallets/external-validators-rewards/Cargo.toml index aeaa7f32..9a6906de 100644 --- a/operator/pallets/external-validators-rewards/Cargo.toml +++ b/operator/pallets/external-validators-rewards/Cargo.toml @@ -22,7 +22,6 @@ frame-system = { workspace = true } sp-core = { workspace = true } sp-runtime = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } frame-benchmarking = { workspace = true } @@ -30,12 +29,12 @@ pallet-authorship = { workspace = true } pallet-balances = { workspace = true, optional = true } pallet-external-validators = { workspace = true } pallet-session = { workspace = true, features = [ "historical" ] } +pallet-timestamp = { workspace = true } snowbridge-core = { workspace = true } snowbridge-outbound-queue-primitives = { workspace = true } [dev-dependencies] -pallet-timestamp = { workspace = true } sp-io = { workspace = true } [features] @@ -58,7 +57,6 @@ std = [ "sp-io/std", "sp-runtime/std", "sp-staking/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/external-validators-rewards/src/benchmarking.rs b/operator/pallets/external-validators-rewards/src/benchmarking.rs index 4b84bc3f..0b01fb8a 100644 --- a/operator/pallets/external-validators-rewards/src/benchmarking.rs +++ b/operator/pallets/external-validators-rewards/src/benchmarking.rs @@ -23,8 +23,7 @@ use crate::Pallet as ExternalValidatorsRewards; use { crate::types::BenchmarkHelper, frame_benchmarking::{account, v2::*, BenchmarkError}, - frame_support::traits::{Currency, EnsureOrigin}, - sp_std::prelude::*, + frame_support::traits::{Currency, EnsureOrigin, Hooks}, }; const SEED: u32 = 0; @@ -43,15 +42,20 @@ fn create_funded_user( user } -/// Helper: insert a single entry into the ring buffer at slot 0. -fn push_unsent_entry(era_index: u32, timestamp: u32, inflation: u128) { - ExternalValidatorsRewards::::unsent_queue_push((era_index, timestamp, inflation)); +/// Helper: insert a single queued window into the ring buffer at slot 0. +fn push_unsent_entry(window_start: u32, window_index: u32, duration: u32) { + ExternalValidatorsRewards::::unsent_queue_push(QueuedRewardsWindow { + window_start, + window_index, + duration, + }); } #[allow(clippy::multiple_bound_locations)] -#[benchmarks(where T: pallet_balances::Config)] +#[benchmarks(where T: pallet_balances::Config + pallet_timestamp::Config)] mod benchmarks { use super::*; + use alloc::collections::BTreeMap; // worst case for the end of an era. #[benchmark] @@ -68,6 +72,14 @@ mod benchmarks { T::BenchmarkHelper::setup(); >::insert(1u32, era_reward_points); + pallet_timestamp::Now::::put(35_000u64); + #[cfg(test)] + crate::mock::Mock::mutate(|mock| { + mock.active_era = Some(pallet_external_validators::traits::ActiveEraInfo { + index: 1, + start: Some(30_000), + }); + }); #[block] { @@ -77,42 +89,79 @@ mod benchmarks { Ok(()) } - /// Helper to populate reward points for an era with 1000 validators. - fn setup_era_reward_points(era_index: u32) { - let mut era_reward_points = EraRewardPoints::default(); - era_reward_points.total = 20 * 1000; + /// Helper to populate persisted state for a closed window with 1000 operators. + fn setup_window_reward_state( + window_start: u32, + inflation_amount: u128, + ) { + let mut operator_points = BTreeMap::new(); for i in 0..1000 { - let account_id = create_funded_user::("candidate", i, 100); - era_reward_points.individual.insert(account_id, 20); + let _ = create_funded_user::("candidate", i, 100); + operator_points.insert(sp_core::H160::from_low_u64_be(i as u64 + 1), 20); } - >::insert(era_index, era_reward_points); + >::insert(window_start, operator_points); + >::insert(window_start, inflation_amount); } // on_initialize: unsent queue is empty (2 reads for head+tail) #[benchmark] fn process_unsent_reward_eras_empty() -> Result<(), BenchmarkError> { - // Ensure queue is empty (default state: head == tail == 0) - assert!(ExternalValidatorsRewards::::unsent_queue_is_empty()); + // Exercise the "empty slot at head" fallback path that returns the empty weight. + >::put(0); + >::put(1); + frame_system::Pallet::::set_block_number(1u32.into()); #[block] { - ExternalValidatorsRewards::::process_unsent_reward_eras(); + as Hooks< + frame_system::pallet_prelude::BlockNumberFor, + >>::on_initialize(1u32.into()); } Ok(()) } - // on_initialize: oldest entry has pruned reward points #[benchmark] - fn process_unsent_reward_eras_expired() -> Result<(), BenchmarkError> { - // Push an entry whose reward points do NOT exist in storage - push_unsent_entry::(999, 0, 42); + fn process_closed_windows_idle() -> Result<(), BenchmarkError> { + pallet_timestamp::Now::::put(35_000u64); #[block] { - ExternalValidatorsRewards::::process_unsent_reward_eras(); + ExternalValidatorsRewards::::process_closed_windows(35, 0, 10); + } + + Ok(()) + } + + #[benchmark] + fn process_closed_windows_processed() -> Result<(), BenchmarkError> { + frame_system::Pallet::::set_block_number(0u32.into()); + T::BenchmarkHelper::setup(); + setup_window_reward_state::(20, 42); + >::put(20); + pallet_timestamp::Now::::put(35_000u64); + + #[block] + { + ExternalValidatorsRewards::::process_closed_windows(35, 0, 10); + } + + Ok(()) + } + + // on_initialize: oldest queued window no longer has persisted state + #[benchmark] + fn process_unsent_reward_eras_expired() -> Result<(), BenchmarkError> { + push_unsent_entry::(999, 99, 10); + frame_system::Pallet::::set_block_number(1u32.into()); + + #[block] + { + as Hooks< + frame_system::pallet_prelude::BlockNumberFor, + >>::on_initialize(1u32.into()); } // Entry should have been removed @@ -126,13 +175,16 @@ mod benchmarks { fn process_unsent_reward_eras_success() -> Result<(), BenchmarkError> { frame_system::Pallet::::set_block_number(0u32.into()); T::BenchmarkHelper::setup(); - setup_era_reward_points::(1); + setup_window_reward_state::(0, 42); - push_unsent_entry::(1, 0, 42); + push_unsent_entry::(0, 0, 10); + frame_system::Pallet::::set_block_number(1u32.into()); #[block] { - ExternalValidatorsRewards::::process_unsent_reward_eras(); + as Hooks< + frame_system::pallet_prelude::BlockNumberFor, + >>::on_initialize(1u32.into()); } assert!(ExternalValidatorsRewards::::unsent_queue_is_empty()); @@ -145,32 +197,35 @@ mod benchmarks { fn process_unsent_reward_eras_failed() -> Result<(), BenchmarkError> { frame_system::Pallet::::set_block_number(0u32.into()); T::BenchmarkHelper::setup(); - setup_era_reward_points::(1); + setup_window_reward_state::(0, 42); - push_unsent_entry::(1, 0, 42); + push_unsent_entry::(0, 0, 10); + frame_system::Pallet::::set_block_number(1u32.into()); #[block] { - ExternalValidatorsRewards::::process_unsent_reward_eras(); + as Hooks< + frame_system::pallet_prelude::BlockNumberFor, + >>::on_initialize(1u32.into()); } Ok(()) } - // Governance extrinsic: retry a specific unsent era + // Governance extrinsic: retry a specific unsent window #[benchmark] - fn retry_unsent_reward_era() -> Result<(), BenchmarkError> { + fn retry_unsent_reward_window() -> Result<(), BenchmarkError> { frame_system::Pallet::::set_block_number(0u32.into()); T::BenchmarkHelper::setup(); - setup_era_reward_points::(1); + setup_window_reward_state::(0, 42); - push_unsent_entry::(1, 0, 42); + push_unsent_entry::(0, 0, 10); let origin = T::GovernanceOrigin::try_successful_origin().map_err(|_| BenchmarkError::Weightless)?; #[extrinsic_call] - _(origin as T::RuntimeOrigin, 1u32); + _(origin as T::RuntimeOrigin, 0u32); assert!(ExternalValidatorsRewards::::unsent_queue_is_empty()); diff --git a/operator/pallets/external-validators-rewards/src/lib.rs b/operator/pallets/external-validators-rewards/src/lib.rs index 8aeaa123..408073e1 100644 --- a/operator/pallets/external-validators-rewards/src/lib.rs +++ b/operator/pallets/external-validators-rewards/src/lib.rs @@ -18,6 +18,7 @@ //! Storage will be cleared after a period of time. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; #[cfg(test)] mod mock; @@ -33,18 +34,18 @@ pub mod weights; pub use pallet::*; +use alloc::vec::Vec; use { - crate::types::{EraRewardsUtils, HandleInflation, SendMessage}, - frame_support::traits::{Get, ValidatorSet}, + crate::types::{HandleInflation, RewardsPeriodUtils, SendMessage}, + frame_support::traits::{Get, UnixTime, ValidatorSet}, pallet_external_validators::traits::{ExternalIndexProvider, OnEraEnd, OnEraStart}, - parity_scale_codec::{Decode, Encode}, + parity_scale_codec::{Decode, Encode, MaxEncodedLen}, sp_core::{H160, H256}, sp_runtime::{ - traits::{Hash, Zero}, + traits::{Hash, SaturatedConversion}, Perbill, }, sp_staking::SessionIndex, - sp_std::vec::Vec, }; /// Trait for checking if a validator has been slashed in a given era @@ -65,14 +66,14 @@ pub mod pallet { use sp_runtime::PerThing; pub use crate::weights::WeightInfo; + use alloc::collections::BTreeMap; use { super::*, frame_support::pallet_prelude::*, frame_system::pallet_prelude::OriginFor, pallet_external_validators::traits::EraIndexProvider, sp_runtime::Saturating, - sp_std::collections::btree_map::BTreeMap, }; /// The current storage version. - const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); + const STORAGE_VERSION: StorageVersion = StorageVersion::new(2); pub type RewardPoints = u32; pub type EraIndex = u32; @@ -159,6 +160,17 @@ pub mod pallet { /// Ethereum Sovereign Account where rewards will be minted type RewardsEthereumSovereignAccount: Get; + /// EigenLayer rewards window genesis timestamp (seconds). + type RewardsWindowGenesisTimestamp: Get; + + /// EigenLayer rewards window duration (seconds). + /// Must be a positive multiple of EigenLayer `CALCULATION_INTERVAL_SECONDS` + /// and not exceed EigenLayer `MAX_REWARDS_DURATION`. + type RewardsWindowDuration: Get; + + /// Unix time provider used to place points and submissions in aligned windows. + type UnixTime: UnixTime; + /// The weight information of this pallet. type WeightInfo: WeightInfo; @@ -181,53 +193,139 @@ pub mod pallet { #[pallet::hooks] impl Hooks> for Pallet { fn on_initialize(_n: frame_system::pallet_prelude::BlockNumberFor) -> Weight { - Self::process_unsent_reward_eras() + let head = UnsentRewardHead::::get(); + let tail = UnsentRewardTail::::get(); + + if head != tail { + return Self::process_unsent_reward_eras_from(head, tail); + } + + let (genesis, interval) = Self::rewards_window_config(); + let now = Self::now_seconds(); + Self::process_closed_windows(now, genesis, interval) + } + + fn on_runtime_upgrade() -> Weight { + let on_chain = Pallet::::on_chain_storage_version(); + + if on_chain >= STORAGE_VERSION { + return T::DbWeight::get().reads(1); + } + + let cutover_era = T::EraIndexProvider::active_era().index.saturating_add(1); + + // This upgrade intentionally drops any pre-window retry state and + // defers window accounting until the next full era so the current + // in-flight era is not partially accounted under mixed semantics. + WindowModeStartsAtEra::::put(cutover_era); + NextWindowToSubmit::::kill(); + UnsentRewardHead::::put(0); + UnsentRewardTail::::put(0); + STORAGE_VERSION.put::>(); + + log::info!( + target: "ext_validators_rewards", + "Migrated rewards pallet to storage version 2. Window mode will start at era {}.", + cutover_era, + ); + + T::DbWeight::get().reads_writes(2, 5) + } + + #[cfg(feature = "try-runtime")] + fn pre_upgrade() -> Result, sp_runtime::TryRuntimeError> { + let on_chain = Pallet::::on_chain_storage_version(); + let active_era = T::EraIndexProvider::active_era().index; + let needs_upgrade = on_chain < STORAGE_VERSION; + + Ok((needs_upgrade, active_era).encode()) + } + + #[cfg(feature = "try-runtime")] + fn post_upgrade(state: Vec) -> Result<(), sp_runtime::TryRuntimeError> { + let (needs_upgrade, active_era): (bool, EraIndex) = Decode::decode(&mut &state[..]) + .map_err(|_| "Failed to decode pre-upgrade state")?; + + if !needs_upgrade { + frame_support::ensure!( + Pallet::::on_chain_storage_version() >= STORAGE_VERSION, + "Storage version regressed on a no-op upgrade", + ); + return Ok(()); + } + + frame_support::ensure!( + Pallet::::on_chain_storage_version() == STORAGE_VERSION, + "Rewards pallet storage version was not upgraded", + ); + frame_support::ensure!( + WindowModeStartsAtEra::::get() == active_era.saturating_add(1), + "Window cutover era was not initialized correctly", + ); + frame_support::ensure!( + NextWindowToSubmit::::get().is_none(), + "NextWindowToSubmit was not reset", + ); + frame_support::ensure!( + UnsentRewardHead::::get() == 0, + "UnsentRewardHead was not reset", + ); + frame_support::ensure!( + UnsentRewardTail::::get() == 0, + "UnsentRewardTail was not reset", + ); + + Ok(()) } } #[pallet::call] impl Pallet { /// Governance escape hatch: manually retry sending a rewards message for - /// an era that is stuck in the unsent queue. + /// a closed window that is stuck in the unsent queue. #[pallet::call_index(0)] #[pallet::weight(T::WeightInfo::retry_unsent_reward_era())] - pub fn retry_unsent_reward_era( + pub fn retry_unsent_reward_window( origin: OriginFor, - era_index: EraIndex, + window_start: u32, ) -> DispatchResult { T::GovernanceOrigin::ensure_origin(origin)?; - // Scan the ring buffer for the requested era + // Scan the ring buffer for the requested window let head = UnsentRewardHead::::get(); let tail = UnsentRewardTail::::get(); let mut found = None; let mut slot = head; while slot != tail { - if let Some(entry @ (idx, _, _)) = UnsentRewardEra::::get(slot) { - if idx == era_index { + if let Some(entry) = UnsentRewardWindow::::get(slot) { + if entry.window_start == window_start { found = Some((slot, entry)); break; } } slot = (slot + 1) % UNSENT_QUEUE_CAPACITY; } - let (slot, (_, timestamp, inflation)) = found.ok_or(Error::::EraNotInUnsentQueue)?; + let (slot, window) = found.ok_or(Error::::WindowNotInUnsentQueue)?; - let reward_points = RewardPointsForEra::::get(era_index); - let info = reward_points - .generate_era_rewards_info(era_index, inflation, timestamp) - .ok_or(Error::::RewardPointsPruned)?; + let info = Self::window_rewards_info( + window.window_start, + window.window_index, + window.duration, + ) + .ok_or(Error::::WindowRewardsMissing)?; let message_id = Self::send_rewards_message(&info).ok_or(Error::::MessageSendFailed)?; + Self::clear_window(window.window_start); Self::unsent_queue_remove_slot(slot); - Self::deposit_event(Event::RewardsMessageRetried { + Self::deposit_event(Event::RewardsWindowRetried { message_id, - era_index, + window_start: window.window_start, + window_index: window.window_index, total_points: info.total_points, - inflation_amount: inflation, + inflation_amount: info.inflation_amount, }); Ok(()) @@ -237,34 +335,50 @@ pub mod pallet { #[pallet::event] #[pallet::generate_deposit(pub(super) fn deposit_event)] pub enum Event { - /// The rewards message was sent correctly. - RewardsMessageSent { + /// The rewards window submission was sent correctly. + RewardsWindowSubmitted { message_id: H256, - era_index: EraIndex, + window_start: u32, + window_index: u32, total_points: u128, inflation_amount: u128, }, - /// The rewards message failed to send; era queued for retry. - RewardsMessageSendFailed { era_index: EraIndex }, - /// A previously failed rewards message was retried and sent successfully. - RewardsMessageRetried { + /// Window submission failed on the initial attempt. + RewardsWindowSubmissionFailed { + window_start: u32, + window_index: u32, + }, + /// Closed window had no distributable rewards and was skipped. + RewardsWindowSkipped { + window_start: u32, + window_index: u32, + }, + /// A previously failed rewards window was retried and sent successfully. + RewardsWindowRetried { message_id: H256, - era_index: EraIndex, + window_start: u32, + window_index: u32, total_points: u128, inflation_amount: u128, }, - /// An unsent era was dropped because its reward points have been pruned. - UnsentEraExpired { era_index: EraIndex }, - /// The unsent queue is full; this era could not be enqueued for retry. - UnsentQueueFull { era_index: EraIndex }, + /// A queued window was dropped because its stored rewards data is no longer available. + UnsentWindowExpired { + window_start: u32, + window_index: u32, + }, + /// The unsent queue is full; this failed window could not be enqueued for retry. + UnsentWindowQueueFull { + window_start: u32, + window_index: u32, + }, } #[pallet::error] pub enum Error { - /// The specified era is not in the unsent queue. - EraNotInUnsentQueue, - /// Reward points for the era have been pruned from storage. - RewardPointsPruned, + /// The specified window is not in the unsent queue. + WindowNotInUnsentQueue, + /// Rewards data for the window is no longer available. + WindowRewardsMissing, /// The message delivery still failed on retry. MessageSendFailed, } @@ -276,43 +390,6 @@ pub mod pallet { pub individual: BTreeMap, } - impl EraRewardPoints { - /// Generate utils needed for EigenLayer rewards submission: - /// - total_points: number of total points of the era_index specified. - /// - individual_points: (address, points) tuples for each validator. - /// - inflation_amount: total inflation tokens to distribute. - /// - era_start_timestamp: timestamp when the era started (seconds since Unix epoch). - pub fn generate_era_rewards_info( - &self, - era_index: EraIndex, - inflation_amount: u128, - era_start_timestamp: u32, - ) -> Option { - let mut individual_points = Vec::with_capacity(self.individual.len()); - - for (account_id, reward_points) in self.individual.iter() { - // Convert AccountId to H160 for EigenLayer rewards submission. - // In DataHaven, AccountId is H160, so encode() produces exactly 20 bytes. - individual_points - .push((H160::from_slice(&account_id.encode()[..20]), *reward_points)); - } - - let total_points: u128 = individual_points.iter().map(|(_, pts)| *pts as u128).sum(); - - if total_points.is_zero() { - return None; - } - - Some(EraRewardsUtils { - era_index, - era_start_timestamp, - total_points, - individual_points, - inflation_amount, - }) - } - } - impl Default for EraRewardPoints { fn default() -> Self { EraRewardPoints { @@ -342,23 +419,40 @@ pub mod pallet { pub type BlocksProducedInEra = StorageMap<_, Twox64Concat, EraIndex, u32, ValueQuery>; + /// Per-window operator points accumulated from session-end rewards. + #[pallet::storage] + #[pallet::unbounded] + pub type WindowOperatorPoints = + StorageMap<_, Twox64Concat, u32, BTreeMap, ValueQuery>; + + /// Total inflation allocated to a given aligned window. + #[pallet::storage] + pub type WindowInflationAmount = StorageMap<_, Twox64Concat, u32, u128, ValueQuery>; + + /// Pointer to the next window start to submit. + #[pallet::storage] + pub type NextWindowToSubmit = StorageValue<_, u32, OptionQuery>; + + /// Era at which window mode becomes active after a live upgrade. + /// `0` means window mode is active immediately (fresh chains/tests). + #[pallet::storage] + pub type WindowModeStartsAtEra = StorageValue<_, EraIndex, ValueQuery>; + /// Maximum number of unsent reward entries in the ring buffer. pub const UNSENT_QUEUE_CAPACITY: u32 = 64; - /// Ring buffer of eras whose rewards messages failed to send. - /// Each slot stores (era_index, era_start_timestamp, scaled_inflation). + /// Metadata for a failed rewards window kept in the retry ring buffer. + #[derive(RuntimeDebug, Encode, Decode, MaxEncodedLen, PartialEq, Eq, TypeInfo, Clone, Copy)] + pub struct QueuedRewardsWindow { + pub window_start: u32, + pub window_index: u32, + pub duration: u32, + } + + /// Ring buffer of windows whose rewards messages failed to send. /// Keyed by slot index [0, UNSENT_QUEUE_CAPACITY). #[pallet::storage] - pub type UnsentRewardEra = StorageMap< - _, - Twox64Concat, - u32, - ( - EraIndex, - /* era_start_timestamp */ u32, - /* scaled_inflation */ u128, - ), - >; + pub type UnsentRewardWindow = StorageMap<_, Twox64Concat, u32, QueuedRewardsWindow>; /// Ring buffer head: next slot to be processed by `on_initialize`. #[pallet::storage] @@ -370,23 +464,231 @@ pub mod pallet { pub type UnsentRewardTail = StorageValue<_, u32, ValueQuery>; impl Pallet { + fn now_seconds() -> u32 { + T::UnixTime::now().as_secs().saturated_into::() + } + + fn window_mode_is_active(era_index: EraIndex) -> bool { + let start_era = WindowModeStartsAtEra::::get(); + start_era == 0 || era_index >= start_era + } + + fn rewards_window_config() -> (u32, u32) { + ( + T::RewardsWindowGenesisTimestamp::get(), + T::RewardsWindowDuration::get(), + ) + } + + fn window_start_for(timestamp: u32, genesis: u32, interval: u32) -> u32 { + genesis + (timestamp.saturating_sub(genesis) / interval) * interval + } + + fn window_index_for(window_start: u32, genesis: u32, interval: u32) -> u32 { + window_start.saturating_sub(genesis) / interval + } + + fn account_to_h160(account_id: &T::AccountId) -> H160 { + H160::from_slice(&account_id.encode()[..20]) + } + + fn clear_window(window_start: u32) { + WindowInflationAmount::::remove(window_start); + WindowOperatorPoints::::remove(window_start); + } + + fn window_rewards_info( + window_start: u32, + window_index: u32, + duration: u32, + ) -> Option { + let inflation_amount = WindowInflationAmount::::get(window_start); + let operator_points = WindowOperatorPoints::::get(window_start); + let total_points: u128 = operator_points.values().map(|p| *p as u128).sum(); + + if total_points == 0 || inflation_amount == 0 { + return None; + } + + Some(RewardsPeriodUtils { + period_index: window_index, + period_start: window_start, + duration, + total_points, + individual_points: operator_points.into_iter().collect(), + inflation_amount, + }) + } + + fn allocate_era_inflation_to_windows( + era_start: u32, + era_end: u32, + inflation_amount: u128, + genesis: u32, + interval: u32, + ) { + if era_end <= era_start { + return; + } + + let mut window_start = Self::window_start_for(era_start, genesis, interval); + + if NextWindowToSubmit::::get().is_none() { + NextWindowToSubmit::::put(window_start); + } + + if inflation_amount == 0 { + return; + } + + let era_duration = era_end.saturating_sub(era_start).max(1); + let mut allocated = 0u128; + let mut last_window = None; + + while window_start < era_end { + let window_end = window_start.saturating_add(interval); + let overlap_start = era_start.max(window_start); + let overlap_end = era_end.min(window_end); + + if overlap_end > overlap_start { + let overlap = overlap_end.saturating_sub(overlap_start); + let portion = + inflation_amount.saturating_mul(overlap as u128) / (era_duration as u128); + + if portion > 0 { + WindowInflationAmount::::mutate(window_start, |current| { + *current = current.saturating_add(portion); + }); + allocated = allocated.saturating_add(portion); + } + last_window = Some(window_start); + } + + window_start = window_start.saturating_add(interval); + } + + let remainder = inflation_amount.saturating_sub(allocated); + if remainder > 0 { + if let Some(last_window) = last_window { + WindowInflationAmount::::mutate(last_window, |current| { + *current = current.saturating_add(remainder); + }); + } + } + } + + pub(crate) fn process_closed_windows(now: u32, genesis: u32, interval: u32) -> Weight { + let Some(mut next_window) = NextWindowToSubmit::::get() else { + return T::WeightInfo::process_closed_windows_idle(); + }; + + if next_window.saturating_add(interval) > now { + return T::WeightInfo::process_closed_windows_idle(); + } + + let inflation_amount = WindowInflationAmount::::get(next_window); + let operator_points = WindowOperatorPoints::::get(next_window); + let total_points: u128 = operator_points.values().map(|p| *p as u128).sum(); + let window_index = Self::window_index_for(next_window, genesis, interval); + + if total_points == 0 || inflation_amount == 0 { + Self::clear_window(next_window); + Self::deposit_event(Event::RewardsWindowSkipped { + window_start: next_window, + window_index, + }); + next_window = next_window.saturating_add(interval); + NextWindowToSubmit::::put(next_window); + return T::WeightInfo::process_closed_windows_processed(); + } + + let utils = RewardsPeriodUtils { + period_index: window_index, + period_start: next_window, + duration: interval, + total_points, + individual_points: operator_points.into_iter().collect(), + inflation_amount, + }; + + match Self::send_rewards_message(&utils) { + Some(message_id) => { + Self::deposit_event(Event::RewardsWindowSubmitted { + message_id, + window_start: next_window, + window_index, + total_points, + inflation_amount, + }); + } + None => { + Self::deposit_event(Event::RewardsWindowSubmissionFailed { + window_start: next_window, + window_index, + }); + + let queued_window = QueuedRewardsWindow { + window_start: next_window, + window_index, + duration: interval, + }; + + if Self::unsent_queue_push(queued_window) { + next_window = next_window.saturating_add(interval); + NextWindowToSubmit::::put(next_window); + return T::WeightInfo::process_closed_windows_processed(); + } + + log::error!( + target: "ext_validators_rewards", + "Unsent reward queue full, cannot enqueue window {}", + next_window, + ); + Self::deposit_event(Event::UnsentWindowQueueFull { + window_start: next_window, + window_index, + }); + return T::WeightInfo::process_closed_windows_processed(); + } + } + + Self::clear_window(next_window); + next_window = next_window.saturating_add(interval); + NextWindowToSubmit::::put(next_window); + T::WeightInfo::process_closed_windows_processed() + } + /// Reward validators. Does not check if the validators are valid, caller needs to make sure of that. pub fn reward_by_ids(points: impl IntoIterator) { let active_era = T::EraIndexProvider::active_era(); + let now = Self::now_seconds(); + let (genesis, interval) = Self::rewards_window_config(); + let window_start = Self::window_start_for(now, genesis, interval); + let window_mode_active = Self::window_mode_is_active(active_era.index); RewardPointsForEra::::mutate(active_era.index, |era_rewards| { for (validator, points) in points.into_iter() { (*era_rewards.individual.entry(validator.clone()).or_default()) .saturating_accrue(points); era_rewards.total.saturating_accrue(points); + + if window_mode_active { + let operator = Self::account_to_h160(&validator); + WindowOperatorPoints::::mutate(window_start, |operators| { + operators + .entry(operator) + .and_modify(|existing| *existing = existing.saturating_add(points)) + .or_insert(points); + }); + } } }) } /// Helper to build, validate and deliver an outbound message. /// Logs any error and returns None on failure. - fn send_rewards_message(info: &EraRewardsUtils) -> Option { - let outbound = T::SendMessage::build(info).or_else(|| { + fn send_rewards_message(utils: &RewardsPeriodUtils) -> Option { + let outbound = T::SendMessage::build(utils).or_else(|| { log::error!(target: "ext_validators_rewards", "Failed to build outbound message"); None })?; @@ -428,9 +730,9 @@ pub mod pallet { tail.wrapping_sub(head) % UNSENT_QUEUE_CAPACITY } - /// Push a new entry into the ring buffer. + /// Push a new window into the ring buffer. /// Returns `true` on success, `false` if the buffer is full. - pub(crate) fn unsent_queue_push(entry: (EraIndex, u32, u128)) -> bool { + pub(crate) fn unsent_queue_push(entry: QueuedRewardsWindow) -> bool { let head = UnsentRewardHead::::get(); let tail = UnsentRewardTail::::get(); let next_tail = (tail + 1) % UNSENT_QUEUE_CAPACITY; @@ -438,7 +740,7 @@ pub mod pallet { // Buffer full return false; } - UnsentRewardEra::::insert(tail, entry); + UnsentRewardWindow::::insert(tail, entry); UnsentRewardTail::::put(next_tail); true } @@ -455,13 +757,13 @@ pub mod pallet { break; } // Move next → cur - if let Some(entry) = UnsentRewardEra::::get(next) { - UnsentRewardEra::::insert(cur, entry); + if let Some(entry) = UnsentRewardWindow::::get(next) { + UnsentRewardWindow::::insert(cur, entry); } cur = next; } // Remove the now-duplicate last entry and shrink tail - UnsentRewardEra::::remove(cur); + UnsentRewardWindow::::remove(cur); let new_tail = if tail == 0 { UNSENT_QUEUE_CAPACITY - 1 } else { @@ -487,66 +789,71 @@ pub mod pallet { // ── Core retry logic ────────────────────────────────────────────── - /// Process at most one unsent reward era per block. + /// Process at most one unsent reward window per block. /// On failure the head pointer advances to the next entry so a single - /// stuck era does not block retries for subsequent eras. - pub(crate) fn process_unsent_reward_eras() -> Weight { - let head = UnsentRewardHead::::get(); - let tail = UnsentRewardTail::::get(); - + /// stuck window does not block retries for subsequent windows. + fn process_unsent_reward_eras_from(head: u32, tail: u32) -> Weight { if head == tail { return T::WeightInfo::process_unsent_reward_eras_empty(); } - let Some((era_index, timestamp, inflation)) = UnsentRewardEra::::get(head) else { + let Some(window) = UnsentRewardWindow::::get(head) else { // Slot unexpectedly empty — advance head past it UnsentRewardHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); return T::WeightInfo::process_unsent_reward_eras_empty(); }; - // Check if reward points are still available - let reward_points = RewardPointsForEra::::get(era_index); - let info = - match reward_points.generate_era_rewards_info(era_index, inflation, timestamp) { - Some(info) => info, - None => { - // Reward points have been pruned — discard this entry - log::warn!( - target: "ext_validators_rewards", - "Unsent era {era_index} expired: reward points pruned", - ); - UnsentRewardEra::::remove(head); - UnsentRewardHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); - Self::deposit_event(Event::UnsentEraExpired { era_index }); - return T::WeightInfo::process_unsent_reward_eras_expired(); - } - }; + let info = match Self::window_rewards_info( + window.window_start, + window.window_index, + window.duration, + ) { + Some(info) => info, + None => { + log::warn!( + target: "ext_validators_rewards", + "Unsent window {} expired: rewards state missing", + window.window_start, + ); + Self::clear_window(window.window_start); + UnsentRewardWindow::::remove(head); + UnsentRewardHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); + Self::deposit_event(Event::UnsentWindowExpired { + window_start: window.window_start, + window_index: window.window_index, + }); + return T::WeightInfo::process_unsent_reward_eras_expired(); + } + }; // Attempt to resend match Self::send_rewards_message(&info) { Some(message_id) => { - UnsentRewardEra::::remove(head); + Self::clear_window(window.window_start); + UnsentRewardWindow::::remove(head); UnsentRewardHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); - Self::deposit_event(Event::RewardsMessageRetried { + Self::deposit_event(Event::RewardsWindowRetried { message_id, - era_index, + window_start: window.window_start, + window_index: window.window_index, total_points: info.total_points, - inflation_amount: inflation, + inflation_amount: info.inflation_amount, }); T::WeightInfo::process_unsent_reward_eras_success() } None => { // Move the failed entry to the back of the queue so the - // next block tries a different era (avoids head-of-line + // next block tries a different window (avoids head-of-line // blocking). The entry is not lost — it will be retried // after all other pending entries. - UnsentRewardEra::::remove(head); + UnsentRewardWindow::::remove(head); UnsentRewardHead::::put((head + 1) % UNSENT_QUEUE_CAPACITY); - UnsentRewardEra::::insert(tail, (era_index, timestamp, inflation)); + UnsentRewardWindow::::insert(tail, window); UnsentRewardTail::::put((tail + 1) % UNSENT_QUEUE_CAPACITY); log::warn!( target: "ext_validators_rewards", - "Retry for unsent era {era_index} still failing, moved to back of queue", + "Retry for unsent window {} still failing, moved to back of queue", + window.window_start, ); T::WeightInfo::process_unsent_reward_eras_failed() } @@ -870,17 +1177,27 @@ pub mod pallet { RewardPointsForEra::::remove(era_index_to_delete); BlocksProducedInEra::::remove(era_index_to_delete); - // Proactively clean up any unsent entries whose reward points - // have been pruned (this era and any older ones still lingering). + // Proactively clean up any unsent entries whose window state has + // been removed while they were waiting for retry. let head = UnsentRewardHead::::get(); let mut tail = UnsentRewardTail::::get(); let mut slot = head; while slot != tail { - if let Some((idx, _, _)) = UnsentRewardEra::::get(slot) { - if idx <= era_index_to_delete { + if let Some(window) = UnsentRewardWindow::::get(slot) { + if Self::window_rewards_info( + window.window_start, + window.window_index, + window.duration, + ) + .is_none() + { + Self::clear_window(window.window_start); Self::unsent_queue_remove_slot(slot); tail = UnsentRewardTail::::get(); - Self::deposit_event(Event::UnsentEraExpired { era_index: idx }); + Self::deposit_event(Event::UnsentWindowExpired { + window_start: window.window_start, + window_index: window.window_index, + }); // Don't advance slot — next entry slid into this position continue; } @@ -892,6 +1209,15 @@ pub mod pallet { impl OnEraEnd for Pallet { fn on_era_end(era_index: EraIndex) { + if !Self::window_mode_is_active(era_index) { + log::info!( + target: "ext_validators_rewards", + "Skipping transition-era rewards for era {} until window mode cutover", + era_index, + ); + return; + } + // Calculate performance-scaled inflation based on blocks produced. let base_inflation = T::EraInflationProvider::get(); let scaled_inflation = Self::calculate_scaled_inflation(era_index, base_inflation); @@ -937,55 +1263,22 @@ pub mod pallet { .map(|ms| (ms / 1000) as u32) .unwrap_or(0); - // Generate era rewards utils with the actual rewards amount (post-treasury split). - // This ensures the message to EigenLayer matches the actual minted rewards. - let info = match RewardPointsForEra::::get(&era_index).generate_era_rewards_info( - era_index, - mint_result.rewards_amount, + let (genesis, interval) = Self::rewards_window_config(); + let now = Self::now_seconds(); + + // Allocate the rewards amount (post-treasury split) to aligned windows. + Self::allocate_era_inflation_to_windows( era_start_timestamp, - ) { - Some(info) => info, - None => { - // Returns None when total_points is zero or no validators have rewards - log::error!( - target: "ext_validators_rewards", - "Failed to generate era rewards info (no rewards to distribute)" - ); - return; - } - }; + now, + mint_result.rewards_amount, + genesis, + interval, + ); frame_system::Pallet::::register_extra_weight_unchecked( T::WeightInfo::on_era_end(), DispatchClass::Mandatory, ); - - match Self::send_rewards_message(&info) { - Some(message_id) => { - Self::deposit_event(Event::RewardsMessageSent { - message_id, - era_index, - total_points: info.total_points, - inflation_amount: mint_result.rewards_amount, - }); - } - None => { - // Message failed — queue for automatic retry via on_initialize - if Self::unsent_queue_push(( - era_index, - era_start_timestamp, - mint_result.rewards_amount, - )) { - Self::deposit_event(Event::RewardsMessageSendFailed { era_index }); - } else { - log::error!( - target: "ext_validators_rewards", - "Unsent reward queue full, cannot enqueue era {era_index}", - ); - Self::deposit_event(Event::UnsentQueueFull { era_index }); - } - } - } } } } diff --git a/operator/pallets/external-validators-rewards/src/mock.rs b/operator/pallets/external-validators-rewards/src/mock.rs index 6b99b7c3..f9bbcab5 100644 --- a/operator/pallets/external-validators-rewards/src/mock.rs +++ b/operator/pallets/external-validators-rewards/src/mock.rs @@ -123,10 +123,10 @@ impl mock_data::Config for Test {} pub struct MockOkOutboundQueue; impl crate::types::SendMessage for MockOkOutboundQueue { - type Ticket = crate::types::EraRewardsUtils; - type Message = crate::types::EraRewardsUtils; + type Ticket = crate::types::RewardsPeriodUtils; + type Message = crate::types::RewardsPeriodUtils; - fn build(utils: &crate::types::EraRewardsUtils) -> Option { + fn build(utils: &crate::types::RewardsPeriodUtils) -> Option { Some(utils.clone()) } @@ -138,6 +138,9 @@ impl crate::types::SendMessage for MockOkOutboundQueue { } fn deliver(_: Self::Ticket) -> Result { + if OutboundDeliverShouldFail::get() { + return Err(SendError::Halted); + } Ok(H256::zero()) } } @@ -160,6 +163,9 @@ impl ExternalIndexProvider for TimestampProvider { parameter_types! { pub RewardsEthereumSovereignAccount: H160 = REWARDS_ACCOUNT; pub TreasuryAccount: H160 = TREASURY_ACCOUNT; + pub static OutboundDeliverShouldFail: bool = false; + pub static RewardsWindowGenesisTimestamp: u32 = 0; + pub static RewardsWindowDuration: u32 = 10; pub const InflationTreasuryProportion: sp_runtime::Perbill = sp_runtime::Perbill::from_percent(20); pub EraInflationProvider: u128 = Mock::mock().era_inflation.unwrap_or(42); // Inflation scaling parameters for tests @@ -226,6 +232,9 @@ impl pallet_external_validators_rewards::Config for Test { type HandleInflation = InflationMinter; type Currency = Balances; type RewardsEthereumSovereignAccount = RewardsEthereumSovereignAccount; + type RewardsWindowGenesisTimestamp = RewardsWindowGenesisTimestamp; + type RewardsWindowDuration = RewardsWindowDuration; + type UnixTime = Timestamp; type GovernanceOrigin = frame_system::EnsureRoot; type WeightInfo = (); #[cfg(feature = "runtime-benchmarks")] @@ -283,6 +292,7 @@ impl HandleInflation for InflationMinter { // Pallet to provide some mock data, used to test #[frame_support::pallet] pub mod mock_data { + use alloc::vec::Vec; use { frame_support::pallet_prelude::*, pallet_external_validators::traits::{ActiveEraInfo, EraIndex, EraIndexProvider}, @@ -293,9 +303,9 @@ pub mod mock_data { pub active_era: Option, pub era_inflation: Option, /// Set of validators that are considered offline (for liveness testing) - pub offline_validators: sp_std::vec::Vec, + pub offline_validators: Vec, /// Set of (era_index, validator_id) pairs that are slashed - pub slashed_validators: sp_std::vec::Vec<(u32, sp_core::H160)>, + pub slashed_validators: Vec<(u32, sp_core::H160)>, /// When true, MockOkOutboundQueue::validate will return Err(SendError::MessageTooLarge) pub send_message_fails: bool, } @@ -357,12 +367,17 @@ pub fn new_test_ext() -> sp_io::TestExternalities { ExistentialDeposit::get(), ), // Rewards account needs existential deposit ]; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); - - let ext: sp_io::TestExternalities = t.into(); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .unwrap(); + let mut ext: sp_io::TestExternalities = t.into(); + ext.execute_with(|| { + Timestamp::set_timestamp(INIT_TIMESTAMP); + }); ext } diff --git a/operator/pallets/external-validators-rewards/src/tests.rs b/operator/pallets/external-validators-rewards/src/tests.rs index 752a55c0..5708b84a 100644 --- a/operator/pallets/external-validators-rewards/src/tests.rs +++ b/operator/pallets/external-validators-rewards/src/tests.rs @@ -16,12 +16,22 @@ use { crate::{self as pallet_external_validators_rewards, mock::*}, - frame_support::{assert_noop, assert_ok, traits::fungible::Mutate}, + alloc::collections::btree_map::BTreeMap, + frame_support::{ + assert_noop, assert_ok, + traits::{fungible::Mutate, GetStorageVersion, Hooks, StorageVersion}, + }, pallet_external_validators::traits::{ActiveEraInfo, OnEraEnd, OnEraStart}, sp_core::H160, - sp_std::collections::btree_map::BTreeMap, }; +fn run_rewards_initialize() { + let next_block = System::block_number() + 1; + System::set_block_number(next_block); + Timestamp::set_timestamp(Timestamp::get() + BLOCK_TIME); + let _ = as Hooks>::on_initialize(next_block); +} + #[test] fn basic_setup_works() { new_test_ext().execute_with(|| { @@ -66,6 +76,507 @@ fn can_reward_validators() { }) } +#[test] +fn runtime_upgrade_schedules_window_mode_for_next_era_and_resets_retry_state() { + new_test_ext().execute_with(|| { + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 7, + start: Some(70_000), + }) + }); + + StorageVersion::new(1).put::>(); + crate::WindowModeStartsAtEra::::put(0); + crate::NextWindowToSubmit::::put(123); + crate::UnsentRewardHead::::put(5); + crate::UnsentRewardTail::::put(9); + + let _ = as Hooks>::on_runtime_upgrade(); + + assert_eq!(crate::WindowModeStartsAtEra::::get(), 8); + assert_eq!(crate::NextWindowToSubmit::::get(), None); + assert_eq!(crate::UnsentRewardHead::::get(), 0); + assert_eq!(crate::UnsentRewardTail::::get(), 0); + assert_eq!( + >::on_chain_storage_version(), + StorageVersion::new(2) + ); + }) +} + +#[test] +fn transition_era_does_not_write_window_points_before_cutover() { + new_test_ext().execute_with(|| { + run_to_block(5); // now = 35s + + RewardsWindowGenesisTimestamp::set(20); + RewardsWindowDuration::set(10); + crate::WindowModeStartsAtEra::::put(2); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + start: Some(20_000), + }) + }); + + ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 10)]); + + assert_eq!( + crate::RewardPointsForEra::::get(1).total, + 10, + "era accounting should still accumulate during the discarded transition era" + ); + assert!( + crate::WindowOperatorPoints::::get(30).is_empty(), + "window accounting must remain off until the cutover era" + ); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 2, + start: Some(40_000), + }) + }); + + ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 10)]); + + assert_eq!( + crate::WindowOperatorPoints::::get(30).get(&H160::from_low_u64_be(1)), + Some(&10), + "window accounting should start once the cutover era is reached" + ); + }) +} + +#[test] +fn transition_era_on_era_end_is_skipped_before_cutover() { + new_test_ext().execute_with(|| { + run_to_block(5); // now = 35s + + RewardsWindowGenesisTimestamp::set(20); + RewardsWindowDuration::set(10); + crate::WindowModeStartsAtEra::::put(2); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + start: Some(20_000), + }) + }); + + ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 10)]); + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } + + System::reset_events(); + ExternalValidatorsRewards::on_era_end(1); + + assert!( + !System::events().iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { .. } + | crate::Event::RewardsWindowSubmissionFailed { .. } + | crate::Event::RewardsWindowSkipped { .. } + ) + )), + "transition era should not emit window-processing events before cutover" + ); + assert_eq!(crate::WindowInflationAmount::::iter().count(), 0); + assert_eq!(crate::NextWindowToSubmit::::get(), None); + }) +} + +#[test] +fn window_mode_attributes_points_to_aligned_window() { + new_test_ext().execute_with(|| { + run_to_block(5); // now = 35s + + RewardsWindowGenesisTimestamp::set(20); + RewardsWindowDuration::set(10); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + start: Some(20_000), + }) + }); + + ExternalValidatorsRewards::reward_by_ids([ + (H160::from_low_u64_be(1), 10), + (H160::from_low_u64_be(2), 20), + ]); + + let window_start = 30u32; + let points = + pallet_external_validators_rewards::WindowOperatorPoints::::get(window_start); + assert_eq!(points.get(&H160::from_low_u64_be(1)), Some(&10)); + assert_eq!(points.get(&H160::from_low_u64_be(2)), Some(&20)); + }) +} + +#[test] +fn window_mode_submits_closed_windows_and_advances_pointer() { + new_test_ext().execute_with(|| { + run_to_block(5); // now = 35s + + RewardsWindowGenesisTimestamp::set(20); + RewardsWindowDuration::set(10); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + start: Some(20_000), + }) + }); + + ExternalValidatorsRewards::reward_by_ids([ + (H160::from_low_u64_be(1), 10), + (H160::from_low_u64_be(2), 20), + ]); + + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } + + run_to_block(15); // now = 45s, window [30,40) is closed + ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); + run_rewards_initialize(); + + // Inflation is 42 (default). After 20% treasury split: rewards_amount = 34. + // Era spans 20s to 45s = 25s. Window [20,30) overlap = 10s, [30,40) overlap = 10s, + // [40,50) overlap = 5s. Window [30,40) gets: 34 * 10/25 = 13. + let events = System::events(); + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsWindowSubmitted { + window_start: 30, + window_index: 1, + total_points: 30, + inflation_amount: 13, + .. + }) + )), + "expected closed window submission event" + ); + + assert_eq!( + pallet_external_validators_rewards::NextWindowToSubmit::::get(), + Some(40) + ); + assert!( + pallet_external_validators_rewards::WindowOperatorPoints::::get(30).is_empty() + ); + }) +} + +#[test] +fn window_mode_era_inflation_split_across_multiple_windows() { + new_test_ext().execute_with(|| { + // genesis=0, interval=10 → windows [0,10), [10,20), [20,30), ... + RewardsWindowGenesisTimestamp::set(0); + RewardsWindowDuration::set(10); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + // Era started at 5s (within window [0,10)) + start: Some(5_000), + }); + }); + + // Directly seed points into past windows so they get submitted (not skipped). + // reward_by_ids always writes to the current-timestamp window, so we write directly. + pallet_external_validators_rewards::WindowOperatorPoints::::mutate(0, |map| { + map.insert(H160::from_low_u64_be(1), 50); + }); + pallet_external_validators_rewards::WindowOperatorPoints::::mutate(10, |map| { + map.insert(H160::from_low_u64_be(1), 50); + }); + pallet_external_validators_rewards::WindowOperatorPoints::::mutate(20, |map| { + map.insert(H160::from_low_u64_be(1), 50); + }); + + // Also seed points into the current window [30,40) via reward_by_ids + run_to_block(5); // now = 35s + ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); + + // Produce enough blocks for inflation scaling + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } + + // on_era_end allocates inflation across windows; on_initialize submits closed ones. + // Era spans from 5s to now=35s (30s duration). + // Window overlaps: + // [0,10): overlap [5,10) = 5s → 5/30 of inflation + // [10,20): overlap [10,20) = 10s → 10/30 of inflation + // [20,30): overlap [20,30) = 10s → 10/30 of inflation + // [30,40): overlap [30,35) = 5s → 5/30 of inflation (current, not closed) + ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); + run_rewards_initialize(); + run_rewards_initialize(); + + // on_era_end allocates mint_result.rewards_amount (post-treasury split) to windows. + // Inflation = 42, treasury = 20% of 42 = 8, rewards_amount = 34. + let inflation = + ::EraInflationProvider::get(); + let treasury_amount = InflationTreasuryProportion::get().mul_floor(inflation); + let rewards_amount = inflation - treasury_amount; + + // Closed windows are cleared one per block, so verify via events after draining them. + let events = System::events(); + + let expected_w0 = rewards_amount * 5 / 30; + let expected_w10 = rewards_amount * 10 / 30; + let expected_w20 = rewards_amount * 10 / 30; + + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { + window_start: 0, + window_index: 0, + inflation_amount, + .. + } + ) if *inflation_amount == expected_w0 + )), + "window [0,10) should get 5/30 of rewards_amount = {expected_w0}" + ); + + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { + window_start: 10, + window_index: 1, + inflation_amount, + .. + } + ) if *inflation_amount == expected_w10 + )), + "window [10,20) should get 10/30 of rewards_amount = {expected_w10}" + ); + + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { + window_start: 20, + window_index: 2, + inflation_amount, + .. + } + ) if *inflation_amount == expected_w20 + )), + "window [20,30) should get 10/30 of rewards_amount = {expected_w20}" + ); + + // Window [30,40) is current (not closed), verify inflation was allocated + let w30 = pallet_external_validators_rewards::WindowInflationAmount::::get(30); + let expected_w30_base = rewards_amount * 5 / 30; + let allocated_without_remainder = + expected_w0 + expected_w10 + expected_w20 + expected_w30_base; + let remainder = rewards_amount.saturating_sub(allocated_without_remainder); + assert_eq!( + w30, + expected_w30_base + remainder, + "last window should get its portion plus any integer-division remainder" + ); + + // Total across all windows must equal the full rewards amount + assert_eq!( + expected_w0 + expected_w10 + expected_w20 + w30, + rewards_amount, + "total rewards must be fully distributed" + ); + }) +} + +#[test] +fn window_mode_submits_multiple_closed_windows_in_single_era_end() { + new_test_ext().execute_with(|| { + // genesis=0, interval=10 + RewardsWindowGenesisTimestamp::set(0); + RewardsWindowDuration::set(10); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + start: Some(30_000), // era started at 30s + }); + }); + + // Seed points into window [30,40) at block 5 (now=35s) + run_to_block(5); // now = 35s + ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 10)]); + + // Seed points into window [40,50) at block 15 (now=45s) + run_to_block(15); // now = 45s + ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(2), 20)]); + + // Produce enough blocks for inflation scaling + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } + + // Advance to block 35 (now=65s), so windows [30,40) and [40,50) and [50,60) are closed. + // Window [60,70) is current. + run_to_block(35); // now = 65s + ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); + run_rewards_initialize(); + run_rewards_initialize(); + + let events = System::events(); + + // Window [30,40) should be submitted (has points and inflation) + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsWindowSubmitted { + window_start: 30, + window_index: 3, + .. + }) + )), + "window [30,40) should have been submitted" + ); + + // Window [40,50) should be submitted (has points and inflation) + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsWindowSubmitted { + window_start: 40, + window_index: 4, + .. + }) + )), + "window [40,50) should have been submitted" + ); + + // Window [50,60) should be skipped (no points, even though it may have inflation) + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsWindowSkipped { + window_start: 50, + window_index: 5, + }) + )), + "window [50,60) should have been skipped (no points)" + ); + + // NextWindowToSubmit should advance past all closed windows + assert_eq!( + pallet_external_validators_rewards::NextWindowToSubmit::::get(), + Some(60) + ); + + // All closed windows should have their storage cleared + assert!( + pallet_external_validators_rewards::WindowOperatorPoints::::get(30).is_empty() + ); + assert!( + pallet_external_validators_rewards::WindowOperatorPoints::::get(40).is_empty() + ); + assert!( + pallet_external_validators_rewards::WindowOperatorPoints::::get(50).is_empty() + ); + }) +} + +#[test] +fn window_mode_delivery_failure_emits_submission_failed_event() { + new_test_ext().execute_with(|| { + RewardsWindowGenesisTimestamp::set(20); + RewardsWindowDuration::set(10); + + Mock::mutate(|mock| { + mock.active_era = Some(ActiveEraInfo { + index: 1, + start: Some(20_000), + }); + }); + + // Seed points into window [30,40) at block 5 (now=35s) + run_to_block(5); // now = 35s + ExternalValidatorsRewards::reward_by_ids([ + (H160::from_low_u64_be(1), 10), + (H160::from_low_u64_be(2), 20), + ]); + + // Produce enough blocks for inflation scaling + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } + + // Make outbound delivery fail + OutboundDeliverShouldFail::set(true); + + // Advance to block 15 (now=45s), window [30,40) is closed + run_to_block(15); // now = 45s + ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); + run_rewards_initialize(); + + let events = System::events(); + + // Should emit RewardsWindowSubmissionFailed instead of RewardsWindowSubmitted + assert!( + events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmissionFailed { + window_start: 30, + window_index: 1, + } + ) + )), + "expected RewardsWindowSubmissionFailed event" + ); + + // Should NOT emit RewardsWindowSubmitted + assert!( + !events.iter().any(|record| matches!( + &record.event, + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { .. } + ) + )), + "should not have emitted RewardsWindowSubmitted on delivery failure" + ); + + // Failed window state should be retained for retry + assert!( + !pallet_external_validators_rewards::WindowOperatorPoints::::get(30).is_empty(), + "window points should be retained after failed submission" + ); + assert!( + pallet_external_validators_rewards::WindowInflationAmount::::get(30) > 0, + "window inflation should be retained after failed submission" + ); + + // NextWindowToSubmit should still advance + assert_eq!( + pallet_external_validators_rewards::NextWindowToSubmit::::get(), + Some(40) + ); + assert_eq!(unsent_len(), 1, "failed window should be queued for retry"); + }) +} + #[test] fn history_limit() { new_test_ext().execute_with(|| { @@ -133,7 +644,7 @@ fn test_on_era_end() { Mock::mutate(|mock| { mock.active_era = Some(ActiveEraInfo { index: 1, - start: None, + start: Some(30_000), }) }); let points = vec![10u32, 30u32, 50u32]; @@ -155,22 +666,21 @@ fn test_on_era_end() { ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); } + run_to_block(10); ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); - let era_rewards = pallet_external_validators_rewards::RewardPointsForEra::::get(1); let inflation = ::EraInflationProvider::get(); // The event should contain the rewards amount (post-treasury split), not the full inflation. // Treasury gets Perbill::from_percent(20).mul_floor(inflation), rewards gets the rest. let treasury_amount = InflationTreasuryProportion::get().mul_floor(inflation); let rewards_amount = inflation - treasury_amount; - // Use 0 for era_start_timestamp in tests - let rewards_info = era_rewards.generate_era_rewards_info(1, inflation, 0); - assert!(rewards_info.is_some()); System::assert_last_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageSent { + crate::Event::RewardsWindowSubmitted { message_id: Default::default(), - era_index: 1, + window_start: 30, + window_index: 3, total_points: total_points as u128, inflation_amount: rewards_amount, }, @@ -186,7 +696,7 @@ fn test_on_era_end_with_zero_inflation() { Mock::mutate(|mock| { mock.active_era = Some(ActiveEraInfo { index: 1, - start: None, + start: Some(30_000), }); mock.era_inflation = Some(0); }); @@ -202,21 +712,21 @@ fn test_on_era_end_with_zero_inflation() { .zip(points.iter().cloned()) .collect(); ExternalValidatorsRewards::reward_by_ids(accounts_points); + run_to_block(10); ExternalValidatorsRewards::on_era_end(1); - let era_rewards = pallet_external_validators_rewards::RewardPointsForEra::::get(1); - let inflation = - ::EraInflationProvider::get(); - let rewards_info = era_rewards.generate_era_rewards_info(1, inflation, 0); - assert!(rewards_info.is_some()); - // With zero inflation, no RewardsMessageSent event should be emitted + // With zero inflation, mint_inflation returns Err and on_era_end returns early + // before process_closed_windows is called. No window events should be emitted. let events = System::events(); assert!( !events.iter().any(|record| matches!( &record.event, - RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsMessageSent { .. }) + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { .. } + | crate::Event::RewardsWindowSkipped { .. } + ) )), - "event should not have been thrown", + "no window events should be emitted when inflation minting fails", ); }) } @@ -229,7 +739,7 @@ fn test_on_era_end_with_zero_points() { Mock::mutate(|mock| { mock.active_era = Some(ActiveEraInfo { index: 1, - start: None, + start: Some(30_000), }); }); let points = vec![0u32, 0u32, 0u32]; @@ -244,27 +754,21 @@ fn test_on_era_end_with_zero_points() { .zip(points.iter().cloned()) .collect(); ExternalValidatorsRewards::reward_by_ids(accounts_points); + run_to_block(10); ExternalValidatorsRewards::on_era_end(1); - // When all validators have zero points, generate_era_rewards_info should return None - // to prevent inflation from being minted with no way to distribute it - let era_rewards = pallet_external_validators_rewards::RewardPointsForEra::::get(1); - let inflation = - ::EraInflationProvider::get(); - let rewards_info = era_rewards.generate_era_rewards_info(1, inflation, 0); - assert!( - rewards_info.is_none(), - "generate_era_rewards_info should return None when total_points is zero" - ); - - // Verify no RewardsMessageSent event was emitted + // With zero total points, on_era_end returns early before process_closed_windows. + // No window events should be emitted, and no inflation should be minted. let events = System::events(); assert!( !events.iter().any(|record| matches!( &record.event, - RuntimeEvent::ExternalValidatorsRewards(crate::Event::RewardsMessageSent { .. }) + RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowSubmitted { .. } + | crate::Event::RewardsWindowSkipped { .. } + ) )), - "RewardsMessageSent event should not have been thrown when total_points is zero", + "no window events should be emitted when era has zero points", ); }) } @@ -3727,14 +4231,30 @@ fn test_era_end_uses_correct_era_blocks_not_session() { // Retry mechanism tests (ring-buffer storage) // ═══════════════════════════════════════════════════════════════════════════ -/// Helper: push an entry into the unsent ring buffer via the pallet API. -fn push_unsent(era_index: u32, timestamp: u32, inflation: u128) { +/// Helper: push a window entry into the unsent ring buffer via the pallet API. +fn push_unsent(window_start: u32, window_index: u32, duration: u32) { assert!( - ExternalValidatorsRewards::unsent_queue_push((era_index, timestamp, inflation)), + ExternalValidatorsRewards::unsent_queue_push(crate::QueuedRewardsWindow { + window_start, + window_index, + duration, + }), "unsent_queue_push should succeed" ); } +/// Helper: seed persisted rewards state for a closed window. +fn seed_window(window_start: u32, inflation_amount: u128, operator_points: &[(u64, u32)]) { + crate::WindowInflationAmount::::insert(window_start, inflation_amount); + crate::WindowOperatorPoints::::insert( + window_start, + operator_points + .iter() + .map(|(operator, points)| (H160::from_low_u64_be(*operator), *points)) + .collect::>(), + ); +} + /// Helper: return the number of entries in the unsent ring buffer. fn unsent_len() -> u32 { ExternalValidatorsRewards::unsent_queue_len() @@ -3746,7 +4266,7 @@ fn unsent_is_empty() -> bool { } #[test] -fn send_failure_queues_era() { +fn send_failure_emits_window_submission_failed_and_queues_window() { new_test_ext().execute_with(|| { run_to_block(1); @@ -3765,20 +4285,40 @@ fn send_failure_queues_era() { ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); } + // Advance time past one window so the window that received points is now closed + let window_duration = RewardsWindowDuration::get(); + let genesis = RewardsWindowGenesisTimestamp::get(); + let now = (Timestamp::get() / 1000) as u32; + let window_start = now - (now - genesis) % window_duration; + Timestamp::set_timestamp(((window_start + window_duration + 1) as u64) * 1000); + + System::reset_events(); ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); - // Verify era is queued - assert_eq!(unsent_len(), 1); - - // Verify event + // Verify window submission failure event + let window_index = window_start.saturating_sub(genesis) / window_duration; System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageSendFailed { era_index: 1 }, + crate::Event::RewardsWindowSubmissionFailed { + window_start, + window_index, + }, )); + + assert_eq!(unsent_len(), 1, "failed window should be queued for retry"); + assert!( + !crate::WindowOperatorPoints::::get(window_start).is_empty(), + "failed window points must be retained for retry" + ); + assert!( + crate::WindowInflationAmount::::get(window_start) > 0, + "failed window inflation must be retained for retry" + ); }) } #[test] -fn on_initialize_retries_and_succeeds() { +fn failed_window_is_retried_on_initialize() { new_test_ext().execute_with(|| { run_to_block(1); @@ -3787,26 +4327,80 @@ fn on_initialize_retries_and_succeeds() { index: 1, start: Some(30_000), }); + mock.send_message_fails = true; }); - // Set up reward points for era 1 ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } - // Manually populate the unsent queue - push_unsent(1, 30, 42); + let duration = RewardsWindowDuration::get(); + let genesis = RewardsWindowGenesisTimestamp::get(); + let now = (Timestamp::get() / 1000) as u32; + let window_start = now - (now - genesis) % duration; + let window_index = window_start.saturating_sub(genesis) / duration; + + Timestamp::set_timestamp(((window_start + duration + 1) as u64) * 1000); + ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); + + assert_eq!(unsent_len(), 1); + + Mock::mutate(|mock| mock.send_message_fails = false); // Sending should succeed (send_message_fails is false by default) System::reset_events(); - ExternalValidatorsRewards::process_unsent_reward_eras(); + run_rewards_initialize(); // Queue should be empty assert!(unsent_is_empty()); // Verify retry event System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageRetried { + crate::Event::RewardsWindowRetried { message_id: Default::default(), - era_index: 1, + window_start, + window_index, + total_points: 100, + inflation_amount: 30, + }, + )); + + assert!( + crate::WindowOperatorPoints::::get(window_start).is_empty(), + "window points should be cleared after successful retry" + ); + assert_eq!( + crate::WindowInflationAmount::::get(window_start), + 0, + "window inflation should be cleared after successful retry" + ); + }) +} + +#[test] +fn on_initialize_retries_and_succeeds() { + new_test_ext().execute_with(|| { + run_to_block(1); + + let window_start = 30; + let window_index = 3; + let duration = RewardsWindowDuration::get(); + + seed_window(window_start, 42, &[(1, 100)]); + push_unsent(window_start, window_index, duration); + + System::reset_events(); + run_rewards_initialize(); + + assert!(unsent_is_empty()); + + System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( + crate::Event::RewardsWindowRetried { + message_id: Default::default(), + window_start, + window_index, total_points: 100, inflation_amount: 42, }, @@ -3820,75 +4414,64 @@ fn on_initialize_moves_failed_entry_to_back() { run_to_block(1); Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: 2, - start: Some(30_000), - }); mock.send_message_fails = true; }); - // Set up reward points for eras 1 and 2 - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); - Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: 1, - start: Some(30_000), - }); - }); - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 200)]); + let duration = RewardsWindowDuration::get(); + seed_window(30, 42, &[(1, 100)]); + seed_window(40, 84, &[(1, 200)]); - // Push two entries: era 1 then era 2 - push_unsent(1, 30, 42); - push_unsent(2, 30, 84); + push_unsent(30, 3, duration); + push_unsent(40, 4, duration); - // First call: tries era 1, fails, moves era 1 to back of queue - ExternalValidatorsRewards::process_unsent_reward_eras(); - // Queue length stays the same (entry moved, not removed) + // First call: tries window 30, fails, moves it to the back of the queue + run_rewards_initialize(); assert_eq!(unsent_len(), 2); - // Second call: tries era 2 (NOT era 1 again), fails, moves era 2 to back - ExternalValidatorsRewards::process_unsent_reward_eras(); + // Second call: tries window 40, fails, moves it to the back + run_rewards_initialize(); assert_eq!(unsent_len(), 2); - // Re-enable sending Mock::mutate(|mock| mock.send_message_fails = false); - // Third call: era 1 (now at front again), succeeds + // Third call: window 30 (now at front again), succeeds System::reset_events(); - ExternalValidatorsRewards::process_unsent_reward_eras(); + run_rewards_initialize(); assert_eq!(unsent_len(), 1); System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageRetried { + crate::Event::RewardsWindowRetried { message_id: Default::default(), - era_index: 1, - total_points: 200, + window_start: 30, + window_index: 3, + total_points: 100, inflation_amount: 42, }, )); - // Fourth call: era 2, succeeds - ExternalValidatorsRewards::process_unsent_reward_eras(); + // Fourth call: window 40 succeeds + run_rewards_initialize(); assert!(unsent_is_empty()); }) } #[test] -fn on_initialize_removes_expired_era() { +fn on_initialize_removes_expired_window() { new_test_ext().execute_with(|| { run_to_block(1); - // Populate unsent queue with era 999 but do NOT add RewardPointsForEra for it - push_unsent(999, 0, 42); + let duration = RewardsWindowDuration::get(); + push_unsent(999, 99, duration); System::reset_events(); - ExternalValidatorsRewards::process_unsent_reward_eras(); + run_rewards_initialize(); - // Entry should be removed assert!(unsent_is_empty()); - // Verify expired event System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::UnsentEraExpired { era_index: 999 }, + crate::Event::UnsentWindowExpired { + window_start: 999, + window_index: 99, + }, )); }) } @@ -3899,7 +4482,7 @@ fn on_initialize_noop_when_queue_empty() { run_to_block(1); System::reset_events(); - ExternalValidatorsRewards::process_unsent_reward_eras(); + run_rewards_initialize(); // No events should be emitted let events = System::events(); @@ -3915,31 +4498,16 @@ fn on_initialize_processes_only_head() { new_test_ext().execute_with(|| { run_to_block(1); - Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: 3, - start: Some(30_000), - }); - }); + let duration = RewardsWindowDuration::get(); + seed_window(30, 42, &[(1, 100)]); + seed_window(40, 84, &[(2, 200)]); - // Set up reward points for both eras - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); - Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: 2, - start: Some(30_000), - }); - }); - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(2), 200)]); - - // Push two entries - push_unsent(3, 30, 42); - push_unsent(2, 20, 84); + push_unsent(30, 3, duration); + push_unsent(40, 4, duration); System::reset_events(); - ExternalValidatorsRewards::process_unsent_reward_eras(); + run_rewards_initialize(); - // Only the head entry (era 3) should be processed (and removed on success) assert_eq!(unsent_len(), 1); }) } @@ -3949,33 +4517,25 @@ fn retry_extrinsic_success() { new_test_ext().execute_with(|| { run_to_block(1); - Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: 1, - start: Some(30_000), - }); - }); - - // Set up reward points - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); - - // Populate unsent queue - push_unsent(1, 30, 42); + let window_start = 30; + let window_index = 3; + let duration = RewardsWindowDuration::get(); + seed_window(window_start, 42, &[(1, 100)]); + push_unsent(window_start, window_index, duration); System::reset_events(); - assert_ok!(ExternalValidatorsRewards::retry_unsent_reward_era( + assert_ok!(ExternalValidatorsRewards::retry_unsent_reward_window( RuntimeOrigin::root(), - 1 + window_start )); - // Queue should be empty assert!(unsent_is_empty()); - // Verify retry event System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageRetried { + crate::Event::RewardsWindowRetried { message_id: Default::default(), - era_index: 1, + window_start, + window_index, total_points: 100, inflation_amount: 42, }, @@ -3984,28 +4544,27 @@ fn retry_extrinsic_success() { } #[test] -fn retry_extrinsic_era_not_in_queue() { +fn retry_extrinsic_window_not_in_queue() { new_test_ext().execute_with(|| { run_to_block(1); assert_noop!( - ExternalValidatorsRewards::retry_unsent_reward_era(RuntimeOrigin::root(), 1), - crate::Error::::EraNotInUnsentQueue + ExternalValidatorsRewards::retry_unsent_reward_window(RuntimeOrigin::root(), 1), + crate::Error::::WindowNotInUnsentQueue ); }) } #[test] -fn retry_extrinsic_pruned_data() { +fn retry_extrinsic_missing_window_state() { new_test_ext().execute_with(|| { run_to_block(1); - // Queue an era but don't create reward points for it - push_unsent(999, 0, 42); + push_unsent(999, 99, RewardsWindowDuration::get()); assert_noop!( - ExternalValidatorsRewards::retry_unsent_reward_era(RuntimeOrigin::root(), 999), - crate::Error::::RewardPointsPruned + ExternalValidatorsRewards::retry_unsent_reward_window(RuntimeOrigin::root(), 999), + crate::Error::::WindowRewardsMissing ); }) } @@ -4016,7 +4575,7 @@ fn retry_extrinsic_requires_root() { run_to_block(1); assert_noop!( - ExternalValidatorsRewards::retry_unsent_reward_era( + ExternalValidatorsRewards::retry_unsent_reward_window( RuntimeOrigin::signed(H160::from_low_u64_be(1)), 1 ), @@ -4026,68 +4585,7 @@ fn retry_extrinsic_requires_root() { } #[test] -fn unsent_queue_full() { - new_test_ext().execute_with(|| { - run_to_block(1); - - Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: 65, - start: Some(30_000), - }); - mock.send_message_fails = true; - }); - - // Fill the ring buffer to capacity (63 entries, since capacity=64 - // means 63 usable slots in a ring buffer with head==tail==empty). - for i in 0..63u32 { - push_unsent(i, 0, 42); - } - assert_eq!(unsent_len(), 63); - - // Give validators some points so on_era_end doesn't bail early - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); - for _ in 0..600 { - ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); - } - - System::reset_events(); - ExternalValidatorsRewards::on_era_end(65); - - // Verify UnsentQueueFull event - System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::UnsentQueueFull { era_index: 65 }, - )); - - // Queue should still be at 63 - assert_eq!(unsent_len(), 63); - }) -} - -#[test] -fn on_era_start_prunes_unsent_entry() { - new_test_ext().execute_with(|| { - run_to_block(1); - - // Set up: era 1 has an unsent entry - push_unsent(1, 0, 42); - - // HistoryDepth is 10, so era 11 should prune era 1 - System::reset_events(); - ExternalValidatorsRewards::on_era_start(11, 0, 11); - - // Unsent entry should be removed - assert!(unsent_is_empty()); - - // Verify expired event - System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::UnsentEraExpired { era_index: 1 }, - )); - }) -} - -#[test] -fn retry_extrinsic_send_still_fails() { +fn send_failure_retains_window_and_advances_pointer() { new_test_ext().execute_with(|| { run_to_block(1); @@ -4099,18 +4597,81 @@ fn retry_extrinsic_send_still_fails() { mock.send_message_fails = true; }); - // Set up reward points + // Give validators some points ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); + for _ in 0..600 { + ExternalValidatorsRewards::note_block_author(H160::from_low_u64_be(1)); + } - // Populate unsent queue - push_unsent(1, 30, 42); + let window_duration = RewardsWindowDuration::get(); + let genesis = RewardsWindowGenesisTimestamp::get(); + let now = (Timestamp::get() / 1000) as u32; + let window_start = now - (now - genesis) % window_duration; + + // Advance time past two windows to have a closed window + Timestamp::set_timestamp(((window_start + window_duration + 1) as u64) * 1000); + + System::reset_events(); + ExternalValidatorsRewards::on_era_end(1); + run_rewards_initialize(); + + let next_window = crate::NextWindowToSubmit::::get(); + assert!( + next_window == Some(window_start + window_duration), + "NextWindowToSubmit should advance past the failed window" + ); + + assert!( + !crate::WindowOperatorPoints::::get(window_start).is_empty(), + "Window operator points should be retained after failed submission" + ); + assert!( + crate::WindowInflationAmount::::get(window_start) > 0, + "Window inflation should be retained after failed submission" + ); + assert_eq!( + unsent_len(), + 1, + "failed window should be present in retry queue" + ); + }) +} + +#[test] +fn on_era_start_prunes_unsent_window_without_state() { + new_test_ext().execute_with(|| { + run_to_block(1); + + push_unsent(30, 3, RewardsWindowDuration::get()); + + System::reset_events(); + ExternalValidatorsRewards::on_era_start(11, 0, 11); + + assert!(unsent_is_empty()); + + System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( + crate::Event::UnsentWindowExpired { + window_start: 30, + window_index: 3, + }, + )); + }) +} + +#[test] +fn retry_extrinsic_send_still_fails() { + new_test_ext().execute_with(|| { + run_to_block(1); + + Mock::mutate(|mock| mock.send_message_fails = true); + seed_window(30, 42, &[(1, 100)]); + push_unsent(30, 3, RewardsWindowDuration::get()); assert_noop!( - ExternalValidatorsRewards::retry_unsent_reward_era(RuntimeOrigin::root(), 1), + ExternalValidatorsRewards::retry_unsent_reward_window(RuntimeOrigin::root(), 30), crate::Error::::MessageSendFailed ); - // Queue should still have the entry assert_eq!(unsent_len(), 1); }) } @@ -4120,58 +4681,51 @@ fn head_of_line_blocking_avoided() { new_test_ext().execute_with(|| { run_to_block(1); - // Set up reward points for eras 1, 2, 3 - for era in 1..=3u32 { - Mock::mutate(|mock| { - mock.active_era = Some(ActiveEraInfo { - index: era, - start: Some(30_000), - }); - }); - ExternalValidatorsRewards::reward_by_ids([(H160::from_low_u64_be(1), 100)]); - } + let duration = RewardsWindowDuration::get(); + seed_window(30, 10, &[(1, 100)]); + seed_window(40, 20, &[(1, 100)]); + seed_window(50, 30, &[(1, 100)]); - // Push eras 1, 2, 3 into the queue - push_unsent(1, 30, 10); - push_unsent(2, 30, 20); - push_unsent(3, 30, 30); + push_unsent(30, 3, duration); + push_unsent(40, 4, duration); + push_unsent(50, 5, duration); - // Make sending fail Mock::mutate(|mock| mock.send_message_fails = true); - // Block 1: tries era 1, fails, advances head → era 2 - ExternalValidatorsRewards::process_unsent_reward_eras(); - // Block 2: tries era 2, fails, advances head → era 3 - ExternalValidatorsRewards::process_unsent_reward_eras(); + // Block 1: tries window 30, fails, advances head → window 40 + run_rewards_initialize(); + // Block 2: tries window 40, fails, advances head → window 50 + run_rewards_initialize(); - // Now re-enable sending Mock::mutate(|mock| mock.send_message_fails = false); - // Block 3: tries era 3, succeeds + // Block 3: tries window 50, succeeds System::reset_events(); - ExternalValidatorsRewards::process_unsent_reward_eras(); + run_rewards_initialize(); System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageRetried { + crate::Event::RewardsWindowRetried { message_id: Default::default(), - era_index: 3, + window_start: 50, + window_index: 5, total_points: 100, inflation_amount: 30, }, )); - // Block 4: wraps around to era 1, succeeds - ExternalValidatorsRewards::process_unsent_reward_eras(); + // Block 4: wraps around to window 30, succeeds + run_rewards_initialize(); System::assert_has_event(RuntimeEvent::ExternalValidatorsRewards( - crate::Event::RewardsMessageRetried { + crate::Event::RewardsWindowRetried { message_id: Default::default(), - era_index: 1, + window_start: 30, + window_index: 3, total_points: 100, inflation_amount: 10, }, )); - // Block 5: era 2, succeeds - ExternalValidatorsRewards::process_unsent_reward_eras(); + // Block 5: window 40 succeeds + run_rewards_initialize(); assert!(unsent_is_empty()); }) } diff --git a/operator/pallets/external-validators-rewards/src/types.rs b/operator/pallets/external-validators-rewards/src/types.rs index 540e6b94..042f156a 100644 --- a/operator/pallets/external-validators-rewards/src/types.rs +++ b/operator/pallets/external-validators-rewards/src/types.rs @@ -14,15 +14,16 @@ // You should have received a copy of the GNU General Public License // along with Tanssi. If not, see +use alloc::vec::Vec; use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; -use sp_std::vec::Vec; /// Data needed for EigenLayer rewards submission via Snowbridge. #[derive(Debug, PartialEq, Eq, Clone)] -pub struct EraRewardsUtils { - pub era_index: u32, - pub era_start_timestamp: u32, +pub struct RewardsPeriodUtils { + pub period_index: u32, + pub period_start: u32, + pub duration: u32, pub total_points: u128, pub individual_points: Vec<(H160, u32)>, pub inflation_amount: u128, @@ -32,7 +33,7 @@ pub trait SendMessage { type Message; type Ticket; - fn build(utils: &EraRewardsUtils) -> Option; + fn build(utils: &RewardsPeriodUtils) -> Option; fn validate(message: Self::Message) -> Result; diff --git a/operator/pallets/external-validators-rewards/src/weights.rs b/operator/pallets/external-validators-rewards/src/weights.rs index a7585778..ea0c8874 100644 --- a/operator/pallets/external-validators-rewards/src/weights.rs +++ b/operator/pallets/external-validators-rewards/src/weights.rs @@ -49,11 +49,13 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for pallet_external_validators_rewards. pub trait WeightInfo { fn on_era_end() -> Weight; + fn process_closed_windows_idle() -> Weight; + fn process_closed_windows_processed() -> Weight; fn process_unsent_reward_eras_empty() -> Weight; fn process_unsent_reward_eras_expired() -> Weight; fn process_unsent_reward_eras_success() -> Weight; @@ -90,6 +92,17 @@ impl WeightInfo for SubstrateWeight { .saturating_add(T::DbWeight::get().writes(5_u64)) } + fn process_closed_windows_idle() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) + } + + fn process_closed_windows_processed() -> Weight { + // Use the existing resend success path as an upper bound for a single + // closed-window submission/skip attempt. + Self::process_unsent_reward_eras_success() + } + fn process_unsent_reward_eras_empty() -> Weight { // 1 read for UnsentRewardEras Weight::from_parts(5_000_000, 0) @@ -149,6 +162,15 @@ impl WeightInfo for () { .saturating_add(RocksDbWeight::get().writes(5_u64)) } + fn process_closed_windows_idle() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(RocksDbWeight::get().reads(3_u64)) + } + + fn process_closed_windows_processed() -> Weight { + Self::process_unsent_reward_eras_success() + } + fn process_unsent_reward_eras_empty() -> Weight { Weight::from_parts(5_000_000, 0) .saturating_add(RocksDbWeight::get().reads(1_u64)) diff --git a/operator/pallets/external-validators/Cargo.toml b/operator/pallets/external-validators/Cargo.toml index f7d63eb3..cf9fb077 100644 --- a/operator/pallets/external-validators/Cargo.toml +++ b/operator/pallets/external-validators/Cargo.toml @@ -24,7 +24,6 @@ frame-system = { workspace = true } impl-trait-for-tuples = { workspace = true } sp-runtime = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-core = { workspace = true } frame-benchmarking = { workspace = true } @@ -56,7 +55,6 @@ std = [ "sp-io/std", "sp-runtime/std", "sp-staking/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/external-validators/src/benchmarking.rs b/operator/pallets/external-validators/src/benchmarking.rs index 14c4df6b..b4f81073 100644 --- a/operator/pallets/external-validators/src/benchmarking.rs +++ b/operator/pallets/external-validators/src/benchmarking.rs @@ -27,7 +27,6 @@ use { pallet_session::{self as session, SessionManager}, rand::{RngCore, SeedableRng}, sp_runtime::{codec, traits::Convert}, - sp_std::prelude::*, }; const SEED: u32 = 0; diff --git a/operator/pallets/external-validators/src/lib.rs b/operator/pallets/external-validators/src/lib.rs index 7b2fdaf5..be82fd37 100644 --- a/operator/pallets/external-validators/src/lib.rs +++ b/operator/pallets/external-validators/src/lib.rs @@ -31,16 +31,17 @@ //! The structure of this pallet and the concept of eras is inspired by `pallet_staking` from Polkadot. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub use pallet::*; use { + alloc::{collections::btree_set::BTreeSet, vec::Vec}, frame_support::pallet_prelude::Weight, log::log, - parity_scale_codec::{Decode, Encode, MaxEncodedLen}, + parity_scale_codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}, scale_info::TypeInfo, sp_runtime::{traits::Get, RuntimeDebug}, sp_staking::SessionIndex, - sp_std::{collections::btree_set::BTreeSet, vec::Vec}, traits::{ ActiveEraInfo, EraIndex, EraIndexProvider, ExternalIndexProvider, InvulnerablesProvider, OnEraEnd, OnEraStart, ValidatorProvider, @@ -92,6 +93,7 @@ pub mod pallet { use frame_support::traits::Currency; use { super::*, + alloc::vec::Vec, frame_support::{ dispatch::DispatchResultWithPostInfo, pallet_prelude::*, @@ -101,7 +103,6 @@ pub mod pallet { frame_system::pallet_prelude::*, sp_core::H160, sp_runtime::{traits::Convert, SaturatedConversion}, - sp_std::vec::Vec, }; /// Configure the pallet by specifying the parameters and types on which it depends. @@ -255,7 +256,7 @@ pub mod pallet { // T::ValidatorId does not impl Ord or Hash so we cannot collect into set directly, // but we can check for duplicates if we encode them first. .map(|x| x.encode()) - .collect::>(); + .collect::>(); assert!( duplicate_validators.len() == self.whitelisted_validators.len(), "duplicate validators in genesis." @@ -763,7 +764,17 @@ impl InvulnerablesProvider for Pallet { /// Mode of era-forcing. #[derive( - Copy, Clone, PartialEq, Eq, Default, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen, + Copy, + Clone, + PartialEq, + Eq, + Default, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + MaxEncodedLen, + DecodeWithMemTracking, )] pub enum Forcing { /// Not forcing anything - just let whatever happen. diff --git a/operator/pallets/external-validators/src/mock.rs b/operator/pallets/external-validators/src/mock.rs index 0e8e1fd8..8db7676c 100644 --- a/operator/pallets/external-validators/src/mock.rs +++ b/operator/pallets/external-validators/src/mock.rs @@ -199,6 +199,7 @@ impl pallet_session::Config for Test { type SessionHandler = TestSessionHandler; type Keys = MockSessionKeys; type WeightInfo = (); + type DisablingStrategy = (); } // Pallet to provide some mock data, used to test @@ -298,9 +299,12 @@ pub fn new_test_ext() -> sp_io::TestExternalities { keys, ..Default::default() }; - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .unwrap(); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .unwrap(); pallet_external_validators::GenesisConfig:: { skip_external_validators: false, whitelisted_validators, diff --git a/operator/pallets/external-validators/src/traits.rs b/operator/pallets/external-validators/src/traits.rs index 183ea0c2..3b778d58 100644 --- a/operator/pallets/external-validators/src/traits.rs +++ b/operator/pallets/external-validators/src/traits.rs @@ -14,12 +14,12 @@ // You should have received a copy of the GNU General Public License // along with Tanssi. If not, see +use alloc::vec::Vec; use parity_scale_codec::{Decode, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use snowbridge_outbound_queue_primitives::SendError; use sp_core::H256; use sp_runtime::RuntimeDebug; -use sp_std::vec::Vec; /// Information regarding the active era (era in used in session). #[derive(Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] diff --git a/operator/pallets/external-validators/src/weights.rs b/operator/pallets/external-validators/src/weights.rs index 8e8cee55..c2956818 100644 --- a/operator/pallets/external-validators/src/weights.rs +++ b/operator/pallets/external-validators/src/weights.rs @@ -49,7 +49,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for pallet_external_validators. pub trait WeightInfo { diff --git a/operator/pallets/grandpa-benchmarking/Cargo.toml b/operator/pallets/grandpa-benchmarking/Cargo.toml index 67f8cbd8..0451b3cf 100644 --- a/operator/pallets/grandpa-benchmarking/Cargo.toml +++ b/operator/pallets/grandpa-benchmarking/Cargo.toml @@ -25,7 +25,6 @@ sp-application-crypto = { workspace = true } sp-core = { workspace = true } sp-runtime = { workspace = true } sp-session = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -42,7 +41,6 @@ std = [ "sp-core/std", "sp-runtime/std", "sp-session/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/inbound-queue-v2/Cargo.toml b/operator/pallets/inbound-queue-v2/Cargo.toml index edf40297..a84c0b51 100644 --- a/operator/pallets/inbound-queue-v2/Cargo.toml +++ b/operator/pallets/inbound-queue-v2/Cargo.toml @@ -30,7 +30,6 @@ pallet-balances = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } xcm-builder = { workspace = true } @@ -87,7 +86,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "tracing/std", "xcm-builder/std", "xcm-executor/std", diff --git a/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml b/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml index 7568f8fc..f95515b8 100644 --- a/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml +++ b/operator/pallets/inbound-queue-v2/fixtures/Cargo.toml @@ -20,7 +20,6 @@ snowbridge-beacon-primitives = { workspace = true } snowbridge-core = { workspace = true } snowbridge-inbound-queue-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -33,5 +32,4 @@ std = [ "snowbridge-core/std", "snowbridge-inbound-queue-primitives/std", "sp-core/std", - "sp-std/std", ] diff --git a/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs b/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs index 3fe70c51..471d0b81 100644 --- a/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs +++ b/operator/pallets/inbound-queue-v2/fixtures/src/lib.rs @@ -1,5 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod register_token; diff --git a/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs b/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs index 24645c52..a98833e9 100644 --- a/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs +++ b/operator/pallets/inbound-queue-v2/fixtures/src/register_token.rs @@ -3,13 +3,13 @@ // Generated, do not edit! // See ethereum client README.md for instructions to generate +use alloc::vec; use hex_literal::hex; use snowbridge_beacon_primitives::{ types::deneb, AncestryProof, BeaconHeader, ExecutionProof, VersionedExecutionPayloadHeader, }; use snowbridge_inbound_queue_primitives::{EventProof, InboundQueueFixture, Log, Proof}; use sp_core::U256; -use sp_std::vec; pub fn make_register_token_message() -> InboundQueueFixture { InboundQueueFixture { diff --git a/operator/pallets/inbound-queue-v2/src/lib.rs b/operator/pallets/inbound-queue-v2/src/lib.rs index 702005c2..94a3b43e 100644 --- a/operator/pallets/inbound-queue-v2/src/lib.rs +++ b/operator/pallets/inbound-queue-v2/src/lib.rs @@ -37,6 +37,7 @@ mod mock; mod test; pub use crate::weights::WeightInfo; +use alloc::boxed::Box; use frame_system::ensure_signed; use snowbridge_core::{ sparse_bitmap::{SparseBitmap, SparseBitmapImpl}, @@ -48,7 +49,6 @@ use snowbridge_inbound_queue_primitives::{ }; use sp_core::H160; use sp_runtime::traits::Zero; -use sp_std::prelude::*; use xcm::prelude::*; #[cfg(feature = "runtime-benchmarks")] diff --git a/operator/pallets/inbound-queue-v2/src/message_processors.rs b/operator/pallets/inbound-queue-v2/src/message_processors.rs index 1bbec9d7..4b2d5e3a 100644 --- a/operator/pallets/inbound-queue-v2/src/message_processors.rs +++ b/operator/pallets/inbound-queue-v2/src/message_processors.rs @@ -2,10 +2,10 @@ // SPDX-FileCopyrightText: 2023 Snowfork use super::*; use codec::Encode; +use core::marker::PhantomData; use frame_support::traits::Get; use sp_runtime::traits::TryConvert; use sp_runtime::DispatchError; -use sp_std::marker::PhantomData; use xcm::prelude::{ExecuteXcm, Location, Parachain, SendError, SendXcm, XcmHash}; /// A message processor that simply returns the Blake2_256 hash of the SCALE encoded message diff --git a/operator/pallets/inbound-queue-v2/src/mock.rs b/operator/pallets/inbound-queue-v2/src/mock.rs index f216f868..ac972ded 100644 --- a/operator/pallets/inbound-queue-v2/src/mock.rs +++ b/operator/pallets/inbound-queue-v2/src/mock.rs @@ -4,6 +4,7 @@ use super::*; use crate::{self as inbound_queue_v2, message_processors::XcmMessageProcessor}; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use core::{convert::From, default::Default, marker::PhantomData}; use frame_support::{derive_impl, parameter_types, traits::ConstU32}; use hex_literal::hex; use scale_info::TypeInfo; @@ -17,7 +18,6 @@ use sp_runtime::{ traits::{IdentityLookup, MaybeEquivalence, TryConvert}, BuildStorage, DispatchError, }; -use sp_std::{convert::From, default::Default, marker::PhantomData}; use xcm::{opaque::latest::WESTEND_GENESIS_HASH, prelude::*}; type Block = frame_system::mocking::MockBlock; pub use snowbridge_test_utils::mock_xcm::{MockXcmExecutor, MockXcmSender}; diff --git a/operator/pallets/inbound-queue-v2/src/weights.rs b/operator/pallets/inbound-queue-v2/src/weights.rs index c96d3a03..139bd90b 100644 --- a/operator/pallets/inbound-queue-v2/src/weights.rs +++ b/operator/pallets/inbound-queue-v2/src/weights.rs @@ -13,7 +13,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weight functions needed for ethereum_beacon_client. pub trait WeightInfo { diff --git a/operator/pallets/outbound-queue-v2/Cargo.toml b/operator/pallets/outbound-queue-v2/Cargo.toml index de17829b..d538a221 100644 --- a/operator/pallets/outbound-queue-v2/Cargo.toml +++ b/operator/pallets/outbound-queue-v2/Cargo.toml @@ -29,7 +29,6 @@ sp-arithmetic = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } bp-relayers = { workspace = true } bridge-hub-common = { workspace = true } @@ -82,7 +81,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml b/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml index caab8c27..75d82c93 100644 --- a/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml +++ b/operator/pallets/outbound-queue-v2/runtime-api/Cargo.toml @@ -22,7 +22,6 @@ snowbridge-core = { workspace = true } snowbridge-merkle-tree = { workspace = true } snowbridge-outbound-queue-primitives = { workspace = true } sp-api = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } [features] @@ -35,6 +34,5 @@ std = [ "snowbridge-merkle-tree/std", "snowbridge-outbound-queue-primitives/std", "sp-api/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/pallets/outbound-queue-v2/src/benchmarking.rs b/operator/pallets/outbound-queue-v2/src/benchmarking.rs index 1a498da6..b60e2d65 100644 --- a/operator/pallets/outbound-queue-v2/src/benchmarking.rs +++ b/operator/pallets/outbound-queue-v2/src/benchmarking.rs @@ -21,6 +21,9 @@ use crate::Pallet as OutboundQueue; )] mod benchmarks { use super::*; + use alloc::boxed::Box; + use alloc::vec; + use alloc::vec::Vec; /// Build `Upgrade` message with `MaxMessagePayloadSize`, in the worst-case. fn build_message() -> (Message, OutboundMessage) { diff --git a/operator/pallets/outbound-queue-v2/src/fixture.rs b/operator/pallets/outbound-queue-v2/src/fixture.rs index 7c303b33..c759670c 100644 --- a/operator/pallets/outbound-queue-v2/src/fixture.rs +++ b/operator/pallets/outbound-queue-v2/src/fixture.rs @@ -3,13 +3,13 @@ // Generated, do not edit! // See ethereum client README.md for instructions to generate +use alloc::vec; use hex_literal::hex; use snowbridge_beacon_primitives::{ types::deneb, AncestryProof, BeaconHeader, ExecutionProof, VersionedExecutionPayloadHeader, }; use snowbridge_verification_primitives::{EventFixture, EventProof, Log, Proof}; use sp_core::U256; -use sp_std::vec; pub fn make_submit_delivery_receipt_message() -> EventFixture { EventFixture { diff --git a/operator/pallets/outbound-queue-v2/src/lib.rs b/operator/pallets/outbound-queue-v2/src/lib.rs index 40c03fe3..b36ea9d4 100644 --- a/operator/pallets/outbound-queue-v2/src/lib.rs +++ b/operator/pallets/outbound-queue-v2/src/lib.rs @@ -49,6 +49,8 @@ //! //! * `prove_message`: Generate a merkle proof for a committed message #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + pub mod api; pub mod process_message_impl; pub mod send_message_impl; @@ -93,7 +95,6 @@ use sp_runtime::{ traits::{BlockNumberProvider, Hash, MaybeEquivalence}, DigestItem, }; -use sp_std::prelude::*; pub use types::{OnNewCommitment, PendingOrder, ProcessMessageOriginOf}; pub use weights::WeightInfo; use xcm::latest::{Location, NetworkId}; @@ -107,6 +108,8 @@ pub use pallet::*; #[frame_support::pallet] pub mod pallet { use super::*; + use alloc::boxed::Box; + use alloc::vec::Vec; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::*; diff --git a/operator/pallets/outbound-queue-v2/src/mock.rs b/operator/pallets/outbound-queue-v2/src/mock.rs index 39ee8c91..599e27f4 100644 --- a/operator/pallets/outbound-queue-v2/src/mock.rs +++ b/operator/pallets/outbound-queue-v2/src/mock.rs @@ -10,6 +10,7 @@ use frame_support::{ }; use codec::{DecodeWithMemTracking, Encode, MaxEncodedLen}; +use core::marker::PhantomData; use hex_literal::hex; use scale_info::TypeInfo; use snowbridge_core::{ @@ -23,7 +24,6 @@ use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup, Keccak256}, AccountId32, BuildStorage, FixedU128, }; -use sp_std::marker::PhantomData; use xcm::prelude::Here; use xcm_executor::traits::ConvertLocation; diff --git a/operator/pallets/outbound-queue-v2/src/types.rs b/operator/pallets/outbound-queue-v2/src/types.rs index dccc9a72..5aa498a9 100644 --- a/operator/pallets/outbound-queue-v2/src/types.rs +++ b/operator/pallets/outbound-queue-v2/src/types.rs @@ -7,7 +7,6 @@ use scale_info::TypeInfo; pub use snowbridge_merkle_tree::MerkleProof; use sp_core::H256; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; pub type ProcessMessageOriginOf = as ProcessMessage>::Origin; diff --git a/operator/pallets/proxy-genesis-companion/Cargo.toml b/operator/pallets/proxy-genesis-companion/Cargo.toml index 1e9c634d..2003d21e 100644 --- a/operator/pallets/proxy-genesis-companion/Cargo.toml +++ b/operator/pallets/proxy-genesis-companion/Cargo.toml @@ -13,7 +13,6 @@ frame-system = { workspace = true } pallet-proxy = { workspace = true } scale-info = { workspace = true, features = ["derive"] } sp-runtime = { workspace = true } -sp-std = { workspace = true } [dev-dependencies] pallet-balances = { workspace = true, features = ["insecure_zero_ed", "std"] } @@ -30,7 +29,6 @@ std = [ "pallet-proxy/std", "scale-info/std", "sp-runtime/std", - "sp-std/std", ] try-runtime = [ "frame-support/try-runtime", diff --git a/operator/pallets/proxy-genesis-companion/src/lib.rs b/operator/pallets/proxy-genesis-companion/src/lib.rs index 9711075b..1e18773d 100644 --- a/operator/pallets/proxy-genesis-companion/src/lib.rs +++ b/operator/pallets/proxy-genesis-companion/src/lib.rs @@ -21,6 +21,7 @@ //! obstacles to including it here. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; #[cfg(test)] mod mock; @@ -32,9 +33,9 @@ pub use pallet::*; #[pallet] pub mod pallet { + use alloc::vec::Vec; use frame_support::pallet_prelude::*; use frame_system::pallet_prelude::BlockNumberFor; - use sp_std::vec::Vec; /// Pallet for configuring proxy at genesis #[pallet::pallet] @@ -44,7 +45,11 @@ pub mod pallet { /// This pallet requires pallet-proxy to be installed. #[pallet::config] pub trait Config: - frame_system::Config + pallet_proxy::Config::ProxyType> + frame_system::Config + + pallet_proxy::Config< + ProxyType = ::ProxyType, + BlockNumberProvider = frame_system::Pallet, + > { /// This MUST be the same as in pallet_proxy or it won't compile type ProxyType: MaybeSerializeDeserialize + Clone; diff --git a/operator/pallets/proxy-genesis-companion/src/mock.rs b/operator/pallets/proxy-genesis-companion/src/mock.rs index 116fd2c2..ef57a1d9 100644 --- a/operator/pallets/proxy-genesis-companion/src/mock.rs +++ b/operator/pallets/proxy-genesis-companion/src/mock.rs @@ -17,7 +17,7 @@ //! A minimal runtime including the proxy-genesis-companion pallet use super::*; use crate as proxy_companion; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::{ construct_runtime, derive_impl, parameter_types, traits::{ConstU32, InstanceFilter}, @@ -79,6 +79,7 @@ parameter_types! { Debug, MaxEncodedLen, scale_info::TypeInfo, + DecodeWithMemTracking, serde::Serialize, serde::Deserialize, Default, @@ -108,6 +109,7 @@ impl pallet_proxy::Config for Test { type CallHasher = BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl Config for Test { @@ -147,7 +149,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, - ..Default::default() + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/pallets/session-benchmarking/Cargo.toml b/operator/pallets/session-benchmarking/Cargo.toml index 41b64d87..7699c33e 100644 --- a/operator/pallets/session-benchmarking/Cargo.toml +++ b/operator/pallets/session-benchmarking/Cargo.toml @@ -19,7 +19,6 @@ frame-support = { workspace = true } frame-system = { workspace = true } pallet-session = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -30,7 +29,6 @@ std = [ "frame-system/std", "pallet-session/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-benchmarking/runtime-benchmarks", diff --git a/operator/pallets/system-v2/Cargo.toml b/operator/pallets/system-v2/Cargo.toml index 6d1c14a9..82df1a06 100644 --- a/operator/pallets/system-v2/Cargo.toml +++ b/operator/pallets/system-v2/Cargo.toml @@ -28,7 +28,6 @@ snowbridge-pallet-system = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } xcm-executor = { workspace = true } @@ -70,7 +69,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-executor/std", "xcm/std", ] diff --git a/operator/pallets/system-v2/runtime-api/Cargo.toml b/operator/pallets/system-v2/runtime-api/Cargo.toml index 96889507..30ba160c 100644 --- a/operator/pallets/system-v2/runtime-api/Cargo.toml +++ b/operator/pallets/system-v2/runtime-api/Cargo.toml @@ -21,7 +21,6 @@ exclude-from-umbrella = true codec = { features = ["derive"], workspace = true } snowbridge-core.workspace = true sp-api.workspace = true -sp-std.workspace = true xcm.workspace = true [features] @@ -30,6 +29,5 @@ std = [ "codec/std", "snowbridge-core/std", "sp-api/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/pallets/system-v2/src/benchmarking.rs b/operator/pallets/system-v2/src/benchmarking.rs index b2571f8f..a0f967ca 100644 --- a/operator/pallets/system-v2/src/benchmarking.rs +++ b/operator/pallets/system-v2/src/benchmarking.rs @@ -15,6 +15,7 @@ use xcm::prelude::*; #[benchmarks] mod benchmarks { use super::*; + use alloc::vec::Vec; #[benchmark] fn register_token() -> Result<(), BenchmarkError> { diff --git a/operator/pallets/system-v2/src/lib.rs b/operator/pallets/system-v2/src/lib.rs index 22a0f015..2ddd2821 100644 --- a/operator/pallets/system-v2/src/lib.rs +++ b/operator/pallets/system-v2/src/lib.rs @@ -16,6 +16,8 @@ //! //! * [`Call::register_token`]: Register a token location as a wrapped ERC20 contract on Ethereum. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + #[cfg(test)] mod mock; @@ -29,6 +31,8 @@ pub mod api; pub mod weights; pub use weights::*; +use alloc::boxed::Box; +use alloc::vec; use frame_support::{pallet_prelude::*, traits::EnsureOrigin}; use frame_system::pallet_prelude::*; use snowbridge_core::{AgentIdOf as LocationHashOf, AssetMetadata, TokenId, TokenIdOf}; @@ -40,7 +44,6 @@ use snowbridge_pallet_system::{ForeignToNativeId, NativeToForeignId}; use sp_core::{H160, H256}; use sp_io::hashing::blake2_256; use sp_runtime::traits::MaybeEquivalence; -use sp_std::prelude::*; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; diff --git a/operator/pallets/system/Cargo.toml b/operator/pallets/system/Cargo.toml index 601a6783..24b0e622 100644 --- a/operator/pallets/system/Cargo.toml +++ b/operator/pallets/system/Cargo.toml @@ -25,7 +25,6 @@ snowbridge-outbound-queue-primitives.workspace = true sp-core.workspace = true sp-io.workspace = true sp-runtime.workspace = true -sp-std.workspace = true xcm.workspace = true xcm-executor.workspace = true @@ -63,7 +62,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-executor/std", "xcm/std", ] diff --git a/operator/pallets/system/runtime-api/Cargo.toml b/operator/pallets/system/runtime-api/Cargo.toml index 72d53e17..55a3a05b 100644 --- a/operator/pallets/system/runtime-api/Cargo.toml +++ b/operator/pallets/system/runtime-api/Cargo.toml @@ -21,7 +21,6 @@ exclude-from-umbrella = true codec = { features = ["derive"], workspace = true } snowbridge-core.workspace = true sp-api.workspace = true -sp-std.workspace = true xcm.workspace = true [features] @@ -30,6 +29,5 @@ std = [ "codec/std", "snowbridge-core/std", "sp-api/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/pallets/system/src/benchmarking.rs b/operator/pallets/system/src/benchmarking.rs index e8c0f6dd..ced6c053 100644 --- a/operator/pallets/system/src/benchmarking.rs +++ b/operator/pallets/system/src/benchmarking.rs @@ -15,6 +15,8 @@ use xcm::prelude::*; #[benchmarks] mod benchmarks { use super::*; + use alloc::boxed::Box; + use alloc::vec::Vec; #[benchmark] fn upgrade() -> Result<(), BenchmarkError> { diff --git a/operator/pallets/system/src/lib.rs b/operator/pallets/system/src/lib.rs index 20b37a37..2eb51db1 100644 --- a/operator/pallets/system/src/lib.rs +++ b/operator/pallets/system/src/lib.rs @@ -18,6 +18,8 @@ //! //! * [`Call::register_token`]: Register a token location as a wrapped ERC20 contract on Ethereum. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + #[cfg(test)] mod mock; @@ -32,6 +34,7 @@ pub mod api; pub mod weights; pub use weights::*; +use alloc::boxed::Box; use frame_support::{ pallet_prelude::*, traits::{ @@ -53,7 +56,6 @@ use snowbridge_outbound_queue_primitives::{ use sp_core::{RuntimeDebug, H160, H256}; use sp_io::hashing::blake2_256; use sp_runtime::{traits::MaybeEquivalence, DispatchError, SaturatedConversion}; -use sp_std::prelude::*; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; diff --git a/operator/pallets/system/src/migration.rs b/operator/pallets/system/src/migration.rs index 7a6aacd0..f7ee316c 100644 --- a/operator/pallets/system/src/migration.rs +++ b/operator/pallets/system/src/migration.rs @@ -2,6 +2,8 @@ // SPDX-FileCopyrightText: 2023 Snowfork //! Governance API for controlling the Ethereum side of the bridge use super::*; +use alloc::vec::Vec; +use core::marker::PhantomData; use frame_support::{ migrations::VersionedMigration, pallet_prelude::*, @@ -9,7 +11,6 @@ use frame_support::{ weights::Weight, }; use log; -use sp_std::marker::PhantomData; #[cfg(feature = "try-runtime")] use sp_runtime::TryRuntimeError; @@ -22,6 +23,9 @@ pub const STORAGE_VERSION: StorageVersion = StorageVersion::new(1); pub mod v0 { use super::*; + #[cfg(feature = "try-runtime")] + use alloc::vec; + pub struct InitializeOnUpgrade( PhantomData<(T, BridgeHubParaId, AssetHubParaId)>, ); diff --git a/operator/pallets/system/src/mock.rs b/operator/pallets/system/src/mock.rs index d3572eaf..b513b375 100644 --- a/operator/pallets/system/src/mock.rs +++ b/operator/pallets/system/src/mock.rs @@ -49,7 +49,17 @@ mod pallet_xcm_origin { // Insert this custom Origin into the aggregate RuntimeOrigin #[pallet::origin] - #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] + #[derive( + PartialEq, + Eq, + Clone, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + DecodeWithMemTracking, + MaxEncodedLen, + )] pub struct Origin(pub Location); impl From for Origin { diff --git a/operator/precompiles/batch/Cargo.toml b/operator/precompiles/batch/Cargo.toml index db994685..7bc5775d 100644 --- a/operator/precompiles/batch/Cargo.toml +++ b/operator/precompiles/batch/Cargo.toml @@ -13,7 +13,6 @@ frame-system = { workspace = true } parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -42,5 +41,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] diff --git a/operator/precompiles/batch/src/lib.rs b/operator/precompiles/batch/src/lib.rs index 86b02638..aa3dd99f 100644 --- a/operator/precompiles/batch/src/lib.rs +++ b/operator/precompiles/batch/src/lib.rs @@ -17,13 +17,16 @@ //! Precompile to interact with pallet_balances instances using the ERC20 interface standard. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec; +use alloc::vec::Vec; +use core::{iter::repeat, marker::PhantomData}; use evm::{ExitError, ExitReason}; use fp_evm::{Context, Log, PrecompileFailure, PrecompileHandle, Transfer}; use frame_support::traits::ConstU32; use precompile_utils::{evm::costs::call_cost, prelude::*}; use sp_core::{H160, U256}; -use sp_std::{iter::repeat, marker::PhantomData, vec, vec::Vec}; #[cfg(test)] mod mock; diff --git a/operator/precompiles/batch/src/mock.rs b/operator/precompiles/batch/src/mock.rs index 5b51a83e..85e2ada3 100644 --- a/operator/precompiles/batch/src/mock.rs +++ b/operator/precompiles/batch/src/mock.rs @@ -142,6 +142,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -196,6 +198,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); @@ -206,6 +209,7 @@ impl ExtBuilder { pallet_evm::Pallet::::create_account( Revert.into(), hex_literal::hex!("1460006000fd").to_vec(), + None, ); }); ext diff --git a/operator/precompiles/batch/src/tests.rs b/operator/precompiles/batch/src/tests.rs index 61883b45..655a9cb0 100644 --- a/operator/precompiles/batch/src/tests.rs +++ b/operator/precompiles/batch/src/tests.rs @@ -45,6 +45,7 @@ fn evm_call(from: impl Into, input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, // Use the next nonce access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/call-permit/Cargo.toml b/operator/precompiles/call-permit/Cargo.toml index 6d74c82e..ddc55831 100644 --- a/operator/precompiles/call-permit/Cargo.toml +++ b/operator/precompiles/call-permit/Cargo.toml @@ -14,7 +14,6 @@ parity-scale-codec = { workspace = true, features = [ "max-encoded-len" ] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = [ "with-codec" ] } @@ -43,5 +42,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] diff --git a/operator/precompiles/call-permit/src/lib.rs b/operator/precompiles/call-permit/src/lib.rs index d0364235..a1037f54 100644 --- a/operator/precompiles/call-permit/src/lib.rs +++ b/operator/precompiles/call-permit/src/lib.rs @@ -15,7 +15,9 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; use core::marker::PhantomData; use evm::ExitReason; use fp_evm::{Context, ExitRevert, PrecompileFailure, PrecompileHandle, Transfer}; @@ -29,7 +31,6 @@ use precompile_utils::{evm::costs::call_cost, prelude::*}; use sp_core::{H160, H256, U256}; use sp_io::hashing::keccak_256; use sp_runtime::traits::UniqueSaturatedInto; -use sp_std::vec::Vec; #[cfg(test)] mod mock; diff --git a/operator/precompiles/call-permit/src/mock.rs b/operator/precompiles/call-permit/src/mock.rs index efe85f83..4eb53cb4 100644 --- a/operator/precompiles/call-permit/src/mock.rs +++ b/operator/precompiles/call-permit/src/mock.rs @@ -126,6 +126,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -180,6 +182,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); @@ -190,6 +193,7 @@ impl ExtBuilder { pallet_evm::Pallet::::create_account( Revert.into(), hex_literal::hex!("1460006000fd").to_vec(), + None, ); }); ext diff --git a/operator/precompiles/collective/Cargo.toml b/operator/precompiles/collective/Cargo.toml index 7cdc5876..f605d8db 100644 --- a/operator/precompiles/collective/Cargo.toml +++ b/operator/precompiles/collective/Cargo.toml @@ -14,7 +14,6 @@ parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -46,6 +45,5 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] runtime-benchmarks = [] diff --git a/operator/precompiles/collective/src/lib.rs b/operator/precompiles/collective/src/lib.rs index 885bb8d9..95afa826 100644 --- a/operator/precompiles/collective/src/lib.rs +++ b/operator/precompiles/collective/src/lib.rs @@ -17,7 +17,10 @@ //! Precompile to interact with pallet_collective instances. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::boxed::Box; +use alloc::vec::Vec; use core::marker::PhantomData; use fp_account::AccountId20; use fp_evm::Log; @@ -32,7 +35,6 @@ use parity_scale_codec::{DecodeLimit as _, MaxEncodedLen}; use precompile_utils::prelude::*; use sp_core::{Decode, Get, H160, H256}; use sp_runtime::traits::Dispatchable; -use sp_std::{boxed::Box, vec::Vec}; #[cfg(test)] mod mock; diff --git a/operator/precompiles/collective/src/mock.rs b/operator/precompiles/collective/src/mock.rs index 8a27223e..bbdf6833 100644 --- a/operator/precompiles/collective/src/mock.rs +++ b/operator/precompiles/collective/src/mock.rs @@ -143,6 +143,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -298,6 +300,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/conviction-voting/Cargo.toml b/operator/precompiles/conviction-voting/Cargo.toml index 716d0247..a0a91dae 100644 --- a/operator/precompiles/conviction-voting/Cargo.toml +++ b/operator/precompiles/conviction-voting/Cargo.toml @@ -15,7 +15,6 @@ pallet-conviction-voting = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -44,7 +43,6 @@ std = [ "parity-scale-codec/std", "precompile-utils/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-support/runtime-benchmarks", diff --git a/operator/precompiles/conviction-voting/src/lib.rs b/operator/precompiles/conviction-voting/src/lib.rs index e46fd861..bfaffb2a 100644 --- a/operator/precompiles/conviction-voting/src/lib.rs +++ b/operator/precompiles/conviction-voting/src/lib.rs @@ -15,11 +15,13 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::{Currency, Polling}; -use frame_system::pallet_prelude::BlockNumberFor; use pallet_conviction_voting::Call as ConvictionVotingCall; use pallet_conviction_voting::{ AccountVote, Casting, ClassLocksFor, Conviction, Delegating, Tally, TallyOf, Vote, Voting, @@ -29,8 +31,6 @@ use pallet_evm::{AddressMapping, Log}; use precompile_utils::prelude::*; use sp_core::{Get, MaxEncodedLen, H160, H256, U256}; use sp_runtime::traits::{Dispatchable, StaticLookup}; -use sp_std::marker::PhantomData; -use sp_std::vec::Vec; #[cfg(test)] mod mock; @@ -56,10 +56,10 @@ type ClassOf = <::Polls as ::MaxTurnout, >, >>::Class; -type VotingOf = Voting< +type VotingOf = Voting< BalanceOf, ::AccountId, - BlockNumberFor, + pallet_conviction_voting::BlockNumberFor, <::Polls as Polling>>::Index, ::MaxVotes, >; @@ -109,18 +109,16 @@ impl ConvictionVotingPrecompile where Runtime: pallet_conviction_voting::Config + pallet_evm::Config + frame_system::Config, BalanceOf: TryFrom + Into, - ::RuntimeCall: - Dispatchable + GetDispatchInfo, - <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, + ::RuntimeOrigin: From>, Runtime::AccountId: Into, - ::RuntimeCall: From>, + Runtime::RuntimeCall: From>, IndexOf: TryFrom + TryInto, ClassOf: TryFrom + TryInto, ::Polls: Polling< Tally< <::Currency as Currency< - ::AccountId, + Runtime::AccountId, >>::Balance, ::MaxTurnout, >, diff --git a/operator/precompiles/conviction-voting/src/mock.rs b/operator/precompiles/conviction-voting/src/mock.rs index b0e43275..cdff74bc 100644 --- a/operator/precompiles/conviction-voting/src/mock.rs +++ b/operator/precompiles/conviction-voting/src/mock.rs @@ -16,6 +16,7 @@ //! Test utilities use super::*; +use alloc::collections::btree_map::BTreeMap; use frame_support::{ construct_runtime, parameter_types, traits::{Everything, PollStatus, Polling, TotalIssuanceOf}, @@ -29,7 +30,6 @@ use sp_runtime::{ traits::{BlakeTwo256, ConstU32, ConstU64, IdentityLookup}, BuildStorage, DispatchError, Perbill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "runtime-benchmarks")] use frame_support::traits::VoteTally; @@ -133,6 +133,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -266,6 +268,8 @@ impl pallet_conviction_voting::Config for Runtime { type WeightInfo = (); type MaxTurnout = TotalIssuanceOf; type Polls = TestPolls; + type BlockNumberProvider = frame_system::Pallet; + type VotingHooks = (); } pub(crate) struct ExtBuilder { @@ -294,6 +298,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/conviction-voting/src/tests.rs b/operator/precompiles/conviction-voting/src/tests.rs index 36f45fe1..32450ded 100644 --- a/operator/precompiles/conviction-voting/src/tests.rs +++ b/operator/precompiles/conviction-voting/src/tests.rs @@ -45,6 +45,7 @@ fn evm_call(input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/datahaven-native-transfer/Cargo.toml b/operator/precompiles/datahaven-native-transfer/Cargo.toml index bbc6fb04..c5812dbd 100644 --- a/operator/precompiles/datahaven-native-transfer/Cargo.toml +++ b/operator/precompiles/datahaven-native-transfer/Cargo.toml @@ -13,7 +13,6 @@ parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -48,6 +47,5 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", ] diff --git a/operator/precompiles/datahaven-native-transfer/src/lib.rs b/operator/precompiles/datahaven-native-transfer/src/lib.rs index 6cff5810..82a94696 100644 --- a/operator/precompiles/datahaven-native-transfer/src/lib.rs +++ b/operator/precompiles/datahaven-native-transfer/src/lib.rs @@ -21,6 +21,7 @@ #![cfg_attr(not(feature = "std"), no_std)] +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::fungible::Inspect; @@ -31,7 +32,6 @@ use pallet_evm::AddressMapping; use precompile_utils::prelude::*; use sp_core::{H160, U256}; use sp_runtime::traits::Dispatchable; -use sp_std::marker::PhantomData; /// Solidity selector for the TokensLocked event: /// keccak256("TokensLocked(address,uint256)") diff --git a/operator/precompiles/datahaven-native-transfer/src/mock.rs b/operator/precompiles/datahaven-native-transfer/src/mock.rs index 48dc9627..ea2f2624 100644 --- a/operator/precompiles/datahaven-native-transfer/src/mock.rs +++ b/operator/precompiles/datahaven-native-transfer/src/mock.rs @@ -21,7 +21,7 @@ use super::*; use frame_support::traits::Everything; use frame_support::{construct_runtime, parameter_types, weights::Weight}; use pallet_evm::{EnsureAddressNever, EnsureAddressRoot, FrameSystemAccountProvider}; -use parity_scale_codec::{Decode, Encode}; +use parity_scale_codec::{Decode, DecodeWithMemTracking, Encode}; use precompile_utils::{mock_account, precompile_set::*, testing::MockAccount}; use snowbridge_core::TokenId; use snowbridge_outbound_queue_primitives::v1::Ticket; @@ -146,6 +146,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -194,7 +196,7 @@ impl SendMessage for MockOutboundQueue { } } -#[derive(Clone, Encode, Decode)] +#[derive(Clone, Encode, Decode, DecodeWithMemTracking)] pub struct MockTicket; impl Ticket for MockTicket { @@ -272,6 +274,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/erc20-balances/Cargo.toml b/operator/precompiles/erc20-balances/Cargo.toml index 787ee63d..059b98da 100644 --- a/operator/precompiles/erc20-balances/Cargo.toml +++ b/operator/precompiles/erc20-balances/Cargo.toml @@ -16,7 +16,6 @@ parity-scale-codec = { workspace = true, features = ["max-encoded-len"] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -46,5 +45,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-io/std", - "sp-std/std", ] diff --git a/operator/precompiles/erc20-balances/src/eip2612.rs b/operator/precompiles/erc20-balances/src/eip2612.rs index da764a45..ec78e316 100644 --- a/operator/precompiles/erc20-balances/src/eip2612.rs +++ b/operator/precompiles/erc20-balances/src/eip2612.rs @@ -15,6 +15,7 @@ // along with Moonbeam. If not, see . use super::*; +use alloc::vec::Vec; use frame_support::{ ensure, traits::{Get, Time}, @@ -22,7 +23,6 @@ use frame_support::{ use sp_core::H256; use sp_io::hashing::keccak_256; use sp_runtime::traits::UniqueSaturatedInto; -use sp_std::vec::Vec; /// EIP2612 permit typehash. pub const PERMIT_TYPEHASH: [u8; 32] = keccak256!( @@ -39,9 +39,11 @@ pub struct Eip2612(PhantomData<(Runtime, Metad impl Eip2612 where Runtime: pallet_balances::Config + pallet_evm::Config, - Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, - Runtime::RuntimeCall: From>, - ::RuntimeOrigin: From>, + ::RuntimeCall: + Dispatchable + GetDispatchInfo, + ::RuntimeCall: From>, + <::RuntimeCall as Dispatchable>::RuntimeOrigin: + From>, BalanceOf: TryFrom + Into, Metadata: Erc20Metadata, Instance: InstanceToPrefix + 'static, diff --git a/operator/precompiles/erc20-balances/src/lib.rs b/operator/precompiles/erc20-balances/src/lib.rs index af0a0032..0c283970 100644 --- a/operator/precompiles/erc20-balances/src/lib.rs +++ b/operator/precompiles/erc20-balances/src/lib.rs @@ -17,7 +17,10 @@ //! Precompile to interact with pallet_balances instances using the ERC20 interface standard. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use core::convert::{TryFrom, TryInto}; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::{ dispatch::{GetDispatchInfo, PostDispatchInfo}, @@ -33,10 +36,6 @@ use pallet_balances::pallet::{ use pallet_evm::AddressMapping; use precompile_utils::prelude::*; use sp_core::{H160, H256, U256}; -use sp_std::{ - convert::{TryFrom, TryInto}, - marker::PhantomData, -}; mod eip2612; use eip2612::Eip2612; diff --git a/operator/precompiles/erc20-balances/src/mock.rs b/operator/precompiles/erc20-balances/src/mock.rs index aaa2a64d..35bc3727 100644 --- a/operator/precompiles/erc20-balances/src/mock.rs +++ b/operator/precompiles/erc20-balances/src/mock.rs @@ -127,6 +127,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -207,6 +209,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/erc20-balances/src/tests.rs b/operator/precompiles/erc20-balances/src/tests.rs index e4eb35c1..b14d8930 100644 --- a/operator/precompiles/erc20-balances/src/tests.rs +++ b/operator/precompiles/erc20-balances/src/tests.rs @@ -280,7 +280,7 @@ fn transfer() { value: 400.into(), }, ) - .expect_cost(176106756) // 1 weight => 1 gas in mock + .expect_cost(173835756) // 1 weight => 1 gas in mock .expect_log(log3( Precompile1, SELECTOR_LOG_TRANSFER, @@ -370,7 +370,7 @@ fn transfer_from() { value: 400.into(), }, ) - .expect_cost(176106756) // 1 weight => 1 gas in mock + .expect_cost(173835756) // 1 weight => 1 gas in mock .expect_log(log3( Precompile1, SELECTOR_LOG_TRANSFER, @@ -466,7 +466,7 @@ fn transfer_from_self() { value: 400.into(), }, ) - .expect_cost(176106756) // 1 weight => 1 gas in mock + .expect_cost(173835756) // 1 weight => 1 gas in mock .expect_log(log3( Precompile1, SELECTOR_LOG_TRANSFER, @@ -576,6 +576,7 @@ fn deposit(data: Vec) { None, // max priority None, // nonce vec![], // access list + vec![], // authorization list ) .expect("it works"); @@ -692,6 +693,7 @@ fn deposit_zero() { None, // max priority None, // nonce vec![], // access list + vec![], // authorization list ) .expect("it works"); diff --git a/operator/precompiles/identity/Cargo.toml b/operator/precompiles/identity/Cargo.toml index 127e2707..0162614f 100644 --- a/operator/precompiles/identity/Cargo.toml +++ b/operator/precompiles/identity/Cargo.toml @@ -14,7 +14,6 @@ parity-scale-codec = { workspace = true, features = [ "max-encoded-len" ] } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } pallet-identity = { workspace = true } # Frontier @@ -22,6 +21,10 @@ fp-evm = { workspace = true } pallet-evm = { workspace = true, features = [ "forbid-evm-reentrancy" ] } precompile-utils = { workspace = true } +# Temp +## TODO/ remove it once we move to 2506 +serde = { workspace = true } + [dev-dependencies] pallet-balances = { workspace = true, features = [ "std" ] } @@ -47,7 +50,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-support/runtime-benchmarks", diff --git a/operator/precompiles/identity/src/lib.rs b/operator/precompiles/identity/src/lib.rs index 7b2e29ee..113d434b 100644 --- a/operator/precompiles/identity/src/lib.rs +++ b/operator/precompiles/identity/src/lib.rs @@ -20,6 +20,9 @@ extern crate alloc; +use alloc::boxed::Box; +use alloc::vec::Vec; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::sp_runtime::traits::StaticLookup; @@ -30,9 +33,6 @@ use parity_scale_codec::MaxEncodedLen; use precompile_utils::prelude::*; use sp_core::{ConstU32, Get, H160, H256, U256}; use sp_runtime::traits::Dispatchable; -use sp_std::boxed::Box; -use sp_std::marker::PhantomData; -use sp_std::vec::Vec; #[cfg(test)] mod mock; @@ -78,8 +78,10 @@ where >, Runtime::AccountId: Into, Runtime::Hash: From, - Runtime::RuntimeCall: Dispatchable + GetDispatchInfo, - ::RuntimeOrigin: From>, + ::RuntimeCall: + Dispatchable + GetDispatchInfo, + <::RuntimeCall as Dispatchable>::RuntimeOrigin: + From>, Runtime::RuntimeCall: From>, BalanceOf: TryFrom + Into + solidity::Codec, ::AddressMapping: AddressMapping, diff --git a/operator/precompiles/identity/src/mock.rs b/operator/precompiles/identity/src/mock.rs index b984730f..e91b7a7b 100644 --- a/operator/precompiles/identity/src/mock.rs +++ b/operator/precompiles/identity/src/mock.rs @@ -25,10 +25,12 @@ use frame_system::{EnsureRoot, EnsureSignedBy}; use pallet_evm::{EnsureAddressNever, EnsureAddressRoot, FrameSystemAccountProvider}; use pallet_identity::legacy::IdentityInfo; use precompile_utils::mock_account; -use precompile_utils::{ - precompile_set::*, - testing::{MockAccount, MockSignature}, -}; +use precompile_utils::testing::MockSigner; +use precompile_utils::{precompile_set::*, testing::MockAccount}; +use scale_info::TypeInfo; +use serde::{Deserialize, Serialize}; +use sp_core::keccak_256; +use sp_core::{Decode, DecodeWithMemTracking, Encode}; use sp_core::{H256, U256}; use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, @@ -40,6 +42,60 @@ pub type Balance = u128; type Block = frame_system::mocking::MockBlockU32; +// TODO: remove this chunk once we moved to 2506. `MockSignature` was missing the `DecodeWithMemTracking` trait in frontier 2503. +// We should be able to use the one from frontier when migrating to 2506 +#[derive( + Eq, + PartialEq, + Clone, + Encode, + Decode, + DecodeWithMemTracking, + sp_core::RuntimeDebug, + TypeInfo, + Serialize, + Deserialize, +)] +pub struct MockSignature(sp_core::ecdsa::Signature); + +impl From for MockSignature { + fn from(x: sp_core::ecdsa::Signature) -> Self { + MockSignature(x) + } +} + +impl From for MockSignature { + fn from(signature: sp_runtime::MultiSignature) -> Self { + match signature { + sp_runtime::MultiSignature::Ed25519(_) => { + panic!("Ed25519 not supported for MockSignature") + } + sp_runtime::MultiSignature::Sr25519(_) => { + panic!("Sr25519 not supported for MockSignature") + } + sp_runtime::MultiSignature::Ecdsa(sig) => Self(sig), + } + } +} + +impl sp_runtime::traits::Verify for MockSignature { + type Signer = MockSigner; + fn verify>(&self, mut msg: L, signer: &MockAccount) -> bool { + let mut m = [0u8; 32]; + m.copy_from_slice(keccak_256(msg.get()).as_slice()); + match sp_io::crypto::secp256k1_ecdsa_recover(self.0.as_ref(), &m) { + Ok(pubkey) => { + MockAccount(sp_core::H160::from_slice( + &keccak_256(&pubkey).as_slice()[12..32], + )) == *signer + } + Err(sp_io::EcdsaVerifyError::BadRS) => false, + Err(sp_io::EcdsaVerifyError::BadV) => false, + Err(sp_io::EcdsaVerifyError::BadSignature) => false, + } + } +} + construct_runtime!( pub enum Runtime { System: frame_system, @@ -136,6 +192,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -240,6 +298,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/identity/src/tests.rs b/operator/precompiles/identity/src/tests.rs index 7efa1519..e3d25173 100644 --- a/operator/precompiles/identity/src/tests.rs +++ b/operator/precompiles/identity/src/tests.rs @@ -49,6 +49,7 @@ fn evm_call(source: impl Into, input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/precompile-registry/src/lib.rs b/operator/precompiles/precompile-registry/src/lib.rs index e81bb477..5e52d3fb 100644 --- a/operator/precompiles/precompile-registry/src/lib.rs +++ b/operator/precompiles/precompile-registry/src/lib.rs @@ -92,7 +92,7 @@ where // AccountCodes: Blake2128(16) + H160(20) + Vec(5) // We asume an existing precompile can hold at most 5 bytes worth of dummy code. handle.record_db_read::(41)?; - pallet_evm::Pallet::::create_account(address.0, DUMMY_CODE.to_vec()); + let _ = pallet_evm::Pallet::::create_account(address.0, DUMMY_CODE.to_vec(), None); Ok(()) } diff --git a/operator/precompiles/precompile-registry/src/mock.rs b/operator/precompiles/precompile-registry/src/mock.rs index 45f364ce..c1a66780 100644 --- a/operator/precompiles/precompile-registry/src/mock.rs +++ b/operator/precompiles/precompile-registry/src/mock.rs @@ -127,6 +127,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -181,6 +183,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); @@ -191,6 +194,7 @@ impl ExtBuilder { pallet_evm::Pallet::::create_account( SmartContract.into(), b"SmartContract".to_vec(), + None, ); }); ext diff --git a/operator/precompiles/preimage/Cargo.toml b/operator/precompiles/preimage/Cargo.toml index 757540bd..a5988746 100644 --- a/operator/precompiles/preimage/Cargo.toml +++ b/operator/precompiles/preimage/Cargo.toml @@ -14,7 +14,6 @@ pallet-preimage = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -41,8 +40,6 @@ std = [ "pallet-evm/std", "pallet-preimage/std", "parity-scale-codec/std", - "parity-scale-codec/std", "precompile-utils/std", "sp-runtime/std", - "sp-std/std", ] diff --git a/operator/precompiles/preimage/src/lib.rs b/operator/precompiles/preimage/src/lib.rs index 4a93a378..d5133e12 100644 --- a/operator/precompiles/preimage/src/lib.rs +++ b/operator/precompiles/preimage/src/lib.rs @@ -15,7 +15,10 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; +use core::marker::PhantomData; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::ConstU32; @@ -24,7 +27,6 @@ use pallet_preimage::Call as PreimageCall; use precompile_utils::prelude::*; use sp_core::{Hasher, H256}; use sp_runtime::traits::Dispatchable; -use sp_std::{marker::PhantomData, vec::Vec}; #[cfg(test)] mod mock; diff --git a/operator/precompiles/preimage/src/mock.rs b/operator/precompiles/preimage/src/mock.rs index 2c520ef1..6bb4279a 100644 --- a/operator/precompiles/preimage/src/mock.rs +++ b/operator/precompiles/preimage/src/mock.rs @@ -125,6 +125,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -187,6 +189,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/preimage/src/tests.rs b/operator/precompiles/preimage/src/tests.rs index 626c22f4..dddddd7f 100644 --- a/operator/precompiles/preimage/src/tests.rs +++ b/operator/precompiles/preimage/src/tests.rs @@ -34,6 +34,7 @@ fn evm_call(input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } diff --git a/operator/precompiles/proxy/Cargo.toml b/operator/precompiles/proxy/Cargo.toml index 6760477d..c2dda344 100644 --- a/operator/precompiles/proxy/Cargo.toml +++ b/operator/precompiles/proxy/Cargo.toml @@ -15,7 +15,6 @@ pallet-proxy = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier evm = { workspace = true, features = ["with-codec"] } @@ -47,5 +46,4 @@ std = [ "precompile-utils/std", "sp-core/std", "sp-runtime/std", - "sp-std/std", ] \ No newline at end of file diff --git a/operator/precompiles/proxy/src/lib.rs b/operator/precompiles/proxy/src/lib.rs index 031e6afc..bb54449e 100644 --- a/operator/precompiles/proxy/src/lib.rs +++ b/operator/precompiles/proxy/src/lib.rs @@ -15,7 +15,10 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; +use core::marker::PhantomData; use evm::ExitReason; use fp_evm::{ Context, PrecompileFailure, PrecompileHandle, Transfer, ACCOUNT_CODES_METADATA_PROOF_SIZE, @@ -33,7 +36,6 @@ use sp_runtime::{ traits::{ConstU32, Dispatchable, StaticLookup, Zero}, SaturatedConversion, }; -use sp_std::marker::PhantomData; /// System account size in bytes = Pallet_Name_Hash (16) + Storage_name_hash (16) + /// Blake2_128Concat (16) + AccountId (20) + AccountInfo (4 + 12 + AccountData (4* 16)) = 148 @@ -57,11 +59,12 @@ where ::RuntimeCall: Dispatchable + GetDispatchInfo, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::RuntimeCall: From> + From>, >::Balance: TryFrom + Into, - ::AddressMapping: AddressMapping, + ::AddressMapping: + AddressMapping<::AccountId>, { fn is_allowed(_caller: H160, selector: Option) -> bool { match selector { @@ -85,16 +88,17 @@ where Runtime: pallet_proxy::Config + pallet_evm::Config + frame_system::Config + pallet_balances::Config, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::ProxyType: Decode + EvmProxyCallFilter, ::RuntimeCall: Dispatchable + GetDispatchInfo, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::RuntimeCall: From> + From>, >::Balance: TryFrom + Into, - ::AddressMapping: AddressMapping, + ::AddressMapping: + AddressMapping<::AccountId>, { fn is_allowed(_caller: H160, selector: Option) -> bool { match selector { @@ -147,16 +151,17 @@ where Runtime: pallet_proxy::Config + pallet_evm::Config + frame_system::Config + pallet_balances::Config, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::ProxyType: Decode + EvmProxyCallFilter, ::RuntimeCall: Dispatchable + GetDispatchInfo, <::RuntimeCall as Dispatchable>::RuntimeOrigin: - From>, + From::AccountId>>, ::RuntimeCall: From> + From>, >::Balance: TryFrom + Into, - ::AddressMapping: AddressMapping, + ::AddressMapping: + AddressMapping<::AccountId>, { /// Register a proxy account for the sender that is able to make calls on its behalf. /// The dispatch origin for this call must be Signed. @@ -198,8 +203,8 @@ where return Err(revert("Cannot add more than one proxy")); } - let delegate: ::Source = - Runtime::Lookup::unlookup(delegate.clone()); + let delegate: <::Lookup as StaticLookup>::Source = + ::Lookup::unlookup(delegate.clone()); let call: ProxyCall = ProxyCall::::add_proxy { delegate, proxy_type, @@ -233,8 +238,8 @@ where })?; let delay = delay.into(); - let delegate: ::Source = - Runtime::Lookup::unlookup(delegate.clone()); + let delegate: <::Lookup as StaticLookup>::Source = + ::Lookup::unlookup(delegate.clone()); let origin = Runtime::AddressMapping::into_account_id(handle.context().caller); let call: ProxyCall = ProxyCall::::remove_proxy { delegate, @@ -413,7 +418,7 @@ where let transfer = if value.is_zero() { None } else { - let contract_address: Runtime::AccountId = + let contract_address: ::AccountId = Runtime::AddressMapping::into_account_id(handle.context().address); // Send back funds received by the precompile. @@ -421,12 +426,12 @@ where handle, Some(contract_address).into(), pallet_balances::Call::::transfer_allow_death { - dest: Runtime::Lookup::unlookup(who), + dest: ::Lookup::unlookup(who), value: { let balance: >::Balance = value.try_into().map_err(|_| PrecompileFailure::Revert { exit_status: fp_evm::ExitRevert::Reverted, - output: sp_std::vec::Vec::new(), + output: Vec::new(), })?; balance }, diff --git a/operator/precompiles/proxy/src/mock.rs b/operator/precompiles/proxy/src/mock.rs index 3985182e..394a1787 100644 --- a/operator/precompiles/proxy/src/mock.rs +++ b/operator/precompiles/proxy/src/mock.rs @@ -168,6 +168,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressAlways; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -269,6 +271,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = BlakeTwo256; type AnnouncementDepositBase = (); type AnnouncementDepositFactor = (); + type BlockNumberProvider = (); } /// Build test externalities, prepopulated with data for testing democracy precompiles @@ -298,6 +301,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances.clone(), + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/proxy/src/tests.rs b/operator/precompiles/proxy/src/tests.rs index b7d7c906..bf3a60b6 100644 --- a/operator/precompiles/proxy/src/tests.rs +++ b/operator/precompiles/proxy/src/tests.rs @@ -551,6 +551,7 @@ fn test_nested_evm_bypass_proxy_should_allow_elevating_proxy_type() { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), }); // call the evm call in a proxy call @@ -603,19 +604,20 @@ fn fails_if_called_by_smart_contract() { #[test] fn succeed_if_called_by_precompile() { + // AddressU64<2> is registered in the precompile set as RevertPrecompile and is the only + // precompile allowed to call Proxy via CallableByPrecompile>>. + let precompile2 = MockAccount::from_u64(2); ExtBuilder::default() - .with_balances(vec![(Alice.into(), 1000), (Bob.into(), 1000)]) + .with_balances(vec![ + (Alice.into(), 1000), + (Bob.into(), 1000), + (precompile2.into(), 1000), + ]) .build() .execute_with(|| { - // Set dummy code to Alice address as it if was a precompile. - pallet_evm::AccountCodes::::insert( - H160::from(Alice), - vec![0x60, 0x00, 0x60, 0x00, 0xfd], - ); - PrecompilesValue::get() .prepare_test( - Alice, + precompile2, Precompile1, PCall::add_proxy { delegate: Address(Bob.into()), diff --git a/operator/precompiles/referenda/Cargo.toml b/operator/precompiles/referenda/Cargo.toml index e8451753..0e2b79dc 100644 --- a/operator/precompiles/referenda/Cargo.toml +++ b/operator/precompiles/referenda/Cargo.toml @@ -15,7 +15,6 @@ pallet-referenda = { workspace = true } parity-scale-codec = { workspace = true, features = ["derive"] } sp-core = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } # Frontier fp-evm = { workspace = true } @@ -47,7 +46,6 @@ std = [ "parity-scale-codec/std", "precompile-utils/std", "sp-runtime/std", - "sp-std/std", ] runtime-benchmarks = [ "frame-support/runtime-benchmarks", diff --git a/operator/precompiles/referenda/src/lib.rs b/operator/precompiles/referenda/src/lib.rs index d5687774..bd6bfa97 100644 --- a/operator/precompiles/referenda/src/lib.rs +++ b/operator/precompiles/referenda/src/lib.rs @@ -15,7 +15,11 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::boxed::Box; +use alloc::vec::Vec; +use core::{marker::PhantomData, str::FromStr}; use fp_evm::PrecompileHandle; use frame_support::dispatch::{GetDispatchInfo, PostDispatchInfo}; use frame_support::traits::{ @@ -29,8 +33,8 @@ use pallet_referenda::{ use parity_scale_codec::{Encode, MaxEncodedLen}; use precompile_utils::prelude::*; use sp_core::{H160, H256, U256}; +use sp_runtime::str_array; use sp_runtime::traits::Dispatchable; -use sp_std::{boxed::Box, marker::PhantomData, str::FromStr, vec::Vec}; #[cfg(test)] mod mock; @@ -39,7 +43,7 @@ mod tests; pub const CALL_DATA_LIMIT: u32 = 2u32.pow(16); -type BlockNumberFor = frame_system::pallet_prelude::BlockNumberFor; +type BlockNumberFor = pallet_referenda::BlockNumberFor; type BalanceOf = <::Currency as Currency< ::AccountId, >>::Balance; @@ -202,7 +206,7 @@ where fn track_ids(_handle: &mut impl PrecompileHandle) -> EvmResult> { let track_ids: Vec = Runtime::Tracks::tracks() .into_iter() - .filter_map(|(track_id, _)| (*track_id).try_into().ok()) + .filter_map(|track| track.id.try_into().ok()) .collect(); Ok(track_ids) @@ -215,21 +219,18 @@ where .try_into() .map_err(|_| RevertReason::value_is_too_large("Track id type").into()) .in_field("trackId")?; - let (_, track_info) = Runtime::Tracks::tracks() - .iter() - .find(|(id, _)| *id == track_id) + let track = Runtime::Tracks::tracks() + .find(|track| track.id == track_id) .ok_or(RevertReason::custom("No such track").in_field("trackId"))?; + let track_info = &track.info; // trim the nulls bytes at the end of the name // caused by this https://github.com/paritytech/polkadot-sdk/pull/2072 let track_name_trimmed: &[u8] = track_info .name - .as_bytes() .iter() .rposition(|&b| b != 0) - .map_or(track_info.name.as_bytes(), |pos| { - &track_info.name.as_bytes()[..=pos] - }); + .map_or(&[], |pos| &track_info.name[..=pos]); Ok(TrackInfo { name: track_name_trimmed.into(), @@ -246,19 +247,22 @@ where /// Use Runtime::Tracks::tracks to get the origin for input trackId fn track_id_to_origin(track_id: TrackIdOf) -> EvmResult>> { - let (_, track_info) = Runtime::Tracks::tracks() - .iter() - .find(|(id, _)| *id == track_id) + let track = Runtime::Tracks::tracks() + .find(|track| track.id == track_id) .ok_or(RevertReason::custom("No such track").in_field("trackId"))?; - let origin = if track_info.name == "root" { + let track_info = &track.info; + + let origin = if track_info.name == str_array("root") { frame_system::RawOrigin::Root.into() } else { - GovOrigin::from_str(track_info.name) - .map_err(|_| { - RevertReason::custom("Custom origin does not exist for {track_info.name}") - .in_field("trackId") - })? - .into() + GovOrigin::from_str(str::from_utf8(&track_info.name).map_err(|_| { + RevertReason::custom("Track name is not valid UTF-8").in_field("trackId") + })?) + .map_err(|_| { + RevertReason::custom("Custom origin does not exist for {track_info.name}") + .in_field("trackId") + })? + .into() }; Ok(Box::new(origin)) } diff --git a/operator/precompiles/referenda/src/mock.rs b/operator/precompiles/referenda/src/mock.rs index 661c11db..903f476f 100644 --- a/operator/precompiles/referenda/src/mock.rs +++ b/operator/precompiles/referenda/src/mock.rs @@ -18,6 +18,7 @@ use super::*; +use alloc::borrow::Cow; use frame_support::pallet_prelude::*; use frame_support::traits::VoteTally; use frame_support::{ @@ -29,6 +30,7 @@ use frame_system::RawOrigin; use pallet_evm::{ EnsureAddressNever, EnsureAddressRoot, FrameSystemAccountProvider, SubstrateBlockHashMapping, }; +use pallet_referenda::Track; use pallet_referenda::{Curve, TrackInfo, TracksInfo}; use precompile_utils::{precompile_set::*, testing::MockAccount}; use sp_core::{H256, U256}; @@ -36,7 +38,7 @@ use sp_runtime::{ traits::{BlakeTwo256, IdentityLookup}, BuildStorage, Perbill, }; -use sp_std::{str::FromStr, vec::Vec}; +use std::{str::FromStr, vec::Vec}; pub type AccountId = MockAccount; pub type Balance = u128; @@ -164,6 +166,8 @@ impl pallet_evm::Config for Runtime { type GasWeightMapping = pallet_evm::FixedGasWeightMapping; type WeightPerGas = WeightPerGas; type CallOrigin = EnsureAddressRoot; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WithdrawOrigin = EnsureAddressNever; type AddressMapping = AccountId; type Currency = Balances; @@ -217,6 +221,7 @@ impl pallet_scheduler::Config for Runtime { type WeightInfo = (); type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; + type BlockNumberProvider = (); } // Preimage configuration @@ -244,7 +249,9 @@ parameter_types! { pub struct TestTracksInfo; // Simple tally implementation for testing -#[derive(Debug, Clone, PartialEq, Eq, Encode, Decode, TypeInfo, MaxEncodedLen)] +#[derive( + Debug, Clone, PartialEq, Eq, Encode, Decode, DecodeWithMemTracking, TypeInfo, MaxEncodedLen, +)] pub struct Tally { pub ayes: u128, pub nays: u128, @@ -274,7 +281,7 @@ impl Get)>> for TestTracksInfo { ( 0, TrackInfo { - name: "root", + name: str_array("root"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -296,7 +303,7 @@ impl Get)>> for TestTracksInfo { ( 1, TrackInfo { - name: "none", + name: str_array("none"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -323,12 +330,12 @@ impl TracksInfo for TestTracksInfo { type Id = u8; type RuntimeOrigin = OriginCaller; - fn tracks() -> &'static [(Self::Id, TrackInfo)] { - static TRACKS: &[(u8, TrackInfo)] = &[ - ( - 0, - TrackInfo { - name: "root", + fn tracks() -> impl Iterator>> { + static DATA: [Track; 2] = [ + Track { + id: 0, + info: TrackInfo { + name: str_array("root"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -346,11 +353,11 @@ impl TracksInfo for TestTracksInfo { ceil: Perbill::from_percent(50), }, }, - ), - ( - 1, - TrackInfo { - name: "none", + }, + Track { + id: 1, + info: TrackInfo { + name: str_array("none"), max_deciding: 1, decision_deposit: 10, prepare_period: 2, @@ -368,9 +375,9 @@ impl TracksInfo for TestTracksInfo { ceil: Perbill::from_percent(50), }, }, - ), + }, ]; - TRACKS + DATA.iter().map(Cow::Borrowed) } fn track_for(origin: &Self::RuntimeOrigin) -> Result { @@ -399,6 +406,7 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = (); type Tracks = TestTracksInfo; type Preimages = Preimage; + type BlockNumberProvider = (); } pub(crate) struct ExtBuilder { @@ -425,6 +433,7 @@ impl ExtBuilder { pallet_balances::GenesisConfig:: { balances: self.balances, + dev_accounts: Default::default(), } .assimilate_storage(&mut t) .expect("Pallet balances storage can be assimilated"); diff --git a/operator/precompiles/referenda/src/tests.rs b/operator/precompiles/referenda/src/tests.rs index 028a08ca..0a9c1862 100644 --- a/operator/precompiles/referenda/src/tests.rs +++ b/operator/precompiles/referenda/src/tests.rs @@ -42,6 +42,7 @@ fn evm_call(input: Vec) -> EvmCall { max_priority_fee_per_gas: Some(U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } } @@ -295,7 +296,7 @@ fn submit_track_id_oob_fails() { .execute_with(|| { let proposal = vec![1, 2, 3]; let proposal_hash = sp_runtime::traits::BlakeTwo256::hash(&proposal); - let oob_track_id = ::Tracks::tracks().len(); + let oob_track_id = ::Tracks::tracks().count(); // submit with an invalid track_id let input: Vec = PCall::submit_at { diff --git a/operator/primitives/bridge/Cargo.toml b/operator/primitives/bridge/Cargo.toml index 135bbcdf..e00ca4d2 100644 --- a/operator/primitives/bridge/Cargo.toml +++ b/operator/primitives/bridge/Cargo.toml @@ -16,7 +16,6 @@ parity-scale-codec = { workspace = true } snowbridge-core = { workspace = true } snowbridge-inbound-queue-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } hex = { workspace = true } [features] @@ -29,6 +28,5 @@ std = [ "pallet-external-validators/std", "pallet-datahaven-native-transfer/std", "sp-core/std", - "sp-std/std", "snowbridge-inbound-queue-primitives/std", ] diff --git a/operator/primitives/bridge/src/lib.rs b/operator/primitives/bridge/src/lib.rs index ab8fcad0..c467312f 100644 --- a/operator/primitives/bridge/src/lib.rs +++ b/operator/primitives/bridge/src/lib.rs @@ -15,14 +15,15 @@ // along with DataHaven. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; +use alloc::vec::Vec; use frame_support::pallet_prelude::*; use parity_scale_codec::DecodeAll; use snowbridge_inbound_queue_primitives::v2::{ EthereumAsset, Message as SnowbridgeMessage, MessageProcessor, }; use sp_core::H160; -use sp_std::vec::Vec; // Message ID. This is not expected to change and its arbitrary bytes defined here. // It should match the EL_MESSAGE_ID in DataHavenSnowbridgeMessages.sol diff --git a/operator/primitives/snowbridge/beacon/Cargo.toml b/operator/primitives/snowbridge/beacon/Cargo.toml index b22e6e6e..42a3c212 100644 --- a/operator/primitives/snowbridge/beacon/Cargo.toml +++ b/operator/primitives/snowbridge/beacon/Cargo.toml @@ -24,7 +24,6 @@ frame-support = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } byte-slice-cast = { workspace = true } ssz_rs = { workspace = true } @@ -51,6 +50,5 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "ssz_rs/std", ] diff --git a/operator/primitives/snowbridge/beacon/src/bits.rs b/operator/primitives/snowbridge/beacon/src/bits.rs index 6c5e9e16..42bc8a22 100644 --- a/operator/primitives/snowbridge/beacon/src/bits.rs +++ b/operator/primitives/snowbridge/beacon/src/bits.rs @@ -1,6 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork -use sp_std::prelude::*; +use alloc::vec::Vec; use ssz_rs::{Bitvector, Deserialize}; pub fn decompress_sync_committee_bits< diff --git a/operator/primitives/snowbridge/beacon/src/bls.rs b/operator/primitives/snowbridge/beacon/src/bls.rs index c96d1d02..8669a459 100644 --- a/operator/primitives/snowbridge/beacon/src/bls.rs +++ b/operator/primitives/snowbridge/beacon/src/bls.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork use crate::{PublicKey, Signature}; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{ensure, PalletError}; pub use milagro_bls::{ @@ -10,7 +11,6 @@ pub use milagro_bls::{ use scale_info::TypeInfo; use sp_core::H256; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; #[derive( Copy, diff --git a/operator/primitives/snowbridge/beacon/src/lib.rs b/operator/primitives/snowbridge/beacon/src/lib.rs index 7afb8f21..a3695286 100644 --- a/operator/primitives/snowbridge/beacon/src/lib.rs +++ b/operator/primitives/snowbridge/beacon/src/lib.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod bits; pub mod bls; diff --git a/operator/primitives/snowbridge/beacon/src/receipt.rs b/operator/primitives/snowbridge/beacon/src/receipt.rs index 60e7744c..3f57681b 100644 --- a/operator/primitives/snowbridge/beacon/src/receipt.rs +++ b/operator/primitives/snowbridge/beacon/src/receipt.rs @@ -1,8 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::boxed::Box; +use alloc::vec::Vec; use sp_core::H256; use sp_io::hashing::keccak_256; -use sp_std::prelude::*; use snowbridge_ethereum::{mpt, Receipt}; diff --git a/operator/primitives/snowbridge/beacon/src/serde_utils.rs b/operator/primitives/snowbridge/beacon/src/serde_utils.rs index ac0b506a..5e09d27d 100644 --- a/operator/primitives/snowbridge/beacon/src/serde_utils.rs +++ b/operator/primitives/snowbridge/beacon/src/serde_utils.rs @@ -100,7 +100,7 @@ pub struct HexVisitor(); impl<'de, const LENGTH: usize> serde::de::Visitor<'de> for HexVisitor { type Value = [u8; LENGTH]; - fn expecting(&self, formatter: &mut Formatter) -> sp_std::fmt::Result { + fn expecting(&self, formatter: &mut Formatter) -> core::fmt::Result { formatter.write_str("a hex string with an '0x' prefix") } diff --git a/operator/primitives/snowbridge/beacon/src/ssz.rs b/operator/primitives/snowbridge/beacon/src/ssz.rs index f4b026ca..8903f367 100644 --- a/operator/primitives/snowbridge/beacon/src/ssz.rs +++ b/operator/primitives/snowbridge/beacon/src/ssz.rs @@ -6,9 +6,9 @@ use crate::{ BeaconHeader, ExecutionPayloadHeader, ForkData, SigningData, SyncAggregate, SyncCommittee, }, }; +use alloc::{vec, vec::Vec}; use byte_slice_cast::AsByteSlice; use sp_core::H256; -use sp_std::{vec, vec::Vec}; use ssz_rs::{ prelude::{List, Vector}, Bitvector, Deserialize, DeserializeError, SimpleSerialize, SimpleSerializeError, Sized, U256, @@ -204,9 +204,9 @@ pub mod deneb { ssz::hash_tree_root, types::deneb::ExecutionPayloadHeader, }; + use alloc::{vec, vec::Vec}; use byte_slice_cast::AsByteSlice; use sp_core::H256; - use sp_std::{vec, vec::Vec}; use ssz_rs::{ prelude::{List, Vector}, Deserialize, DeserializeError, SimpleSerializeError, Sized, U256, diff --git a/operator/primitives/snowbridge/beacon/src/types.rs b/operator/primitives/snowbridge/beacon/src/types.rs index 062eb218..e44a5f2b 100644 --- a/operator/primitives/snowbridge/beacon/src/types.rs +++ b/operator/primitives/snowbridge/beacon/src/types.rs @@ -1,11 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::boxed::Box; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; +use core::iter::repeat; use frame_support::{CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound}; use scale_info::TypeInfo; use sp_core::{H160, H256, U256}; use sp_runtime::RuntimeDebug; -use sp_std::{boxed::Box, iter::repeat, prelude::*}; use crate::config::{PUBKEY_SIZE, SIGNATURE_SIZE}; @@ -89,7 +91,7 @@ impl Serialize for PublicKey { } } -#[derive(Copy, Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Copy, Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct Signature(pub [u8; SIGNATURE_SIZE]); impl Default for Signature { @@ -238,7 +240,16 @@ impl TryFrom<&SyncCommittee> /// Beacon block header as it is stored in the runtime storage. The block root is the /// Merkleization of a BeaconHeader. #[derive( - Copy, Clone, Default, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, MaxEncodedLen, + Copy, + Clone, + Default, + Encode, + Decode, + PartialEq, + RuntimeDebug, + TypeInfo, + MaxEncodedLen, + DecodeWithMemTracking, )] #[cfg_attr(feature = "std", derive(Serialize, Deserialize))] pub struct BeaconHeader { @@ -261,7 +272,15 @@ impl BeaconHeader { } } -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(Deserialize), @@ -329,7 +348,14 @@ impl /// ExecutionPayloadHeader /// #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", @@ -391,7 +417,15 @@ pub struct CompactBeaconState { } /// VersionedExecutionPayloadHeader -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(Serialize, Deserialize), @@ -453,7 +487,15 @@ impl VersionedExecutionPayloadHeader { } } -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(serde::Deserialize), @@ -470,7 +512,15 @@ pub struct ExecutionProof { pub execution_branch: Vec, } -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(serde::Deserialize), @@ -609,18 +659,25 @@ pub enum Mode { } pub mod deneb { - use codec::{Decode, Encode}; + use alloc::vec::Vec; + use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound}; use scale_info::TypeInfo; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; use sp_core::{H160, H256, U256}; - use sp_std::prelude::*; /// ExecutionPayloadHeader /// #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", diff --git a/operator/primitives/snowbridge/beacon/src/updates.rs b/operator/primitives/snowbridge/beacon/src/updates.rs index 07d5564a..f580f5a2 100644 --- a/operator/primitives/snowbridge/beacon/src/updates.rs +++ b/operator/primitives/snowbridge/beacon/src/updates.rs @@ -1,14 +1,22 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork -use codec::{Decode, Encode}; +use alloc::vec::Vec; +use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound}; use scale_info::TypeInfo; use sp_core::H256; -use sp_std::prelude::*; use crate::types::{BeaconHeader, SyncAggregate, SyncCommittee}; -#[derive(Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo)] +#[derive( + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, +)] #[cfg_attr( feature = "std", derive(serde::Serialize, serde::Deserialize), @@ -24,7 +32,14 @@ pub struct CheckpointUpdate { } #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", @@ -54,7 +69,14 @@ pub struct Update } #[derive( - Default, Encode, Decode, CloneNoBound, PartialEqNoBound, RuntimeDebugNoBound, TypeInfo, + Default, + Encode, + Decode, + CloneNoBound, + PartialEqNoBound, + RuntimeDebugNoBound, + TypeInfo, + DecodeWithMemTracking, )] #[cfg_attr( feature = "std", diff --git a/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml b/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml index 081868b9..2b289ab1 100644 --- a/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml +++ b/operator/primitives/snowbridge/bridge-hub-common/Cargo.toml @@ -17,7 +17,6 @@ scale-info = { features = ["derive"], workspace = true } snowbridge-core.workspace = true sp-core.workspace = true sp-runtime.workspace = true -sp-std.workspace = true xcm.workspace = true xcm-builder.workspace = true xcm-executor.workspace = true @@ -33,7 +32,6 @@ std = [ "snowbridge-core/std", "sp-core/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs b/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs index 2f0a6d09..0b25fa8e 100644 --- a/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs +++ b/operator/primitives/snowbridge/bridge-hub-common/src/message_queue.rs @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. //! Runtime configuration for MessageQueue pallet -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use core::marker::PhantomData; use cumulus_primitives_core::{AggregateMessageOrigin as CumulusAggregateMessageOrigin, ParaId}; use frame_support::{ @@ -29,7 +29,18 @@ use xcm::latest::prelude::{Junction, Location}; /// The aggregate origin of an inbound message. /// This is specialized for BridgeHub, as the snowbridge-outbound-queue-pallet is also using /// the shared MessageQueue pallet. -#[derive(Encode, Decode, Copy, MaxEncodedLen, Clone, Eq, PartialEq, TypeInfo, Debug)] +#[derive( + Encode, + Decode, + Copy, + MaxEncodedLen, + Clone, + Eq, + PartialEq, + TypeInfo, + DecodeWithMemTracking, + Debug, +)] pub enum AggregateMessageOrigin { /// The message came from the para-chain itself. Here, diff --git a/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs b/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs index be42fd73..27bee748 100644 --- a/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs +++ b/operator/primitives/snowbridge/bridge-hub-common/src/xcm_version.rs @@ -25,7 +25,7 @@ use xcm::{ /// configured XCM version between the destination `dest` and the bridge hub location provided as /// `Get`. pub struct XcmVersionOfDestAndRemoteBridge( - sp_std::marker::PhantomData<(Version, RemoteBridge)>, + core::marker::PhantomData<(Version, RemoteBridge)>, ); impl> GetVersion for XcmVersionOfDestAndRemoteBridge @@ -35,7 +35,7 @@ impl> GetVersion let bridge_hub_version = Version::get_version_for(&RemoteBridge::get()); match (dest_version, bridge_hub_version) { - (Some(dv), Some(bhv)) => Some(sp_std::cmp::min(dv, bhv)), + (Some(dv), Some(bhv)) => Some(core::cmp::min(dv, bhv)), (Some(dv), None) => Some(dv), (None, Some(bhv)) => Some(bhv), (None, None) => None, diff --git a/operator/primitives/snowbridge/core/Cargo.toml b/operator/primitives/snowbridge/core/Cargo.toml index f0eabf55..09895952 100644 --- a/operator/primitives/snowbridge/core/Cargo.toml +++ b/operator/primitives/snowbridge/core/Cargo.toml @@ -29,7 +29,6 @@ sp-arithmetic = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm-executor = { workspace = true } bp-relayers = { workspace = true } @@ -62,7 +61,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/core/src/lib.rs b/operator/primitives/snowbridge/core/src/lib.rs index 25e81ff6..87dc0fb5 100644 --- a/operator/primitives/snowbridge/core/src/lib.rs +++ b/operator/primitives/snowbridge/core/src/lib.rs @@ -4,6 +4,7 @@ //! //! Common traits and types #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; #[cfg(test)] mod tests; @@ -22,6 +23,8 @@ pub use polkadot_parachain_primitives::primitives::{ pub use ringbuffer::{RingBufferMap, RingBufferMapImpl}; pub use sp_core::U256; +use alloc::vec; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use frame_support::{traits::Contains, BoundedVec}; use hex_literal::hex; @@ -29,7 +32,6 @@ use scale_info::TypeInfo; use sp_core::{ConstU32, H256}; use sp_io::hashing::keccak_256; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; -use sp_std::prelude::*; use xcm::latest::{Asset, Junction::Parachain, Location, Result as XcmResult, XcmContext}; use xcm_executor::traits::TransactAsset; diff --git a/operator/primitives/snowbridge/core/src/location.rs b/operator/primitives/snowbridge/core/src/location.rs index 2816a79e..7038ad3f 100644 --- a/operator/primitives/snowbridge/core/src/location.rs +++ b/operator/primitives/snowbridge/core/src/location.rs @@ -9,9 +9,9 @@ pub use polkadot_parachain_primitives::primitives::{ }; pub use sp_core::U256; +use alloc::vec::Vec; use codec::Encode; use sp_core::H256; -use sp_std::prelude::*; use xcm::prelude::{ AccountId32, AccountKey20, GeneralIndex, GeneralKey, GlobalConsensus, Location, PalletInstance, }; @@ -56,7 +56,7 @@ impl DescribeLocation for DescribeHere { } } } -pub struct DescribeGlobalPrefix(sp_std::marker::PhantomData); +pub struct DescribeGlobalPrefix(core::marker::PhantomData); impl DescribeLocation for DescribeGlobalPrefix { fn describe_location(l: &Location) -> Option> { match (l.parent_count(), l.first_interior()) { diff --git a/operator/primitives/snowbridge/core/src/pricing.rs b/operator/primitives/snowbridge/core/src/pricing.rs index eca50c66..edbe86e3 100644 --- a/operator/primitives/snowbridge/core/src/pricing.rs +++ b/operator/primitives/snowbridge/core/src/pricing.rs @@ -1,14 +1,15 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_arithmetic::traits::{BaseArithmetic, Unsigned, Zero}; use sp_core::U256; use sp_runtime::{FixedU128, RuntimeDebug}; -use sp_std::prelude::*; -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)] +#[derive( + Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, DecodeWithMemTracking, TypeInfo, +)] pub struct PricingParameters { /// ETH/DOT exchange rate pub exchange_rate: FixedU128, @@ -20,7 +21,9 @@ pub struct PricingParameters { pub multiplier: FixedU128, } -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, TypeInfo)] +#[derive( + Clone, Encode, Decode, PartialEq, RuntimeDebug, MaxEncodedLen, DecodeWithMemTracking, TypeInfo, +)] pub struct Rewards { /// Local reward in DOT pub local: Balance, diff --git a/operator/primitives/snowbridge/core/src/reward.rs b/operator/primitives/snowbridge/core/src/reward.rs index 5b79f31c..931dc205 100644 --- a/operator/primitives/snowbridge/core/src/reward.rs +++ b/operator/primitives/snowbridge/core/src/reward.rs @@ -4,6 +4,7 @@ extern crate alloc; use crate::reward::RewardPaymentError::{ChargeFeesFailure, XcmSendFailure}; +use core::{fmt::Debug, marker::PhantomData}; use frame_support::dispatch::GetDispatchInfo; use scale_info::TypeInfo; use sp_runtime::{ @@ -11,7 +12,6 @@ use sp_runtime::{ traits::Get, DispatchError, }; -use sp_std::{fmt::Debug, marker::PhantomData}; use xcm::{ opaque::latest::prelude::Xcm, prelude::{ExecuteXcm, Junction::*, Location, SendXcm, *}, diff --git a/operator/primitives/snowbridge/core/src/sparse_bitmap.rs b/operator/primitives/snowbridge/core/src/sparse_bitmap.rs index d7192642..bea8b362 100644 --- a/operator/primitives/snowbridge/core/src/sparse_bitmap.rs +++ b/operator/primitives/snowbridge/core/src/sparse_bitmap.rs @@ -1,7 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use core::marker::PhantomData; use frame_support::storage::StorageMap; -use sp_std::marker::PhantomData; /// Sparse bitmap interface. pub trait SparseBitmap diff --git a/operator/primitives/snowbridge/ethereum/Cargo.toml b/operator/primitives/snowbridge/ethereum/Cargo.toml index 9d49aa6d..bfa63dc1 100644 --- a/operator/primitives/snowbridge/ethereum/Cargo.toml +++ b/operator/primitives/snowbridge/ethereum/Cargo.toml @@ -28,7 +28,6 @@ serde-big-array = { optional = true, features = [ sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } ethabi = { workspace = true } @@ -51,5 +50,4 @@ std = [ "serde-big-array", "sp-io/std", "sp-runtime/std", - "sp-std/std", ] diff --git a/operator/primitives/snowbridge/ethereum/src/header.rs b/operator/primitives/snowbridge/ethereum/src/header.rs index 0348880c..f9c3871c 100644 --- a/operator/primitives/snowbridge/ethereum/src/header.rs +++ b/operator/primitives/snowbridge/ethereum/src/header.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::boxed::Box; +use alloc::vec::Vec; use codec::{Decode, Encode}; use ethbloom::Bloom as EthBloom; use hex_literal::hex; @@ -8,7 +10,6 @@ use rlp::RlpStream; use scale_info::TypeInfo; use sp_io::hashing::keccak_256; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; #[cfg(feature = "std")] use serde::{Deserialize, Serialize}; diff --git a/operator/primitives/snowbridge/ethereum/src/lib.rs b/operator/primitives/snowbridge/ethereum/src/lib.rs index b44ea3c6..60bac359 100644 --- a/operator/primitives/snowbridge/ethereum/src/lib.rs +++ b/operator/primitives/snowbridge/ethereum/src/lib.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod header; pub mod log; diff --git a/operator/primitives/snowbridge/ethereum/src/log.rs b/operator/primitives/snowbridge/ethereum/src/log.rs index 589d928d..5273e382 100644 --- a/operator/primitives/snowbridge/ethereum/src/log.rs +++ b/operator/primitives/snowbridge/ethereum/src/log.rs @@ -1,8 +1,8 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +use alloc::vec::Vec; use codec::{Decode, Encode}; use ethereum_types::{H160, H256}; -use sp_std::prelude::*; #[derive(Clone, Debug, Encode, Decode, PartialEq, Eq)] pub struct Log { diff --git a/operator/primitives/snowbridge/ethereum/src/mpt.rs b/operator/primitives/snowbridge/ethereum/src/mpt.rs index 035016aa..e13180fc 100644 --- a/operator/primitives/snowbridge/ethereum/src/mpt.rs +++ b/operator/primitives/snowbridge/ethereum/src/mpt.rs @@ -2,8 +2,9 @@ // SPDX-FileCopyrightText: 2023 Snowfork //! Helper types to work with Ethereum's Merkle Patricia Trie nodes +use alloc::boxed::Box; +use alloc::vec::Vec; use ethereum_types::H256; -use sp_std::prelude::*; pub trait Node { fn contains_hash(&self, hash: H256) -> bool; diff --git a/operator/primitives/snowbridge/ethereum/src/receipt.rs b/operator/primitives/snowbridge/ethereum/src/receipt.rs index 3ef64e66..267a1b8f 100644 --- a/operator/primitives/snowbridge/ethereum/src/receipt.rs +++ b/operator/primitives/snowbridge/ethereum/src/receipt.rs @@ -1,9 +1,9 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork use crate::{Bloom, Log}; +use alloc::vec::Vec; use codec::{Decode, Encode}; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; #[derive(Clone, Default, Encode, Decode, PartialEq, RuntimeDebug)] pub struct Receipt { diff --git a/operator/primitives/snowbridge/inbound-queue/Cargo.toml b/operator/primitives/snowbridge/inbound-queue/Cargo.toml index b58f333a..6069eff4 100644 --- a/operator/primitives/snowbridge/inbound-queue/Cargo.toml +++ b/operator/primitives/snowbridge/inbound-queue/Cargo.toml @@ -23,7 +23,6 @@ frame-system = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } xcm = { workspace = true } xcm-builder = { workspace = true } @@ -61,7 +60,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/inbound-queue/src/lib.rs b/operator/primitives/snowbridge/inbound-queue/src/lib.rs index 20ff50ed..0d0f8565 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/lib.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/lib.rs @@ -2,12 +2,14 @@ // SPDX-FileCopyrightText: 2023 Snowfork // SPDX-FileCopyrightText: 2021-2022 Parity Technologies (UK) Ltd. #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; + pub mod v1; pub mod v2; use codec::Encode; +use core::marker::PhantomData; use snowbridge_beacon_primitives::BeaconHeader; use sp_core::{blake2_256, RuntimeDebug, H256}; -use sp_std::marker::PhantomData; use xcm::prelude::{AccountKey20, Ethereum, GlobalConsensus, Location}; use xcm_executor::traits::ConvertLocation; diff --git a/operator/primitives/snowbridge/inbound-queue/src/v1.rs b/operator/primitives/snowbridge/inbound-queue/src/v1.rs index 41aa2270..c82a4b59 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/v1.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/v1.rs @@ -3,6 +3,7 @@ //! Converts messages from Ethereum to XCM messages use crate::{CallIndex, EthereumLocationsConverterFor}; +use alloc::vec; use codec::{Decode, DecodeWithMemTracking, Encode}; use core::marker::PhantomData; use frame_support::{traits::tokens::Balance as BalanceT, PalletError}; @@ -10,7 +11,6 @@ use scale_info::TypeInfo; use snowbridge_core::TokenId; use sp_core::{Get, RuntimeDebug, H160, H256}; use sp_runtime::{traits::MaybeEquivalence, MultiAddress}; -use sp_std::prelude::*; use xcm::prelude::{Junction::AccountKey20, *}; const MINIMUM_DEPOSIT: u128 = 1; diff --git a/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs b/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs index fd28e7a3..3dfcf677 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/v2/converter.rs @@ -1,9 +1,12 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts messages from Solidity ABI-encoding to XCM +extern crate alloc; use super::{message::*, traits::*}; use crate::{v2::LOG_TARGET, CallIndex, EthereumLocationsConverterFor}; +use alloc::vec; +use alloc::vec::Vec; use codec::{Decode, DecodeLimit, Encode}; use core::marker::PhantomData; use frame_support::ensure; @@ -11,7 +14,6 @@ use snowbridge_core::TokenId; use sp_core::{Get, RuntimeDebug, H160}; use sp_io::hashing::blake2_256; use sp_runtime::{traits::MaybeEquivalence, MultiAddress}; -use sp_std::prelude::*; use xcm::{ prelude::{Junction::*, *}, MAX_XCM_DECODE_DEPTH, diff --git a/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs b/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs index 6e3f8fb5..299fcbe3 100644 --- a/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs +++ b/operator/primitives/snowbridge/inbound-queue/src/v2/message.rs @@ -1,8 +1,11 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts messages from Ethereum to XCM messages +extern crate alloc; use crate::{v2::IGatewayV2::Payload as GatewayV2Payload, Log}; +use alloc::vec; +use alloc::vec::Vec; use alloy_core::{ primitives::B256, sol, @@ -11,7 +14,6 @@ use alloy_core::{ use codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::prelude::*; sol! { interface IGatewayV2 { diff --git a/operator/primitives/snowbridge/outbound-queue/Cargo.toml b/operator/primitives/snowbridge/outbound-queue/Cargo.toml index 636a94c8..30513acc 100644 --- a/operator/primitives/snowbridge/outbound-queue/Cargo.toml +++ b/operator/primitives/snowbridge/outbound-queue/Cargo.toml @@ -28,7 +28,6 @@ sp-arithmetic = { workspace = true } sp-core = { workspace = true } sp-io = { workspace = true } sp-runtime = { workspace = true } -sp-std = { workspace = true } alloy-core = { workspace = true, features = ["sol-types"] } ethabi = { workspace = true } @@ -56,7 +55,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm-builder/std", "xcm-executor/std", "xcm/std", diff --git a/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs b/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs index e218e4b0..69c2df57 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v1/message.rs @@ -1,15 +1,17 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! # Outbound V1 primitives +extern crate alloc; use crate::{OperatingMode, SendError, SendMessageFeeProvider}; +use alloc::borrow::ToOwned; +use alloc::{vec, vec::Vec}; use codec::{Decode, DecodeWithMemTracking, Encode}; use ethabi::Token; use scale_info::TypeInfo; use snowbridge_core::{pricing::UD60x18, ChannelId}; use sp_arithmetic::traits::{BaseArithmetic, Unsigned}; use sp_core::{RuntimeDebug, H160, H256, U256}; -use sp_std::{borrow::ToOwned, vec, vec::Vec}; /// Enqueued outbound messages need to be versioned to prevent data corruption /// or loss after forkless runtime upgrades diff --git a/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs b/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs index f90ed90d..746a51fd 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v1/mod.rs @@ -1,3 +1,5 @@ +extern crate alloc; + pub mod message; pub use message::*; diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs index 3dee18c5..3036c19b 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/convert.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts XCM messages into InboundMessage that can be processed by the Gateway contract +extern crate alloc; use codec::DecodeAll; use core::slice::Iter; @@ -13,9 +14,10 @@ use crate::v2::{ }; use crate::v2::convert::XcmConverterError::{AssetResolutionFailed, FilterDoesNotConsumeAllAssets}; +use alloc::vec::Vec; +use core::{iter::Peekable, marker::PhantomData}; use sp_core::H160; use sp_runtime::traits::MaybeEquivalence; -use sp_std::{iter::Peekable, marker::PhantomData, prelude::*}; use xcm::prelude::*; use xcm_executor::traits::ConvertLocation; use XcmConverterError::*; diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs index 3c6ca5dd..861833ff 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/mod.rs @@ -1,6 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! Converts XCM messages into simpler commands that can be processed by the Gateway contract +extern crate alloc; #[cfg(test)] mod tests; @@ -9,7 +10,9 @@ pub mod convert; pub use convert::XcmConverter; use super::message::SendMessage; +use alloc::vec::Vec; use codec::{Decode, Encode}; +use core::{marker::PhantomData, ops::ControlFlow}; use frame_support::{ ensure, traits::{Contains, Get, ProcessMessageError}, @@ -17,7 +20,6 @@ use frame_support::{ use snowbridge_core::{ParaId, TokenId}; use sp_core::H256; use sp_runtime::traits::MaybeEquivalence; -use sp_std::{marker::PhantomData, ops::ControlFlow, prelude::*}; use xcm::prelude::*; use xcm_builder::{CreateMatcher, ExporterFor, MatchXcm}; use xcm_executor::traits::{ConvertLocation, ExportXcm}; diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs index aa0c48ee..5b231fb3 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/converter/tests.rs @@ -6,10 +6,10 @@ use crate::{ v2::{convert::XcmConverterError, Command, Message}, SendError, SendMessageFeeProvider, }; +use core::default::Default; use frame_support::{parameter_types, BoundedVec}; use hex_literal::hex; use snowbridge_core::{AgentIdOf, TokenIdOf}; -use sp_std::default::Default; use xcm::{latest::WESTEND_GENESIS_HASH, prelude::SendError as XcmSendError}; parameter_types! { diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs index 21b5f4d5..bb393b96 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/delivery_receipt.rs @@ -1,11 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +extern crate alloc; + use crate::Log; +use alloc::vec::Vec; use alloy_core::{primitives::B256, sol, sol_types::SolEvent}; use codec::Decode; use frame_support::pallet_prelude::{Encode, TypeInfo}; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::prelude::*; sol! { event InboundMessageDispatched(uint64 indexed nonce, bytes32 topic, bool success, bytes32 reward_address); diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs index 44c87c2b..529b26b8 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/exporter.rs @@ -1,8 +1,10 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +extern crate alloc; + +use alloc::vec::Vec; use core::marker::PhantomData; use snowbridge_core::operating_mode::ExportPausedQuery; -use sp_std::vec::Vec; use xcm::{ prelude::{Location, SendError, SendResult, SendXcm, Xcm, XcmHash}, VersionedLocation, VersionedXcm, diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs index 4d42e121..9d424e71 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/message.rs @@ -1,12 +1,13 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork //! # Outbound V2 primitives +extern crate alloc; +use alloc::vec::Vec; use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::{pallet_prelude::ConstU32, BoundedVec}; use scale_info::TypeInfo; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::vec::Vec; use crate::{OperatingMode, SendError}; use abi::{ @@ -121,7 +122,7 @@ pub struct OutboundMessage { pub const MAX_COMMANDS: u32 = 8; /// A message which can be accepted by implementations of `/[`SendMessage`\]` -#[derive(Encode, Decode, TypeInfo, PartialEq, Clone, RuntimeDebug)] +#[derive(Encode, Decode, TypeInfo, PartialEq, Clone, RuntimeDebug, DecodeWithMemTracking)] pub struct Message { /// Origin pub origin: H256, @@ -134,7 +135,7 @@ pub struct Message { } /// A command which is executable by the Gateway contract on Ethereum -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub enum Command { /// Upgrade the Gateway contract Upgrade { diff --git a/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs b/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs index 543cb65a..3aa4d4ea 100644 --- a/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs +++ b/operator/primitives/snowbridge/outbound-queue/src/v2/mod.rs @@ -1,5 +1,7 @@ // SPDX-License-Identifier: Apache-2.0 // SPDX-FileCopyrightText: 2023 Snowfork +extern crate alloc; + pub mod converter; pub mod delivery_receipt; pub mod exporter; @@ -9,10 +11,10 @@ pub use converter::*; pub use delivery_receipt::*; pub use message::*; +use alloc::vec::Vec; use codec::{Decode, Encode}; use scale_info::TypeInfo; use sp_runtime::RuntimeDebug; -use sp_std::prelude::*; /// The `XCM::Transact` payload for calling arbitrary smart contracts on Ethereum. /// On Ethereum, this call will be dispatched by the agent contract acting as a proxy diff --git a/operator/primitives/snowbridge/test-utils/Cargo.toml b/operator/primitives/snowbridge/test-utils/Cargo.toml index 9038fc70..6525434e 100644 --- a/operator/primitives/snowbridge/test-utils/Cargo.toml +++ b/operator/primitives/snowbridge/test-utils/Cargo.toml @@ -24,7 +24,6 @@ scale-info = { features = [ ], workspace = true, default-features = true } snowbridge-outbound-queue-primitives = { workspace = true, default-features = true } sp-core = { workspace = true, default-features = true } -sp-std = { workspace = true, default-features = true } xcm = { workspace = true, default-features = true } xcm-builder = { workspace = true, default-features = true } xcm-executor = { workspace = true, default-features = true } diff --git a/operator/primitives/snowbridge/test-utils/src/mock_origin.rs b/operator/primitives/snowbridge/test-utils/src/mock_origin.rs index efced79f..e2058549 100644 --- a/operator/primitives/snowbridge/test-utils/src/mock_origin.rs +++ b/operator/primitives/snowbridge/test-utils/src/mock_origin.rs @@ -20,7 +20,17 @@ pub mod pallet_xcm_origin { // Insert this custom Origin into the aggregate RuntimeOrigin #[pallet::origin] - #[derive(PartialEq, Eq, Clone, Encode, Decode, RuntimeDebug, TypeInfo, MaxEncodedLen)] + #[derive( + PartialEq, + Eq, + Clone, + Encode, + Decode, + RuntimeDebug, + TypeInfo, + DecodeWithMemTracking, + MaxEncodedLen, + )] pub struct Origin(pub Location); impl From for Origin { diff --git a/operator/primitives/snowbridge/verification/Cargo.toml b/operator/primitives/snowbridge/verification/Cargo.toml index 23fea6c6..b14e1125 100644 --- a/operator/primitives/snowbridge/verification/Cargo.toml +++ b/operator/primitives/snowbridge/verification/Cargo.toml @@ -17,7 +17,6 @@ frame-support = { workspace = true } scale-info = { features = ["derive"], workspace = true } snowbridge-beacon-primitives = { workspace = true } sp-core = { workspace = true } -sp-std = { workspace = true } [features] default = ["std"] @@ -27,5 +26,4 @@ std = [ "scale-info/std", "snowbridge-beacon-primitives/std", "sp-core/std", - "sp-std/std", ] diff --git a/operator/primitives/snowbridge/verification/src/lib.rs b/operator/primitives/snowbridge/verification/src/lib.rs index 2262cc57..ae2b9f8f 100644 --- a/operator/primitives/snowbridge/verification/src/lib.rs +++ b/operator/primitives/snowbridge/verification/src/lib.rs @@ -2,19 +2,21 @@ // SPDX-FileCopyrightText: 2023 Snowfork //! Types for representing inbound messages #![cfg_attr(not(feature = "std"), no_std)] -use codec::{Decode, Encode}; +extern crate alloc; + +use alloc::vec::Vec; +use codec::{Decode, DecodeWithMemTracking, Encode}; use frame_support::PalletError; use scale_info::TypeInfo; use snowbridge_beacon_primitives::{BeaconHeader, ExecutionProof}; use sp_core::{RuntimeDebug, H160, H256}; -use sp_std::prelude::*; /// A trait for verifying inbound messages from Ethereum. pub trait Verifier { fn verify(event: &Log, proof: &Proof) -> Result<(), VerificationError>; } -#[derive(Clone, Encode, Decode, RuntimeDebug, PalletError, TypeInfo)] +#[derive(Clone, Encode, Decode, RuntimeDebug, PalletError, TypeInfo, DecodeWithMemTracking)] #[cfg_attr(feature = "std", derive(PartialEq))] pub enum VerificationError { /// Execution header is missing @@ -30,7 +32,7 @@ pub enum VerificationError { } /// A bridge message from the Gateway contract on Ethereum -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct EventProof { /// Event log emitted by Gateway contract pub event_log: Log, @@ -46,7 +48,7 @@ pub enum LogValidationError { } /// Event log -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct Log { pub address: H160, pub topics: Vec, @@ -63,7 +65,7 @@ impl Log { } /// Inclusion proof for a transaction receipt -#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo)] +#[derive(Clone, Encode, Decode, PartialEq, RuntimeDebug, TypeInfo, DecodeWithMemTracking)] pub struct Proof { // Proof keys and values (receipts tree) pub receipt_proof: (Vec>, Vec>), diff --git a/operator/runtime/common/Cargo.toml b/operator/runtime/common/Cargo.toml index 6d071a57..16968280 100644 --- a/operator/runtime/common/Cargo.toml +++ b/operator/runtime/common/Cargo.toml @@ -32,7 +32,6 @@ snowbridge-outbound-queue-primitives = { workspace = true } sp-core = { workspace = true, features = ["serde"] } sp-io = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } -sp-std = { workspace = true } xcm = { workspace = true } [features] @@ -44,6 +43,7 @@ std = [ "log/std", "pallet-authorship/std", "pallet-balances/std", + "pallet-external-validator-slashes/std", "pallet-external-validators-rewards/std", "pallet-timestamp/std", "pallet-evm/std", @@ -61,7 +61,6 @@ std = [ "sp-core/std", "sp-io/std", "sp-runtime/std", - "sp-std/std", "xcm/std", ] diff --git a/operator/runtime/common/src/deal_with_fees.rs b/operator/runtime/common/src/deal_with_fees.rs index 4e9948e4..cda77e67 100644 --- a/operator/runtime/common/src/deal_with_fees.rs +++ b/operator/runtime/common/src/deal_with_fees.rs @@ -25,7 +25,7 @@ use sp_runtime::Perbill; /// Deal with substrate based fees and tip. This should be used with pallet_transaction_payment. pub struct DealWithSubstrateFeesAndTip( - sp_std::marker::PhantomData<(R, FeesTreasuryProportion)>, + core::marker::PhantomData<(R, FeesTreasuryProportion)>, ); impl DealWithSubstrateFeesAndTip where @@ -74,7 +74,7 @@ where /// Deal with ethereum based fees. To handle tips/priority fees, use DealWithEthereumPriorityFees. pub struct DealWithEthereumBaseFees( - sp_std::marker::PhantomData<(R, FeesTreasuryProportion)>, + core::marker::PhantomData<(R, FeesTreasuryProportion)>, ); impl OnUnbalanced>> for DealWithEthereumBaseFees @@ -93,7 +93,7 @@ where } } -pub struct BlockAuthorAccountId(sp_std::marker::PhantomData); +pub struct BlockAuthorAccountId(core::marker::PhantomData); impl TypedGet for BlockAuthorAccountId where R: frame_system::Config + pallet_authorship::Config, @@ -106,7 +106,7 @@ where } /// Deal with ethereum based priority fees/tips. See DealWithEthereumBaseFees for base fees. -pub struct DealWithEthereumPriorityFees(sp_std::marker::PhantomData); +pub struct DealWithEthereumPriorityFees(core::marker::PhantomData); impl OnUnbalanced>> for DealWithEthereumPriorityFees where diff --git a/operator/runtime/common/src/impl_on_charge_evm_transaction.rs b/operator/runtime/common/src/impl_on_charge_evm_transaction.rs index d2e6c41b..9977ff9b 100644 --- a/operator/runtime/common/src/impl_on_charge_evm_transaction.rs +++ b/operator/runtime/common/src/impl_on_charge_evm_transaction.rs @@ -18,7 +18,7 @@ macro_rules! impl_on_charge_evm_transaction { {} => { pub struct OnChargeEVMTransaction( - sp_std::marker::PhantomData<(BaseFeesOU, PriorityFeesOU)> + core::marker::PhantomData<(BaseFeesOU, PriorityFeesOU)> ); impl OnChargeEVMTransactionT diff --git a/operator/runtime/common/src/inflation.rs b/operator/runtime/common/src/inflation.rs index b18332bc..e7149a3d 100644 --- a/operator/runtime/common/src/inflation.rs +++ b/operator/runtime/common/src/inflation.rs @@ -59,7 +59,7 @@ pub struct ExternalRewardsEraInflationProvider< BlocksPerSession, MillisecsPerBlock, >( - sp_std::marker::PhantomData<( + core::marker::PhantomData<( AnnualAmount, SessionsPerEra, BlocksPerSession, @@ -155,7 +155,7 @@ where /// This struct provides a mint_inflation method that can be called from wrapper implementations /// in your runtime to avoid circular dependencies. pub struct ExternalRewardsInflationHandler( - sp_std::marker::PhantomData<(Balances, TreasuryProportion, TreasuryAccount)>, + core::marker::PhantomData<(Balances, TreasuryProportion, TreasuryAccount)>, ); impl diff --git a/operator/runtime/common/src/lib.rs b/operator/runtime/common/src/lib.rs index d13044cd..cb29f6c5 100644 --- a/operator/runtime/common/src/lib.rs +++ b/operator/runtime/common/src/lib.rs @@ -15,6 +15,7 @@ // along with Moonbeam. If not, see . #![cfg_attr(not(feature = "std"), no_std)] +extern crate alloc; pub mod constants; pub use constants::*; diff --git a/operator/runtime/common/src/rewards_adapter.rs b/operator/runtime/common/src/rewards_adapter.rs index 35c523cf..90e3793f 100644 --- a/operator/runtime/common/src/rewards_adapter.rs +++ b/operator/runtime/common/src/rewards_adapter.rs @@ -20,19 +20,19 @@ //! via Snowbridge. The adapter is configurable through the [`RewardsSubmissionConfig`] //! trait, allowing runtimes to provide environment-specific values. +use alloc::vec; +use alloc::vec::Vec; use alloy_core::{ primitives::{Address, Uint, U256}, sol, sol_types::SolCall, }; -use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; +use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; use snowbridge_outbound_queue_primitives::v2::{ Command, Message as OutboundMessage, SendMessage as SnowbridgeSendMessage, }; use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; -use sp_std::vec; -use sp_std::vec::Vec; /// Default description for rewards submissions. pub const REWARDS_DESCRIPTION: &str = "DataHaven validator rewards"; @@ -104,9 +104,6 @@ pub trait RewardsSubmissionConfig { Vec::new() } - /// Get the rewards duration in seconds (typically 86400 = 1 day). - fn rewards_duration() -> u32; - /// Get the wHAVE ERC20 token address on Ethereum. fn whave_token_address() -> H160; @@ -134,7 +131,7 @@ impl SendMessage for RewardsSubmissionAdapter { type Message = OutboundMessage; type Ticket = OutboundMessage; - fn build(rewards_utils: &EraRewardsUtils) -> Option { + fn build(rewards_utils: &RewardsPeriodUtils) -> Option { build_rewards_message::(rewards_utils) } @@ -151,7 +148,7 @@ impl SendMessage for RewardsSubmissionAdapter { /// /// Returns `None` if validation fails or no rewards to distribute. fn build_rewards_message( - rewards_utils: &EraRewardsUtils, + rewards_utils: &RewardsPeriodUtils, ) -> Option { let service_manager = C::service_manager_address(); let whave_token_address = C::whave_token_address(); @@ -189,12 +186,12 @@ fn build_rewards_message( strategies_and_multipliers.sort_by_key(|(strategy, _)| *strategy); let calldata = encode_rewards_calldata( - rewards_utils.era_index, + rewards_utils.period_index, whave_token_address, &strategies_and_multipliers, &operator_rewards, - rewards_utils.era_start_timestamp, - C::rewards_duration(), + rewards_utils.period_start, + rewards_utils.duration, REWARDS_DESCRIPTION, ) .map_err(|e| log::warn!(target: LOG_TARGET, "Skipping: {:?}", e)) @@ -211,7 +208,7 @@ fn build_rewards_message( Some(OutboundMessage { origin: C::rewards_agent_origin(), - id: H256::from_low_u64_be(rewards_utils.era_index as u64).into(), + id: H256::from_low_u64_be(rewards_utils.period_index as u64).into(), fee: 0, commands, }) @@ -360,6 +357,7 @@ mod tests { /// Test era start timestamp used consistently across test cases. const TEST_ERA_START_TIMESTAMP: u32 = 1_700_000_000; + const TEST_REWARDS_DURATION: u32 = 86_400; struct HappyPathConfig; @@ -370,10 +368,6 @@ mod tests { vec![(H160::from_low_u64_be(0x9999), 1u128)] } - fn rewards_duration() -> u32 { - 86_400 - } - fn whave_token_address() -> H160 { H160::from_low_u64_be(0x1234) } @@ -396,10 +390,6 @@ mod tests { impl RewardsSubmissionConfig for ZeroServiceManagerConfig { type OutboundQueue = TestOutboundQueue; - fn rewards_duration() -> u32 { - HappyPathConfig::rewards_duration() - } - fn whave_token_address() -> H160 { HappyPathConfig::whave_token_address() } @@ -422,10 +412,6 @@ mod tests { impl RewardsSubmissionConfig for ZeroTokenConfig { type OutboundQueue = TestOutboundQueue; - fn rewards_duration() -> u32 { - HappyPathConfig::rewards_duration() - } - fn whave_token_address() -> H160 { H160::zero() } @@ -453,10 +439,6 @@ mod tests { vec![(H160::from_low_u64_be(0x9999), MAX_UINT96 + 1)] } - fn rewards_duration() -> u32 { - HappyPathConfig::rewards_duration() - } - fn whave_token_address() -> H160 { HappyPathConfig::whave_token_address() } @@ -757,9 +739,10 @@ mod tests { #[test] fn test_build_rewards_message_happy_path() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 100u128, individual_points: vec![ (H160::from_low_u64_be(2), 40), @@ -774,7 +757,7 @@ mod tests { assert_eq!(message.origin, HappyPathConfig::rewards_agent_origin()); assert_eq!( message.id, - H256::from_low_u64_be(rewards_utils.era_index as u64) + H256::from_low_u64_be(rewards_utils.period_index as u64) ); assert_eq!(message.fee, 0); assert_eq!(message.commands.len(), 1); @@ -788,12 +771,12 @@ mod tests { .0; let expected_calldata = encode_rewards_calldata( - rewards_utils.era_index, + rewards_utils.period_index, HappyPathConfig::whave_token_address(), &HappyPathConfig::strategies_and_multipliers(), &expected_operator_rewards, - rewards_utils.era_start_timestamp, - HappyPathConfig::rewards_duration(), + rewards_utils.period_start, + rewards_utils.duration, REWARDS_DESCRIPTION, ) .expect("Calldata should encode"); @@ -816,9 +799,10 @@ mod tests { #[test] fn test_build_rewards_message_happy_path_with_remainder() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 3u128, individual_points: vec![(H160::from_low_u64_be(1), 1), (H160::from_low_u64_be(2), 2)], inflation_amount: 100u128, @@ -837,12 +821,12 @@ mod tests { .expect("Expected message to be built"); let expected_calldata = encode_rewards_calldata( - rewards_utils.era_index, + rewards_utils.period_index, HappyPathConfig::whave_token_address(), &HappyPathConfig::strategies_and_multipliers(), &operator_rewards, - rewards_utils.era_start_timestamp, - HappyPathConfig::rewards_duration(), + rewards_utils.period_start, + rewards_utils.duration, REWARDS_DESCRIPTION, ) .expect("Calldata should encode"); @@ -855,9 +839,10 @@ mod tests { #[test] fn test_build_rewards_message_skips_on_zero_addresses() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 1u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 100u128, @@ -870,9 +855,10 @@ mod tests { #[test] fn test_build_rewards_message_skips_when_no_operator_rewards() { // total_points is much larger than points * inflation, so all amounts truncate to zero. - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 1000u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 1u128, @@ -884,9 +870,10 @@ mod tests { #[test] fn test_build_rewards_message_skips_on_points_to_rewards_error_division_by_zero() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 0u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 100u128, @@ -898,9 +885,10 @@ mod tests { #[test] fn test_build_rewards_message_skips_on_points_to_rewards_error_multiplication_overflow() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 1u128, individual_points: vec![(H160::from_low_u64_be(1), u32::MAX)], inflation_amount: u128::MAX, @@ -912,9 +900,10 @@ mod tests { #[test] fn test_build_rewards_message_skips_on_invalid_multiplier() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 1u128, individual_points: vec![(H160::from_low_u64_be(1), 1)], inflation_amount: 100u128, @@ -926,9 +915,10 @@ mod tests { #[test] fn test_rewards_submission_adapter_validate_and_deliver() { - let rewards_utils = EraRewardsUtils { - era_index: 7, - era_start_timestamp: TEST_ERA_START_TIMESTAMP, + let rewards_utils = RewardsPeriodUtils { + period_index: 7, + period_start: TEST_ERA_START_TIMESTAMP, + duration: TEST_REWARDS_DURATION, total_points: 100u128, individual_points: vec![ (H160::from_low_u64_be(2), 40), diff --git a/operator/runtime/common/src/safe_mode.rs b/operator/runtime/common/src/safe_mode.rs index 8849e80f..8c3b2de3 100644 --- a/operator/runtime/common/src/safe_mode.rs +++ b/operator/runtime/common/src/safe_mode.rs @@ -18,10 +18,10 @@ use crate::time::DAYS; use crate::Balance; +use core::marker::PhantomData; use frame_support::{parameter_types, traits::Contains}; use pallet_tx_pause::RuntimeCallNameOf; use polkadot_primitives::BlockNumber; -use sp_std::marker::PhantomData; // Safe Mode Constants parameter_types! { diff --git a/operator/runtime/common/src/slashes_adapter.rs b/operator/runtime/common/src/slashes_adapter.rs index 74fa5c58..66fc307c 100644 --- a/operator/runtime/common/src/slashes_adapter.rs +++ b/operator/runtime/common/src/slashes_adapter.rs @@ -1,3 +1,5 @@ +use alloc::vec; +use alloc::vec::Vec; use alloy_core::{ primitives::{Address, U256}, sol, @@ -8,8 +10,6 @@ use snowbridge_outbound_queue_primitives::v2::SendMessage; use snowbridge_outbound_queue_primitives::v2::{Command, Message as OutboundMessage}; use snowbridge_outbound_queue_primitives::SendError; use sp_core::{H160, H256}; -use sp_std::vec; -use sp_std::vec::Vec; use crate::AccountId; diff --git a/operator/runtime/mainnet/Cargo.toml b/operator/runtime/mainnet/Cargo.toml index 186bc7b9..a4cadb47 100644 --- a/operator/runtime/mainnet/Cargo.toml +++ b/operator/runtime/mainnet/Cargo.toml @@ -18,10 +18,11 @@ bridge-hub-common = { workspace = true, optional = true } codec = { workspace = true, features = ["derive"] } datahaven-runtime-common = { workspace = true } dhp-bridge = { workspace = true } +ethereum = { workspace = true } fp-account = { workspace = true, features = ["serde"] } fp-evm = { workspace = true, features = ["serde"] } fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = ["serde", "try-runtime"] } +fp-self-contained = { workspace = true, features = ["serde"] } frame-benchmarking = { workspace = true, optional = true } frame-executive = { workspace = true } frame-metadata-hash-extension = { workspace = true } @@ -120,7 +121,6 @@ sp-offchain = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } sp-session = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-storage = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true, features = ["serde"] } @@ -190,6 +190,7 @@ default = ["std"] std = [ "codec/std", "datahaven-runtime-common/std", + "ethereum/std", "fp-account/std", "fp-evm/std", "frame-benchmarking?/std", @@ -282,7 +283,6 @@ std = [ "sp-runtime/std", "sp-session/std", "sp-staking/std", - "sp-std/std", "sp-storage/std", "sp-transaction-pool/std", "sp-version/std", diff --git a/operator/runtime/mainnet/src/benchmarks.rs b/operator/runtime/mainnet/src/benchmarks.rs index 01d8bf96..f807eabe 100644 --- a/operator/runtime/mainnet/src/benchmarks.rs +++ b/operator/runtime/mainnet/src/benchmarks.rs @@ -28,8 +28,7 @@ frame_benchmarking::define_benchmarks!( // Substrate pallets [pallet_balances, Balances] [pallet_session, pallet_session_benchmarking::Pallet::] - // FIXME: benchmarking identity fail - // [pallet_identity, Identity] + [pallet_identity, Identity] [pallet_im_online, ImOnline] [pallet_multisig, Multisig] [pallet_preimage, Preimage] diff --git a/operator/runtime/mainnet/src/configs/governance/origins.rs b/operator/runtime/mainnet/src/configs/governance/origins.rs index 277e35a1..b11603c2 100644 --- a/operator/runtime/mainnet/src/configs/governance/origins.rs +++ b/operator/runtime/mainnet/src/configs/governance/origins.rs @@ -34,7 +34,16 @@ pub mod custom_origins { pub struct Pallet(_); #[derive( - PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug, EnumString, + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + TypeInfo, + RuntimeDebug, + EnumString, + DecodeWithMemTracking, )] #[strum(serialize_all = "snake_case")] #[pallet::origin] diff --git a/operator/runtime/mainnet/src/configs/governance/referenda.rs b/operator/runtime/mainnet/src/configs/governance/referenda.rs index b4ceff70..dfc8c841 100644 --- a/operator/runtime/mainnet/src/configs/governance/referenda.rs +++ b/operator/runtime/mainnet/src/configs/governance/referenda.rs @@ -57,6 +57,8 @@ impl pallet_conviction_voting::Config for Runtime { type MaxVotes = ConstU32<20>; type MaxTurnout = frame_support::traits::TotalIssuanceOf; type Polls = Referenda; + type BlockNumberProvider = System; + type VotingHooks = (); } impl pallet_whitelist::Config for Runtime { @@ -79,8 +81,6 @@ impl pallet_whitelist::Config for Runtime { type WeightInfo = mainnet_weights::pallet_whitelist::WeightInfo; } -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); - // Referenda Implementation impl pallet_referenda::Config for Runtime { type WeightInfo = mainnet_weights::pallet_referenda::WeightInfo; @@ -100,4 +100,5 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = AlarmInterval; type Tracks = TracksInfo; type Preimages = Preimage; + type BlockNumberProvider = System; } diff --git a/operator/runtime/mainnet/src/configs/governance/tracks.rs b/operator/runtime/mainnet/src/configs/governance/tracks.rs index 74199f9d..7c1937ca 100644 --- a/operator/runtime/mainnet/src/configs/governance/tracks.rs +++ b/operator/runtime/mainnet/src/configs/governance/tracks.rs @@ -21,9 +21,13 @@ use super::*; use crate::currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}; +use alloc::borrow::Cow; +use core::str::from_utf8; +use core::str::FromStr; use datahaven_runtime_common::time::*; use pallet_referenda::Curve; -use sp_std::str::FromStr; +use pallet_referenda::Track; +use sp_runtime::str_array; const fn percent(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 100) @@ -32,12 +36,12 @@ const fn permill(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 1000) } -const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] = [ - ( - 0, - pallet_referenda::TrackInfo { +const TRACKS_DATA: [Track; 6] = [ + Track { + id: 0, + info: pallet_referenda::TrackInfo { // Name of this track. - name: "root", + name: str_array("root"), // A limit for the number of referenda on this track that can be being decided at once. // For Root origin this should generally be just one. max_deciding: 5, @@ -58,11 +62,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] // is needed for approval as a function of time into decision period. min_support: Curve::make_linear(14, 14, permill(5), percent(25)), }, - ), - ( - 1, - pallet_referenda::TrackInfo { - name: "whitelisted_caller", + }, + Track { + id: 1, + info: pallet_referenda::TrackInfo { + name: str_array("whitelisted_caller"), max_deciding: 100, decision_deposit: 2 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 10 * MINUTES, @@ -72,11 +76,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)), }, - ), - ( - 2, - pallet_referenda::TrackInfo { - name: "general_admin", + }, + Track { + id: 2, + info: pallet_referenda::TrackInfo { + name: str_array("general_admin"), max_deciding: 10, decision_deposit: 100 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -86,11 +90,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)), }, - ), - ( - 3, - pallet_referenda::TrackInfo { - name: "referendum_canceller", + }, + Track { + id: 3, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_canceller"), max_deciding: 20, decision_deposit: 2 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -100,11 +104,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 4, - pallet_referenda::TrackInfo { - name: "referendum_killer", + }, + Track { + id: 4, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_killer"), max_deciding: 100, decision_deposit: 4 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -114,11 +118,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 5, - pallet_referenda::TrackInfo { - name: "fast_general_admin", + }, + Track { + id: 5, + info: pallet_referenda::TrackInfo { + name: str_array("fast_general_admin"), max_deciding: 10, decision_deposit: 100 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -128,25 +132,26 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(5, 14, percent(1), percent(0), percent(50)), }, - ), + }, ]; pub struct TracksInfo; impl pallet_referenda::TracksInfo for TracksInfo { type Id = u16; type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - &TRACKS_DATA[..] + + fn tracks() -> impl Iterator>> { + TRACKS_DATA.iter().map(Cow::Borrowed) } fn track_for(id: &Self::RuntimeOrigin) -> Result { if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) { match system_origin { frame_system::RawOrigin::Root => { - if let Some((track_id, _)) = Self::tracks() + if let Some(track) = Self::tracks() .into_iter() - .find(|(_, track)| track.name == "root") + .find(|track| track.info.name == str_array("root")) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -154,14 +159,18 @@ impl pallet_referenda::TracksInfo for TracksInfo { _ => Err(()), } } else if let Ok(custom_origin) = custom_origins::Origin::try_from(id.clone()) { - if let Some((track_id, _)) = Self::tracks().into_iter().find(|(_, track)| { - if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track.name) { + if let Some(track) = Self::tracks().into_iter().find(|track| { + let Ok(track_name) = from_utf8(&track.info.name) else { + return false; + }; + let track_name = track_name.trim_end_matches('\0'); + if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track_name) { track_custom_origin == custom_origin } else { false } }) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -174,13 +183,15 @@ impl pallet_referenda::TracksInfo for TracksInfo { #[test] /// To ensure voters are always locked into their vote fn vote_locking_always_longer_than_enactment_period() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); assert!( ::VoteLockingPeriod::get() - >= track.min_enactment_period, + >= track.info.min_enactment_period, "Track {} has enactment period {} < vote locking period {}", - track.name, - track.min_enactment_period, + track_name, + track.info.min_enactment_period, ::VoteLockingPeriod::get(), ); } @@ -188,10 +199,12 @@ fn vote_locking_always_longer_than_enactment_period() { #[test] fn all_tracks_have_origins() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); // check name.into() is successful either converts into "root" or custom origin - let track_is_root = track.name == "root"; - let track_has_custom_origin = custom_origins::Origin::from_str(track.name).is_ok(); + let track_is_root = track_name == "root"; + let track_has_custom_origin = custom_origins::Origin::from_str(track_name).is_ok(); assert!(track_is_root || track_has_custom_origin); } } diff --git a/operator/runtime/mainnet/src/configs/mod.rs b/operator/runtime/mainnet/src/configs/mod.rs index 48f1aad9..22f830ad 100644 --- a/operator/runtime/mainnet/src/configs/mod.rs +++ b/operator/runtime/mainnet/src/configs/mod.rs @@ -30,8 +30,9 @@ use super::{ Signature, System, Timestamp, Treasury, TxPause, BLOCK_HASH_COUNT, EXTRINSIC_BASE_WEIGHT, MAXIMUM_BLOCK_WEIGHT, NORMAL_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, VERSION, }; +use alloc::vec::Vec; use alloy_core::primitives::Address; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; @@ -48,6 +49,7 @@ use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; Decode, RuntimeDebug, MaxEncodedLen, + DecodeWithMemTracking, TypeInfo, serde::Serialize, serde::Deserialize, @@ -76,6 +78,7 @@ impl Default for ProxyType { Self::Any } } +use core::convert::{From, Into}; use datahaven_runtime_common::{ deal_with_fees::{ DealWithEthereumBaseFees, DealWithEthereumPriorityFees, DealWithSubstrateFeesAndTip, @@ -141,10 +144,6 @@ use sp_runtime::{ FixedPointNumber, Perbill, Perquintill, }; use sp_staking::EraIndex; -use sp_std::{ - convert::{From, Into}, - prelude::*, -}; use sp_version::RuntimeVersion; use xcm::latest::NetworkId; use xcm::prelude::*; @@ -396,6 +395,7 @@ impl pallet_session::Config for Runtime { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = mainnet_weights::pallet_session::WeightInfo; + type DisablingStrategy = (); } parameter_types! { @@ -593,6 +593,7 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; type WeightInfo = mainnet_weights::pallet_scheduler::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -656,8 +657,7 @@ impl pallet_identity::Config for Runtime { type UsernameDeposit = UsernameDeposit; type UsernameGracePeriod = UsernameGracePeriod; - // TODO: Re-enable after upgrade to Polkadot SDK stable2412-8 - // see https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-8 + // TODO: Replace by Identity pallet's BenchmarkHelper when available (stable2506). // #[cfg(feature = "runtime-benchmarks")] // fn benchmark_helper(message: &[u8]) -> (Vec, Vec) { // let public = sp_io::crypto::ecdsa_generate(0.into(), None); @@ -687,6 +687,7 @@ impl pallet_multisig::Config for Runtime { type DepositFactor = DepositFactor; type MaxSignatories = MaxSignatories; type WeightInfo = mainnet_weights::pallet_multisig::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -852,6 +853,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = sp_runtime::traits::BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl pallet_proxy_genesis_companion::Config for Runtime { @@ -1053,6 +1055,8 @@ impl pallet_evm::Config for Runtime { type GasLimitPovSizeRatio = GasLimitPovSizeRatio; type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; type Timestamp = Timestamp; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WeightInfo = mainnet_weights::pallet_evm::WeightInfo; } @@ -1505,10 +1509,6 @@ pub struct MainnetRewardsConfig; impl datahaven_runtime_common::rewards_adapter::RewardsSubmissionConfig for MainnetRewardsConfig { type OutboundQueue = EthereumOutboundQueueV2; - fn rewards_duration() -> u32 { - runtime_params::dynamic_params::runtime_config::RewardsDuration::get() - } - fn whave_token_address() -> H160 { runtime_params::dynamic_params::runtime_config::WHAVETokenAddress::get() } @@ -1573,6 +1573,10 @@ parameter_types! { /// Maximum inflation percentage (caps at 100% even if blocks exceed expectations) pub const MaxInflationPercent: u32 = 100; + + /// EigenLayer RewardsCoordinator GENESIS_REWARDS_TIMESTAMP. + /// This is the immutable genesis timestamp from the deployed RewardsCoordinator contract. + pub const RewardsWindowGenesisTimestamp: u32 = 1_712_188_800; } impl pallet_external_validators_rewards::Config for Runtime { @@ -1596,6 +1600,9 @@ impl pallet_external_validators_rewards::Config for Runtime { type Hashing = Keccak256; type Currency = Balances; type RewardsEthereumSovereignAccount = ExternalValidatorRewardsAccount; + type RewardsWindowGenesisTimestamp = RewardsWindowGenesisTimestamp; + type RewardsWindowDuration = runtime_params::dynamic_params::runtime_config::RewardsDuration; + type UnixTime = Timestamp; type SendMessage = RewardsSendAdapter; type HandleInflation = ExternalRewardsInflationHandler; type GovernanceOrigin = @@ -1731,6 +1738,7 @@ impl pallet_external_validator_slashes::Config for Runtime { type QueuedSlashesProcessedPerBlock = ConstU32<10>; type WeightInfo = mainnet_weights::pallet_external_validator_slashes::WeightInfo; type SendMessage = SlashesSendAdapter; + type GovernanceOrigin = EnsureRootWithSuccess; } parameter_types! { @@ -1772,13 +1780,14 @@ mod tests { #[test] fn test_rewards_send_adapter_with_zero_address() { - use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; + use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; TestExternalities::default().execute_with(|| { // Create test rewards utils with V2 fields - let rewards_utils = EraRewardsUtils { - era_index: 1, - era_start_timestamp: 1_700_000_000, + let rewards_utils = RewardsPeriodUtils { + period_index: 1, + period_start: 1_700_000_000, + duration: runtime_params::dynamic_params::runtime_config::RewardsDuration::get(), total_points: 1000, individual_points: vec![ (H160::from_low_u64_be(1), 500), @@ -1799,7 +1808,7 @@ mod tests { #[test] fn test_rewards_send_adapter_with_valid_config() { - use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; + use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; TestExternalities::default().execute_with(|| { // Set valid V2 configuration @@ -1835,9 +1844,10 @@ mod tests { // Create test rewards utils with V2 fields let op1 = H160::from_low_u64_be(1); let op2 = H160::from_low_u64_be(2); - let rewards_utils = EraRewardsUtils { - era_index: 1, - era_start_timestamp: 1_700_000_000, + let rewards_utils = RewardsPeriodUtils { + period_index: 1, + period_start: 1_700_000_000, + duration: runtime_params::dynamic_params::runtime_config::RewardsDuration::get(), total_points: 1000, individual_points: vec![(op1, 600), (op2, 400)], inflation_amount: 1_000_000_000, // 1 billion smallest units diff --git a/operator/runtime/mainnet/src/configs/runtime_params.rs b/operator/runtime/mainnet/src/configs/runtime_params.rs index 9d3cdeb3..86dd0a85 100644 --- a/operator/runtime/mainnet/src/configs/runtime_params.rs +++ b/operator/runtime/mainnet/src/configs/runtime_params.rs @@ -15,11 +15,11 @@ // along with DataHaven. If not, see . use crate::Runtime; +use alloc::vec; use frame_support::dynamic_params::{dynamic_pallet_params, dynamic_params}; use hex_literal::hex; use sp_core::{ConstU32, H160, H256}; use sp_runtime::{BoundedVec, Perbill}; -use sp_std::vec; use crate::configs::storagehub::{ChallengeTicksTolerance, ReplicationTargetType, SpMinDeposit}; use crate::currency::{GIGAWEI, HAVE, SUPPLY_FACTOR}; @@ -397,17 +397,12 @@ pub mod dynamic_params { /// Used in the OperatorDirectedRewardsSubmission struct. pub static WHAVETokenAddress: H160 = H160::repeat_byte(0x0); - #[codec(index = 43)] - #[allow(non_upper_case_globals)] - /// EigenLayer-aligned genesis timestamp for rewards calculation. - /// Must be divisible by 86400 (seconds per day) as per EigenLayer requirements. - /// Default: 0 (must be set via governance to actual deployment timestamp). - pub static RewardsGenesisTimestamp: u32 = 0; - #[codec(index = 44)] #[allow(non_upper_case_globals)] - /// Rewards duration in seconds. Fixed at 86400 (1 day) for EigenLayer. - pub static RewardsDuration: u32 = 86400; + /// Rewards duration in seconds. + /// Must be a positive multiple of EigenLayer interval (86400 = 1 day) + /// and must not exceed EigenLayer max rewards duration. + pub static RewardsDuration: u32 = 604800; #[codec(index = 45)] #[allow(non_upper_case_globals)] diff --git a/operator/runtime/mainnet/src/configs/storagehub/client.rs b/operator/runtime/mainnet/src/configs/storagehub/client.rs index 110bec9d..1e0bf339 100644 --- a/operator/runtime/mainnet/src/configs/storagehub/client.rs +++ b/operator/runtime/mainnet/src/configs/storagehub/client.rs @@ -50,6 +50,7 @@ impl ExtensionOperations for crate::SignedEx minimal.tip, ), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ) } } diff --git a/operator/runtime/mainnet/src/configs/storagehub/mod.rs b/operator/runtime/mainnet/src/configs/storagehub/mod.rs index 79a71b14..49b6bad6 100644 --- a/operator/runtime/mainnet/src/configs/storagehub/mod.rs +++ b/operator/runtime/mainnet/src/configs/storagehub/mod.rs @@ -19,7 +19,7 @@ use super::HAVE; #[cfg(feature = "runtime-benchmarks")] use super::MICROHAVE; use super::{ - AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, + AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, System, TreasuryAccount, }; use crate::configs::runtime_params::dynamic_params::runtime_config; @@ -27,7 +27,10 @@ use crate::{ BucketNfts, Nfts, PaymentStreams, ProofsDealer, Providers, Runtime, Signature, WeightToFee, HOURS, }; +use alloc::{vec, vec::Vec}; +use core::convert::{From, Into}; use core::marker::PhantomData; + #[cfg(feature = "runtime-benchmarks")] use datahaven_runtime_common::benchmarking::StorageHubBenchmarking; use datahaven_runtime_common::time::{DAYS, MINUTES}; @@ -59,8 +62,6 @@ use sp_runtime::traits::Verify; use sp_runtime::traits::Zero; use sp_runtime::SaturatedConversion; use sp_runtime::{traits::BlakeTwo256, Perbill}; -use sp_std::convert::{From, Into}; -use sp_std::{vec, vec::Vec}; use sp_trie::{LayoutV1, TrieConfiguration, TrieLayout}; #[cfg(feature = "std")] @@ -126,6 +127,7 @@ impl pallet_nfts::Config for Runtime { type OffchainPublic = ::Signer; type WeightInfo = crate::weights::pallet_nfts::WeightInfo; type Locker = (); + type BlockNumberProvider = System; #[cfg(feature = "runtime-benchmarks")] type Helper = benchmark_helpers::NftHelper; } @@ -626,16 +628,16 @@ parameter_types! { /// "\x19Ethereum Signed Message:\n" + len(message) + message" pub struct Eip191Adapter; impl shp_traits::MessageAdapter for Eip191Adapter { - fn bytes_to_verify(message: &[u8]) -> Vec { + fn bytes_to_verify(intention: &[u8], _context: &[u8]) -> Vec { const PREFIX: &str = "\x19Ethereum Signed Message:\n"; - let len = message.len(); + let len = intention.len(); let mut len_string_buffer = itoa::Buffer::new(); let len_string = len_string_buffer.format(len); let mut eth_message = Vec::with_capacity(PREFIX.len() + len_string.len() + len); eth_message.extend_from_slice(PREFIX.as_bytes()); eth_message.extend_from_slice(len_string.as_bytes()); - eth_message.extend_from_slice(message); + eth_message.extend_from_slice(intention); eth_message } } @@ -699,6 +701,8 @@ impl pallet_file_system::Config for Runtime { type OffchainPublicKey = ::Signer; type MaxFileDeletionsPerExtrinsic = ConstU32<100>; type IntentionMsgAdapter = Eip191Adapter; + type MaxBspVolunteers = ConstU32<1000>; + type MaxMspRespondFileKeys = ConstU32<10>; } impl MostlyStablePriceIndexUpdaterConfig for Runtime { diff --git a/operator/runtime/mainnet/src/genesis_config_presets.rs b/operator/runtime/mainnet/src/genesis_config_presets.rs index 321df0a1..5eb01dc3 100644 --- a/operator/runtime/mainnet/src/genesis_config_presets.rs +++ b/operator/runtime/mainnet/src/genesis_config_presets.rs @@ -56,6 +56,7 @@ fn testnet_genesis( .cloned() .map(|k| (k, 1u128 << 110)) .collect::>(), + dev_accounts: Default::default(), }, babe: pallet_babe::GenesisConfig { epoch_config: BABE_GENESIS_EPOCH_CONFIG, diff --git a/operator/runtime/mainnet/src/lib.rs b/operator/runtime/mainnet/src/lib.rs index f295318a..85527ea2 100644 --- a/operator/runtime/mainnet/src/lib.rs +++ b/operator/runtime/mainnet/src/lib.rs @@ -31,14 +31,18 @@ pub mod weights; pub use configs::governance; pub use configs::Precompiles; -// TODO: Temporary workaround before upgrading to latest polkadot-sdk - fix https://github.com/paritytech/polkadot-sdk/pull/6435 +// Aliases required by define_benchmarks! for pallet_collective instances. +// PR #6435 (in stable2503) fixes the underlying issue, so these can be removed +// when benchmarks are regenerated and weight files renamed accordingly. #[allow(unused_imports)] use pallet_collective as pallet_collective_treasury_council; #[allow(unused_imports)] use pallet_collective as pallet_collective_technical_committee; +use alloc::collections::btree_map::BTreeMap; use alloc::{borrow::Cow, vec::Vec}; use codec::Encode; +use ethereum::AuthorizationList; use fp_rpc::TransactionStatus; use frame_support::{ genesis_builder_helper::{build_state, get_preset}, @@ -54,7 +58,7 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_file_system::types::StorageRequestMetadata; +use pallet_file_system::types::{PendingStopStoringRequest, StorageRequestMetadata}; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_payment_streams_runtime_api::*; @@ -85,7 +89,6 @@ use sp_runtime::{ transaction_validity::{InvalidTransaction, TransactionSource}, ApplyExtrinsicResult, Perbill, Permill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; @@ -142,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 1400, + spec_version: 1500, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -193,16 +196,10 @@ pub const NORMAL_BLOCK_WEIGHT: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(3).s pub const EXTRINSIC_BASE_WEIGHT: Weight = Weight::from_parts(10000 * WEIGHT_PER_GAS, 0); // Existential deposit. -#[cfg(not(feature = "runtime-benchmarks"))] +// PR #7379 (included in stable2503) ensures benchmarks handle ED=0 internally. parameter_types! { pub const ExistentialDeposit: Balance = 0; } -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - // TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503 - // cfr. https://github.com/paritytech/polkadot-sdk/pull/7379 - pub const ExistentialDeposit: Balance = 1; -} /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -227,6 +224,7 @@ pub type SignedExtra = ( frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, frame_metadata_hash_extension::CheckMetadataHash, + frame_system::WeightReclaim, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1073,6 +1071,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1102,6 +1101,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1120,6 +1120,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1153,6 +1154,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1232,7 +1234,7 @@ impl_runtime_apis! { //║ STORAGEHUB APIS ║ //╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ - impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256> for Runtime { + impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256, PendingStopStoringRequest> for Runtime { fn is_storage_request_open_to_volunteers(file_key: H256) -> Result { FileSystem::is_storage_request_open_to_volunteers(file_key) } @@ -1279,6 +1281,15 @@ impl_runtime_apis! { fn get_max_batch_confirm_storage_requests() -> BlockNumber { FileSystem::get_max_batch_confirm_storage_requests() } + fn query_min_wait_for_stop_storing() -> BlockNumber { + FileSystem::query_min_wait_for_stop_storing() + } + fn has_pending_stop_storing_request(bsp_id: BackupStorageProviderId, file_key: H256) -> bool { + FileSystem::has_pending_stop_storing_request(bsp_id, file_key) + } + fn pending_stop_storing_requests_by_bsp(bsp_id: BackupStorageProviderId) -> BTreeMap> { + FileSystem::pending_stop_storing_requests_by_bsp(bsp_id) + } } impl pallet_payment_streams_runtime_api::PaymentStreamsApi, Balance, AccountId> for Runtime { @@ -1414,7 +1425,7 @@ impl_runtime_apis! { fn compute_signed_extra_implicit( era: sp_runtime::generic::Era, enable_metadata: bool, - ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { + ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { // Build the SignedExtra tuple with minimal values; only `era` and `enable_metadata` // influence the implicit. Other extensions have `()` implicit. let extra: SignedExtra = ( @@ -1427,6 +1438,7 @@ impl_runtime_apis! { frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(::default()), frame_metadata_hash_extension::CheckMetadataHash::::new(enable_metadata), + frame_system::WeightReclaim::::new(), ); let implicit = >::implicit(&extra)?; Ok(implicit.encode()) diff --git a/operator/runtime/mainnet/src/weights/frame_system.rs b/operator/runtime/mainnet/src/weights/frame_system.rs index 56f672bb..e9677397 100644 --- a/operator/runtime/mainnet/src/weights/frame_system.rs +++ b/operator/runtime/mainnet/src/weights/frame_system.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `frame_system`. pub struct WeightInfo(PhantomData); @@ -60,20 +60,20 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_099_000 picoseconds. - Weight::from_parts(12_332_577, 0) - // Standard Error: 2 - .saturating_add(Weight::from_parts(397, 0).saturating_mul(b.into())) + // Minimum execution time: 3_240_000 picoseconds. + Weight::from_parts(21_637_695, 0) + // Standard Error: 3 + .saturating_add(Weight::from_parts(457, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_188_000 picoseconds. - Weight::from_parts(8_284_000, 0) + // Minimum execution time: 8_157_000 picoseconds. + Weight::from_parts(8_278_000, 0) // Standard Error: 4 - .saturating_add(Weight::from_parts(1_846, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(1_923, 0).saturating_mul(b.into())) } /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) @@ -81,8 +81,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_100_000 picoseconds. - Weight::from_parts(5_300_000, 0) + // Minimum execution time: 5_023_000 picoseconds. + Weight::from_parts(5_286_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `MultiBlockMigrations::Cursor` (r:1 w:0) @@ -93,8 +93,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `142` // Estimated: `67035` - // Minimum execution time: 136_549_639_000 picoseconds. - Weight::from_parts(139_536_981_000, 67035) + // Minimum execution time: 138_834_915_000 picoseconds. + Weight::from_parts(141_652_986_000, 67035) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -105,10 +105,10 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_106_000 picoseconds. - Weight::from_parts(3_226_000, 0) - // Standard Error: 2_936 - .saturating_add(Weight::from_parts(970_297, 0).saturating_mul(i.into())) + // Minimum execution time: 3_087_000 picoseconds. + Weight::from_parts(3_185_000, 0) + // Standard Error: 2_893 + .saturating_add(Weight::from_parts(972_336, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -118,10 +118,10 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_218_000 picoseconds. - Weight::from_parts(3_304_000, 0) - // Standard Error: 1_209 - .saturating_add(Weight::from_parts(682_410, 0).saturating_mul(i.into())) + // Minimum execution time: 3_163_000 picoseconds. + Weight::from_parts(3_257_000, 0) + // Standard Error: 1_077 + .saturating_add(Weight::from_parts(683_486, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -130,11 +130,11 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `131 + p * (69 ±0)` - // Estimated: `119 + p * (70 ±0)` - // Minimum execution time: 5_989_000 picoseconds. - Weight::from_parts(6_124_000, 119) - // Standard Error: 1_887 - .saturating_add(Weight::from_parts(1_407_947, 0).saturating_mul(p.into())) + // Estimated: `118 + p * (70 ±0)` + // Minimum execution time: 5_960_000 picoseconds. + Weight::from_parts(6_030_000, 118) + // Standard Error: 2_730 + .saturating_add(Weight::from_parts(1_430_236, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) @@ -145,8 +145,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 13_466_000 picoseconds. - Weight::from_parts(15_867_000, 0) + // Minimum execution time: 21_748_000 picoseconds. + Weight::from_parts(23_233_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) @@ -159,8 +159,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `164` // Estimated: `67035` - // Minimum execution time: 142_658_845_000 picoseconds. - Weight::from_parts(145_119_524_000, 67035) + // Minimum execution time: 145_815_055_000 picoseconds. + Weight::from_parts(147_308_633_000, 67035) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_babe.rs b/operator/runtime/mainnet/src/weights/pallet_babe.rs index d6f48f94..6f541306 100644 --- a/operator/runtime/mainnet/src/weights/pallet_babe.rs +++ b/operator/runtime/mainnet/src/weights/pallet_babe.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_babe` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_babe`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_balances.rs b/operator/runtime/mainnet/src/weights/pallet_balances.rs index 69b60f9e..e6ef8c49 100644 --- a/operator/runtime/mainnet/src/weights/pallet_balances.rs +++ b/operator/runtime/mainnet/src/weights/pallet_balances.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_balances`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 69_284_000 picoseconds. - Weight::from_parts(70_544_000, 3581) + // Minimum execution time: 59_535_000 picoseconds. + Weight::from_parts(60_918_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 56_138_000 picoseconds. - Weight::from_parts(56_697_000, 3581) + // Minimum execution time: 57_997_000 picoseconds. + Weight::from_parts(58_930_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -81,10 +81,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) fn force_set_balance_creating() -> Weight { // Proof Size summary in bytes: - // Measured: `195` + // Measured: `72` // Estimated: `3581` - // Minimum execution time: 21_364_000 picoseconds. - Weight::from_parts(21_904_000, 3581) + // Minimum execution time: 30_522_000 picoseconds. + Weight::from_parts(31_146_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -94,8 +94,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `195` // Estimated: `3581` - // Minimum execution time: 30_363_000 picoseconds. - Weight::from_parts(31_275_000, 3581) + // Minimum execution time: 25_503_000 picoseconds. + Weight::from_parts(26_086_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -105,8 +105,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `235` // Estimated: `6172` - // Minimum execution time: 72_570_000 picoseconds. - Weight::from_parts(73_362_000, 6172) + // Minimum execution time: 63_521_000 picoseconds. + Weight::from_parts(64_766_000, 6172) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -116,8 +116,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 68_337_000 picoseconds. - Weight::from_parts(69_597_000, 3581) + // Minimum execution time: 63_513_000 picoseconds. + Weight::from_parts(64_835_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -127,8 +127,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `195` // Estimated: `3581` - // Minimum execution time: 25_030_000 picoseconds. - Weight::from_parts(25_686_000, 3581) + // Minimum execution time: 25_301_000 picoseconds. + Weight::from_parts(25_900_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -137,12 +137,12 @@ impl pallet_balances::WeightInfo for WeightInfo { /// The range of component `u` is `[1, 1000]`. fn upgrade_accounts(u: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `658 + u * (124 ±0)` + // Measured: `577 + u * (124 ±0)` // Estimated: `990 + u * (2591 ±0)` - // Minimum execution time: 22_880_000 picoseconds. - Weight::from_parts(23_249_000, 990) - // Standard Error: 12_222 - .saturating_add(Weight::from_parts(18_763_842, 0).saturating_mul(u.into())) + // Minimum execution time: 23_385_000 picoseconds. + Weight::from_parts(23_593_000, 990) + // Standard Error: 9_688 + .saturating_add(Weight::from_parts(19_282_426, 0).saturating_mul(u.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2591).saturating_mul(u.into())) @@ -151,21 +151,21 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_407_000 picoseconds. - Weight::from_parts(8_611_000, 0) + // Minimum execution time: 8_644_000 picoseconds. + Weight::from_parts(9_123_000, 0) } fn burn_allow_death() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 43_802_000 picoseconds. - Weight::from_parts(44_628_000, 0) + // Minimum execution time: 34_238_000 picoseconds. + Weight::from_parts(35_013_000, 0) } fn burn_keep_alive() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 30_756_000 picoseconds. - Weight::from_parts(31_277_000, 0) + // Minimum execution time: 30_720_000 picoseconds. + Weight::from_parts(31_178_000, 0) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs b/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs index 1693f449..83105551 100644 --- a/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs +++ b/operator/runtime/mainnet/src/weights/pallet_beefy_mmr.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_beefy_mmr` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,19 +50,29 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_beefy_mmr`. pub struct WeightInfo(PhantomData); impl pallet_beefy_mmr::WeightInfo for WeightInfo { + /// The range of component `n` is `[2, 512]`. + fn n_leafs_proof_is_optimal(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 894_000 picoseconds. + Weight::from_parts(1_587_938, 0) + // Standard Error: 103 + .saturating_add(Weight::from_parts(2_966, 0).saturating_mul(n.into())) + } /// Storage: `System::BlockHash` (r:1 w:0) /// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) fn extract_validation_context() -> Weight { // Proof Size summary in bytes: // Measured: `68` // Estimated: `3509` - // Minimum execution time: 7_674_000 picoseconds. - Weight::from_parts(7_960_000, 3509) + // Minimum execution time: 7_506_000 picoseconds. + Weight::from_parts(7_864_000, 3509) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Mmr::Nodes` (r:1 w:0) @@ -71,8 +81,8 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `221` // Estimated: `3505` - // Minimum execution time: 6_830_000 picoseconds. - Weight::from_parts(7_135_000, 3505) + // Minimum execution time: 7_018_000 picoseconds. + Weight::from_parts(7_396_000, 3505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Mmr::RootHash` (r:1 w:0) @@ -84,10 +94,10 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `213` // Estimated: `1517` - // Minimum execution time: 13_880_000 picoseconds. - Weight::from_parts(23_110_774, 1517) - // Standard Error: 2_322 - .saturating_add(Weight::from_parts(1_511_565, 0).saturating_mul(n.into())) + // Minimum execution time: 14_532_000 picoseconds. + Weight::from_parts(25_317_022, 1517) + // Standard Error: 2_513 + .saturating_add(Weight::from_parts(1_648_092, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs b/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs index 2908a4de..ea44624d 100644 --- a/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs +++ b/operator/runtime/mainnet/src/weights/pallet_collective_technical_committee.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_collective_technical_committee` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_technical_committee`. pub struct WeightInfo(PhantomData); @@ -69,13 +69,13 @@ impl pallet_collective::WeightInfo for WeightInfo { fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0 + m * (2021 ±0) + p * (2026 ±0)` - // Estimated: `12234 + m * (1231 ±15) + p * (3660 ±15)` - // Minimum execution time: 17_018_000 picoseconds. - Weight::from_parts(17_238_000, 12234) - // Standard Error: 65_772 - .saturating_add(Weight::from_parts(4_757_571, 0).saturating_mul(m.into())) - // Standard Error: 65_772 - .saturating_add(Weight::from_parts(9_935_731, 0).saturating_mul(p.into())) + // Estimated: `12234 + m * (1231 ±14) + p * (3660 ±14)` + // Minimum execution time: 17_079_000 picoseconds. + Weight::from_parts(17_302_000, 12234) + // Standard Error: 64_528 + .saturating_add(Weight::from_parts(4_683_156, 0).saturating_mul(m.into())) + // Standard Error: 64_528 + .saturating_add(Weight::from_parts(9_710_194, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -95,12 +95,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `149 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 25_092_000 picoseconds. - Weight::from_parts(25_177_255, 3997) - // Standard Error: 38 - .saturating_add(Weight::from_parts(1_356, 0).saturating_mul(b.into())) - // Standard Error: 397 - .saturating_add(Weight::from_parts(9_395, 0).saturating_mul(m.into())) + // Minimum execution time: 25_135_000 picoseconds. + Weight::from_parts(24_977_916, 3997) + // Standard Error: 32 + .saturating_add(Weight::from_parts(1_326, 0).saturating_mul(b.into())) + // Standard Error: 339 + .saturating_add(Weight::from_parts(9_164, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -118,12 +118,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `149 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 28_391_000 picoseconds. - Weight::from_parts(28_288_136, 3997) - // Standard Error: 44 - .saturating_add(Weight::from_parts(1_454, 0).saturating_mul(b.into())) - // Standard Error: 454 - .saturating_add(Weight::from_parts(14_528, 0).saturating_mul(m.into())) + // Minimum execution time: 27_940_000 picoseconds. + Weight::from_parts(27_862_019, 3997) + // Standard Error: 41 + .saturating_add(Weight::from_parts(1_445, 0).saturating_mul(b.into())) + // Standard Error: 423 + .saturating_add(Weight::from_parts(15_467, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -144,14 +144,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `391 + m * (20 ±0) + p * (36 ±0)` // Estimated: `3785 + m * (21 ±0) + p * (36 ±0)` - // Minimum execution time: 27_555_000 picoseconds. - Weight::from_parts(28_531_338, 3785) - // Standard Error: 165 - .saturating_add(Weight::from_parts(3_988, 0).saturating_mul(b.into())) - // Standard Error: 1_729 - .saturating_add(Weight::from_parts(26_501, 0).saturating_mul(m.into())) - // Standard Error: 1_707 - .saturating_add(Weight::from_parts(321_581, 0).saturating_mul(p.into())) + // Minimum execution time: 27_621_000 picoseconds. + Weight::from_parts(26_310_565, 3785) + // Standard Error: 138 + .saturating_add(Weight::from_parts(4_550, 0).saturating_mul(b.into())) + // Standard Error: 1_442 + .saturating_add(Weight::from_parts(34_131, 0).saturating_mul(m.into())) + // Standard Error: 1_424 + .saturating_add(Weight::from_parts(316_774, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 21).saturating_mul(m.into())) @@ -166,10 +166,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `866 + m * (40 ±0)` // Estimated: `4330 + m * (40 ±0)` - // Minimum execution time: 34_127_000 picoseconds. - Weight::from_parts(36_773_854, 4330) - // Standard Error: 1_509 - .saturating_add(Weight::from_parts(16_496, 0).saturating_mul(m.into())) + // Minimum execution time: 34_053_000 picoseconds. + Weight::from_parts(35_680_627, 4330) + // Standard Error: 760 + .saturating_add(Weight::from_parts(25_482, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 40).saturating_mul(m.into())) @@ -188,12 +188,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `443 + m * (40 ±0) + p * (36 ±0)` // Estimated: `3888 + m * (41 ±0) + p * (36 ±0)` - // Minimum execution time: 32_853_000 picoseconds. - Weight::from_parts(33_847_686, 3888) - // Standard Error: 1_137 - .saturating_add(Weight::from_parts(29_027, 0).saturating_mul(m.into())) - // Standard Error: 1_109 - .saturating_add(Weight::from_parts(285_405, 0).saturating_mul(p.into())) + // Minimum execution time: 32_891_000 picoseconds. + Weight::from_parts(32_258_078, 3888) + // Standard Error: 1_412 + .saturating_add(Weight::from_parts(37_422, 0).saturating_mul(m.into())) + // Standard Error: 1_376 + .saturating_add(Weight::from_parts(292_989, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 41).saturating_mul(m.into())) @@ -218,14 +218,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `791 + b * (1 ±0) + m * (40 ±0) + p * (40 ±0)` // Estimated: `4108 + b * (1 ±0) + m * (42 ±0) + p * (40 ±0)` - // Minimum execution time: 54_559_000 picoseconds. - Weight::from_parts(57_501_968, 4108) - // Standard Error: 240 - .saturating_add(Weight::from_parts(3_070, 0).saturating_mul(b.into())) - // Standard Error: 2_543 - .saturating_add(Weight::from_parts(9_531, 0).saturating_mul(m.into())) - // Standard Error: 2_479 - .saturating_add(Weight::from_parts(332_757, 0).saturating_mul(p.into())) + // Minimum execution time: 54_002_000 picoseconds. + Weight::from_parts(56_792_067, 4108) + // Standard Error: 288 + .saturating_add(Weight::from_parts(4_395, 0).saturating_mul(b.into())) + // Standard Error: 2_967 + .saturating_add(Weight::from_parts(373_875, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -248,12 +246,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `512 + m * (30 ±0) + p * (36 ±0)` // Estimated: `3954 + m * (31 ±0) + p * (36 ±0)` - // Minimum execution time: 35_398_000 picoseconds. - Weight::from_parts(35_697_790, 3954) - // Standard Error: 1_566 - .saturating_add(Weight::from_parts(27_847, 0).saturating_mul(m.into())) - // Standard Error: 1_527 - .saturating_add(Weight::from_parts(300_810, 0).saturating_mul(p.into())) + // Minimum execution time: 35_148_000 picoseconds. + Weight::from_parts(35_962_743, 3954) + // Standard Error: 1_098 + .saturating_add(Weight::from_parts(19_033, 0).saturating_mul(m.into())) + // Standard Error: 1_071 + .saturating_add(Weight::from_parts(297_384, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 31).saturating_mul(m.into())) @@ -280,14 +278,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `811 + b * (1 ±0) + m * (40 ±0) + p * (40 ±0)` // Estimated: `4128 + b * (1 ±0) + m * (42 ±0) + p * (40 ±0)` - // Minimum execution time: 56_894_000 picoseconds. - Weight::from_parts(59_887_314, 4128) - // Standard Error: 220 - .saturating_add(Weight::from_parts(3_057, 0).saturating_mul(b.into())) - // Standard Error: 2_328 - .saturating_add(Weight::from_parts(14_668, 0).saturating_mul(m.into())) - // Standard Error: 2_269 - .saturating_add(Weight::from_parts(335_539, 0).saturating_mul(p.into())) + // Minimum execution time: 56_745_000 picoseconds. + Weight::from_parts(56_352_211, 4128) + // Standard Error: 258 + .saturating_add(Weight::from_parts(4_781, 0).saturating_mul(b.into())) + // Standard Error: 2_736 + .saturating_add(Weight::from_parts(19_769, 0).saturating_mul(m.into())) + // Standard Error: 2_667 + .saturating_add(Weight::from_parts(336_127, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -305,10 +303,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `260 + p * (32 ±0)` // Estimated: `1745 + p * (32 ±0)` - // Minimum execution time: 18_181_000 picoseconds. - Weight::from_parts(19_410_035, 1745) - // Standard Error: 2_700 - .saturating_add(Weight::from_parts(257_789, 0).saturating_mul(p.into())) + // Minimum execution time: 17_951_000 picoseconds. + Weight::from_parts(19_095_919, 1745) + // Standard Error: 859 + .saturating_add(Weight::from_parts(248_648, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) @@ -327,12 +325,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1531 + p * (36 ±0)` // Estimated: `4930 + d * (123 ±6) + p * (37 ±0)` - // Minimum execution time: 25_513_000 picoseconds. - Weight::from_parts(29_640_288, 4930) - // Standard Error: 85_260 - .saturating_add(Weight::from_parts(731_395, 0).saturating_mul(d.into())) - // Standard Error: 1_320 - .saturating_add(Weight::from_parts(304_268, 0).saturating_mul(p.into())) + // Minimum execution time: 25_643_000 picoseconds. + Weight::from_parts(29_481_228, 4930) + // Standard Error: 76_433 + .saturating_add(Weight::from_parts(625_851, 0).saturating_mul(d.into())) + // Standard Error: 1_183 + .saturating_add(Weight::from_parts(298_948, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 123).saturating_mul(d.into())) @@ -346,8 +344,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `945` // Estimated: `4410` - // Minimum execution time: 20_222_000 picoseconds. - Weight::from_parts(21_219_000, 4410) + // Minimum execution time: 20_038_000 picoseconds. + Weight::from_parts(20_822_000, 4410) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs b/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs index 5dc0ea6c..b5b10017 100644 --- a/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs +++ b/operator/runtime/mainnet/src/weights/pallet_collective_treasury_council.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_collective_treasury_council` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_treasury_council`. pub struct WeightInfo(PhantomData); @@ -69,13 +69,13 @@ impl pallet_collective::WeightInfo for WeightInfo { fn set_members(m: u32, _n: u32, p: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0 + m * (425 ±0) + p * (206 ±0)` - // Estimated: `4117 + m * (266 ±4) + p * (2556 ±2)` - // Minimum execution time: 10_890_000 picoseconds. - Weight::from_parts(11_374_000, 4117) - // Standard Error: 123_054 - .saturating_add(Weight::from_parts(3_648_585, 0).saturating_mul(m.into())) - // Standard Error: 56_221 - .saturating_add(Weight::from_parts(4_823_866, 0).saturating_mul(p.into())) + // Estimated: `4117 + m * (266 ±3) + p * (2556 ±1)` + // Minimum execution time: 11_058_000 picoseconds. + Weight::from_parts(11_448_000, 4117) + // Standard Error: 124_089 + .saturating_add(Weight::from_parts(3_766_490, 0).saturating_mul(m.into())) + // Standard Error: 56_694 + .saturating_add(Weight::from_parts(4_885_950, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -95,12 +95,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `181 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 23_609_000 picoseconds. - Weight::from_parts(23_974_248, 3997) - // Standard Error: 36 - .saturating_add(Weight::from_parts(1_488, 0).saturating_mul(b.into())) - // Standard Error: 4_329 - .saturating_add(Weight::from_parts(49_040, 0).saturating_mul(m.into())) + // Minimum execution time: 23_870_000 picoseconds. + Weight::from_parts(24_501_336, 3997) + // Standard Error: 41 + .saturating_add(Weight::from_parts(1_668, 0).saturating_mul(b.into())) + // Standard Error: 4_962 + .saturating_add(Weight::from_parts(58_535, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -118,12 +118,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `181 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 26_583_000 picoseconds. - Weight::from_parts(27_577_760, 3997) - // Standard Error: 59 - .saturating_add(Weight::from_parts(1_396, 0).saturating_mul(b.into())) - // Standard Error: 7_112 - .saturating_add(Weight::from_parts(2_908, 0).saturating_mul(m.into())) + // Minimum execution time: 26_919_000 picoseconds. + Weight::from_parts(27_483_732, 3997) + // Standard Error: 63 + .saturating_add(Weight::from_parts(1_630, 0).saturating_mul(b.into())) + // Standard Error: 7_510 + .saturating_add(Weight::from_parts(70_721, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -144,14 +144,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `127 + m * (20 ±0) + p * (55 ±0)` // Estimated: `3548 + m * (27 ±0) + p * (54 ±0)` - // Minimum execution time: 26_521_000 picoseconds. - Weight::from_parts(24_546_964, 3548) - // Standard Error: 123 - .saturating_add(Weight::from_parts(4_121, 0).saturating_mul(b.into())) - // Standard Error: 16_844 - .saturating_add(Weight::from_parts(88_180, 0).saturating_mul(m.into())) - // Standard Error: 6_461 - .saturating_add(Weight::from_parts(560_616, 0).saturating_mul(p.into())) + // Minimum execution time: 27_052_000 picoseconds. + Weight::from_parts(24_805_818, 3548) + // Standard Error: 118 + .saturating_add(Weight::from_parts(4_355, 0).saturating_mul(b.into())) + // Standard Error: 16_119 + .saturating_add(Weight::from_parts(51_652, 0).saturating_mul(m.into())) + // Standard Error: 6_183 + .saturating_add(Weight::from_parts(575_760, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 27).saturating_mul(m.into())) @@ -166,10 +166,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `701 + m * (40 ±0)` // Estimated: `4166 + m * (40 ±0)` - // Minimum execution time: 26_832_000 picoseconds. - Weight::from_parts(28_088_718, 4166) - // Standard Error: 9_573 - .saturating_add(Weight::from_parts(29_121, 0).saturating_mul(m.into())) + // Minimum execution time: 27_211_000 picoseconds. + Weight::from_parts(28_777_999, 4166) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 40).saturating_mul(m.into())) @@ -188,12 +186,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `234 + m * (40 ±0) + p * (55 ±0)` // Estimated: `3696 + m * (43 ±0) + p * (55 ±0)` - // Minimum execution time: 29_608_000 picoseconds. - Weight::from_parts(31_151_416, 3696) - // Standard Error: 11_127 - .saturating_add(Weight::from_parts(8_743, 0).saturating_mul(m.into())) - // Standard Error: 3_156 - .saturating_add(Weight::from_parts(368_323, 0).saturating_mul(p.into())) + // Minimum execution time: 30_521_000 picoseconds. + Weight::from_parts(31_381_172, 3696) + // Standard Error: 10_214 + .saturating_add(Weight::from_parts(82_352, 0).saturating_mul(m.into())) + // Standard Error: 2_897 + .saturating_add(Weight::from_parts(372_163, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 43).saturating_mul(m.into())) @@ -218,12 +216,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `225 + b * (1 ±0) + m * (40 ±0) + p * (78 ±0)` // Estimated: `3997 + b * (1 ±0) + m * (29 ±1) + p * (74 ±0)` - // Minimum execution time: 49_727_000 picoseconds. - Weight::from_parts(52_632_323, 3997) - // Standard Error: 119 - .saturating_add(Weight::from_parts(2_710, 0).saturating_mul(b.into())) - // Standard Error: 6_206 - .saturating_add(Weight::from_parts(617_075, 0).saturating_mul(p.into())) + // Minimum execution time: 51_138_000 picoseconds. + Weight::from_parts(55_440_959, 3997) + // Standard Error: 137 + .saturating_add(Weight::from_parts(2_671, 0).saturating_mul(b.into())) + // Standard Error: 7_179 + .saturating_add(Weight::from_parts(614_352, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -246,12 +244,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `284 + m * (33 ±0) + p * (55 ±0)` // Estimated: `3747 + m * (34 ±0) + p * (56 ±0)` - // Minimum execution time: 32_683_000 picoseconds. - Weight::from_parts(33_618_365, 3747) - // Standard Error: 11_326 - .saturating_add(Weight::from_parts(51_622, 0).saturating_mul(m.into())) - // Standard Error: 3_213 - .saturating_add(Weight::from_parts(366_780, 0).saturating_mul(p.into())) + // Minimum execution time: 33_438_000 picoseconds. + Weight::from_parts(34_283_837, 3747) + // Standard Error: 9_597 + .saturating_add(Weight::from_parts(101_191, 0).saturating_mul(m.into())) + // Standard Error: 2_722 + .saturating_add(Weight::from_parts(373_589, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 34).saturating_mul(m.into())) @@ -278,12 +276,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `245 + b * (1 ±0) + m * (40 ±0) + p * (78 ±0)` // Estimated: `3997 + b * (1 ±0) + m * (30 ±1) + p * (74 ±0)` - // Minimum execution time: 52_698_000 picoseconds. - Weight::from_parts(53_070_814, 3997) - // Standard Error: 222 - .saturating_add(Weight::from_parts(3_274, 0).saturating_mul(b.into())) - // Standard Error: 11_620 - .saturating_add(Weight::from_parts(652_161, 0).saturating_mul(p.into())) + // Minimum execution time: 54_058_000 picoseconds. + Weight::from_parts(57_404_367, 3997) + // Standard Error: 107 + .saturating_add(Weight::from_parts(2_892, 0).saturating_mul(b.into())) + // Standard Error: 5_622 + .saturating_add(Weight::from_parts(585_178, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -301,10 +299,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `293 + p * (32 ±0)` // Estimated: `1778 + p * (32 ±0)` - // Minimum execution time: 17_410_000 picoseconds. - Weight::from_parts(17_765_646, 1778) - // Standard Error: 1_773 - .saturating_add(Weight::from_parts(295_811, 0).saturating_mul(p.into())) + // Minimum execution time: 17_858_000 picoseconds. + Weight::from_parts(18_397_488, 1778) + // Standard Error: 2_058 + .saturating_add(Weight::from_parts(314_455, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) @@ -323,10 +321,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1347 + p * (55 ±0)` // Estimated: `4814 + d * (5 ±1) + p * (55 ±0)` - // Minimum execution time: 25_067_000 picoseconds. - Weight::from_parts(27_967_968, 4814) - // Standard Error: 4_430 - .saturating_add(Weight::from_parts(441_648, 0).saturating_mul(p.into())) + // Minimum execution time: 25_772_000 picoseconds. + Weight::from_parts(29_015_129, 4814) + // Standard Error: 4_379 + .saturating_add(Weight::from_parts(466_900, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 5).saturating_mul(d.into())) @@ -340,8 +338,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `780` // Estimated: `4245` - // Minimum execution time: 16_390_000 picoseconds. - Weight::from_parts(16_831_000, 4245) + // Minimum execution time: 16_085_000 picoseconds. + Weight::from_parts(16_725_000, 4245) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs b/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs index 71601819..9fa3a6a9 100644 --- a/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs +++ b/operator/runtime/mainnet/src/weights/pallet_conviction_voting.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_conviction_voting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); @@ -71,8 +71,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1963` // Estimated: `13328` - // Minimum execution time: 88_876_000 picoseconds. - Weight::from_parts(91_609_000, 13328) + // Minimum execution time: 90_509_000 picoseconds. + Weight::from_parts(92_563_000, 13328) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -94,8 +94,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `2264` // Estimated: `25666` - // Minimum execution time: 114_116_000 picoseconds. - Weight::from_parts(116_253_000, 25666) + // Minimum execution time: 116_684_000 picoseconds. + Weight::from_parts(118_627_000, 25666) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -111,8 +111,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1979` // Estimated: `25666` - // Minimum execution time: 74_980_000 picoseconds. - Weight::from_parts(77_153_000, 25666) + // Minimum execution time: 76_941_000 picoseconds. + Weight::from_parts(79_178_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -124,8 +124,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1523` // Estimated: `4617` - // Minimum execution time: 29_440_000 picoseconds. - Weight::from_parts(30_292_000, 4617) + // Minimum execution time: 30_482_000 picoseconds. + Weight::from_parts(31_771_000, 4617) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -148,10 +148,10 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1655 + r * (248 ±0)` // Estimated: `25666 + r * (2805 ±0)` - // Minimum execution time: 59_151_000 picoseconds. - Weight::from_parts(61_377_655, 25666) - // Standard Error: 79_013 - .saturating_add(Weight::from_parts(33_098_243, 0).saturating_mul(r.into())) + // Minimum execution time: 60_825_000 picoseconds. + Weight::from_parts(63_494_360, 25666) + // Standard Error: 70_353 + .saturating_add(Weight::from_parts(33_868_849, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -171,10 +171,10 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1478 + r * (248 ±0)` // Estimated: `25666 + r * (2805 ±0)` - // Minimum execution time: 27_566_000 picoseconds. - Weight::from_parts(23_325_055, 25666) - // Standard Error: 81_300 - .saturating_add(Weight::from_parts(33_059_292, 0).saturating_mul(r.into())) + // Minimum execution time: 28_646_000 picoseconds. + Weight::from_parts(23_154_725, 25666) + // Standard Error: 79_983 + .saturating_add(Weight::from_parts(34_248_371, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -193,8 +193,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1229` // Estimated: `4752` - // Minimum execution time: 63_676_000 picoseconds. - Weight::from_parts(66_363_000, 4752) + // Minimum execution time: 68_037_000 picoseconds. + Weight::from_parts(70_245_000, 4752) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs b/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs index 12c8125a..f6226727 100644 --- a/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs +++ b/operator/runtime/mainnet/src/weights/pallet_datahaven_native_transfer.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_datahaven_native_transfer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_datahaven_native_transfer`. pub struct WeightInfo(PhantomData); @@ -67,10 +67,10 @@ impl pallet_datahaven_native_transfer::WeightInfo for W /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(32845), added: 35320, mode: `MaxEncodedLen`) fn transfer_to_ethereum() -> Weight { // Proof Size summary in bytes: - // Measured: `467` + // Measured: `379` // Estimated: `8763` - // Minimum execution time: 142_042_000 picoseconds. - Weight::from_parts(144_477_000, 8763) + // Minimum execution time: 146_665_000 picoseconds. + Weight::from_parts(149_686_000, 8763) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -80,8 +80,8 @@ impl pallet_datahaven_native_transfer::WeightInfo for W // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_920_000 picoseconds. - Weight::from_parts(7_139_000, 0) + // Minimum execution time: 7_065_000 picoseconds. + Weight::from_parts(7_331_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `DataHavenNativeTransfer::Paused` (r:0 w:1) @@ -90,8 +90,8 @@ impl pallet_datahaven_native_transfer::WeightInfo for W // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_824_000 picoseconds. - Weight::from_parts(7_028_000, 0) + // Minimum execution time: 7_091_000 picoseconds. + Weight::from_parts(7_351_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_evm.rs b/operator/runtime/mainnet/src/weights/pallet_evm.rs index 21a49e58..07f9c330 100644 --- a/operator/runtime/mainnet/src/weights/pallet_evm.rs +++ b/operator/runtime/mainnet/src/weights/pallet_evm.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_evm` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_evm`. pub struct WeightInfo(PhantomData); @@ -59,7 +59,7 @@ impl pallet_evm::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_020_000 picoseconds. - Weight::from_parts(3_175_000, 0) + // Minimum execution time: 2_875_000 picoseconds. + Weight::from_parts(2_990_000, 0) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs b/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs index deb5261f..d59f0197 100644 --- a/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs +++ b/operator/runtime/mainnet/src/weights/pallet_external_validator_slashes.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validator_slashes`. pub struct WeightInfo(PhantomData); @@ -113,6 +113,9 @@ impl pallet_external_validator_slashes::WeightInfo for .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 38).saturating_mul(s.into())) } + fn retry_unsent_slash_era() -> Weight { + Self::process_slashes_queue(10) + } /// Storage: `ExternalValidatorsSlashes::SlashingMode` (r:0 w:1) /// Proof: `ExternalValidatorsSlashes::SlashingMode` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) fn set_slashing_mode() -> Weight { diff --git a/operator/runtime/mainnet/src/weights/pallet_external_validators.rs b/operator/runtime/mainnet/src/weights/pallet_external_validators.rs index f14183e4..d6a4a937 100644 --- a/operator/runtime/mainnet/src/weights/pallet_external_validators.rs +++ b/operator/runtime/mainnet/src/weights/pallet_external_validators.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs b/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs index 10854100..6434f40d 100644 --- a/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs +++ b/operator/runtime/mainnet/src/weights/pallet_external_validators_rewards.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators_rewards`. pub struct WeightInfo(PhantomData); @@ -75,6 +75,15 @@ impl pallet_external_validators_rewards::WeightInfo for .saturating_add(T::DbWeight::get().writes(2_u64)) } + fn process_closed_windows_idle() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) + } + + fn process_closed_windows_processed() -> Weight { + Self::process_unsent_reward_eras_success() + } + fn process_unsent_reward_eras_empty() -> Weight { Weight::from_parts(5_000_000, 0) .saturating_add(T::DbWeight::get().reads(1_u64)) diff --git a/operator/runtime/mainnet/src/weights/pallet_grandpa.rs b/operator/runtime/mainnet/src/weights/pallet_grandpa.rs index 7250e7d1..c2436557 100644 --- a/operator/runtime/mainnet/src/weights/pallet_grandpa.rs +++ b/operator/runtime/mainnet/src/weights/pallet_grandpa.rs @@ -51,7 +51,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_grandpa`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_im_online.rs b/operator/runtime/mainnet/src/weights/pallet_im_online.rs index 45d02cfa..48fc9d2b 100644 --- a/operator/runtime/mainnet/src/weights/pallet_im_online.rs +++ b/operator/runtime/mainnet/src/weights/pallet_im_online.rs @@ -1,11 +1,26 @@ +// Copyright 2025 DataHaven +// This file is part of DataHaven. + +// DataHaven is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// DataHaven is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with DataHaven. If not, see . //! Autogenerated weights for `pallet_im_online` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.0.0 -//! DATE: 2025-08-20, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `blocked.local`, CPU: `` +//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -14,26 +29,28 @@ // benchmark // pallet // --runtime -// target/release/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm +// target/production/wbuild/datahaven-mainnet-runtime/datahaven_mainnet_runtime.compact.compressed.wasm // --pallet // pallet_im_online // --extrinsic // +// --header +// ../file_header.txt // --template // benchmarking/frame-weight-template.hbs // --output // runtime/mainnet/src/weights/pallet_im_online.rs // --steps -// 2 +// 50 // --repeat -// 2 +// 20 #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_im_online`. pub struct WeightInfo(PhantomData); @@ -51,12 +68,14 @@ impl pallet_im_online::WeightInfo for WeightInfo { /// The range of component `k` is `[1, 32]`. fn validate_unsigned_and_then_heartbeat(k: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `278 + k * (32 ±0)` - // Estimated: `3509 + k * (32 ±0)` - // Minimum execution time: 39_000_000 picoseconds. - Weight::from_parts(47_209_677, 3509) - .saturating_add(T::DbWeight::get().reads(5_u64)) + // Measured: `280 + k * (32 ±0)` + // Estimated: `3490 + k * (1754 ±0)` + // Minimum execution time: 70_394_000 picoseconds. + Weight::from_parts(73_780_008, 3490) + // Standard Error: 7_919 + .saturating_add(Weight::from_parts(395_892, 0).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 1754).saturating_mul(k.into())) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_message_queue.rs b/operator/runtime/mainnet/src/weights/pallet_message_queue.rs index 4515966e..59bae039 100644 --- a/operator/runtime/mainnet/src/weights/pallet_message_queue.rs +++ b/operator/runtime/mainnet/src/weights/pallet_message_queue.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_message_queue`. pub struct WeightInfo(PhantomData); @@ -178,4 +178,8 @@ impl pallet_message_queue::WeightInfo for WeightInfo .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + + fn set_service_head() -> Weight { + todo!() + } } diff --git a/operator/runtime/mainnet/src/weights/pallet_mmr.rs b/operator/runtime/mainnet/src/weights/pallet_mmr.rs index c4d86617..23e9566d 100644 --- a/operator/runtime/mainnet/src/weights/pallet_mmr.rs +++ b/operator/runtime/mainnet/src/weights/pallet_mmr.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_mmr` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_mmr`. pub struct WeightInfo(PhantomData); @@ -74,10 +74,10 @@ impl pallet_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `536` // Estimated: `9242 + x * (8 ±0)` - // Minimum execution time: 25_821_000 picoseconds. - Weight::from_parts(49_671_170, 9242) - // Standard Error: 1_167 - .saturating_add(Weight::from_parts(33_373, 0).saturating_mul(x.into())) + // Minimum execution time: 25_901_000 picoseconds. + Weight::from_parts(50_645_721, 9242) + // Standard Error: 1_232 + .saturating_add(Weight::from_parts(34_977, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 8).saturating_mul(x.into())) diff --git a/operator/runtime/mainnet/src/weights/pallet_multisig.rs b/operator/runtime/mainnet/src/weights/pallet_multisig.rs index e817907a..876515da 100644 --- a/operator/runtime/mainnet/src/weights/pallet_multisig.rs +++ b/operator/runtime/mainnet/src/weights/pallet_multisig.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_multisig`. pub struct WeightInfo(PhantomData); @@ -64,10 +64,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 29_250_000 picoseconds. - Weight::from_parts(30_062_299, 3997) - // Standard Error: 4 - .saturating_add(Weight::from_parts(378, 0).saturating_mul(z.into())) + // Minimum execution time: 29_284_000 picoseconds. + Weight::from_parts(30_492_713, 3997) + // Standard Error: 13 + .saturating_add(Weight::from_parts(428, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:1) @@ -78,12 +78,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `218` // Estimated: `5587` - // Minimum execution time: 61_556_000 picoseconds. - Weight::from_parts(44_925_656, 5587) - // Standard Error: 1_796 - .saturating_add(Weight::from_parts(181_076, 0).saturating_mul(s.into())) - // Standard Error: 17 - .saturating_add(Weight::from_parts(4_145, 0).saturating_mul(z.into())) + // Minimum execution time: 62_422_000 picoseconds. + Weight::from_parts(45_611_384, 5587) + // Standard Error: 2_153 + .saturating_add(Weight::from_parts(177_647, 0).saturating_mul(s.into())) + // Standard Error: 21 + .saturating_add(Weight::from_parts(4_207, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -95,12 +95,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `246` // Estimated: `5587` - // Minimum execution time: 37_768_000 picoseconds. - Weight::from_parts(23_697_084, 5587) - // Standard Error: 581 - .saturating_add(Weight::from_parts(153_423, 0).saturating_mul(s.into())) - // Standard Error: 5 - .saturating_add(Weight::from_parts(4_094, 0).saturating_mul(z.into())) + // Minimum execution time: 37_621_000 picoseconds. + Weight::from_parts(23_908_997, 5587) + // Standard Error: 1_236 + .saturating_add(Weight::from_parts(152_496, 0).saturating_mul(s.into())) + // Standard Error: 12 + .saturating_add(Weight::from_parts(4_146, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -118,12 +118,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `393 + s * (20 ±0)` // Estimated: `5587` - // Minimum execution time: 78_648_000 picoseconds. - Weight::from_parts(53_246_661, 5587) - // Standard Error: 3_426 - .saturating_add(Weight::from_parts(266_951, 0).saturating_mul(s.into())) - // Standard Error: 33 - .saturating_add(Weight::from_parts(4_528, 0).saturating_mul(z.into())) + // Minimum execution time: 76_827_000 picoseconds. + Weight::from_parts(54_990_379, 5587) + // Standard Error: 2_550 + .saturating_add(Weight::from_parts(254_335, 0).saturating_mul(s.into())) + // Standard Error: 24 + .saturating_add(Weight::from_parts(4_475, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -134,10 +134,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `220` // Estimated: `5587` - // Minimum execution time: 41_069_000 picoseconds. - Weight::from_parts(43_464_869, 5587) - // Standard Error: 1_805 - .saturating_add(Weight::from_parts(178_568, 0).saturating_mul(s.into())) + // Minimum execution time: 41_399_000 picoseconds. + Weight::from_parts(43_575_253, 5587) + // Standard Error: 1_102 + .saturating_add(Weight::from_parts(176_815, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -148,10 +148,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `246` // Estimated: `5587` - // Minimum execution time: 21_162_000 picoseconds. - Weight::from_parts(22_016_204, 5587) - // Standard Error: 1_298 - .saturating_add(Weight::from_parts(156_239, 0).saturating_mul(s.into())) + // Minimum execution time: 20_951_000 picoseconds. + Weight::from_parts(21_444_922, 5587) + // Standard Error: 845 + .saturating_add(Weight::from_parts(160_199, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -162,10 +162,24 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `390` // Estimated: `5587` - // Minimum execution time: 41_061_000 picoseconds. - Weight::from_parts(44_330_346, 5587) - // Standard Error: 1_704 - .saturating_add(Weight::from_parts(188_221, 0).saturating_mul(s.into())) + // Minimum execution time: 41_568_000 picoseconds. + Weight::from_parts(44_420_325, 5587) + // Standard Error: 1_671 + .saturating_add(Weight::from_parts(186_346, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn poke_deposit(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `5587` + // Minimum execution time: 39_055_000 picoseconds. + Weight::from_parts(42_070_847, 5587) + // Standard Error: 1_610 + .saturating_add(Weight::from_parts(184_132, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_nfts.rs b/operator/runtime/mainnet/src/weights/pallet_nfts.rs index 4ffc4faf..1dc8c3cc 100644 --- a/operator/runtime/mainnet/src/weights/pallet_nfts.rs +++ b/operator/runtime/mainnet/src/weights/pallet_nfts.rs @@ -1,9 +1,24 @@ +// Copyright 2025 DataHaven +// This file is part of DataHaven. + +// DataHaven is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// DataHaven is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with DataHaven. If not, see . //! Autogenerated weights for `pallet_nfts` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2025-11-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -19,6 +34,8 @@ // pallet_nfts // --extrinsic // +// --header +// ../file_header.txt // --template // benchmarking/frame-weight-template.hbs // --output @@ -33,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_nfts`. pub struct WeightInfo(PhantomData); @@ -52,8 +69,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `271` // Estimated: `3537` - // Minimum execution time: 46_980_000 picoseconds. - Weight::from_parts(48_333_000, 3537) + // Minimum execution time: 47_593_000 picoseconds. + Weight::from_parts(49_429_000, 3537) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -71,8 +88,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3537` - // Minimum execution time: 25_388_000 picoseconds. - Weight::from_parts(26_185_000, 3537) + // Minimum execution time: 25_739_000 picoseconds. + Weight::from_parts(26_440_000, 3537) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -95,16 +112,18 @@ impl pallet_nfts::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `c` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. - fn destroy(m: u32, _c: u32, a: u32, ) -> Weight { + fn destroy(m: u32, c: u32, a: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `32179 + a * (366 ±0)` // Estimated: `2523990 + a * (2930 ±0)` - // Minimum execution time: 1_376_605_000 picoseconds. - Weight::from_parts(1_488_155_322, 2523990) - // Standard Error: 20_663 - .saturating_add(Weight::from_parts(65_636, 0).saturating_mul(m.into())) - // Standard Error: 20_663 - .saturating_add(Weight::from_parts(8_224_542, 0).saturating_mul(a.into())) + // Minimum execution time: 1_377_875_000 picoseconds. + Weight::from_parts(1_100_953_752, 2523990) + // Standard Error: 14_869 + .saturating_add(Weight::from_parts(85_101, 0).saturating_mul(m.into())) + // Standard Error: 14_869 + .saturating_add(Weight::from_parts(111_264, 0).saturating_mul(c.into())) + // Standard Error: 14_869 + .saturating_add(Weight::from_parts(8_408_357, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(1004_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(T::DbWeight::get().writes(1005_u64)) @@ -127,8 +146,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `418` // Estimated: `4062` - // Minimum execution time: 67_377_000 picoseconds. - Weight::from_parts(68_962_000, 4062) + // Minimum execution time: 69_136_000 picoseconds. + Weight::from_parts(70_733_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -148,8 +167,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `418` // Estimated: `4062` - // Minimum execution time: 65_493_000 picoseconds. - Weight::from_parts(67_405_000, 4062) + // Minimum execution time: 66_331_000 picoseconds. + Weight::from_parts(68_296_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -175,8 +194,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `526` // Estimated: `4062` - // Minimum execution time: 73_291_000 picoseconds. - Weight::from_parts(75_035_000, 4062) + // Minimum execution time: 74_745_000 picoseconds. + Weight::from_parts(76_119_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -200,8 +219,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `555` // Estimated: `4062` - // Minimum execution time: 56_413_000 picoseconds. - Weight::from_parts(58_224_000, 4062) + // Minimum execution time: 56_465_000 picoseconds. + Weight::from_parts(57_688_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -216,10 +235,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `750 + i * (83 ±0)` // Estimated: `3538 + i * (3072 ±0)` - // Minimum execution time: 18_658_000 picoseconds. - Weight::from_parts(19_263_000, 3538) - // Standard Error: 28_107 - .saturating_add(Weight::from_parts(24_930_095, 0).saturating_mul(i.into())) + // Minimum execution time: 18_948_000 picoseconds. + Weight::from_parts(19_319_000, 3538) + // Standard Error: 26_654 + .saturating_add(Weight::from_parts(25_969_307, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) @@ -233,8 +252,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 24_194_000 picoseconds. - Weight::from_parts(25_183_000, 3522) + // Minimum execution time: 24_267_000 picoseconds. + Weight::from_parts(25_028_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -246,8 +265,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 24_302_000 picoseconds. - Weight::from_parts(24_760_000, 3522) + // Minimum execution time: 24_357_000 picoseconds. + Weight::from_parts(24_967_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -259,8 +278,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `327` // Estimated: `3538` - // Minimum execution time: 20_173_000 picoseconds. - Weight::from_parts(20_850_000, 3538) + // Minimum execution time: 20_130_000 picoseconds. + Weight::from_parts(20_540_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -276,8 +295,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `524` // Estimated: `3581` - // Minimum execution time: 35_232_000 picoseconds. - Weight::from_parts(36_300_000, 3581) + // Minimum execution time: 35_021_000 picoseconds. + Weight::from_parts(36_142_000, 3581) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -289,8 +308,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `344` // Estimated: `6054` - // Minimum execution time: 49_520_000 picoseconds. - Weight::from_parts(50_640_000, 6054) + // Minimum execution time: 49_016_000 picoseconds. + Weight::from_parts(49_943_000, 6054) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -302,8 +321,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `298` // Estimated: `3537` - // Minimum execution time: 20_820_000 picoseconds. - Weight::from_parts(21_202_000, 3537) + // Minimum execution time: 20_553_000 picoseconds. + Weight::from_parts(21_176_000, 3537) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -315,8 +334,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `276` // Estimated: `3537` - // Minimum execution time: 16_693_000 picoseconds. - Weight::from_parts(17_330_000, 3537) + // Minimum execution time: 16_460_000 picoseconds. + Weight::from_parts(17_362_000, 3537) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -328,8 +347,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 23_027_000 picoseconds. - Weight::from_parts(23_442_000, 3522) + // Minimum execution time: 22_477_000 picoseconds. + Weight::from_parts(23_317_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -347,8 +366,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `514` // Estimated: `3920` - // Minimum execution time: 68_689_000 picoseconds. - Weight::from_parts(70_511_000, 3920) + // Minimum execution time: 69_501_000 picoseconds. + Weight::from_parts(71_196_000, 3920) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -360,8 +379,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `331` // Estimated: `3920` - // Minimum execution time: 32_782_000 picoseconds. - Weight::from_parts(33_772_000, 3920) + // Minimum execution time: 33_233_000 picoseconds. + Weight::from_parts(33_924_000, 3920) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -377,8 +396,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `958` // Estimated: `3920` - // Minimum execution time: 62_968_000 picoseconds. - Weight::from_parts(64_747_000, 3920) + // Minimum execution time: 63_267_000 picoseconds. + Weight::from_parts(64_669_000, 3920) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -390,8 +409,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `356` // Estimated: `4062` - // Minimum execution time: 20_730_000 picoseconds. - Weight::from_parts(21_384_000, 4062) + // Minimum execution time: 20_903_000 picoseconds. + Weight::from_parts(21_812_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -408,10 +427,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `769 + n * (386 ±0)` // Estimated: `4062 + n * (2930 ±0)` - // Minimum execution time: 33_379_000 picoseconds. - Weight::from_parts(34_195_000, 4062) - // Standard Error: 4_787 - .saturating_add(Weight::from_parts(7_772_947, 0).saturating_mul(n.into())) + // Minimum execution time: 33_330_000 picoseconds. + Weight::from_parts(34_117_000, 4062) + // Standard Error: 9_111 + .saturating_add(Weight::from_parts(8_130_509, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -432,8 +451,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `514` // Estimated: `3800` - // Minimum execution time: 56_022_000 picoseconds. - Weight::from_parts(57_731_000, 3800) + // Minimum execution time: 56_919_000 picoseconds. + Weight::from_parts(57_921_000, 3800) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -449,8 +468,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `824` // Estimated: `3800` - // Minimum execution time: 53_756_000 picoseconds. - Weight::from_parts(54_834_000, 3800) + // Minimum execution time: 54_295_000 picoseconds. + Weight::from_parts(55_329_000, 3800) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -466,8 +485,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `373` // Estimated: `3759` - // Minimum execution time: 50_526_000 picoseconds. - Weight::from_parts(52_262_000, 3759) + // Minimum execution time: 51_684_000 picoseconds. + Weight::from_parts(52_959_000, 3759) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -483,8 +502,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3759` - // Minimum execution time: 50_577_000 picoseconds. - Weight::from_parts(51_516_000, 3759) + // Minimum execution time: 49_543_000 picoseconds. + Weight::from_parts(51_037_000, 3759) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -496,8 +515,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `385` // Estimated: `4062` - // Minimum execution time: 24_204_000 picoseconds. - Weight::from_parts(25_158_000, 4062) + // Minimum execution time: 23_950_000 picoseconds. + Weight::from_parts(24_947_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -507,8 +526,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `382` // Estimated: `4062` - // Minimum execution time: 21_067_000 picoseconds. - Weight::from_parts(21_663_000, 4062) + // Minimum execution time: 20_322_000 picoseconds. + Weight::from_parts(21_179_000, 4062) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -518,8 +537,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `382` // Estimated: `4062` - // Minimum execution time: 19_982_000 picoseconds. - Weight::from_parts(20_493_000, 4062) + // Minimum execution time: 19_608_000 picoseconds. + Weight::from_parts(20_383_000, 4062) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -529,8 +548,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3505` - // Minimum execution time: 17_144_000 picoseconds. - Weight::from_parts(17_739_000, 3505) + // Minimum execution time: 17_330_000 picoseconds. + Weight::from_parts(17_784_000, 3505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -542,8 +561,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `327` // Estimated: `3538` - // Minimum execution time: 22_173_000 picoseconds. - Weight::from_parts(22_774_000, 3538) + // Minimum execution time: 21_982_000 picoseconds. + Weight::from_parts(22_422_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -555,8 +574,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `311` // Estimated: `3538` - // Minimum execution time: 21_245_000 picoseconds. - Weight::from_parts(21_957_000, 3538) + // Minimum execution time: 20_801_000 picoseconds. + Weight::from_parts(21_611_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -572,8 +591,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `493` // Estimated: `4062` - // Minimum execution time: 30_559_000 picoseconds. - Weight::from_parts(31_877_000, 4062) + // Minimum execution time: 30_608_000 picoseconds. + Weight::from_parts(31_222_000, 4062) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -597,8 +616,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `655` // Estimated: `4062` - // Minimum execution time: 66_567_000 picoseconds. - Weight::from_parts(68_264_000, 4062) + // Minimum execution time: 68_282_000 picoseconds. + Weight::from_parts(68_944_000, 4062) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -607,10 +626,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_221_000 picoseconds. - Weight::from_parts(4_654_516, 0) - // Standard Error: 7_679 - .saturating_add(Weight::from_parts(2_619_134, 0).saturating_mul(n.into())) + // Minimum execution time: 3_195_000 picoseconds. + Weight::from_parts(4_703_043, 0) + // Standard Error: 7_996 + .saturating_add(Weight::from_parts(2_662_309, 0).saturating_mul(n.into())) } /// Storage: `Nfts::Item` (r:2 w:0) /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`) @@ -620,8 +639,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `444` // Estimated: `7134` - // Minimum execution time: 26_849_000 picoseconds. - Weight::from_parts(27_644_000, 7134) + // Minimum execution time: 27_040_000 picoseconds. + Weight::from_parts(27_871_000, 7134) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -633,8 +652,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `488` // Estimated: `4062` - // Minimum execution time: 27_431_000 picoseconds. - Weight::from_parts(27_897_000, 4062) + // Minimum execution time: 27_817_000 picoseconds. + Weight::from_parts(28_830_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -658,8 +677,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `771` // Estimated: `7134` - // Minimum execution time: 110_387_000 picoseconds. - Weight::from_parts(112_526_000, 7134) + // Minimum execution time: 111_409_000 picoseconds. + Weight::from_parts(113_329_000, 7134) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(10_u64)) } @@ -686,10 +705,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `580` // Estimated: `6054 + n * (2930 ±0)` - // Minimum execution time: 159_612_000 picoseconds. - Weight::from_parts(166_084_283, 6054) - // Standard Error: 67_116 - .saturating_add(Weight::from_parts(43_826_364, 0).saturating_mul(n.into())) + // Minimum execution time: 161_947_000 picoseconds. + Weight::from_parts(170_397_146, 6054) + // Standard Error: 71_734 + .saturating_add(Weight::from_parts(45_491_083, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -713,10 +732,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `575` // Estimated: `4062 + n * (2930 ±0)` - // Minimum execution time: 75_695_000 picoseconds. - Weight::from_parts(89_915_935, 4062) - // Standard Error: 98_709 - .saturating_add(Weight::from_parts(42_240_220, 0).saturating_mul(n.into())) + // Minimum execution time: 76_528_000 picoseconds. + Weight::from_parts(89_932_451, 4062) + // Standard Error: 95_965 + .saturating_add(Weight::from_parts(44_099_120, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) diff --git a/operator/runtime/mainnet/src/weights/pallet_parameters.rs b/operator/runtime/mainnet/src/weights/pallet_parameters.rs index bb54ca81..e1fabf59 100644 --- a/operator/runtime/mainnet/src/weights/pallet_parameters.rs +++ b/operator/runtime/mainnet/src/weights/pallet_parameters.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_parameters` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,19 +50,19 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_parameters`. pub struct WeightInfo(PhantomData); impl pallet_parameters::WeightInfo for WeightInfo { /// Storage: `Parameters::Parameters` (r:1 w:1) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) fn set_parameter() -> Weight { // Proof Size summary in bytes: // Measured: `3` - // Estimated: `3517` - // Minimum execution time: 11_182_000 picoseconds. - Weight::from_parts(11_590_000, 3517) + // Estimated: `3846` + // Minimum execution time: 11_114_000 picoseconds. + Weight::from_parts(11_792_000, 3846) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs b/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs index 3022e4da..602f443d 100644 --- a/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs +++ b/operator/runtime/mainnet/src/weights/pallet_payment_streams.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_payment_streams` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_payment_streams`. pub struct WeightInfo(PhantomData); @@ -75,10 +75,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn create_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `523` + // Measured: `556` // Estimated: `6054` - // Minimum execution time: 107_606_000 picoseconds. - Weight::from_parts(108_915_000, 6054) + // Minimum execution time: 108_262_000 picoseconds. + Weight::from_parts(110_872_000, 6054) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -88,10 +88,6 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0) /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -112,21 +108,17 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`) fn update_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1427` + // Measured: `1372` // Estimated: `12414` - // Minimum execution time: 403_134_000 picoseconds. - Weight::from_parts(416_206_000, 12414) - .saturating_add(T::DbWeight::get().reads(21_u64)) + // Minimum execution time: 422_443_000 picoseconds. + Weight::from_parts(437_047_000, 12414) + .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -151,11 +143,11 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn delete_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1304` + // Measured: `1249` // Estimated: `12414` - // Minimum execution time: 295_969_000 picoseconds. - Weight::from_parts(300_145_000, 12414) - .saturating_add(T::DbWeight::get().reads(22_u64)) + // Minimum execution time: 304_971_000 picoseconds. + Weight::from_parts(319_734_000, 12414) + .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) @@ -180,10 +172,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn create_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `525` + // Measured: `558` // Estimated: `6054` - // Minimum execution time: 110_904_000 picoseconds. - Weight::from_parts(113_365_000, 6054) + // Minimum execution time: 110_840_000 picoseconds. + Weight::from_parts(112_636_000, 6054) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -193,10 +185,6 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0) /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -217,21 +205,17 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn update_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1387` + // Measured: `1332` // Estimated: `12414` - // Minimum execution time: 351_490_000 picoseconds. - Weight::from_parts(354_309_000, 12414) - .saturating_add(T::DbWeight::get().reads(21_u64)) + // Minimum execution time: 365_285_000 picoseconds. + Weight::from_parts(379_890_000, 12414) + .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -256,11 +240,11 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn delete_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1455` + // Measured: `1400` // Estimated: `12414` - // Minimum execution time: 399_760_000 picoseconds. - Weight::from_parts(410_315_000, 12414) - .saturating_add(T::DbWeight::get().reads(22_u64)) + // Minimum execution time: 410_270_000 picoseconds. + Weight::from_parts(416_215_000, 12414) + .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) @@ -293,21 +277,21 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn charge_payment_streams() -> Weight { // Proof Size summary in bytes: - // Measured: `1441` + // Measured: `1386` // Estimated: `12414` - // Minimum execution time: 335_054_000 picoseconds. - Weight::from_parts(339_893_000, 12414) + // Minimum execution time: 364_147_000 picoseconds. + Weight::from_parts(379_649_000, 12414) .saturating_add(T::DbWeight::get().reads(21_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) /// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0) - /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Providers::InsolventProviders` (r:2 w:0) /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0) + /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:10 w:10) @@ -331,13 +315,13 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[0, 10]`. fn charge_multiple_users_payment_streams(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1122 + n * (331 ±0)` + // Measured: `1038 + n * (325 ±0)` // Estimated: `12414 + n * (2604 ±0)` - // Minimum execution time: 20_587_000 picoseconds. - Weight::from_parts(44_190_125, 12414) - // Standard Error: 170_219 - .saturating_add(Weight::from_parts(294_748_615, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(12_u64)) + // Minimum execution time: 32_964_000 picoseconds. + Weight::from_parts(69_531_811, 12414) + // Standard Error: 229_266 + .saturating_add(Weight::from_parts(296_284_214, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) @@ -370,12 +354,12 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[1, 1000]`. fn pay_outstanding_debt(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1422 + n * (644 ±0)` + // Measured: `1292 + n * (644 ±0)` // Estimated: `12414 + n * (3634 ±0)` - // Minimum execution time: 376_066_000 picoseconds. - Weight::from_parts(378_172_000, 12414) - // Standard Error: 147_940 - .saturating_add(Weight::from_parts(283_749_757, 0).saturating_mul(n.into())) + // Minimum execution time: 405_642_000 picoseconds. + Weight::from_parts(408_094_000, 12414) + // Standard Error: 161_290 + .saturating_add(Weight::from_parts(294_016_381, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -390,10 +374,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn clear_insolvent_flag() -> Weight { // Proof Size summary in bytes: - // Measured: `231` + // Measured: `264` // Estimated: `3505` - // Minimum execution time: 22_472_000 picoseconds. - Weight::from_parts(23_180_000, 3505) + // Minimum execution time: 22_423_000 picoseconds. + Weight::from_parts(23_179_000, 3505) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -403,10 +387,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn price_index_update() -> Weight { // Proof Size summary in bytes: - // Measured: `116` + // Measured: `149` // Estimated: `1501` - // Minimum execution time: 5_847_000 picoseconds. - Weight::from_parts(6_187_000, 1501) + // Minimum execution time: 5_928_000 picoseconds. + Weight::from_parts(6_209_000, 1501) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -414,10 +398,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn tick_update() -> Weight { // Proof Size summary in bytes: - // Measured: `114` + // Measured: `147` // Estimated: `1489` - // Minimum execution time: 3_884_000 picoseconds. - Weight::from_parts(4_063_000, 1489) + // Minimum execution time: 3_918_000 picoseconds. + Weight::from_parts(4_149_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -434,12 +418,12 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[0, 244]`. fn update_providers_last_chargeable_info(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `270 + n * (32 ±0)` + // Measured: `303 + n * (32 ±0)` // Estimated: `11295 + n * (2543 ±0)` - // Minimum execution time: 12_468_000 picoseconds. - Weight::from_parts(9_805_506, 11295) - // Standard Error: 5_017 - .saturating_add(Weight::from_parts(6_952_512, 0).saturating_mul(n.into())) + // Minimum execution time: 12_506_000 picoseconds. + Weight::from_parts(14_840_329, 11295) + // Standard Error: 4_321 + .saturating_add(Weight::from_parts(6_899_768, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(1_u64)) diff --git a/operator/runtime/mainnet/src/weights/pallet_preimage.rs b/operator/runtime/mainnet/src/weights/pallet_preimage.rs index 8acba067..5b4b4fb5 100644 --- a/operator/runtime/mainnet/src/weights/pallet_preimage.rs +++ b/operator/runtime/mainnet/src/weights/pallet_preimage.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_preimage`. pub struct WeightInfo(PhantomData); @@ -68,10 +68,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3` // Estimated: `3754` - // Minimum execution time: 67_955_000 picoseconds. - Weight::from_parts(68_553_000, 3754) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_617, 0).saturating_mul(s.into())) + // Minimum execution time: 67_627_000 picoseconds. + Weight::from_parts(68_424_000, 3754) + // Standard Error: 11 + .saturating_add(Weight::from_parts(2_921, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -86,10 +86,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 20_503_000 picoseconds. - Weight::from_parts(20_740_000, 3544) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_598, 0).saturating_mul(s.into())) + // Minimum execution time: 20_594_000 picoseconds. + Weight::from_parts(20_747_000, 3544) + // Standard Error: 8 + .saturating_add(Weight::from_parts(3_037, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -104,10 +104,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 19_756_000 picoseconds. - Weight::from_parts(20_082_000, 3544) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_608, 0).saturating_mul(s.into())) + // Minimum execution time: 19_644_000 picoseconds. + Weight::from_parts(19_850_000, 3544) + // Standard Error: 9 + .saturating_add(Weight::from_parts(2_954, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -123,8 +123,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `180` // Estimated: `3754` - // Minimum execution time: 76_826_000 picoseconds. - Weight::from_parts(82_711_000, 3754) + // Minimum execution time: 80_447_000 picoseconds. + Weight::from_parts(84_614_000, 3754) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -138,8 +138,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 36_760_000 picoseconds. - Weight::from_parts(40_239_000, 3544) + // Minimum execution time: 39_768_000 picoseconds. + Weight::from_parts(42_403_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -151,8 +151,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `137` // Estimated: `3544` - // Minimum execution time: 31_214_000 picoseconds. - Weight::from_parts(35_005_000, 3544) + // Minimum execution time: 34_124_000 picoseconds. + Weight::from_parts(37_115_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -164,8 +164,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 22_157_000 picoseconds. - Weight::from_parts(24_544_000, 3544) + // Minimum execution time: 23_436_000 picoseconds. + Weight::from_parts(25_591_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -177,8 +177,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3` // Estimated: `3544` - // Minimum execution time: 24_997_000 picoseconds. - Weight::from_parts(29_979_000, 3544) + // Minimum execution time: 22_750_000 picoseconds. + Weight::from_parts(27_263_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -190,8 +190,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 15_160_000 picoseconds. - Weight::from_parts(15_824_000, 3544) + // Minimum execution time: 14_100_000 picoseconds. + Weight::from_parts(14_981_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -205,8 +205,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 34_529_000 picoseconds. - Weight::from_parts(37_547_000, 3544) + // Minimum execution time: 31_624_000 picoseconds. + Weight::from_parts(37_420_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -218,8 +218,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 14_153_000 picoseconds. - Weight::from_parts(15_268_000, 3544) + // Minimum execution time: 15_163_000 picoseconds. + Weight::from_parts(15_991_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -231,8 +231,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 13_285_000 picoseconds. - Weight::from_parts(13_813_000, 3544) + // Minimum execution time: 13_567_000 picoseconds. + Weight::from_parts(14_376_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -247,12 +247,12 @@ impl pallet_preimage::WeightInfo for WeightInfo { /// The range of component `n` is `[1, 1024]`. fn ensure_updated(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `648 + n * (203 ±0)` + // Measured: `558 + n * (204 ±0)` // Estimated: `990 + n * (2764 ±0)` - // Minimum execution time: 77_511_000 picoseconds. - Weight::from_parts(78_084_000, 990) - // Standard Error: 69_389 - .saturating_add(Weight::from_parts(78_702_726, 0).saturating_mul(n.into())) + // Minimum execution time: 78_156_000 picoseconds. + Weight::from_parts(78_784_000, 990) + // Standard Error: 102_835 + .saturating_add(Weight::from_parts(80_602_396, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into()))) .saturating_add(Weight::from_parts(0, 2764).saturating_mul(n.into())) diff --git a/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs b/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs index 1d9541c8..30e6b0f0 100644 --- a/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs +++ b/operator/runtime/mainnet/src/weights/pallet_proofs_dealer.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_proofs_dealer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proofs_dealer`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `41` // Estimated: `4687` - // Minimum execution time: 11_710_000 picoseconds. - Weight::from_parts(12_273_000, 4687) + // Minimum execution time: 11_733_000 picoseconds. + Weight::from_parts(12_301_000, 4687) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -90,17 +90,13 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) /// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0) /// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:1) + /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Providers::TotalBspsCapacity` (r:1 w:0) /// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) @@ -115,14 +111,14 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// The range of component `n` is `[1, 20]`. fn submit_proof_no_checkpoint_challenges_key_proofs(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2070` + // Measured: `1980` // Estimated: `15270` - // Minimum execution time: 2_180_337_000 picoseconds. - Weight::from_parts(2_068_089_120, 15270) - // Standard Error: 256_975 - .saturating_add(Weight::from_parts(139_273_283, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(30_u64)) - .saturating_add(T::DbWeight::get().writes(9_u64)) + // Minimum execution time: 2_155_560_000 picoseconds. + Weight::from_parts(2_056_299_134, 15270) + // Standard Error: 148_882 + .saturating_add(Weight::from_parts(135_798_475, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(26_u64)) + .saturating_add(T::DbWeight::get().writes(10_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) /// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) @@ -154,17 +150,13 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) /// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0) /// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:1) + /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Providers::TotalBspsCapacity` (r:1 w:0) /// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) @@ -173,14 +165,14 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// The range of component `n` is `[21, 40]`. fn submit_proof_with_checkpoint_challenges_key_proofs(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2070` + // Measured: `1980` // Estimated: `20676` - // Minimum execution time: 4_705_521_000 picoseconds. - Weight::from_parts(4_096_774_230, 20676) - // Standard Error: 968_637 - .saturating_add(Weight::from_parts(38_494_397, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(39_u64)) - .saturating_add(T::DbWeight::get().writes(11_u64)) + // Minimum execution time: 4_666_933_000 picoseconds. + Weight::from_parts(3_871_059_075, 20676) + // Standard Error: 872_212 + .saturating_add(Weight::from_parts(45_511_768, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(34_u64)) + .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:1) /// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -211,10 +203,10 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `1155 + n * (271 ±0)` // Estimated: `6172 + n * (3634 ±0)` - // Minimum execution time: 29_450_000 picoseconds. - Weight::from_parts(30_176_000, 6172) - // Standard Error: 45_927 - .saturating_add(Weight::from_parts(40_350_233, 0).saturating_mul(n.into())) + // Minimum execution time: 30_552_000 picoseconds. + Weight::from_parts(31_051_000, 6172) + // Standard Error: 47_577 + .saturating_add(Weight::from_parts(39_575_801, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3_u64)) @@ -234,10 +226,10 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `65 + n * (32 ±0)` // Estimated: `4787` - // Minimum execution time: 14_001_000 picoseconds. - Weight::from_parts(15_995_280, 4787) - // Standard Error: 3_445 - .saturating_add(Weight::from_parts(449_577, 0).saturating_mul(n.into())) + // Minimum execution time: 14_199_000 picoseconds. + Weight::from_parts(16_135_020, 4787) + // Standard Error: 3_384 + .saturating_add(Weight::from_parts(447_174, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -253,8 +245,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `248` // Estimated: `3501` - // Minimum execution time: 14_141_000 picoseconds. - Weight::from_parts(14_450_000, 3501) + // Minimum execution time: 13_971_000 picoseconds. + Weight::from_parts(14_576_000, 3501) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -266,8 +258,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `41` // Estimated: `1489` - // Minimum execution time: 4_433_000 picoseconds. - Weight::from_parts(4_657_000, 1489) + // Minimum execution time: 4_464_000 picoseconds. + Weight::from_parts(4_623_000, 1489) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `ProofsDealer::LastDeletedTick` (r:0 w:1) @@ -278,8 +270,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_533_000 picoseconds. - Weight::from_parts(2_701_000, 0) + // Minimum execution time: 2_577_000 picoseconds. + Weight::from_parts(2_714_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `ProofsDealer::PastBlocksWeight` (r:0 w:2) @@ -288,8 +280,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_812_000 picoseconds. - Weight::from_parts(5_079_000, 0) + // Minimum execution time: 4_724_000 picoseconds. + Weight::from_parts(4_968_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) @@ -308,8 +300,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `552` // Estimated: `4624` - // Minimum execution time: 44_569_000 picoseconds. - Weight::from_parts(46_326_000, 4624) + // Minimum execution time: 44_953_000 picoseconds. + Weight::from_parts(46_699_000, 4624) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -319,8 +311,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_440_000 picoseconds. - Weight::from_parts(7_760_000, 0) + // Minimum execution time: 7_394_000 picoseconds. + Weight::from_parts(7_808_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_proxy.rs b/operator/runtime/mainnet/src/weights/pallet_proxy.rs index 2902eccd..c4b024e6 100644 --- a/operator/runtime/mainnet/src/weights/pallet_proxy.rs +++ b/operator/runtime/mainnet/src/weights/pallet_proxy.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proxy`. pub struct WeightInfo(PhantomData); @@ -66,10 +66,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `228 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 26_037_000 picoseconds. - Weight::from_parts(27_232_213, 4310) - // Standard Error: 1_527 - .saturating_add(Weight::from_parts(42_134, 0).saturating_mul(p.into())) + // Minimum execution time: 26_794_000 picoseconds. + Weight::from_parts(27_995_206, 4310) + // Standard Error: 1_645 + .saturating_add(Weight::from_parts(47_338, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) // 1 DB read that happen when filtering the proxy call transaction .saturating_add(T::DbWeight::get().reads(1)) @@ -90,12 +90,12 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480 + a * (56 ±0) + p * (25 ±0)` // Estimated: `5302` - // Minimum execution time: 55_350_000 picoseconds. - Weight::from_parts(57_003_962, 5302) - // Standard Error: 4_029 - .saturating_add(Weight::from_parts(261_331, 0).saturating_mul(a.into())) - // Standard Error: 4_163 - .saturating_add(Weight::from_parts(13_673, 0).saturating_mul(p.into())) + // Minimum execution time: 57_059_000 picoseconds. + Weight::from_parts(57_892_750, 5302) + // Standard Error: 2_873 + .saturating_add(Weight::from_parts(257_383, 0).saturating_mul(a.into())) + // Standard Error: 2_969 + .saturating_add(Weight::from_parts(18_690, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -109,10 +109,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `362 + a * (56 ±0)` // Estimated: `5302` - // Minimum execution time: 34_362_000 picoseconds. - Weight::from_parts(35_416_321, 5302) - // Standard Error: 2_218 - .saturating_add(Weight::from_parts(246_259, 0).saturating_mul(a.into())) + // Minimum execution time: 35_481_000 picoseconds. + Weight::from_parts(36_519_715, 5302) + // Standard Error: 1_890 + .saturating_add(Weight::from_parts(244_558, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -126,10 +126,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `362 + a * (56 ±0)` // Estimated: `5302` - // Minimum execution time: 34_564_000 picoseconds. - Weight::from_parts(35_882_112, 5302) - // Standard Error: 2_154 - .saturating_add(Weight::from_parts(233_994, 0).saturating_mul(a.into())) + // Minimum execution time: 35_305_000 picoseconds. + Weight::from_parts(36_553_001, 5302) + // Standard Error: 2_036 + .saturating_add(Weight::from_parts(242_515, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -145,12 +145,12 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `378 + a * (56 ±0) + p * (25 ±0)` // Estimated: `5302` - // Minimum execution time: 44_620_000 picoseconds. - Weight::from_parts(45_135_074, 5302) - // Standard Error: 4_328 - .saturating_add(Weight::from_parts(246_408, 0).saturating_mul(a.into())) - // Standard Error: 4_471 - .saturating_add(Weight::from_parts(8_602, 0).saturating_mul(p.into())) + // Minimum execution time: 45_390_000 picoseconds. + Weight::from_parts(46_008_128, 5302) + // Standard Error: 2_315 + .saturating_add(Weight::from_parts(254_058, 0).saturating_mul(a.into())) + // Standard Error: 2_392 + .saturating_add(Weight::from_parts(13_728, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -161,10 +161,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 32_757_000 picoseconds. - Weight::from_parts(33_645_012, 4310) - // Standard Error: 1_277 - .saturating_add(Weight::from_parts(46_366, 0).saturating_mul(p.into())) + // Minimum execution time: 33_447_000 picoseconds. + Weight::from_parts(34_388_004, 4310) + // Standard Error: 1_362 + .saturating_add(Weight::from_parts(49_102, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -175,10 +175,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 32_467_000 picoseconds. - Weight::from_parts(33_457_501, 4310) - // Standard Error: 1_310 - .saturating_add(Weight::from_parts(42_587, 0).saturating_mul(p.into())) + // Minimum execution time: 33_553_000 picoseconds. + Weight::from_parts(34_862_510, 4310) + // Standard Error: 1_510 + .saturating_add(Weight::from_parts(43_701, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -189,10 +189,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 29_820_000 picoseconds. - Weight::from_parts(30_584_239, 4310) - // Standard Error: 1_103 - .saturating_add(Weight::from_parts(31_713, 0).saturating_mul(p.into())) + // Minimum execution time: 30_582_000 picoseconds. + Weight::from_parts(31_652_143, 4310) + // Standard Error: 1_177 + .saturating_add(Weight::from_parts(26_896, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -203,10 +203,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `194` // Estimated: `4310` - // Minimum execution time: 35_153_000 picoseconds. - Weight::from_parts(36_492_901, 4310) - // Standard Error: 1_548 - .saturating_add(Weight::from_parts(24_192, 0).saturating_mul(p.into())) + // Minimum execution time: 36_513_000 picoseconds. + Weight::from_parts(37_673_048, 4310) + // Standard Error: 1_389 + .saturating_add(Weight::from_parts(24_518, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -217,11 +217,26 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `207 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 30_904_000 picoseconds. - Weight::from_parts(31_797_545, 4310) - // Standard Error: 1_306 - .saturating_add(Weight::from_parts(32_233, 0).saturating_mul(p.into())) + // Minimum execution time: 31_847_000 picoseconds. + Weight::from_parts(32_805_219, 4310) + // Standard Error: 1_241 + .saturating_add(Weight::from_parts(34_048, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) + fn poke_deposit() -> Weight { + // Proof Size summary in bytes: + // Measured: `496` + // Estimated: `5302` + // Minimum execution time: 62_413_000 picoseconds. + Weight::from_parts(64_462_000, 5302) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } } diff --git a/operator/runtime/mainnet/src/weights/pallet_randomness.rs b/operator/runtime/mainnet/src/weights/pallet_randomness.rs index 5f7fffcd..aa3ca7e3 100644 --- a/operator/runtime/mainnet/src/weights/pallet_randomness.rs +++ b/operator/runtime/mainnet/src/weights/pallet_randomness.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_randomness`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/pallet_referenda.rs b/operator/runtime/mainnet/src/weights/pallet_referenda.rs index 2ed78f58..34d057fa 100644 --- a/operator/runtime/mainnet/src/weights/pallet_referenda.rs +++ b/operator/runtime/mainnet/src/weights/pallet_referenda.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_referenda` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_referenda`. pub struct WeightInfo(PhantomData); @@ -65,8 +65,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `341` // Estimated: `13328` - // Minimum execution time: 46_942_000 picoseconds. - Weight::from_parts(47_776_000, 13328) + // Minimum execution time: 46_470_000 picoseconds. + Weight::from_parts(48_034_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -80,8 +80,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 64_105_000 picoseconds. - Weight::from_parts(65_844_000, 25666) + // Minimum execution time: 63_526_000 picoseconds. + Weight::from_parts(65_277_000, 25666) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -99,8 +99,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3375` // Estimated: `13328` - // Minimum execution time: 83_359_000 picoseconds. - Weight::from_parts(85_906_000, 13328) + // Minimum execution time: 83_866_000 picoseconds. + Weight::from_parts(85_928_000, 13328) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -118,8 +118,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3395` // Estimated: `13328` - // Minimum execution time: 83_531_000 picoseconds. - Weight::from_parts(85_376_000, 13328) + // Minimum execution time: 82_780_000 picoseconds. + Weight::from_parts(85_145_000, 13328) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -135,8 +135,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 75_057_000 picoseconds. - Weight::from_parts(76_930_000, 25666) + // Minimum execution time: 74_713_000 picoseconds. + Weight::from_parts(76_347_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -152,8 +152,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 73_247_000 picoseconds. - Weight::from_parts(74_642_000, 25666) + // Minimum execution time: 72_541_000 picoseconds. + Weight::from_parts(73_826_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -163,8 +163,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `492` // Estimated: `3795` - // Minimum execution time: 40_871_000 picoseconds. - Weight::from_parts(42_452_000, 3795) + // Minimum execution time: 40_842_000 picoseconds. + Weight::from_parts(41_908_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -174,8 +174,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `450` // Estimated: `3795` - // Minimum execution time: 37_415_000 picoseconds. - Weight::from_parts(38_740_000, 3795) + // Minimum execution time: 37_568_000 picoseconds. + Weight::from_parts(38_417_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -189,8 +189,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `25666` - // Minimum execution time: 41_872_000 picoseconds. - Weight::from_parts(43_067_000, 25666) + // Minimum execution time: 41_152_000 picoseconds. + Weight::from_parts(42_308_000, 25666) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -206,10 +206,10 @@ impl pallet_referenda::WeightInfo for WeightInfo { /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) fn kill() -> Weight { // Proof Size summary in bytes: - // Measured: `946` + // Measured: `858` // Estimated: `25666` - // Minimum execution time: 126_251_000 picoseconds. - Weight::from_parts(128_260_000, 25666) + // Minimum execution time: 131_591_000 picoseconds. + Weight::from_parts(135_347_000, 25666) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -221,8 +221,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `240` // Estimated: `5477` - // Minimum execution time: 14_192_000 picoseconds. - Weight::from_parts(14_730_000, 5477) + // Minimum execution time: 13_981_000 picoseconds. + Weight::from_parts(14_864_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -236,8 +236,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3228` // Estimated: `13328` - // Minimum execution time: 54_874_000 picoseconds. - Weight::from_parts(57_256_000, 13328) + // Minimum execution time: 55_836_000 picoseconds. + Weight::from_parts(57_124_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -251,8 +251,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3228` // Estimated: `13328` - // Minimum execution time: 57_224_000 picoseconds. - Weight::from_parts(59_544_000, 13328) + // Minimum execution time: 57_879_000 picoseconds. + Weight::from_parts(59_996_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -264,8 +264,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3053` // Estimated: `5477` - // Minimum execution time: 30_604_000 picoseconds. - Weight::from_parts(31_545_000, 5477) + // Minimum execution time: 30_454_000 picoseconds. + Weight::from_parts(31_536_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -277,8 +277,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3053` // Estimated: `5477` - // Minimum execution time: 30_531_000 picoseconds. - Weight::from_parts(31_459_000, 5477) + // Minimum execution time: 31_180_000 picoseconds. + Weight::from_parts(32_199_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -292,8 +292,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3057` // Estimated: `5477` - // Minimum execution time: 37_560_000 picoseconds. - Weight::from_parts(38_831_000, 5477) + // Minimum execution time: 37_645_000 picoseconds. + Weight::from_parts(39_076_000, 5477) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -307,8 +307,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3077` // Estimated: `5477` - // Minimum execution time: 35_842_000 picoseconds. - Weight::from_parts(37_017_000, 5477) + // Minimum execution time: 36_635_000 picoseconds. + Weight::from_parts(37_731_000, 5477) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -320,8 +320,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `387` // Estimated: `13328` - // Minimum execution time: 27_478_000 picoseconds. - Weight::from_parts(28_138_000, 13328) + // Minimum execution time: 27_365_000 picoseconds. + Weight::from_parts(27_973_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -333,8 +333,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 28_249_000 picoseconds. - Weight::from_parts(29_090_000, 13328) + // Minimum execution time: 27_360_000 picoseconds. + Weight::from_parts(28_430_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -344,8 +344,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `332` // Estimated: `3795` - // Minimum execution time: 18_482_000 picoseconds. - Weight::from_parts(19_075_000, 3795) + // Minimum execution time: 18_239_000 picoseconds. + Weight::from_parts(19_189_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -359,8 +359,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 36_350_000 picoseconds. - Weight::from_parts(37_343_000, 13328) + // Minimum execution time: 36_238_000 picoseconds. + Weight::from_parts(37_135_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -374,8 +374,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 38_004_000 picoseconds. - Weight::from_parts(39_280_000, 13328) + // Minimum execution time: 38_170_000 picoseconds. + Weight::from_parts(39_188_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -387,8 +387,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 33_857_000 picoseconds. - Weight::from_parts(35_149_000, 13328) + // Minimum execution time: 33_748_000 picoseconds. + Weight::from_parts(34_950_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -400,8 +400,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `459` // Estimated: `13328` - // Minimum execution time: 33_935_000 picoseconds. - Weight::from_parts(34_841_000, 13328) + // Minimum execution time: 33_579_000 picoseconds. + Weight::from_parts(34_302_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -413,8 +413,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 32_317_000 picoseconds. - Weight::from_parts(33_094_000, 13328) + // Minimum execution time: 31_948_000 picoseconds. + Weight::from_parts(32_478_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -426,8 +426,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `13328` - // Minimum execution time: 31_597_000 picoseconds. - Weight::from_parts(32_533_000, 13328) + // Minimum execution time: 31_248_000 picoseconds. + Weight::from_parts(32_217_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -441,8 +441,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `25666` - // Minimum execution time: 47_633_000 picoseconds. - Weight::from_parts(48_779_000, 25666) + // Minimum execution time: 47_959_000 picoseconds. + Weight::from_parts(49_897_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -454,8 +454,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 33_962_000 picoseconds. - Weight::from_parts(35_282_000, 13328) + // Minimum execution time: 34_667_000 picoseconds. + Weight::from_parts(35_697_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -471,8 +471,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `437` // Estimated: `3795` - // Minimum execution time: 25_504_000 picoseconds. - Weight::from_parts(26_454_000, 3795) + // Minimum execution time: 25_848_000 picoseconds. + Weight::from_parts(26_555_000, 3795) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -484,8 +484,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `409` // Estimated: `3795` - // Minimum execution time: 20_906_000 picoseconds. - Weight::from_parts(21_623_000, 3795) + // Minimum execution time: 20_946_000 picoseconds. + Weight::from_parts(21_747_000, 3795) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs b/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs index a6fc4eaa..691d6853 100644 --- a/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs +++ b/operator/runtime/mainnet/src/weights/pallet_safe_mode.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_safe_mode` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_safe_mode`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `42` // Estimated: `1489` - // Minimum execution time: 2_930_000 picoseconds. - Weight::from_parts(3_142_000, 1489) + // Minimum execution time: 2_922_000 picoseconds. + Weight::from_parts(3_044_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:1) @@ -71,8 +71,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 8_733_000 picoseconds. - Weight::from_parts(9_118_000, 1489) + // Minimum execution time: 9_160_000 picoseconds. + Weight::from_parts(9_440_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -89,8 +89,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `42` // Estimated: `1489` - // Minimum execution time: 10_347_000 picoseconds. - Weight::from_parts(10_738_000, 1489) + // Minimum execution time: 10_958_000 picoseconds. + Weight::from_parts(11_216_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -107,8 +107,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 11_173_000 picoseconds. - Weight::from_parts(11_497_000, 1489) + // Minimum execution time: 11_891_000 picoseconds. + Weight::from_parts(12_291_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -118,8 +118,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 10_996_000 picoseconds. - Weight::from_parts(11_364_000, 1489) + // Minimum execution time: 11_677_000 picoseconds. + Weight::from_parts(11_920_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -138,8 +138,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `167` // Estimated: `3754` - // Minimum execution time: 53_992_000 picoseconds. - Weight::from_parts(54_922_000, 3754) + // Minimum execution time: 55_642_000 picoseconds. + Weight::from_parts(56_727_000, 3754) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -151,8 +151,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `167` // Estimated: `3754` - // Minimum execution time: 41_463_000 picoseconds. - Weight::from_parts(42_724_000, 3754) + // Minimum execution time: 43_585_000 picoseconds. + Weight::from_parts(44_233_000, 3754) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_scheduler.rs b/operator/runtime/mainnet/src/weights/pallet_scheduler.rs index ba769492..906c5c8b 100644 --- a/operator/runtime/mainnet/src/weights/pallet_scheduler.rs +++ b/operator/runtime/mainnet/src/weights/pallet_scheduler.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_scheduler`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `31` // Estimated: `1489` - // Minimum execution time: 4_364_000 picoseconds. - Weight::from_parts(4_573_000, 1489) + // Minimum execution time: 7_903_000 picoseconds. + Weight::from_parts(8_132_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -73,10 +73,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 5_225_000 picoseconds. - Weight::from_parts(8_824_891, 13328) - // Standard Error: 1_735 - .saturating_add(Weight::from_parts(430_826, 0).saturating_mul(s.into())) + // Minimum execution time: 5_161_000 picoseconds. + Weight::from_parts(8_699_327, 13328) + // Standard Error: 1_700 + .saturating_add(Weight::from_parts(432_660, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -84,8 +84,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_684_000 picoseconds. - Weight::from_parts(4_811_000, 0) + // Minimum execution time: 4_672_000 picoseconds. + Weight::from_parts(4_762_000, 0) } /// Storage: `Preimage::PreimageFor` (r:1 w:1) /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) @@ -98,10 +98,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `140 + s * (1 ±0)` // Estimated: `3605 + s * (1 ±0)` - // Minimum execution time: 24_317_000 picoseconds. - Weight::from_parts(24_628_000, 3605) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_471, 0).saturating_mul(s.into())) + // Minimum execution time: 23_915_000 picoseconds. + Weight::from_parts(24_247_000, 3605) + // Standard Error: 5 + .saturating_add(Weight::from_parts(1_566, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) @@ -112,16 +112,16 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_126_000 picoseconds. - Weight::from_parts(7_369_000, 0) + // Minimum execution time: 6_882_000 picoseconds. + Weight::from_parts(7_141_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } fn service_task_periodic() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_636_000 picoseconds. - Weight::from_parts(4_861_000, 0) + // Minimum execution time: 4_526_000 picoseconds. + Weight::from_parts(4_686_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -131,16 +131,16 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 10_201_000 picoseconds. - Weight::from_parts(10_606_000, 3997) + // Minimum execution time: 10_200_000 picoseconds. + Weight::from_parts(10_608_000, 3997) .saturating_add(T::DbWeight::get().reads(2_u64)) } fn execute_dispatch_unsigned() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_456_000 picoseconds. - Weight::from_parts(3_629_000, 0) + // Minimum execution time: 3_346_000 picoseconds. + Weight::from_parts(3_540_000, 0) } /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(9863), added: 12338, mode: `MaxEncodedLen`) @@ -149,10 +149,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 14_154_000 picoseconds. - Weight::from_parts(17_780_196, 13328) - // Standard Error: 1_806 - .saturating_add(Weight::from_parts(461_547, 0).saturating_mul(s.into())) + // Minimum execution time: 14_167_000 picoseconds. + Weight::from_parts(17_709_206, 13328) + // Standard Error: 1_739 + .saturating_add(Weight::from_parts(479_563, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -167,10 +167,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 20_854_000 picoseconds. - Weight::from_parts(20_500_837, 13328) - // Standard Error: 1_309 - .saturating_add(Weight::from_parts(716_439, 0).saturating_mul(s.into())) + // Minimum execution time: 20_774_000 picoseconds. + Weight::from_parts(20_493_987, 13328) + // Standard Error: 1_273 + .saturating_add(Weight::from_parts(734_576, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -183,10 +183,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `255 + s * (185 ±0)` // Estimated: `13328` - // Minimum execution time: 18_910_000 picoseconds. - Weight::from_parts(24_044_050, 13328) - // Standard Error: 3_027 - .saturating_add(Weight::from_parts(498_855, 0).saturating_mul(s.into())) + // Minimum execution time: 19_069_000 picoseconds. + Weight::from_parts(23_968_971, 13328) + // Standard Error: 2_931 + .saturating_add(Weight::from_parts(518_729, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -201,10 +201,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `281 + s * (185 ±0)` // Estimated: `13328` - // Minimum execution time: 24_194_000 picoseconds. - Weight::from_parts(24_942_018, 13328) - // Standard Error: 1_735 - .saturating_add(Weight::from_parts(748_910, 0).saturating_mul(s.into())) + // Minimum execution time: 24_608_000 picoseconds. + Weight::from_parts(24_573_857, 13328) + // Standard Error: 1_437 + .saturating_add(Weight::from_parts(770_794, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -217,10 +217,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `118` // Estimated: `13328` - // Minimum execution time: 13_000_000 picoseconds. - Weight::from_parts(13_499_355, 13328) - // Standard Error: 583 - .saturating_add(Weight::from_parts(35_627, 0).saturating_mul(s.into())) + // Minimum execution time: 13_030_000 picoseconds. + Weight::from_parts(13_365_402, 13328) + // Standard Error: 504 + .saturating_add(Weight::from_parts(30_282, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -232,8 +232,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `8928` // Estimated: `13328` - // Minimum execution time: 33_216_000 picoseconds. - Weight::from_parts(34_313_000, 13328) + // Minimum execution time: 33_313_000 picoseconds. + Weight::from_parts(34_175_000, 13328) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -247,8 +247,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `9606` // Estimated: `13328` - // Minimum execution time: 40_693_000 picoseconds. - Weight::from_parts(41_719_000, 13328) + // Minimum execution time: 40_833_000 picoseconds. + Weight::from_parts(41_597_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -261,7 +261,7 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Measured: `8940` // Estimated: `13328` // Minimum execution time: 31_413_000 picoseconds. - Weight::from_parts(32_400_000, 13328) + Weight::from_parts(32_185_000, 13328) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -275,8 +275,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `9618` // Estimated: `13328` - // Minimum execution time: 38_962_000 picoseconds. - Weight::from_parts(40_142_000, 13328) + // Minimum execution time: 39_263_000 picoseconds. + Weight::from_parts(40_723_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_session.rs b/operator/runtime/mainnet/src/weights/pallet_session.rs index 19df1fa9..6aefa3cf 100644 --- a/operator/runtime/mainnet/src/weights/pallet_session.rs +++ b/operator/runtime/mainnet/src/weights/pallet_session.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_session`. pub struct WeightInfo(PhantomData); @@ -63,8 +63,8 @@ impl pallet_session::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `350` // Estimated: `11240` - // Minimum execution time: 36_482_000 picoseconds. - Weight::from_parts(37_467_000, 11240) + // Minimum execution time: 36_955_000 picoseconds. + Weight::from_parts(37_979_000, 11240) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -76,8 +76,8 @@ impl pallet_session::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `328` // Estimated: `3793` - // Minimum execution time: 21_767_000 picoseconds. - Weight::from_parts(22_530_000, 3793) + // Minimum execution time: 21_930_000 picoseconds. + Weight::from_parts(22_497_000, 3793) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs b/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs index 7ec61ac9..920ad4b0 100644 --- a/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs +++ b/operator/runtime/mainnet/src/weights/pallet_storage_providers.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_storage_providers` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_storage_providers`. pub struct WeightInfo(PhantomData); @@ -69,8 +69,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 87_582_000 picoseconds. - Weight::from_parts(89_898_000, 5628) + // Minimum execution time: 90_003_000 picoseconds. + Weight::from_parts(91_569_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -88,8 +88,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 88_155_000 picoseconds. - Weight::from_parts(90_220_000, 5628) + // Minimum execution time: 89_887_000 picoseconds. + Weight::from_parts(91_298_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -111,8 +111,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `474` // Estimated: `5628` - // Minimum execution time: 38_210_000 picoseconds. - Weight::from_parts(39_338_000, 5628) + // Minimum execution time: 38_702_000 picoseconds. + Weight::from_parts(39_812_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -136,8 +136,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `487` // Estimated: `5628` - // Minimum execution time: 54_698_000 picoseconds. - Weight::from_parts(55_937_000, 5628) + // Minimum execution time: 55_286_000 picoseconds. + Weight::from_parts(56_704_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -151,8 +151,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `507` // Estimated: `5628` - // Minimum execution time: 65_127_000 picoseconds. - Weight::from_parts(65_875_000, 5628) + // Minimum execution time: 66_666_000 picoseconds. + Weight::from_parts(67_806_000, 5628) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -175,10 +175,10 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `775 + n * (83 ±0)` // Estimated: `8186 + n * (3598 ±0)` - // Minimum execution time: 91_582_000 picoseconds. - Weight::from_parts(91_148_393, 8186) - // Standard Error: 9_568 - .saturating_add(Weight::from_parts(6_388_975, 0).saturating_mul(n.into())) + // Minimum execution time: 93_173_000 picoseconds. + Weight::from_parts(93_204_267, 8186) + // Standard Error: 10_539 + .saturating_add(Weight::from_parts(6_421_410, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(7_u64)) @@ -205,8 +205,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `720` // Estimated: `4624` - // Minimum execution time: 92_255_000 picoseconds. - Weight::from_parts(93_446_000, 4624) + // Minimum execution time: 94_039_000 picoseconds. + Weight::from_parts(95_515_000, 4624) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -228,8 +228,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `679` // Estimated: `4624` - // Minimum execution time: 82_856_000 picoseconds. - Weight::from_parts(85_018_000, 4624) + // Minimum execution time: 85_086_000 picoseconds. + Weight::from_parts(85_986_000, 4624) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -251,8 +251,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `679` // Estimated: `4624` - // Minimum execution time: 102_474_000 picoseconds. - Weight::from_parts(104_618_000, 4624) + // Minimum execution time: 105_213_000 picoseconds. + Weight::from_parts(106_940_000, 4624) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -270,8 +270,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `649` // Estimated: `4608` - // Minimum execution time: 78_146_000 picoseconds. - Weight::from_parts(80_013_000, 4608) + // Minimum execution time: 79_773_000 picoseconds. + Weight::from_parts(80_438_000, 4608) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -289,8 +289,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `649` // Estimated: `4608` - // Minimum execution time: 97_535_000 picoseconds. - Weight::from_parts(99_407_000, 4608) + // Minimum execution time: 100_651_000 picoseconds. + Weight::from_parts(102_407_000, 4608) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -306,8 +306,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `591` // Estimated: `4608` - // Minimum execution time: 45_319_000 picoseconds. - Weight::from_parts(46_335_000, 4608) + // Minimum execution time: 44_813_000 picoseconds. + Weight::from_parts(46_064_000, 4608) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -321,8 +321,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `631` // Estimated: `4608` - // Minimum execution time: 32_867_000 picoseconds. - Weight::from_parts(33_943_000, 4608) + // Minimum execution time: 32_884_000 picoseconds. + Weight::from_parts(33_953_000, 4608) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -338,8 +338,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `508` // Estimated: `4624` - // Minimum execution time: 34_149_000 picoseconds. - Weight::from_parts(35_552_000, 4624) + // Minimum execution time: 34_195_000 picoseconds. + Weight::from_parts(35_093_000, 4624) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -353,8 +353,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1316` // Estimated: `4624` - // Minimum execution time: 32_650_000 picoseconds. - Weight::from_parts(33_556_000, 4624) + // Minimum execution time: 32_669_000 picoseconds. + Weight::from_parts(33_367_000, 4624) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -382,8 +382,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 126_083_000 picoseconds. - Weight::from_parts(127_714_000, 5628) + // Minimum execution time: 128_522_000 picoseconds. + Weight::from_parts(130_641_000, 5628) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -409,8 +409,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 104_033_000 picoseconds. - Weight::from_parts(106_787_000, 5628) + // Minimum execution time: 106_522_000 picoseconds. + Weight::from_parts(108_479_000, 5628) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -432,10 +432,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn slash_without_awaiting_top_up() -> Weight { // Proof Size summary in bytes: - // Measured: `871` + // Measured: `783` // Estimated: `6172` - // Minimum execution time: 159_588_000 picoseconds. - Weight::from_parts(161_719_000, 6172) + // Minimum execution time: 183_919_000 picoseconds. + Weight::from_parts(187_722_000, 6172) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -463,10 +463,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`) fn slash_with_awaiting_top_up() -> Weight { // Proof Size summary in bytes: - // Measured: `871` + // Measured: `783` // Estimated: `6787` - // Minimum execution time: 126_797_000 picoseconds. - Weight::from_parts(129_937_000, 6787) + // Minimum execution time: 152_409_000 picoseconds. + Weight::from_parts(155_137_000, 6787) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -492,8 +492,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `758` // Estimated: `4624` - // Minimum execution time: 111_138_000 picoseconds. - Weight::from_parts(113_128_000, 4624) + // Minimum execution time: 114_052_000 picoseconds. + Weight::from_parts(116_475_000, 4624) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -523,10 +523,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) fn delete_provider_bsp() -> Weight { // Proof Size summary in bytes: - // Measured: `853` + // Measured: `887` // Estimated: `6038` - // Minimum execution time: 80_884_000 picoseconds. - Weight::from_parts(82_175_000, 6038) + // Minimum execution time: 81_601_000 picoseconds. + Weight::from_parts(83_486_000, 6038) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(9_u64)) } @@ -550,14 +550,14 @@ impl pallet_storage_providers::weights::WeightInfo for /// The range of component `m` is `[0, 20]`. fn delete_provider_msp(n: u32, m: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1845 + m * (54 ±0) + n * (83 ±0)` + // Measured: `1878 + m * (54 ±0) + n * (83 ±0)` // Estimated: `8186 + m * (2571 ±0) + n * (3598 ±0)` - // Minimum execution time: 184_840_000 picoseconds. - Weight::from_parts(79_815_534, 8186) - // Standard Error: 30_345 - .saturating_add(Weight::from_parts(6_847_952, 0).saturating_mul(n.into())) - // Standard Error: 30_345 - .saturating_add(Weight::from_parts(5_652_904, 0).saturating_mul(m.into())) + // Minimum execution time: 183_880_000 picoseconds. + Weight::from_parts(75_805_538, 8186) + // Standard Error: 27_815 + .saturating_add(Weight::from_parts(6_977_957, 0).saturating_mul(n.into())) + // Standard Error: 27_815 + .saturating_add(Weight::from_parts(5_793_985, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into()))) @@ -577,8 +577,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `549` // Estimated: `4624` - // Minimum execution time: 27_400_000 picoseconds. - Weight::from_parts(27_944_000, 4624) + // Minimum execution time: 27_399_000 picoseconds. + Weight::from_parts(28_226_000, 4624) .saturating_add(T::DbWeight::get().reads(3_u64)) } /// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1) @@ -601,8 +601,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1038` // Estimated: `6172` - // Minimum execution time: 103_682_000 picoseconds. - Weight::from_parts(105_525_000, 6172) + // Minimum execution time: 104_789_000 picoseconds. + Weight::from_parts(106_439_000, 6172) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -622,8 +622,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `775` // Estimated: `6172` - // Minimum execution time: 83_347_000 picoseconds. - Weight::from_parts(84_976_000, 6172) + // Minimum execution time: 83_940_000 picoseconds. + Weight::from_parts(85_729_000, 6172) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_sudo.rs b/operator/runtime/mainnet/src/weights/pallet_sudo.rs index e9677288..718e08cf 100644 --- a/operator/runtime/mainnet/src/weights/pallet_sudo.rs +++ b/operator/runtime/mainnet/src/weights/pallet_sudo.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_sudo` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_sudo`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 13_607_000 picoseconds. - Weight::from_parts(14_103_000, 1505) + // Minimum execution time: 13_531_000 picoseconds. + Weight::from_parts(13_980_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 14_973_000 picoseconds. - Weight::from_parts(15_369_000, 1505) + // Minimum execution time: 14_826_000 picoseconds. + Weight::from_parts(15_162_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Sudo::Key` (r:1 w:0) @@ -82,8 +82,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 14_747_000 picoseconds. - Weight::from_parts(15_255_000, 1505) + // Minimum execution time: 14_605_000 picoseconds. + Weight::from_parts(15_152_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Sudo::Key` (r:1 w:1) @@ -92,8 +92,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 12_652_000 picoseconds. - Weight::from_parts(13_060_000, 1505) + // Minimum execution time: 12_396_000 picoseconds. + Weight::from_parts(12_931_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -103,8 +103,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 5_772_000 picoseconds. - Weight::from_parts(6_038_000, 1505) + // Minimum execution time: 7_242_000 picoseconds. + Weight::from_parts(7_744_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_timestamp.rs b/operator/runtime/mainnet/src/weights/pallet_timestamp.rs index a00d76f5..a802c834 100644 --- a/operator/runtime/mainnet/src/weights/pallet_timestamp.rs +++ b/operator/runtime/mainnet/src/weights/pallet_timestamp.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_timestamp`. pub struct WeightInfo(PhantomData); @@ -63,8 +63,8 @@ impl pallet_timestamp::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `1493` - // Minimum execution time: 11_355_000 picoseconds. - Weight::from_parts(12_106_000, 1493) + // Minimum execution time: 11_294_000 picoseconds. + Weight::from_parts(11_803_000, 1493) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,7 +72,7 @@ impl pallet_timestamp::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `94` // Estimated: `0` - // Minimum execution time: 5_289_000 picoseconds. - Weight::from_parts(5_464_000, 0) + // Minimum execution time: 5_152_000 picoseconds. + Weight::from_parts(5_336_000, 0) } } diff --git a/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs b/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs index afa6a229..c8304890 100644 --- a/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs +++ b/operator/runtime/mainnet/src/weights/pallet_transaction_payment.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_transaction_payment` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_transaction_payment`. pub struct WeightInfo(PhantomData); @@ -58,13 +58,13 @@ impl pallet_transaction_payment::WeightInfo for WeightI /// Storage: `System::Account` (r:3 w:3) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) fn charge_transaction_payment() -> Weight { // Proof Size summary in bytes: - // Measured: `403` + // Measured: `315` // Estimated: `8763` - // Minimum execution time: 95_599_000 picoseconds. - Weight::from_parts(97_011_000, 8763) + // Minimum execution time: 95_509_000 picoseconds. + Weight::from_parts(97_144_000, 8763) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_treasury.rs b/operator/runtime/mainnet/src/weights/pallet_treasury.rs index 0794cf72..71bea82c 100644 --- a/operator/runtime/mainnet/src/weights/pallet_treasury.rs +++ b/operator/runtime/mainnet/src/weights/pallet_treasury.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_treasury` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_treasury`. pub struct WeightInfo(PhantomData); @@ -63,10 +63,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) fn spend_local() -> Weight { // Proof Size summary in bytes: - // Measured: `76` + // Measured: `109` // Estimated: `1887` - // Minimum execution time: 15_636_000 picoseconds. - Weight::from_parts(16_315_000, 1887) + // Minimum execution time: 15_511_000 picoseconds. + Weight::from_parts(16_008_000, 1887) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -74,30 +74,30 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) fn remove_approval() -> Weight { // Proof Size summary in bytes: - // Measured: `161` + // Measured: `194` // Estimated: `1887` - // Minimum execution time: 8_531_000 picoseconds. - Weight::from_parts(8_987_000, 1887) + // Minimum execution time: 8_316_000 picoseconds. + Weight::from_parts(8_611_000, 1887) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `System::Account` (r:1 w:0) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Deactivated` (r:1 w:1) + /// Storage: `Treasury::Deactivated` (r:1 w:0) /// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `Treasury::LastSpendPeriod` (r:1 w:1) /// Proof: `Treasury::LastSpendPeriod` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// The range of component `p` is `[0, 99]`. fn on_initialize_proposals(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `262 + p * (1 ±0)` + // Measured: `295 + p * (1 ±0)` // Estimated: `3581` - // Minimum execution time: 16_618_000 picoseconds. - Weight::from_parts(19_663_420, 3581) - // Standard Error: 841 - .saturating_add(Weight::from_parts(60_142, 0).saturating_mul(p.into())) + // Minimum execution time: 10_904_000 picoseconds. + Weight::from_parts(13_044_919, 3581) + // Standard Error: 572 + .saturating_add(Weight::from_parts(46_302, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Treasury::SpendCount` (r:1 w:1) /// Proof: `Treasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -105,10 +105,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn spend() -> Weight { // Proof Size summary in bytes: - // Measured: `76` + // Measured: `109` // Estimated: `1489` - // Minimum execution time: 13_695_000 picoseconds. - Weight::from_parts(14_136_000, 1489) + // Minimum execution time: 14_169_000 picoseconds. + Weight::from_parts(14_467_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -118,10 +118,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) fn payout() -> Weight { // Proof Size summary in bytes: - // Measured: `387` + // Measured: `383` // Estimated: `6172` - // Minimum execution time: 74_692_000 picoseconds. - Weight::from_parts(75_892_000, 6172) + // Minimum execution time: 78_243_000 picoseconds. + Weight::from_parts(79_082_000, 6172) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -129,10 +129,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn check_status() -> Weight { // Proof Size summary in bytes: - // Measured: `182` + // Measured: `215` // Estimated: `3522` - // Minimum execution time: 16_078_000 picoseconds. - Weight::from_parts(16_627_000, 3522) + // Minimum execution time: 16_212_000 picoseconds. + Weight::from_parts(16_769_000, 3522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -140,10 +140,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn void_spend() -> Weight { // Proof Size summary in bytes: - // Measured: `182` + // Measured: `215` // Estimated: `3522` - // Minimum execution time: 14_652_000 picoseconds. - Weight::from_parts(15_148_000, 3522) + // Minimum execution time: 14_620_000 picoseconds. + Weight::from_parts(15_193_000, 3522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs b/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs index 77db6715..3328a1bd 100644 --- a/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs +++ b/operator/runtime/mainnet/src/weights/pallet_tx_pause.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_tx_pause` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_tx_pause`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_tx_pause::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `4` // Estimated: `3997` - // Minimum execution time: 15_866_000 picoseconds. - Weight::from_parts(16_242_000, 3997) + // Minimum execution time: 16_199_000 picoseconds. + Weight::from_parts(16_552_000, 3997) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_tx_pause::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `566` // Estimated: `3997` - // Minimum execution time: 22_818_000 picoseconds. - Weight::from_parts(23_274_000, 3997) + // Minimum execution time: 23_207_000 picoseconds. + Weight::from_parts(23_645_000, 3997) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/pallet_utility.rs b/operator/runtime/mainnet/src/weights/pallet_utility.rs index a6247ad7..b9915e72 100644 --- a/operator/runtime/mainnet/src/weights/pallet_utility.rs +++ b/operator/runtime/mainnet/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_utility`. pub struct WeightInfo(PhantomData); @@ -119,4 +119,11 @@ impl pallet_utility::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(6_595_620, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + fn dispatch_as_fallible() -> Weight { + todo!() + } + + fn if_else() -> Weight { + todo!() + } } diff --git a/operator/runtime/mainnet/src/weights/pallet_whitelist.rs b/operator/runtime/mainnet/src/weights/pallet_whitelist.rs index 2f8f7806..fb918cea 100644 --- a/operator/runtime/mainnet/src/weights/pallet_whitelist.rs +++ b/operator/runtime/mainnet/src/weights/pallet_whitelist.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_whitelist` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_whitelist`. pub struct WeightInfo(PhantomData); @@ -65,8 +65,8 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `79` // Estimated: `3544` - // Minimum execution time: 23_637_000 picoseconds. - Weight::from_parts(24_259_000, 3544) + // Minimum execution time: 24_745_000 picoseconds. + Weight::from_parts(25_335_000, 3544) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -80,8 +80,8 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `208` // Estimated: `3544` - // Minimum execution time: 23_088_000 picoseconds. - Weight::from_parts(23_964_000, 3544) + // Minimum execution time: 23_440_000 picoseconds. + Weight::from_parts(24_278_000, 3544) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -98,10 +98,10 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `284 + n * (1 ±0)` // Estimated: `3748 + n * (1 ±0)` - // Minimum execution time: 37_405_000 picoseconds. - Weight::from_parts(37_859_000, 3748) - // Standard Error: 2 - .saturating_add(Weight::from_parts(1_490, 0).saturating_mul(n.into())) + // Minimum execution time: 38_594_000 picoseconds. + Weight::from_parts(39_131_000, 3748) + // Standard Error: 17 + .saturating_add(Weight::from_parts(2_181, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) @@ -117,10 +117,10 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `208` // Estimated: `3544` - // Minimum execution time: 28_495_000 picoseconds. - Weight::from_parts(29_144_139, 3544) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_270, 0).saturating_mul(n.into())) + // Minimum execution time: 29_015_000 picoseconds. + Weight::from_parts(29_999_392, 3544) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_324, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs index 68a8f967..bde1e6b2 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_ethereum_client.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_ethereum_client`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs index 7b593575..bc372018 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_inbound_queue_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_inbound_queue_v2`. pub struct WeightInfo(PhantomData); @@ -62,15 +62,15 @@ impl snowbridge_pallet_inbound_queue_v2::WeightInfo for /// Storage: `EthereumBeaconClient::FinalizedBeaconState` (r:1 w:0) /// Proof: `EthereumBeaconClient::FinalizedBeaconState` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) /// Storage: `EthereumInboundQueueV2::NonceBitmap` (r:1 w:1) /// Proof: `EthereumInboundQueueV2::NonceBitmap` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn submit() -> Weight { // Proof Size summary in bytes: // Measured: `339` - // Estimated: `3537` - // Minimum execution time: 109_626_000 picoseconds. - Weight::from_parts(111_334_000, 3537) + // Estimated: `3846` + // Minimum execution time: 110_452_000 picoseconds. + Weight::from_parts(112_335_000, 3846) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs index 391db9a7..d338949b 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_outbound_queue_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_outbound_queue_v2`. pub struct WeightInfo(PhantomData); @@ -67,8 +67,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `109` // Estimated: `1594` - // Minimum execution time: 26_609_000 picoseconds. - Weight::from_parts(26_963_000, 1594) + // Minimum execution time: 27_417_000 picoseconds. + Weight::from_parts(27_735_000, 1594) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -80,8 +80,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `1195` // Estimated: `2680` - // Minimum execution time: 40_225_000 picoseconds. - Weight::from_parts(41_223_000, 2680) + // Minimum execution time: 40_727_000 picoseconds. + Weight::from_parts(41_534_000, 2680) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -93,8 +93,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `202` // Estimated: `1687` - // Minimum execution time: 16_551_000 picoseconds. - Weight::from_parts(17_131_000, 1687) + // Minimum execution time: 16_559_000 picoseconds. + Weight::from_parts(17_233_000, 1687) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -106,8 +106,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_163_000 picoseconds. - Weight::from_parts(1_333_000, 0) + // Minimum execution time: 1_112_000 picoseconds. + Weight::from_parts(1_238_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `EthereumOutboundQueueV2::Nonce` (r:1 w:1) @@ -124,8 +124,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `180` // Estimated: `1493` - // Minimum execution time: 675_668_000 picoseconds. - Weight::from_parts(691_886_000, 1493) + // Minimum execution time: 703_817_000 picoseconds. + Weight::from_parts(719_553_000, 1493) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(36_u64)) } @@ -134,15 +134,15 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo /// Storage: `EthereumBeaconClient::FinalizedBeaconState` (r:1 w:0) /// Proof: `EthereumBeaconClient::FinalizedBeaconState` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) /// Storage: `EthereumOutboundQueueV2::PendingOrders` (r:1 w:1) /// Proof: `EthereumOutboundQueueV2::PendingOrders` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) fn submit_delivery_receipt() -> Weight { // Proof Size summary in bytes: // Measured: `498` - // Estimated: `3537` - // Minimum execution time: 109_539_000 picoseconds. - Weight::from_parts(110_836_000, 3537) + // Estimated: `3846` + // Minimum execution time: 108_800_000 picoseconds. + Weight::from_parts(110_019_000, 3846) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs index d2c0af0d..349af16c 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system`. pub struct WeightInfo(PhantomData); @@ -59,15 +59,15 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_981_000 picoseconds. - Weight::from_parts(9_400_000, 0) + // Minimum execution time: 9_304_000 picoseconds. + Weight::from_parts(9_554_000, 0) } fn set_operating_mode() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_846_000 picoseconds. - Weight::from_parts(7_083_000, 0) + // Minimum execution time: 6_886_000 picoseconds. + Weight::from_parts(7_218_000, 0) } /// Storage: `SnowbridgeSystem::PricingParameters` (r:0 w:1) /// Proof: `SnowbridgeSystem::PricingParameters` (`max_values`: Some(1), `max_size`: Some(112), added: 607, mode: `MaxEncodedLen`) @@ -75,16 +75,16 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_240_000 picoseconds. - Weight::from_parts(9_727_000, 0) + // Minimum execution time: 9_610_000 picoseconds. + Weight::from_parts(9_902_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } fn set_token_transfer_fees() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_367_000 picoseconds. - Weight::from_parts(7_648_000, 0) + // Minimum execution time: 7_741_000 picoseconds. + Weight::from_parts(7_880_000, 0) } /// Storage: `SnowbridgeSystem::ForeignToNativeId` (r:1 w:1) /// Proof: `SnowbridgeSystem::ForeignToNativeId` (`max_values`: None, `max_size`: Some(650), added: 3125, mode: `MaxEncodedLen`) @@ -94,8 +94,8 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `75` // Estimated: `4115` - // Minimum execution time: 19_799_000 picoseconds. - Weight::from_parts(20_492_000, 4115) + // Minimum execution time: 20_436_000 picoseconds. + Weight::from_parts(21_148_000, 4115) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs index 287f11a8..7741c299 100644 --- a/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs +++ b/operator/runtime/mainnet/src/weights/snowbridge_pallet_system_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_system_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system_v2`. pub struct WeightInfo(PhantomData); @@ -69,8 +69,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `81` // Estimated: `4115` - // Minimum execution time: 45_795_000 picoseconds. - Weight::from_parts(46_515_000, 4115) + // Minimum execution time: 46_371_000 picoseconds. + Weight::from_parts(47_814_000, 4115) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -84,8 +84,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `6` // Estimated: `3601` - // Minimum execution time: 36_207_000 picoseconds. - Weight::from_parts(36_763_000, 3601) + // Minimum execution time: 36_836_000 picoseconds. + Weight::from_parts(37_542_000, 3601) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -99,8 +99,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `6` // Estimated: `3601` - // Minimum execution time: 30_064_000 picoseconds. - Weight::from_parts(30_722_000, 3601) + // Minimum execution time: 30_274_000 picoseconds. + Weight::from_parts(31_230_000, 3601) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/mainnet/tests/common.rs b/operator/runtime/mainnet/tests/common.rs index 1e9ecdf2..f5f1bf21 100644 --- a/operator/runtime/mainnet/tests/common.rs +++ b/operator/runtime/mainnet/tests/common.rs @@ -168,9 +168,12 @@ impl ExtBuilder { .build_storage() .expect("System pallet builds valid default genesis config"); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); // Set up session keys for validators let session_keys: Vec<_> = validators diff --git a/operator/runtime/mainnet/tests/governance/benchmarks.rs b/operator/runtime/mainnet/tests/governance/benchmarks.rs index 4a27975a..53bac8c7 100644 --- a/operator/runtime/mainnet/tests/governance/benchmarks.rs +++ b/operator/runtime/mainnet/tests/governance/benchmarks.rs @@ -23,6 +23,8 @@ #![cfg(feature = "runtime-benchmarks")] use crate::common::*; +use alloc::vec::Vec; +use core::str::from_utf8; use datahaven_mainnet_runtime::{ configs::governance::council::{TechnicalMaxMembers, TechnicalMaxProposals}, governance::TracksInfo, @@ -36,7 +38,6 @@ use frame_support::{ traits::{Get, StorePreimage}, }; use pallet_conviction_voting::{AccountVote, Conviction, Vote}; -use sp_std::vec::Vec; /// Benchmark council proposal creation with varying member counts #[test] @@ -443,29 +444,32 @@ fn benchmark_council_maximum_load() { #[test] fn benchmark_track_operations() { ExtBuilder::governance().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); println!("Testing {} governance tracks", tracks.len()); - for (track_id, track_info) in tracks.iter() { + for track in tracks.iter() { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); let start_block = System::block_number(); // Create proposal for this track let proposal = RuntimeCall::System(frame_system::Call::set_storage { items: vec![( - format!(":track:{}:{}", track_id, track_info.name).into_bytes(), + format!(":track:{}:{}", track.id, track_name).into_bytes(), b"test".to_vec(), )], }); - let proposal_hash = make_proposal_hash(&proposal); assert_ok!(Preimage::note_preimage( RuntimeOrigin::signed(alice()), proposal.encode() )); + let bounded_proposal = ::bound(proposal).unwrap(); + // Map track to appropriate origin - let origin = if *track_id == 0 { + let origin = if track.id == 0 { frame_system::RawOrigin::Root.into() } else { frame_system::RawOrigin::Signed(alice()).into() @@ -474,19 +478,19 @@ fn benchmark_track_operations() { assert_ok!(Referenda::submit( RuntimeOrigin::signed(alice()), Box::new(origin), - DispatchTime::After(track_info.min_enactment_period), - Box::new(proposal_hash.into()) + bounded_proposal, + DispatchTime::After(track.info.min_enactment_period), )); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(bob()), - *track_id as u32 + track.id as u32 )); // Test voting on this track assert_ok!(ConvictionVoting::vote( RuntimeOrigin::signed(charlie()), - *track_id as u32, + track.id as u32, AccountVote::Standard { vote: Vote { aye: true, @@ -500,11 +504,11 @@ fn benchmark_track_operations() { println!( "Track {} ({}): processed in {} blocks (max_deciding: {}, decision_deposit: {})", - track_id, - track_info.name, + track.id, + track_name, end_block - start_block, - track_info.max_deciding, - track_info.decision_deposit + track.info.max_deciding, + track.info.decision_deposit ); } }); diff --git a/operator/runtime/mainnet/tests/governance/referenda.rs b/operator/runtime/mainnet/tests/governance/referenda.rs index 1731f369..e76513dd 100644 --- a/operator/runtime/mainnet/tests/governance/referenda.rs +++ b/operator/runtime/mainnet/tests/governance/referenda.rs @@ -21,6 +21,7 @@ use crate::common::*; use codec::Encode; +use core::str::from_utf8; use datahaven_mainnet_runtime::{ currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}, governance::TracksInfo, @@ -42,13 +43,16 @@ use pallet_referenda::{Event as ReferendaEvent, ReferendumInfo}; #[test] fn tracks_info_configured_correctly() { ExtBuilder::default().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); // Should have 6 tracks as configured assert_eq!(tracks.len(), 6); // Verify track IDs and names - let track_names: Vec<&str> = tracks.iter().map(|(_, info)| info.name).collect(); + let track_names: Vec<&str> = tracks + .iter() + .map(|track| from_utf8(&track.info.name).unwrap().trim_end_matches('\0')) + .collect(); assert_eq!( track_names, vec![ @@ -62,16 +66,17 @@ fn tracks_info_configured_correctly() { ); // Verify root track has strictest requirements - let (root_id, root_info) = &tracks[0]; - assert_eq!(*root_id, 0u16); - assert_eq!(root_info.max_deciding, 5); - assert_eq!(root_info.decision_deposit, 20 * KILOHAVE * SUPPLY_FACTOR); // 20 * KILO_HAVE + assert_eq!(tracks[0].id, 0u16); + assert_eq!(tracks[0].info.max_deciding, 5); + assert_eq!( + tracks[0].info.decision_deposit, + 20 * KILOHAVE * SUPPLY_FACTOR + ); // 20 * KILO_HAVE // Verify general admin track - let (admin_id, admin_info) = &tracks[2]; - assert_eq!(*admin_id, 2u16); - assert_eq!(admin_info.max_deciding, 10); - assert_eq!(admin_info.decision_deposit, 100 * HAVE * SUPPLY_FACTOR); + assert_eq!(tracks[2].id, 2u16); + assert_eq!(tracks[2].info.max_deciding, 10); + assert_eq!(tracks[2].info.decision_deposit, 100 * HAVE * SUPPLY_FACTOR); }); } @@ -225,7 +230,8 @@ fn referendum_timing_works() { )); // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); // Place decision deposit @@ -243,7 +249,8 @@ fn referendum_timing_works() { } // Advance time through decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + 1); // Referendum should still exist (may have timed out) @@ -499,7 +506,8 @@ fn referendum_insufficient_support_fails() { )); // Advance through the entire decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + track_info.confirm_period + 1); // Should still be ongoing or rejected due to insufficient support @@ -578,7 +586,8 @@ fn decision_deposit_mechanics_work() { } // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); let alice_balance_before = Balances::free_balance(&alice()); @@ -591,7 +600,8 @@ fn decision_deposit_mechanics_work() { // Alice's balance should decrease by decision deposit let alice_balance_after = Balances::free_balance(&alice()); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track assert_eq!( alice_balance_before - alice_balance_after, track_info.decision_deposit @@ -619,7 +629,8 @@ fn decision_deposit_mechanics_work() { fn track_capacity_limits_enforced() { ExtBuilder::default().build().execute_with(|| { // Use root track which has max_deciding of 5 (more reasonable for testing) - let track_info = &TracksInfo::tracks()[0].1; // root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // root track let max_deciding = track_info.max_deciding.min(5); // Use smaller number for testing // Submit max_deciding referenda (but cap at 5 for scheduler limits) @@ -723,7 +734,8 @@ fn insufficient_balance_for_deposits() { )); // Advance through prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); // Should fail to place decision deposit due to insufficient balance @@ -753,7 +765,8 @@ fn referendum_confirmation_period_works() { DispatchTime::After(10) )); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track // Advance through prepare period advance_referendum_time(track_info.prepare_period + 1); @@ -821,7 +834,8 @@ fn split_votes_with_conviction() { )); // Place decision deposit after prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(alice()), diff --git a/operator/runtime/mainnet/tests/lib.rs b/operator/runtime/mainnet/tests/lib.rs index c9044c1d..ff7c80b3 100644 --- a/operator/runtime/mainnet/tests/lib.rs +++ b/operator/runtime/mainnet/tests/lib.rs @@ -67,6 +67,7 @@ fn validate_transaction_fails_on_filtered_call() { max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } .into(), ); diff --git a/operator/runtime/mainnet/tests/treasury.rs b/operator/runtime/mainnet/tests/treasury.rs index b6195e21..cab39256 100644 --- a/operator/runtime/mainnet/tests/treasury.rs +++ b/operator/runtime/mainnet/tests/treasury.rs @@ -73,6 +73,7 @@ fn author_does_receive_priority_fee() { max_priority_fee_per_gas: Some(U256::from(200 * MILLIHAVE)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -115,6 +116,7 @@ fn total_issuance_after_evm_transaction_with_priority_fee() { max_priority_fee_per_gas: Some(U256::from(BASE_FEE_GENESIS)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -184,6 +186,7 @@ fn total_issuance_after_evm_transaction_without_priority_fee() { max_priority_fee_per_gas: None, nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); diff --git a/operator/runtime/stagenet/Cargo.toml b/operator/runtime/stagenet/Cargo.toml index c171e435..efd77c24 100644 --- a/operator/runtime/stagenet/Cargo.toml +++ b/operator/runtime/stagenet/Cargo.toml @@ -18,10 +18,11 @@ bridge-hub-common = { workspace = true, optional = true } codec = { workspace = true, features = ["derive"] } datahaven-runtime-common = { workspace = true } dhp-bridge = { workspace = true } +ethereum = { workspace = true } fp-account = { workspace = true } fp-evm = { workspace = true, features = ["serde"] } fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = ["serde", "try-runtime"] } +fp-self-contained = { workspace = true, features = ["serde"] } frame-benchmarking = { workspace = true, optional = true } frame-executive = { workspace = true } frame-metadata-hash-extension = { workspace = true } @@ -120,7 +121,6 @@ sp-offchain = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } sp-session = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-storage = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true, features = ["serde"] } @@ -191,6 +191,7 @@ std = [ "alloy-core/std", "codec/std", "datahaven-runtime-common/std", + "ethereum/std", "fp-account/std", "fp-evm/std", "frame-benchmarking?/std", @@ -283,7 +284,6 @@ std = [ "sp-runtime/std", "sp-session/std", "sp-staking/std", - "sp-std/std", "sp-storage/std", "sp-transaction-pool/std", "sp-version/std", diff --git a/operator/runtime/stagenet/src/benchmarks.rs b/operator/runtime/stagenet/src/benchmarks.rs index 0b400bad..1cfcd098 100644 --- a/operator/runtime/stagenet/src/benchmarks.rs +++ b/operator/runtime/stagenet/src/benchmarks.rs @@ -28,8 +28,7 @@ frame_benchmarking::define_benchmarks!( // Substrate pallets [pallet_balances, Balances] [pallet_session, pallet_session_benchmarking::Pallet::] - // FIXME: benchmarking identity fail - // [pallet_identity, Identity] + [pallet_identity, Identity] [pallet_im_online, ImOnline] [pallet_multisig, Multisig] [pallet_preimage, Preimage] diff --git a/operator/runtime/stagenet/src/configs/governance/origins.rs b/operator/runtime/stagenet/src/configs/governance/origins.rs index 0f943cf6..be8043d8 100644 --- a/operator/runtime/stagenet/src/configs/governance/origins.rs +++ b/operator/runtime/stagenet/src/configs/governance/origins.rs @@ -34,7 +34,16 @@ pub mod custom_origins { pub struct Pallet(_); #[derive( - PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug, EnumString, + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + TypeInfo, + RuntimeDebug, + EnumString, + DecodeWithMemTracking, )] #[strum(serialize_all = "snake_case")] #[pallet::origin] diff --git a/operator/runtime/stagenet/src/configs/governance/referenda.rs b/operator/runtime/stagenet/src/configs/governance/referenda.rs index 1ceb8cdf..9f8955c3 100644 --- a/operator/runtime/stagenet/src/configs/governance/referenda.rs +++ b/operator/runtime/stagenet/src/configs/governance/referenda.rs @@ -57,6 +57,8 @@ impl pallet_conviction_voting::Config for Runtime { type MaxVotes = ConstU32<20>; type MaxTurnout = frame_support::traits::TotalIssuanceOf; type Polls = Referenda; + type BlockNumberProvider = System; + type VotingHooks = (); } impl pallet_whitelist::Config for Runtime { @@ -79,8 +81,6 @@ impl pallet_whitelist::Config for Runtime { type WeightInfo = stagenet_weights::pallet_whitelist::WeightInfo; } -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); - // Referenda Implementation impl pallet_referenda::Config for Runtime { type WeightInfo = stagenet_weights::pallet_referenda::WeightInfo; @@ -100,4 +100,5 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = AlarmInterval; type Tracks = TracksInfo; type Preimages = Preimage; + type BlockNumberProvider = System; } diff --git a/operator/runtime/stagenet/src/configs/governance/tracks.rs b/operator/runtime/stagenet/src/configs/governance/tracks.rs index 388cf0b4..2bc22f7c 100644 --- a/operator/runtime/stagenet/src/configs/governance/tracks.rs +++ b/operator/runtime/stagenet/src/configs/governance/tracks.rs @@ -21,9 +21,13 @@ use super::*; use crate::currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}; +use alloc::borrow::Cow; +use core::str::from_utf8; +use core::str::FromStr; use datahaven_runtime_common::time::*; use pallet_referenda::Curve; -use sp_std::str::FromStr; +use pallet_referenda::Track; +use sp_runtime::str_array; const fn percent(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 100) @@ -32,12 +36,12 @@ const fn permill(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 1000) } -const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] = [ - ( - 0, - pallet_referenda::TrackInfo { +const TRACKS_DATA: [Track; 6] = [ + Track { + id: 0, + info: pallet_referenda::TrackInfo { // Name of this track. - name: "root", + name: str_array("root"), // A limit for the number of referenda on this track that can be being decided at once. // For Root origin this should generally be just one. max_deciding: 5, @@ -58,11 +62,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] // is needed for approval as a function of time into decision period. min_support: Curve::make_linear(14, 14, permill(5), percent(25)), }, - ), - ( - 1, - pallet_referenda::TrackInfo { - name: "whitelisted_caller", + }, + Track { + id: 1, + info: pallet_referenda::TrackInfo { + name: str_array("whitelisted_caller"), max_deciding: 100, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 10 * MINUTES, @@ -72,11 +76,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)), }, - ), - ( - 2, - pallet_referenda::TrackInfo { - name: "general_admin", + }, + Track { + id: 2, + info: pallet_referenda::TrackInfo { + name: str_array("general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -86,11 +90,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)), }, - ), - ( - 3, - pallet_referenda::TrackInfo { - name: "referendum_canceller", + }, + Track { + id: 3, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_canceller"), max_deciding: 20, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -100,11 +104,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(50)), }, - ), - ( - 4, - pallet_referenda::TrackInfo { - name: "referendum_killer", + }, + Track { + id: 4, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_killer"), max_deciding: 100, decision_deposit: 20 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -114,11 +118,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 5, - pallet_referenda::TrackInfo { - name: "fast_general_admin", + }, + Track { + id: 5, + info: pallet_referenda::TrackInfo { + name: str_array("fast_general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -128,25 +132,25 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(5, 14, percent(1), percent(0), percent(50)), }, - ), + }, ]; pub struct TracksInfo; impl pallet_referenda::TracksInfo for TracksInfo { type Id = u16; type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - &TRACKS_DATA[..] + fn tracks() -> impl Iterator>> { + TRACKS_DATA.iter().map(Cow::Borrowed) } fn track_for(id: &Self::RuntimeOrigin) -> Result { if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) { match system_origin { frame_system::RawOrigin::Root => { - if let Some((track_id, _)) = Self::tracks() + if let Some(track) = Self::tracks() .into_iter() - .find(|(_, track)| track.name == "root") + .find(|track| track.info.name == str_array("root")) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -154,14 +158,18 @@ impl pallet_referenda::TracksInfo for TracksInfo { _ => Err(()), } } else if let Ok(custom_origin) = custom_origins::Origin::try_from(id.clone()) { - if let Some((track_id, _)) = Self::tracks().into_iter().find(|(_, track)| { - if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track.name) { + if let Some(track) = Self::tracks().into_iter().find(|track| { + let Ok(track_name) = from_utf8(&track.info.name) else { + return false; + }; + let track_name = track_name.trim_end_matches('\0'); + if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track_name) { track_custom_origin == custom_origin } else { false } }) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -174,13 +182,15 @@ impl pallet_referenda::TracksInfo for TracksInfo { #[test] /// To ensure voters are always locked into their vote fn vote_locking_always_longer_than_enactment_period() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); assert!( ::VoteLockingPeriod::get() - >= track.min_enactment_period, + >= track.info.min_enactment_period, "Track {} has enactment period {} < vote locking period {}", - track.name, - track.min_enactment_period, + track_name, + track.info.min_enactment_period, ::VoteLockingPeriod::get(), ); } @@ -188,10 +198,12 @@ fn vote_locking_always_longer_than_enactment_period() { #[test] fn all_tracks_have_origins() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); // check name.into() is successful either converts into "root" or custom origin - let track_is_root = track.name == "root"; - let track_has_custom_origin = custom_origins::Origin::from_str(track.name).is_ok(); + let track_is_root = track_name == "root"; + let track_has_custom_origin = custom_origins::Origin::from_str(track_name).is_ok(); assert!(track_is_root || track_has_custom_origin); } } diff --git a/operator/runtime/stagenet/src/configs/mod.rs b/operator/runtime/stagenet/src/configs/mod.rs index 12b4a960..8f85d611 100644 --- a/operator/runtime/stagenet/src/configs/mod.rs +++ b/operator/runtime/stagenet/src/configs/mod.rs @@ -30,8 +30,9 @@ use super::{ Signature, System, Timestamp, Treasury, TxPause, BLOCK_HASH_COUNT, EXTRINSIC_BASE_WEIGHT, MAXIMUM_BLOCK_WEIGHT, NORMAL_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, VERSION, }; +use alloc::vec::Vec; use alloy_core::primitives::Address; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; @@ -49,6 +50,7 @@ use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; RuntimeDebug, MaxEncodedLen, TypeInfo, + DecodeWithMemTracking, serde::Serialize, serde::Deserialize, )] @@ -76,6 +78,7 @@ impl Default for ProxyType { Self::Any } } +use core::convert::{From, Into}; use datahaven_runtime_common::{ deal_with_fees::{ DealWithEthereumBaseFees, DealWithEthereumPriorityFees, DealWithSubstrateFeesAndTip, @@ -141,10 +144,6 @@ use sp_runtime::{ FixedPointNumber, Perbill, Perquintill, }; use sp_staking::EraIndex; -use sp_std::{ - convert::{From, Into}, - prelude::*, -}; use sp_version::RuntimeVersion; use xcm::latest::NetworkId; use xcm::prelude::*; @@ -395,6 +394,7 @@ impl pallet_session::Config for Runtime { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = stagenet_weights::pallet_session::WeightInfo; + type DisablingStrategy = (); } parameter_types! { @@ -590,6 +590,7 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; type WeightInfo = stagenet_weights::pallet_scheduler::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -653,8 +654,7 @@ impl pallet_identity::Config for Runtime { type UsernameDeposit = UsernameDeposit; type UsernameGracePeriod = UsernameGracePeriod; - // TODO: Re-enable after upgrade to Polkadot SDK stable2412-8 - // see https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-8 + // TODO: Replace by Identity pallet's BenchmarkHelper when available (stable2506). // #[cfg(feature = "runtime-benchmarks")] // fn benchmark_helper(message: &[u8]) -> (Vec, Vec) { // let public = sp_io::crypto::ecdsa_generate(0.into(), None); @@ -684,6 +684,7 @@ impl pallet_multisig::Config for Runtime { type DepositFactor = DepositFactor; type MaxSignatories = MaxSignatories; type WeightInfo = stagenet_weights::pallet_multisig::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -849,6 +850,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = sp_runtime::traits::BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl pallet_proxy_genesis_companion::Config for Runtime { @@ -1050,6 +1052,8 @@ impl pallet_evm::Config for Runtime { type GasLimitPovSizeRatio = GasLimitPovSizeRatio; type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; type Timestamp = Timestamp; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WeightInfo = stagenet_weights::pallet_evm::WeightInfo; } @@ -1501,10 +1505,6 @@ pub struct StagenetRewardsConfig; impl datahaven_runtime_common::rewards_adapter::RewardsSubmissionConfig for StagenetRewardsConfig { type OutboundQueue = EthereumOutboundQueueV2; - fn rewards_duration() -> u32 { - runtime_params::dynamic_params::runtime_config::RewardsDuration::get() - } - fn whave_token_address() -> H160 { runtime_params::dynamic_params::runtime_config::WHAVETokenAddress::get() } @@ -1569,6 +1569,10 @@ parameter_types! { /// Maximum inflation percentage (caps at 100% even if blocks exceed expectations) pub const MaxInflationPercent: u32 = 100; + + /// EigenLayer RewardsCoordinator GENESIS_REWARDS_TIMESTAMP. + /// This is the immutable genesis timestamp from the deployed RewardsCoordinator contract. + pub const RewardsWindowGenesisTimestamp: u32 = 1_712_188_800; } impl pallet_external_validators_rewards::Config for Runtime { @@ -1592,6 +1596,9 @@ impl pallet_external_validators_rewards::Config for Runtime { type Hashing = Keccak256; type Currency = Balances; type RewardsEthereumSovereignAccount = ExternalValidatorRewardsAccount; + type RewardsWindowGenesisTimestamp = RewardsWindowGenesisTimestamp; + type RewardsWindowDuration = runtime_params::dynamic_params::runtime_config::RewardsDuration; + type UnixTime = Timestamp; type SendMessage = RewardsSendAdapter; type HandleInflation = ExternalRewardsInflationHandler; type GovernanceOrigin = @@ -1727,6 +1734,7 @@ impl pallet_external_validator_slashes::Config for Runtime { type QueuedSlashesProcessedPerBlock = ConstU32<10>; type WeightInfo = stagenet_weights::pallet_external_validator_slashes::WeightInfo; type SendMessage = SlashesSendAdapter; + type GovernanceOrigin = EnsureRootWithSuccess; } parameter_types! { @@ -1768,12 +1776,13 @@ mod tests { #[test] fn test_rewards_send_adapter_with_zero_address() { - use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; + use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; TestExternalities::default().execute_with(|| { - let rewards_utils = EraRewardsUtils { - era_index: 1, - era_start_timestamp: 1_700_000_000, + let rewards_utils = RewardsPeriodUtils { + period_index: 1, + period_start: 1_700_000_000, + duration: runtime_params::dynamic_params::runtime_config::RewardsDuration::get(), total_points: 1000, individual_points: vec![ (H160::from_low_u64_be(1), 500), @@ -1791,7 +1800,7 @@ mod tests { #[test] fn test_rewards_send_adapter_with_valid_config() { - use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; + use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; TestExternalities::default().execute_with(|| { let service_manager = H160::from_low_u64_be(0x1234567890abcdef); @@ -1823,9 +1832,10 @@ mod tests { snowbridge_pallet_system::NativeToForeignId::::insert(reanchored.clone(), token_id); snowbridge_pallet_system::ForeignToNativeId::::insert(token_id, reanchored); - let rewards_utils = EraRewardsUtils { - era_index: 1, - era_start_timestamp: 1_700_000_000, + let rewards_utils = RewardsPeriodUtils { + period_index: 1, + period_start: 1_700_000_000, + duration: runtime_params::dynamic_params::runtime_config::RewardsDuration::get(), total_points: 1000, individual_points: vec![(H160::from_low_u64_be(1), 600), (H160::from_low_u64_be(2), 400)], inflation_amount: 1_000_000_000, diff --git a/operator/runtime/stagenet/src/configs/runtime_params.rs b/operator/runtime/stagenet/src/configs/runtime_params.rs index dcf136c9..e1e29d20 100644 --- a/operator/runtime/stagenet/src/configs/runtime_params.rs +++ b/operator/runtime/stagenet/src/configs/runtime_params.rs @@ -15,11 +15,11 @@ // along with DataHaven. If not, see . use crate::Runtime; +use alloc::vec; use frame_support::dynamic_params::{dynamic_pallet_params, dynamic_params}; use hex_literal::hex; use sp_core::{ConstU32, H160, H256}; use sp_runtime::{BoundedVec, Perbill}; -use sp_std::vec; use crate::configs::storagehub::{ChallengeTicksTolerance, ReplicationTargetType, SpMinDeposit}; use crate::currency::{GIGAWEI, HAVE, SUPPLY_FACTOR}; @@ -404,16 +404,11 @@ pub mod dynamic_params { /// Used in the OperatorDirectedRewardsSubmission struct. pub static WHAVETokenAddress: H160 = H160::repeat_byte(0x0); - #[codec(index = 43)] - #[allow(non_upper_case_globals)] - /// EigenLayer-aligned genesis timestamp for rewards calculation. - /// Must be divisible by 86400 (seconds per day) as per EigenLayer requirements. - /// Default: 0 (must be set via governance to actual deployment timestamp). - pub static RewardsGenesisTimestamp: u32 = 0; - #[codec(index = 44)] #[allow(non_upper_case_globals)] - /// Rewards duration in seconds. Fixed at 86400 (1 day) for EigenLayer. + /// Rewards duration in seconds. + /// Must be a positive multiple of EigenLayer interval (86400 = 1 day) + /// and must not exceed EigenLayer max rewards duration. pub static RewardsDuration: u32 = 86400; #[codec(index = 45)] diff --git a/operator/runtime/stagenet/src/configs/storagehub/client.rs b/operator/runtime/stagenet/src/configs/storagehub/client.rs index 110bec9d..1e0bf339 100644 --- a/operator/runtime/stagenet/src/configs/storagehub/client.rs +++ b/operator/runtime/stagenet/src/configs/storagehub/client.rs @@ -50,6 +50,7 @@ impl ExtensionOperations for crate::SignedEx minimal.tip, ), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ) } } diff --git a/operator/runtime/stagenet/src/configs/storagehub/mod.rs b/operator/runtime/stagenet/src/configs/storagehub/mod.rs index 79a71b14..f5a59505 100644 --- a/operator/runtime/stagenet/src/configs/storagehub/mod.rs +++ b/operator/runtime/stagenet/src/configs/storagehub/mod.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with DataHaven. If not, see . +extern crate alloc; #[cfg(not(feature = "runtime-benchmarks"))] use super::HAVE; #[cfg(feature = "runtime-benchmarks")] use super::MICROHAVE; use super::{ - AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, + AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, System, TreasuryAccount, }; use crate::configs::runtime_params::dynamic_params::runtime_config; @@ -27,6 +28,8 @@ use crate::{ BucketNfts, Nfts, PaymentStreams, ProofsDealer, Providers, Runtime, Signature, WeightToFee, HOURS, }; +use alloc::{vec, vec::Vec}; +use core::convert::{From, Into}; use core::marker::PhantomData; #[cfg(feature = "runtime-benchmarks")] use datahaven_runtime_common::benchmarking::StorageHubBenchmarking; @@ -59,8 +62,6 @@ use sp_runtime::traits::Verify; use sp_runtime::traits::Zero; use sp_runtime::SaturatedConversion; use sp_runtime::{traits::BlakeTwo256, Perbill}; -use sp_std::convert::{From, Into}; -use sp_std::{vec, vec::Vec}; use sp_trie::{LayoutV1, TrieConfiguration, TrieLayout}; #[cfg(feature = "std")] @@ -126,6 +127,7 @@ impl pallet_nfts::Config for Runtime { type OffchainPublic = ::Signer; type WeightInfo = crate::weights::pallet_nfts::WeightInfo; type Locker = (); + type BlockNumberProvider = System; #[cfg(feature = "runtime-benchmarks")] type Helper = benchmark_helpers::NftHelper; } @@ -626,16 +628,16 @@ parameter_types! { /// "\x19Ethereum Signed Message:\n" + len(message) + message" pub struct Eip191Adapter; impl shp_traits::MessageAdapter for Eip191Adapter { - fn bytes_to_verify(message: &[u8]) -> Vec { + fn bytes_to_verify(intention: &[u8], _context: &[u8]) -> Vec { const PREFIX: &str = "\x19Ethereum Signed Message:\n"; - let len = message.len(); + let len = intention.len(); let mut len_string_buffer = itoa::Buffer::new(); let len_string = len_string_buffer.format(len); let mut eth_message = Vec::with_capacity(PREFIX.len() + len_string.len() + len); eth_message.extend_from_slice(PREFIX.as_bytes()); eth_message.extend_from_slice(len_string.as_bytes()); - eth_message.extend_from_slice(message); + eth_message.extend_from_slice(intention); eth_message } } @@ -699,6 +701,8 @@ impl pallet_file_system::Config for Runtime { type OffchainPublicKey = ::Signer; type MaxFileDeletionsPerExtrinsic = ConstU32<100>; type IntentionMsgAdapter = Eip191Adapter; + type MaxBspVolunteers = ConstU32<1000>; + type MaxMspRespondFileKeys = ConstU32<10>; } impl MostlyStablePriceIndexUpdaterConfig for Runtime { diff --git a/operator/runtime/stagenet/src/genesis_config_presets.rs b/operator/runtime/stagenet/src/genesis_config_presets.rs index 0265f5a3..671eae1c 100644 --- a/operator/runtime/stagenet/src/genesis_config_presets.rs +++ b/operator/runtime/stagenet/src/genesis_config_presets.rs @@ -56,6 +56,7 @@ fn testnet_genesis( .cloned() .map(|k| (k, 1u128 << 80)) .collect::>(), + dev_accounts: Default::default(), }, babe: pallet_babe::GenesisConfig { epoch_config: BABE_GENESIS_EPOCH_CONFIG, diff --git a/operator/runtime/stagenet/src/lib.rs b/operator/runtime/stagenet/src/lib.rs index df43090f..9ac518f1 100644 --- a/operator/runtime/stagenet/src/lib.rs +++ b/operator/runtime/stagenet/src/lib.rs @@ -31,14 +31,18 @@ pub mod weights; pub use configs::governance; pub use configs::Precompiles; -// TODO: Temporary workaround before upgrading to latest polkadot-sdk - fix https://github.com/paritytech/polkadot-sdk/pull/6435 +// Aliases required by define_benchmarks! for pallet_collective instances. +// PR #6435 (in stable2503) fixes the underlying issue, so these can be removed +// when benchmarks are regenerated and weight files renamed accordingly. #[allow(unused_imports)] use pallet_collective as pallet_collective_treasury_council; #[allow(unused_imports)] use pallet_collective as pallet_collective_technical_committee; +use alloc::collections::btree_map::BTreeMap; use alloc::{borrow::Cow, vec::Vec}; use codec::Encode; +use ethereum::AuthorizationList; use fp_rpc::TransactionStatus; use frame_support::{ genesis_builder_helper::{build_state, get_preset}, @@ -51,7 +55,7 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_file_system::types::StorageRequestMetadata; +use pallet_file_system::types::{PendingStopStoringRequest, StorageRequestMetadata}; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_payment_streams_runtime_api::*; @@ -82,7 +86,6 @@ use sp_runtime::{ transaction_validity::{InvalidTransaction, TransactionSource}, ApplyExtrinsicResult, Perbill, Permill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; @@ -145,7 +148,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 1400, + spec_version: 1500, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -195,16 +198,10 @@ pub const NORMAL_BLOCK_WEIGHT: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(3).s pub const EXTRINSIC_BASE_WEIGHT: Weight = Weight::from_parts(10000 * WEIGHT_PER_GAS, 0); // Existential deposit. -#[cfg(not(feature = "runtime-benchmarks"))] +// PR #7379 (included in stable2503) ensures benchmarks handle ED=0 internally. parameter_types! { pub const ExistentialDeposit: Balance = 0; } -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - // TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503 - // cfr. https://github.com/paritytech/polkadot-sdk/pull/7379 - pub const ExistentialDeposit: Balance = 1; -} /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -229,6 +226,7 @@ pub type SignedExtra = ( frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, frame_metadata_hash_extension::CheckMetadataHash, + frame_system::WeightReclaim, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1075,6 +1073,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1104,6 +1103,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1122,6 +1122,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1155,6 +1156,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1235,7 +1237,7 @@ impl_runtime_apis! { //╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ - impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256> for Runtime { + impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256, PendingStopStoringRequest> for Runtime { fn is_storage_request_open_to_volunteers(file_key: H256) -> Result { FileSystem::is_storage_request_open_to_volunteers(file_key) } @@ -1282,6 +1284,15 @@ impl_runtime_apis! { fn get_max_batch_confirm_storage_requests() -> BlockNumber { FileSystem::get_max_batch_confirm_storage_requests() } + fn query_min_wait_for_stop_storing() -> BlockNumber { + FileSystem::query_min_wait_for_stop_storing() + } + fn has_pending_stop_storing_request(bsp_id: BackupStorageProviderId, file_key: H256) -> bool { + FileSystem::has_pending_stop_storing_request(bsp_id, file_key) + } + fn pending_stop_storing_requests_by_bsp(bsp_id: BackupStorageProviderId) -> BTreeMap> { + FileSystem::pending_stop_storing_requests_by_bsp(bsp_id) + } } impl pallet_payment_streams_runtime_api::PaymentStreamsApi, Balance, AccountId> for Runtime { @@ -1417,7 +1428,7 @@ impl_runtime_apis! { fn compute_signed_extra_implicit( era: sp_runtime::generic::Era, enable_metadata: bool, - ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { + ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { // Build the SignedExtra tuple with minimal values; only `era` and `enable_metadata` // influence the implicit. Other extensions have `()` implicit. let extra: SignedExtra = ( @@ -1430,6 +1441,7 @@ impl_runtime_apis! { frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(::default()), frame_metadata_hash_extension::CheckMetadataHash::::new(enable_metadata), + frame_system::WeightReclaim::::new(), ); let implicit = >::implicit(&extra)?; Ok(implicit.encode()) diff --git a/operator/runtime/stagenet/src/weights/frame_system.rs b/operator/runtime/stagenet/src/weights/frame_system.rs index 444c87c8..370200a7 100644 --- a/operator/runtime/stagenet/src/weights/frame_system.rs +++ b/operator/runtime/stagenet/src/weights/frame_system.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `frame_system`. pub struct WeightInfo(PhantomData); @@ -60,20 +60,20 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_105_000 picoseconds. - Weight::from_parts(19_799_380, 0) + // Minimum execution time: 3_094_000 picoseconds. + Weight::from_parts(10_221_308, 0) // Standard Error: 3 - .saturating_add(Weight::from_parts(482, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(489, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_926_000 picoseconds. - Weight::from_parts(8_105_000, 0) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_930, 0).saturating_mul(b.into())) + // Minimum execution time: 8_114_000 picoseconds. + Weight::from_parts(8_258_000, 0) + // Standard Error: 3 + .saturating_add(Weight::from_parts(1_907, 0).saturating_mul(b.into())) } /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) @@ -81,8 +81,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_907_000 picoseconds. - Weight::from_parts(5_084_000, 0) + // Minimum execution time: 4_914_000 picoseconds. + Weight::from_parts(5_173_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `MultiBlockMigrations::Cursor` (r:1 w:0) @@ -93,8 +93,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `142` // Estimated: `67035` - // Minimum execution time: 136_732_656_000 picoseconds. - Weight::from_parts(139_244_377_000, 67035) + // Minimum execution time: 141_023_498_000 picoseconds. + Weight::from_parts(143_050_350_000, 67035) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -105,10 +105,10 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_063_000 picoseconds. - Weight::from_parts(3_172_000, 0) - // Standard Error: 2_798 - .saturating_add(Weight::from_parts(958_284, 0).saturating_mul(i.into())) + // Minimum execution time: 3_091_000 picoseconds. + Weight::from_parts(3_158_000, 0) + // Standard Error: 2_712 + .saturating_add(Weight::from_parts(982_349, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -118,10 +118,10 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_150_000 picoseconds. - Weight::from_parts(3_228_000, 0) - // Standard Error: 1_228 - .saturating_add(Weight::from_parts(683_269, 0).saturating_mul(i.into())) + // Minimum execution time: 3_029_000 picoseconds. + Weight::from_parts(3_141_000, 0) + // Standard Error: 1_150 + .saturating_add(Weight::from_parts(698_708, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -130,11 +130,11 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `131 + p * (69 ±0)` - // Estimated: `119 + p * (70 ±0)` - // Minimum execution time: 5_870_000 picoseconds. - Weight::from_parts(5_932_000, 119) - // Standard Error: 1_772 - .saturating_add(Weight::from_parts(1_417_036, 0).saturating_mul(p.into())) + // Estimated: `118 + p * (70 ±0)` + // Minimum execution time: 5_882_000 picoseconds. + Weight::from_parts(6_100_000, 118) + // Standard Error: 2_884 + .saturating_add(Weight::from_parts(1_456_299, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) @@ -145,8 +145,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 16_641_000 picoseconds. - Weight::from_parts(19_037_000, 0) + // Minimum execution time: 23_597_000 picoseconds. + Weight::from_parts(24_565_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) @@ -159,8 +159,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `164` // Estimated: `67035` - // Minimum execution time: 142_143_546_000 picoseconds. - Weight::from_parts(143_414_761_000, 67035) + // Minimum execution time: 144_727_759_000 picoseconds. + Weight::from_parts(146_608_080_000, 67035) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_babe.rs b/operator/runtime/stagenet/src/weights/pallet_babe.rs index 6d8f9c58..bfbda101 100644 --- a/operator/runtime/stagenet/src/weights/pallet_babe.rs +++ b/operator/runtime/stagenet/src/weights/pallet_babe.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_babe` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,8 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; + /// Weights for `pallet_babe`. pub struct WeightInfo(PhantomData); impl pallet_babe::WeightInfo for WeightInfo { diff --git a/operator/runtime/stagenet/src/weights/pallet_balances.rs b/operator/runtime/stagenet/src/weights/pallet_balances.rs index a809fcf8..92f57080 100644 --- a/operator/runtime/stagenet/src/weights/pallet_balances.rs +++ b/operator/runtime/stagenet/src/weights/pallet_balances.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_balances`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 68_376_000 picoseconds. - Weight::from_parts(69_248_000, 3581) + // Minimum execution time: 59_662_000 picoseconds. + Weight::from_parts(60_515_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 55_396_000 picoseconds. - Weight::from_parts(56_019_000, 3581) + // Minimum execution time: 57_780_000 picoseconds. + Weight::from_parts(58_433_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -81,10 +81,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) fn force_set_balance_creating() -> Weight { // Proof Size summary in bytes: - // Measured: `195` + // Measured: `72` // Estimated: `3581` - // Minimum execution time: 21_713_000 picoseconds. - Weight::from_parts(22_167_000, 3581) + // Minimum execution time: 30_544_000 picoseconds. + Weight::from_parts(31_078_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -94,8 +94,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `195` // Estimated: `3581` - // Minimum execution time: 30_691_000 picoseconds. - Weight::from_parts(31_315_000, 3581) + // Minimum execution time: 25_532_000 picoseconds. + Weight::from_parts(26_016_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -105,8 +105,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `235` // Estimated: `6172` - // Minimum execution time: 71_858_000 picoseconds. - Weight::from_parts(72_947_000, 6172) + // Minimum execution time: 62_639_000 picoseconds. + Weight::from_parts(63_360_000, 6172) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -116,8 +116,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 67_947_000 picoseconds. - Weight::from_parts(68_644_000, 3581) + // Minimum execution time: 63_498_000 picoseconds. + Weight::from_parts(64_174_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -127,8 +127,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `195` // Estimated: `3581` - // Minimum execution time: 25_537_000 picoseconds. - Weight::from_parts(26_143_000, 3581) + // Minimum execution time: 25_469_000 picoseconds. + Weight::from_parts(26_172_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -137,12 +137,12 @@ impl pallet_balances::WeightInfo for WeightInfo { /// The range of component `u` is `[1, 1000]`. fn upgrade_accounts(u: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `658 + u * (124 ±0)` + // Measured: `577 + u * (124 ±0)` // Estimated: `990 + u * (2591 ±0)` - // Minimum execution time: 23_234_000 picoseconds. - Weight::from_parts(23_459_000, 990) - // Standard Error: 12_377 - .saturating_add(Weight::from_parts(18_769_914, 0).saturating_mul(u.into())) + // Minimum execution time: 23_148_000 picoseconds. + Weight::from_parts(23_548_000, 990) + // Standard Error: 12_697 + .saturating_add(Weight::from_parts(19_075_399, 0).saturating_mul(u.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2591).saturating_mul(u.into())) @@ -151,21 +151,21 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_731_000 picoseconds. - Weight::from_parts(8_998_000, 0) + // Minimum execution time: 8_641_000 picoseconds. + Weight::from_parts(9_063_000, 0) } fn burn_allow_death() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 42_914_000 picoseconds. - Weight::from_parts(43_598_000, 0) + // Minimum execution time: 34_565_000 picoseconds. + Weight::from_parts(35_014_000, 0) } fn burn_keep_alive() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 30_282_000 picoseconds. - Weight::from_parts(30_911_000, 0) + // Minimum execution time: 30_931_000 picoseconds. + Weight::from_parts(31_421_000, 0) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs b/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs index 179b34ed..2aa9d409 100644 --- a/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs +++ b/operator/runtime/stagenet/src/weights/pallet_beefy_mmr.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_beefy_mmr` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,19 +50,29 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_beefy_mmr`. pub struct WeightInfo(PhantomData); impl pallet_beefy_mmr::WeightInfo for WeightInfo { + /// The range of component `n` is `[2, 512]`. + fn n_leafs_proof_is_optimal(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 914_000 picoseconds. + Weight::from_parts(1_622_342, 0) + // Standard Error: 119 + .saturating_add(Weight::from_parts(3_637, 0).saturating_mul(n.into())) + } /// Storage: `System::BlockHash` (r:1 w:0) /// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) fn extract_validation_context() -> Weight { // Proof Size summary in bytes: // Measured: `68` // Estimated: `3509` - // Minimum execution time: 7_794_000 picoseconds. - Weight::from_parts(8_046_000, 3509) + // Minimum execution time: 7_464_000 picoseconds. + Weight::from_parts(7_769_000, 3509) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Mmr::Nodes` (r:1 w:0) @@ -71,8 +81,8 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `221` // Estimated: `3505` - // Minimum execution time: 6_732_000 picoseconds. - Weight::from_parts(7_211_000, 3505) + // Minimum execution time: 6_838_000 picoseconds. + Weight::from_parts(7_161_000, 3505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Mmr::RootHash` (r:1 w:0) @@ -84,10 +94,10 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `213` // Estimated: `1517` - // Minimum execution time: 14_344_000 picoseconds. - Weight::from_parts(24_620_305, 1517) - // Standard Error: 2_621 - .saturating_add(Weight::from_parts(1_561_896, 0).saturating_mul(n.into())) + // Minimum execution time: 14_307_000 picoseconds. + Weight::from_parts(27_532_707, 1517) + // Standard Error: 2_751 + .saturating_add(Weight::from_parts(1_614_247, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs b/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs index 1764a190..31c9ba41 100644 --- a/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs +++ b/operator/runtime/stagenet/src/weights/pallet_collective_technical_committee.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_collective_technical_committee` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_technical_committee`. pub struct WeightInfo(PhantomData); @@ -70,12 +70,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + m * (2021 ±0) + p * (2026 ±0)` // Estimated: `12234 + m * (1231 ±14) + p * (3660 ±14)` - // Minimum execution time: 16_625_000 picoseconds. - Weight::from_parts(16_911_000, 12234) - // Standard Error: 64_864 - .saturating_add(Weight::from_parts(4_746_833, 0).saturating_mul(m.into())) - // Standard Error: 64_864 - .saturating_add(Weight::from_parts(9_694_811, 0).saturating_mul(p.into())) + // Minimum execution time: 17_180_000 picoseconds. + Weight::from_parts(17_364_000, 12234) + // Standard Error: 66_799 + .saturating_add(Weight::from_parts(4_821_610, 0).saturating_mul(m.into())) + // Standard Error: 66_799 + .saturating_add(Weight::from_parts(9_985_811, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -95,12 +95,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `149 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 24_360_000 picoseconds. - Weight::from_parts(24_403_191, 3997) - // Standard Error: 35 - .saturating_add(Weight::from_parts(1_433, 0).saturating_mul(b.into())) - // Standard Error: 370 - .saturating_add(Weight::from_parts(8_945, 0).saturating_mul(m.into())) + // Minimum execution time: 25_011_000 picoseconds. + Weight::from_parts(25_103_131, 3997) + // Standard Error: 40 + .saturating_add(Weight::from_parts(1_390, 0).saturating_mul(b.into())) + // Standard Error: 416 + .saturating_add(Weight::from_parts(9_665, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -118,12 +118,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `149 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 27_544_000 picoseconds. - Weight::from_parts(27_315_394, 3997) - // Standard Error: 41 - .saturating_add(Weight::from_parts(1_571, 0).saturating_mul(b.into())) - // Standard Error: 430 - .saturating_add(Weight::from_parts(15_942, 0).saturating_mul(m.into())) + // Minimum execution time: 28_223_000 picoseconds. + Weight::from_parts(27_919_335, 3997) + // Standard Error: 50 + .saturating_add(Weight::from_parts(1_700, 0).saturating_mul(b.into())) + // Standard Error: 519 + .saturating_add(Weight::from_parts(17_077, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -144,14 +144,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `391 + m * (20 ±0) + p * (36 ±0)` // Estimated: `3785 + m * (21 ±0) + p * (36 ±0)` - // Minimum execution time: 27_515_000 picoseconds. - Weight::from_parts(27_288_163, 3785) - // Standard Error: 154 - .saturating_add(Weight::from_parts(4_056, 0).saturating_mul(b.into())) - // Standard Error: 1_610 - .saturating_add(Weight::from_parts(32_650, 0).saturating_mul(m.into())) - // Standard Error: 1_590 - .saturating_add(Weight::from_parts(315_867, 0).saturating_mul(p.into())) + // Minimum execution time: 28_149_000 picoseconds. + Weight::from_parts(27_005_506, 3785) + // Standard Error: 151 + .saturating_add(Weight::from_parts(4_215, 0).saturating_mul(b.into())) + // Standard Error: 1_583 + .saturating_add(Weight::from_parts(34_560, 0).saturating_mul(m.into())) + // Standard Error: 1_563 + .saturating_add(Weight::from_parts(328_760, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 21).saturating_mul(m.into())) @@ -166,10 +166,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `866 + m * (40 ±0)` // Estimated: `4330 + m * (40 ±0)` - // Minimum execution time: 34_111_000 picoseconds. - Weight::from_parts(35_693_770, 4330) - // Standard Error: 1_349 - .saturating_add(Weight::from_parts(27_869, 0).saturating_mul(m.into())) + // Minimum execution time: 34_062_000 picoseconds. + Weight::from_parts(37_707_563, 4330) + // Standard Error: 1_388 + .saturating_add(Weight::from_parts(15_276, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 40).saturating_mul(m.into())) @@ -188,12 +188,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `443 + m * (40 ±0) + p * (36 ±0)` // Estimated: `3888 + m * (41 ±0) + p * (36 ±0)` - // Minimum execution time: 32_411_000 picoseconds. - Weight::from_parts(31_787_582, 3888) - // Standard Error: 1_884 - .saturating_add(Weight::from_parts(39_018, 0).saturating_mul(m.into())) - // Standard Error: 1_837 - .saturating_add(Weight::from_parts(288_279, 0).saturating_mul(p.into())) + // Minimum execution time: 33_158_000 picoseconds. + Weight::from_parts(33_695_729, 3888) + // Standard Error: 1_209 + .saturating_add(Weight::from_parts(27_035, 0).saturating_mul(m.into())) + // Standard Error: 1_179 + .saturating_add(Weight::from_parts(291_808, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 41).saturating_mul(m.into())) @@ -218,14 +218,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `791 + b * (1 ±0) + m * (40 ±0) + p * (40 ±0)` // Estimated: `4108 + b * (1 ±0) + m * (42 ±0) + p * (40 ±0)` - // Minimum execution time: 52_738_000 picoseconds. - Weight::from_parts(53_211_783, 4108) - // Standard Error: 295 - .saturating_add(Weight::from_parts(3_886, 0).saturating_mul(b.into())) - // Standard Error: 3_123 - .saturating_add(Weight::from_parts(25_284, 0).saturating_mul(m.into())) - // Standard Error: 3_044 - .saturating_add(Weight::from_parts(337_065, 0).saturating_mul(p.into())) + // Minimum execution time: 53_786_000 picoseconds. + Weight::from_parts(57_175_133, 4108) + // Standard Error: 197 + .saturating_add(Weight::from_parts(2_614, 0).saturating_mul(b.into())) + // Standard Error: 2_091 + .saturating_add(Weight::from_parts(15_405, 0).saturating_mul(m.into())) + // Standard Error: 2_038 + .saturating_add(Weight::from_parts(322_063, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -248,12 +248,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `512 + m * (30 ±0) + p * (36 ±0)` // Estimated: `3954 + m * (31 ±0) + p * (36 ±0)` - // Minimum execution time: 34_118_000 picoseconds. - Weight::from_parts(34_122_434, 3954) - // Standard Error: 2_119 - .saturating_add(Weight::from_parts(30_637, 0).saturating_mul(m.into())) - // Standard Error: 2_067 - .saturating_add(Weight::from_parts(299_902, 0).saturating_mul(p.into())) + // Minimum execution time: 35_148_000 picoseconds. + Weight::from_parts(35_556_248, 3954) + // Standard Error: 1_710 + .saturating_add(Weight::from_parts(26_217, 0).saturating_mul(m.into())) + // Standard Error: 1_668 + .saturating_add(Weight::from_parts(296_644, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 31).saturating_mul(m.into())) @@ -280,14 +280,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `811 + b * (1 ±0) + m * (40 ±0) + p * (40 ±0)` // Estimated: `4128 + b * (1 ±0) + m * (42 ±0) + p * (40 ±0)` - // Minimum execution time: 56_185_000 picoseconds. - Weight::from_parts(58_557_093, 4128) - // Standard Error: 272 - .saturating_add(Weight::from_parts(3_033, 0).saturating_mul(b.into())) - // Standard Error: 2_883 - .saturating_add(Weight::from_parts(12_945, 0).saturating_mul(m.into())) - // Standard Error: 2_811 - .saturating_add(Weight::from_parts(331_230, 0).saturating_mul(p.into())) + // Minimum execution time: 56_682_000 picoseconds. + Weight::from_parts(58_973_565, 4128) + // Standard Error: 211 + .saturating_add(Weight::from_parts(3_050, 0).saturating_mul(b.into())) + // Standard Error: 2_233 + .saturating_add(Weight::from_parts(21_971, 0).saturating_mul(m.into())) + // Standard Error: 2_177 + .saturating_add(Weight::from_parts(328_727, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -305,10 +305,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `260 + p * (32 ±0)` // Estimated: `1745 + p * (32 ±0)` - // Minimum execution time: 17_282_000 picoseconds. - Weight::from_parts(18_808_034, 1745) - // Standard Error: 910 - .saturating_add(Weight::from_parts(249_892, 0).saturating_mul(p.into())) + // Minimum execution time: 17_841_000 picoseconds. + Weight::from_parts(19_102_371, 1745) + // Standard Error: 884 + .saturating_add(Weight::from_parts(249_322, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) @@ -327,12 +327,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1531 + p * (36 ±0)` // Estimated: `4930 + d * (123 ±6) + p * (37 ±0)` - // Minimum execution time: 25_109_000 picoseconds. - Weight::from_parts(28_971_194, 4930) - // Standard Error: 83_015 - .saturating_add(Weight::from_parts(688_507, 0).saturating_mul(d.into())) - // Standard Error: 1_285 - .saturating_add(Weight::from_parts(299_135, 0).saturating_mul(p.into())) + // Minimum execution time: 25_711_000 picoseconds. + Weight::from_parts(29_079_000, 4930) + // Standard Error: 74_640 + .saturating_add(Weight::from_parts(758_111, 0).saturating_mul(d.into())) + // Standard Error: 1_155 + .saturating_add(Weight::from_parts(306_852, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 123).saturating_mul(d.into())) @@ -346,8 +346,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `945` // Estimated: `4410` - // Minimum execution time: 20_065_000 picoseconds. - Weight::from_parts(20_865_000, 4410) + // Minimum execution time: 19_583_000 picoseconds. + Weight::from_parts(20_504_000, 4410) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs b/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs index b9ad8bdb..04053ac3 100644 --- a/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs +++ b/operator/runtime/stagenet/src/weights/pallet_collective_treasury_council.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_collective_treasury_council` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_treasury_council`. pub struct WeightInfo(PhantomData); @@ -70,12 +70,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + m * (425 ±0) + p * (206 ±0)` // Estimated: `4117 + m * (266 ±3) + p * (2556 ±1)` - // Minimum execution time: 11_396_000 picoseconds. - Weight::from_parts(11_718_000, 4117) - // Standard Error: 125_606 - .saturating_add(Weight::from_parts(3_734_137, 0).saturating_mul(m.into())) - // Standard Error: 57_387 - .saturating_add(Weight::from_parts(4_932_448, 0).saturating_mul(p.into())) + // Minimum execution time: 10_760_000 picoseconds. + Weight::from_parts(11_139_000, 4117) + // Standard Error: 120_353 + .saturating_add(Weight::from_parts(3_639_477, 0).saturating_mul(m.into())) + // Standard Error: 54_987 + .saturating_add(Weight::from_parts(4_712_421, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -95,12 +95,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `181 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 23_945_000 picoseconds. - Weight::from_parts(24_385_414, 3997) + // Minimum execution time: 23_944_000 picoseconds. + Weight::from_parts(23_997_560, 3997) // Standard Error: 37 - .saturating_add(Weight::from_parts(1_569, 0).saturating_mul(b.into())) - // Standard Error: 4_394 - .saturating_add(Weight::from_parts(44_126, 0).saturating_mul(m.into())) + .saturating_add(Weight::from_parts(1_682, 0).saturating_mul(b.into())) + // Standard Error: 4_399 + .saturating_add(Weight::from_parts(70_901, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -118,12 +118,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `181 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 27_461_000 picoseconds. - Weight::from_parts(27_601_990, 3997) - // Standard Error: 42 - .saturating_add(Weight::from_parts(1_574, 0).saturating_mul(b.into())) - // Standard Error: 5_050 - .saturating_add(Weight::from_parts(64_806, 0).saturating_mul(m.into())) + // Minimum execution time: 26_934_000 picoseconds. + Weight::from_parts(27_308_880, 3997) + // Standard Error: 64 + .saturating_add(Weight::from_parts(1_501, 0).saturating_mul(b.into())) + // Standard Error: 7_701 + .saturating_add(Weight::from_parts(69_206, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -144,14 +144,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `127 + m * (20 ±0) + p * (55 ±0)` // Estimated: `3548 + m * (27 ±0) + p * (54 ±0)` - // Minimum execution time: 27_251_000 picoseconds. - Weight::from_parts(24_980_513, 3548) - // Standard Error: 119 - .saturating_add(Weight::from_parts(4_304, 0).saturating_mul(b.into())) - // Standard Error: 16_258 - .saturating_add(Weight::from_parts(65_152, 0).saturating_mul(m.into())) - // Standard Error: 6_236 - .saturating_add(Weight::from_parts(569_301, 0).saturating_mul(p.into())) + // Minimum execution time: 26_963_000 picoseconds. + Weight::from_parts(24_816_287, 3548) + // Standard Error: 126 + .saturating_add(Weight::from_parts(4_146, 0).saturating_mul(b.into())) + // Standard Error: 17_198 + .saturating_add(Weight::from_parts(77_655, 0).saturating_mul(m.into())) + // Standard Error: 6_597 + .saturating_add(Weight::from_parts(553_343, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 27).saturating_mul(m.into())) @@ -166,10 +166,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `701 + m * (40 ±0)` // Estimated: `4166 + m * (40 ±0)` - // Minimum execution time: 27_095_000 picoseconds. - Weight::from_parts(28_569_225, 4166) - // Standard Error: 9_583 - .saturating_add(Weight::from_parts(30_565, 0).saturating_mul(m.into())) + // Minimum execution time: 26_902_000 picoseconds. + Weight::from_parts(27_677_582, 4166) + // Standard Error: 9_200 + .saturating_add(Weight::from_parts(81_300, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 40).saturating_mul(m.into())) @@ -188,12 +188,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `234 + m * (40 ±0) + p * (55 ±0)` // Estimated: `3696 + m * (43 ±0) + p * (55 ±0)` - // Minimum execution time: 30_372_000 picoseconds. - Weight::from_parts(31_676_515, 3696) - // Standard Error: 10_761 - .saturating_add(Weight::from_parts(18_440, 0).saturating_mul(m.into())) - // Standard Error: 3_053 - .saturating_add(Weight::from_parts(381_418, 0).saturating_mul(p.into())) + // Minimum execution time: 30_475_000 picoseconds. + Weight::from_parts(31_530_783, 3696) + // Standard Error: 9_778 + .saturating_add(Weight::from_parts(57_111, 0).saturating_mul(m.into())) + // Standard Error: 2_774 + .saturating_add(Weight::from_parts(355_865, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 43).saturating_mul(m.into())) @@ -218,12 +218,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `225 + b * (1 ±0) + m * (40 ±0) + p * (78 ±0)` // Estimated: `3997 + b * (1 ±0) + m * (29 ±1) + p * (74 ±0)` - // Minimum execution time: 51_226_000 picoseconds. - Weight::from_parts(53_772_672, 3997) - // Standard Error: 129 - .saturating_add(Weight::from_parts(2_620, 0).saturating_mul(b.into())) - // Standard Error: 6_739 - .saturating_add(Weight::from_parts(607_888, 0).saturating_mul(p.into())) + // Minimum execution time: 50_461_000 picoseconds. + Weight::from_parts(52_567_841, 3997) + // Standard Error: 119 + .saturating_add(Weight::from_parts(2_936, 0).saturating_mul(b.into())) + // Standard Error: 6_254 + .saturating_add(Weight::from_parts(608_374, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -246,10 +246,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `284 + m * (33 ±0) + p * (55 ±0)` // Estimated: `3747 + m * (34 ±0) + p * (56 ±0)` - // Minimum execution time: 33_571_000 picoseconds. - Weight::from_parts(34_718_095, 3747) - // Standard Error: 2_993 - .saturating_add(Weight::from_parts(380_374, 0).saturating_mul(p.into())) + // Minimum execution time: 33_373_000 picoseconds. + Weight::from_parts(34_287_344, 3747) + // Standard Error: 10_285 + .saturating_add(Weight::from_parts(47_321, 0).saturating_mul(m.into())) + // Standard Error: 2_917 + .saturating_add(Weight::from_parts(376_716, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 34).saturating_mul(m.into())) @@ -276,12 +278,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `245 + b * (1 ±0) + m * (40 ±0) + p * (78 ±0)` // Estimated: `3997 + b * (1 ±0) + m * (30 ±1) + p * (74 ±0)` - // Minimum execution time: 53_705_000 picoseconds. - Weight::from_parts(57_621_366, 3997) - // Standard Error: 121 - .saturating_add(Weight::from_parts(2_500, 0).saturating_mul(b.into())) - // Standard Error: 6_358 - .saturating_add(Weight::from_parts(594_135, 0).saturating_mul(p.into())) + // Minimum execution time: 53_359_000 picoseconds. + Weight::from_parts(56_069_123, 3997) + // Standard Error: 113 + .saturating_add(Weight::from_parts(2_907, 0).saturating_mul(b.into())) + // Standard Error: 5_910 + .saturating_add(Weight::from_parts(610_053, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -299,10 +301,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `293 + p * (32 ±0)` // Estimated: `1778 + p * (32 ±0)` - // Minimum execution time: 17_692_000 picoseconds. - Weight::from_parts(18_168_527, 1778) - // Standard Error: 1_939 - .saturating_add(Weight::from_parts(311_979, 0).saturating_mul(p.into())) + // Minimum execution time: 17_652_000 picoseconds. + Weight::from_parts(18_081_476, 1778) + // Standard Error: 1_566 + .saturating_add(Weight::from_parts(303_422, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) @@ -321,10 +323,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1347 + p * (55 ±0)` // Estimated: `4814 + d * (5 ±1) + p * (55 ±0)` - // Minimum execution time: 25_535_000 picoseconds. - Weight::from_parts(28_679_983, 4814) - // Standard Error: 4_493 - .saturating_add(Weight::from_parts(467_554, 0).saturating_mul(p.into())) + // Minimum execution time: 25_776_000 picoseconds. + Weight::from_parts(28_321_582, 4814) + // Standard Error: 4_063 + .saturating_add(Weight::from_parts(449_982, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 5).saturating_mul(d.into())) @@ -338,8 +340,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `780` // Estimated: `4245` - // Minimum execution time: 16_263_000 picoseconds. - Weight::from_parts(16_845_000, 4245) + // Minimum execution time: 16_372_000 picoseconds. + Weight::from_parts(16_946_000, 4245) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs b/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs index d39df1d0..4d6c8de3 100644 --- a/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs +++ b/operator/runtime/stagenet/src/weights/pallet_conviction_voting.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_conviction_voting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); @@ -71,8 +71,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1963` // Estimated: `13328` - // Minimum execution time: 89_813_000 picoseconds. - Weight::from_parts(91_835_000, 13328) + // Minimum execution time: 87_146_000 picoseconds. + Weight::from_parts(89_386_000, 13328) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -94,8 +94,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `2264` // Estimated: `25666` - // Minimum execution time: 114_896_000 picoseconds. - Weight::from_parts(117_524_000, 25666) + // Minimum execution time: 113_756_000 picoseconds. + Weight::from_parts(115_053_000, 25666) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -111,8 +111,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1979` // Estimated: `25666` - // Minimum execution time: 75_682_000 picoseconds. - Weight::from_parts(76_936_000, 25666) + // Minimum execution time: 74_355_000 picoseconds. + Weight::from_parts(76_236_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -124,8 +124,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1523` // Estimated: `4617` - // Minimum execution time: 29_716_000 picoseconds. - Weight::from_parts(31_213_000, 4617) + // Minimum execution time: 29_364_000 picoseconds. + Weight::from_parts(30_657_000, 4617) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -148,10 +148,10 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1655 + r * (248 ±0)` // Estimated: `25666 + r * (2805 ±0)` - // Minimum execution time: 60_120_000 picoseconds. - Weight::from_parts(61_961_783, 25666) - // Standard Error: 71_906 - .saturating_add(Weight::from_parts(33_876_637, 0).saturating_mul(r.into())) + // Minimum execution time: 58_531_000 picoseconds. + Weight::from_parts(60_556_150, 25666) + // Standard Error: 70_479 + .saturating_add(Weight::from_parts(33_280_784, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -171,10 +171,10 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1478 + r * (248 ±0)` // Estimated: `25666 + r * (2805 ±0)` - // Minimum execution time: 28_328_000 picoseconds. - Weight::from_parts(22_165_419, 25666) - // Standard Error: 84_081 - .saturating_add(Weight::from_parts(33_459_122, 0).saturating_mul(r.into())) + // Minimum execution time: 27_658_000 picoseconds. + Weight::from_parts(21_650_023, 25666) + // Standard Error: 77_546 + .saturating_add(Weight::from_parts(33_310_524, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -193,8 +193,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1229` // Estimated: `4752` - // Minimum execution time: 63_631_000 picoseconds. - Weight::from_parts(65_866_000, 4752) + // Minimum execution time: 67_543_000 picoseconds. + Weight::from_parts(69_968_000, 4752) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs b/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs index effd2363..21b8c4cf 100644 --- a/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs +++ b/operator/runtime/stagenet/src/weights/pallet_datahaven_native_transfer.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_datahaven_native_transfer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_datahaven_native_transfer`. pub struct WeightInfo(PhantomData); @@ -67,10 +67,10 @@ impl pallet_datahaven_native_transfer::WeightInfo for W /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(32845), added: 35320, mode: `MaxEncodedLen`) fn transfer_to_ethereum() -> Weight { // Proof Size summary in bytes: - // Measured: `467` + // Measured: `379` // Estimated: `8763` - // Minimum execution time: 140_933_000 picoseconds. - Weight::from_parts(142_617_000, 8763) + // Minimum execution time: 147_811_000 picoseconds. + Weight::from_parts(150_667_000, 8763) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -80,8 +80,8 @@ impl pallet_datahaven_native_transfer::WeightInfo for W // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_827_000 picoseconds. - Weight::from_parts(7_177_000, 0) + // Minimum execution time: 7_188_000 picoseconds. + Weight::from_parts(7_487_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `DataHavenNativeTransfer::Paused` (r:0 w:1) @@ -90,8 +90,8 @@ impl pallet_datahaven_native_transfer::WeightInfo for W // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_862_000 picoseconds. - Weight::from_parts(7_153_000, 0) + // Minimum execution time: 7_264_000 picoseconds. + Weight::from_parts(7_635_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_evm.rs b/operator/runtime/stagenet/src/weights/pallet_evm.rs index 950955fd..d66e220c 100644 --- a/operator/runtime/stagenet/src/weights/pallet_evm.rs +++ b/operator/runtime/stagenet/src/weights/pallet_evm.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_evm` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-27, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_evm`. pub struct WeightInfo(PhantomData); @@ -59,7 +59,7 @@ impl pallet_evm::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_913_000 picoseconds. - Weight::from_parts(3_118_000, 0) + // Minimum execution time: 2_946_000 picoseconds. + Weight::from_parts(3_161_000, 0) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs b/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs index cd06db35..b463e931 100644 --- a/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs +++ b/operator/runtime/stagenet/src/weights/pallet_external_validator_slashes.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validator_slashes`. pub struct WeightInfo(PhantomData); @@ -113,6 +113,9 @@ impl pallet_external_validator_slashes::WeightInfo for .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 38).saturating_mul(s.into())) } + fn retry_unsent_slash_era() -> Weight { + Self::process_slashes_queue(10) + } /// Storage: `ExternalValidatorsSlashes::SlashingMode` (r:0 w:1) /// Proof: `ExternalValidatorsSlashes::SlashingMode` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) fn set_slashing_mode() -> Weight { diff --git a/operator/runtime/stagenet/src/weights/pallet_external_validators.rs b/operator/runtime/stagenet/src/weights/pallet_external_validators.rs index 763d05b8..52338a21 100644 --- a/operator/runtime/stagenet/src/weights/pallet_external_validators.rs +++ b/operator/runtime/stagenet/src/weights/pallet_external_validators.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs b/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs index 34d31953..0edd4b7b 100644 --- a/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs +++ b/operator/runtime/stagenet/src/weights/pallet_external_validators_rewards.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators_rewards`. pub struct WeightInfo(PhantomData); @@ -75,6 +75,15 @@ impl pallet_external_validators_rewards::WeightInfo for .saturating_add(T::DbWeight::get().writes(2_u64)) } + fn process_closed_windows_idle() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) + } + + fn process_closed_windows_processed() -> Weight { + Self::process_unsent_reward_eras_success() + } + fn process_unsent_reward_eras_empty() -> Weight { Weight::from_parts(5_000_000, 0) .saturating_add(T::DbWeight::get().reads(1_u64)) diff --git a/operator/runtime/stagenet/src/weights/pallet_grandpa.rs b/operator/runtime/stagenet/src/weights/pallet_grandpa.rs index f30c5bcf..d148cee3 100644 --- a/operator/runtime/stagenet/src/weights/pallet_grandpa.rs +++ b/operator/runtime/stagenet/src/weights/pallet_grandpa.rs @@ -51,7 +51,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_grandpa`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_im_online.rs b/operator/runtime/stagenet/src/weights/pallet_im_online.rs index be005d40..986867bc 100644 --- a/operator/runtime/stagenet/src/weights/pallet_im_online.rs +++ b/operator/runtime/stagenet/src/weights/pallet_im_online.rs @@ -1,11 +1,26 @@ +// Copyright 2025 DataHaven +// This file is part of DataHaven. + +// DataHaven is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// DataHaven is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with DataHaven. If not, see . //! Autogenerated weights for `pallet_im_online` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.0.0 -//! DATE: 2025-08-20, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `blocked.local`, CPU: `` +//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -14,26 +29,28 @@ // benchmark // pallet // --runtime -// target/release/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm +// target/production/wbuild/datahaven-stagenet-runtime/datahaven_stagenet_runtime.compact.compressed.wasm // --pallet // pallet_im_online // --extrinsic // +// --header +// ../file_header.txt // --template // benchmarking/frame-weight-template.hbs // --output // runtime/stagenet/src/weights/pallet_im_online.rs // --steps -// 2 +// 50 // --repeat -// 2 +// 20 #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_im_online`. pub struct WeightInfo(PhantomData); @@ -51,12 +68,14 @@ impl pallet_im_online::WeightInfo for WeightInfo { /// The range of component `k` is `[1, 32]`. fn validate_unsigned_and_then_heartbeat(k: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `278 + k * (32 ±0)` - // Estimated: `3509 + k * (32 ±0)` - // Minimum execution time: 39_000_000 picoseconds. - Weight::from_parts(49_548_387, 3509) - .saturating_add(T::DbWeight::get().reads(5_u64)) + // Measured: `280 + k * (32 ±0)` + // Estimated: `3490 + k * (1754 ±0)` + // Minimum execution time: 69_638_000 picoseconds. + Weight::from_parts(74_105_790, 3490) + // Standard Error: 10_185 + .saturating_add(Weight::from_parts(333_467, 0).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 1754).saturating_mul(k.into())) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_message_queue.rs b/operator/runtime/stagenet/src/weights/pallet_message_queue.rs index a3a919eb..ec68caa2 100644 --- a/operator/runtime/stagenet/src/weights/pallet_message_queue.rs +++ b/operator/runtime/stagenet/src/weights/pallet_message_queue.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_message_queue`. pub struct WeightInfo(PhantomData); @@ -178,4 +178,8 @@ impl pallet_message_queue::WeightInfo for WeightInfo .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + + fn set_service_head() -> Weight { + todo!() + } } diff --git a/operator/runtime/stagenet/src/weights/pallet_mmr.rs b/operator/runtime/stagenet/src/weights/pallet_mmr.rs index 5c74c9ab..13ee7b0e 100644 --- a/operator/runtime/stagenet/src/weights/pallet_mmr.rs +++ b/operator/runtime/stagenet/src/weights/pallet_mmr.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_mmr` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_mmr`. pub struct WeightInfo(PhantomData); @@ -74,10 +74,10 @@ impl pallet_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `536` // Estimated: `9242 + x * (8 ±0)` - // Minimum execution time: 26_161_000 picoseconds. - Weight::from_parts(50_367_329, 9242) - // Standard Error: 1_207 - .saturating_add(Weight::from_parts(33_762, 0).saturating_mul(x.into())) + // Minimum execution time: 26_105_000 picoseconds. + Weight::from_parts(50_379_454, 9242) + // Standard Error: 1_306 + .saturating_add(Weight::from_parts(35_322, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 8).saturating_mul(x.into())) diff --git a/operator/runtime/stagenet/src/weights/pallet_multisig.rs b/operator/runtime/stagenet/src/weights/pallet_multisig.rs index 2e0b2be6..d25b9b04 100644 --- a/operator/runtime/stagenet/src/weights/pallet_multisig.rs +++ b/operator/runtime/stagenet/src/weights/pallet_multisig.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_multisig`. pub struct WeightInfo(PhantomData); @@ -64,10 +64,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 29_321_000 picoseconds. - Weight::from_parts(30_390_958, 3997) - // Standard Error: 5 - .saturating_add(Weight::from_parts(436, 0).saturating_mul(z.into())) + // Minimum execution time: 29_991_000 picoseconds. + Weight::from_parts(32_844_633, 3997) + // Standard Error: 11 + .saturating_add(Weight::from_parts(382, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:1) @@ -78,12 +78,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `218` // Estimated: `5587` - // Minimum execution time: 62_032_000 picoseconds. - Weight::from_parts(46_845_696, 5587) - // Standard Error: 2_236 - .saturating_add(Weight::from_parts(168_903, 0).saturating_mul(s.into())) - // Standard Error: 21 - .saturating_add(Weight::from_parts(4_147, 0).saturating_mul(z.into())) + // Minimum execution time: 62_681_000 picoseconds. + Weight::from_parts(44_927_384, 5587) + // Standard Error: 2_642 + .saturating_add(Weight::from_parts(207_135, 0).saturating_mul(s.into())) + // Standard Error: 25 + .saturating_add(Weight::from_parts(4_223, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -95,12 +95,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `246` // Estimated: `5587` - // Minimum execution time: 37_785_000 picoseconds. - Weight::from_parts(23_725_807, 5587) - // Standard Error: 913 - .saturating_add(Weight::from_parts(153_754, 0).saturating_mul(s.into())) - // Standard Error: 8 - .saturating_add(Weight::from_parts(4_160, 0).saturating_mul(z.into())) + // Minimum execution time: 38_309_000 picoseconds. + Weight::from_parts(23_634_472, 5587) + // Standard Error: 1_060 + .saturating_add(Weight::from_parts(165_698, 0).saturating_mul(s.into())) + // Standard Error: 10 + .saturating_add(Weight::from_parts(4_164, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -118,12 +118,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `393 + s * (20 ±0)` // Estimated: `5587` - // Minimum execution time: 77_668_000 picoseconds. - Weight::from_parts(55_371_376, 5587) - // Standard Error: 3_247 - .saturating_add(Weight::from_parts(252_437, 0).saturating_mul(s.into())) - // Standard Error: 31 - .saturating_add(Weight::from_parts(4_452, 0).saturating_mul(z.into())) + // Minimum execution time: 77_339_000 picoseconds. + Weight::from_parts(54_505_736, 5587) + // Standard Error: 3_086 + .saturating_add(Weight::from_parts(247_201, 0).saturating_mul(s.into())) + // Standard Error: 30 + .saturating_add(Weight::from_parts(4_667, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -134,10 +134,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `220` // Estimated: `5587` - // Minimum execution time: 41_987_000 picoseconds. - Weight::from_parts(43_754_538, 5587) - // Standard Error: 1_022 - .saturating_add(Weight::from_parts(182_175, 0).saturating_mul(s.into())) + // Minimum execution time: 41_995_000 picoseconds. + Weight::from_parts(44_116_085, 5587) + // Standard Error: 1_098 + .saturating_add(Weight::from_parts(180_114, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -148,10 +148,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `246` // Estimated: `5587` - // Minimum execution time: 21_259_000 picoseconds. - Weight::from_parts(21_965_093, 5587) - // Standard Error: 679 - .saturating_add(Weight::from_parts(155_811, 0).saturating_mul(s.into())) + // Minimum execution time: 21_007_000 picoseconds. + Weight::from_parts(21_929_392, 5587) + // Standard Error: 788 + .saturating_add(Weight::from_parts(159_922, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -162,10 +162,24 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `390` // Estimated: `5587` - // Minimum execution time: 41_582_000 picoseconds. - Weight::from_parts(44_495_968, 5587) - // Standard Error: 3_026 - .saturating_add(Weight::from_parts(190_856, 0).saturating_mul(s.into())) + // Minimum execution time: 41_515_000 picoseconds. + Weight::from_parts(44_659_041, 5587) + // Standard Error: 1_773 + .saturating_add(Weight::from_parts(182_893, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn poke_deposit(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `5587` + // Minimum execution time: 39_313_000 picoseconds. + Weight::from_parts(42_169_752, 5587) + // Standard Error: 1_540 + .saturating_add(Weight::from_parts(183_290, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_nfts.rs b/operator/runtime/stagenet/src/weights/pallet_nfts.rs index 852419ff..11838f87 100644 --- a/operator/runtime/stagenet/src/weights/pallet_nfts.rs +++ b/operator/runtime/stagenet/src/weights/pallet_nfts.rs @@ -1,9 +1,24 @@ +// Copyright 2025 DataHaven +// This file is part of DataHaven. + +// DataHaven is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// DataHaven is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with DataHaven. If not, see . //! Autogenerated weights for `pallet_nfts` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2025-11-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -19,6 +34,8 @@ // pallet_nfts // --extrinsic // +// --header +// ../file_header.txt // --template // benchmarking/frame-weight-template.hbs // --output @@ -33,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_nfts`. pub struct WeightInfo(PhantomData); @@ -52,8 +69,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `271` // Estimated: `3537` - // Minimum execution time: 47_279_000 picoseconds. - Weight::from_parts(48_666_000, 3537) + // Minimum execution time: 48_381_000 picoseconds. + Weight::from_parts(49_310_000, 3537) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -71,8 +88,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3537` - // Minimum execution time: 25_473_000 picoseconds. - Weight::from_parts(26_241_000, 3537) + // Minimum execution time: 25_945_000 picoseconds. + Weight::from_parts(26_446_000, 3537) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -95,18 +112,14 @@ impl pallet_nfts::WeightInfo for WeightInfo { /// The range of component `m` is `[0, 1000]`. /// The range of component `c` is `[0, 1000]`. /// The range of component `a` is `[0, 1000]`. - fn destroy(m: u32, c: u32, a: u32, ) -> Weight { + fn destroy(_m: u32, _c: u32, a: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `32179 + a * (366 ±0)` // Estimated: `2523990 + a * (2930 ±0)` - // Minimum execution time: 1_381_577_000 picoseconds. - Weight::from_parts(756_122_428, 2523990) - // Standard Error: 12_048 - .saturating_add(Weight::from_parts(476_790, 0).saturating_mul(m.into())) - // Standard Error: 12_048 - .saturating_add(Weight::from_parts(51_253, 0).saturating_mul(c.into())) - // Standard Error: 12_048 - .saturating_add(Weight::from_parts(8_131_406, 0).saturating_mul(a.into())) + // Minimum execution time: 1_357_861_000 picoseconds. + Weight::from_parts(1_433_285_097, 2523990) + // Standard Error: 18_885 + .saturating_add(Weight::from_parts(8_256_657, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(1004_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(T::DbWeight::get().writes(1005_u64)) @@ -129,8 +142,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `418` // Estimated: `4062` - // Minimum execution time: 67_882_000 picoseconds. - Weight::from_parts(69_718_000, 4062) + // Minimum execution time: 68_467_000 picoseconds. + Weight::from_parts(69_275_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -150,8 +163,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `418` // Estimated: `4062` - // Minimum execution time: 65_679_000 picoseconds. - Weight::from_parts(66_549_000, 4062) + // Minimum execution time: 66_079_000 picoseconds. + Weight::from_parts(67_541_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -177,8 +190,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `526` // Estimated: `4062` - // Minimum execution time: 73_580_000 picoseconds. - Weight::from_parts(75_125_000, 4062) + // Minimum execution time: 74_969_000 picoseconds. + Weight::from_parts(76_572_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -202,8 +215,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `555` // Estimated: `4062` - // Minimum execution time: 56_312_000 picoseconds. - Weight::from_parts(58_020_000, 4062) + // Minimum execution time: 56_821_000 picoseconds. + Weight::from_parts(58_530_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -218,10 +231,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `750 + i * (83 ±0)` // Estimated: `3538 + i * (3072 ±0)` - // Minimum execution time: 19_062_000 picoseconds. - Weight::from_parts(19_305_000, 3538) - // Standard Error: 24_093 - .saturating_add(Weight::from_parts(25_028_153, 0).saturating_mul(i.into())) + // Minimum execution time: 18_879_000 picoseconds. + Weight::from_parts(19_300_000, 3538) + // Standard Error: 29_317 + .saturating_add(Weight::from_parts(26_682_263, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) @@ -235,8 +248,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 24_311_000 picoseconds. - Weight::from_parts(24_973_000, 3522) + // Minimum execution time: 24_562_000 picoseconds. + Weight::from_parts(25_027_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -248,8 +261,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 24_194_000 picoseconds. - Weight::from_parts(24_755_000, 3522) + // Minimum execution time: 24_245_000 picoseconds. + Weight::from_parts(24_949_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -261,8 +274,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `327` // Estimated: `3538` - // Minimum execution time: 19_916_000 picoseconds. - Weight::from_parts(20_550_000, 3538) + // Minimum execution time: 19_841_000 picoseconds. + Weight::from_parts(20_728_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -278,8 +291,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `524` // Estimated: `3581` - // Minimum execution time: 35_006_000 picoseconds. - Weight::from_parts(35_968_000, 3581) + // Minimum execution time: 35_007_000 picoseconds. + Weight::from_parts(36_303_000, 3581) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -291,8 +304,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `344` // Estimated: `6054` - // Minimum execution time: 49_456_000 picoseconds. - Weight::from_parts(50_590_000, 6054) + // Minimum execution time: 48_376_000 picoseconds. + Weight::from_parts(49_848_000, 6054) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -304,8 +317,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `298` // Estimated: `3537` - // Minimum execution time: 20_463_000 picoseconds. - Weight::from_parts(20_872_000, 3537) + // Minimum execution time: 20_535_000 picoseconds. + Weight::from_parts(21_267_000, 3537) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -317,8 +330,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `276` // Estimated: `3537` - // Minimum execution time: 16_403_000 picoseconds. - Weight::from_parts(17_022_000, 3537) + // Minimum execution time: 16_371_000 picoseconds. + Weight::from_parts(16_976_000, 3537) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -330,8 +343,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 22_791_000 picoseconds. - Weight::from_parts(23_182_000, 3522) + // Minimum execution time: 22_116_000 picoseconds. + Weight::from_parts(22_929_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -349,8 +362,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `514` // Estimated: `3920` - // Minimum execution time: 68_893_000 picoseconds. - Weight::from_parts(70_418_000, 3920) + // Minimum execution time: 69_516_000 picoseconds. + Weight::from_parts(70_520_000, 3920) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -362,8 +375,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `331` // Estimated: `3920` - // Minimum execution time: 33_040_000 picoseconds. - Weight::from_parts(33_469_000, 3920) + // Minimum execution time: 32_808_000 picoseconds. + Weight::from_parts(33_893_000, 3920) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -379,8 +392,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `958` // Estimated: `3920` - // Minimum execution time: 62_760_000 picoseconds. - Weight::from_parts(64_137_000, 3920) + // Minimum execution time: 64_452_000 picoseconds. + Weight::from_parts(65_496_000, 3920) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -392,8 +405,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `356` // Estimated: `4062` - // Minimum execution time: 20_851_000 picoseconds. - Weight::from_parts(21_234_000, 4062) + // Minimum execution time: 20_655_000 picoseconds. + Weight::from_parts(21_337_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -410,10 +423,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `769 + n * (386 ±0)` // Estimated: `4062 + n * (2930 ±0)` - // Minimum execution time: 32_914_000 picoseconds. - Weight::from_parts(33_415_000, 4062) - // Standard Error: 7_498 - .saturating_add(Weight::from_parts(7_720_860, 0).saturating_mul(n.into())) + // Minimum execution time: 32_878_000 picoseconds. + Weight::from_parts(33_918_000, 4062) + // Standard Error: 5_948 + .saturating_add(Weight::from_parts(7_807_080, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -434,8 +447,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `514` // Estimated: `3800` - // Minimum execution time: 56_827_000 picoseconds. - Weight::from_parts(57_851_000, 3800) + // Minimum execution time: 55_415_000 picoseconds. + Weight::from_parts(56_481_000, 3800) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -451,8 +464,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `824` // Estimated: `3800` - // Minimum execution time: 53_669_000 picoseconds. - Weight::from_parts(54_640_000, 3800) + // Minimum execution time: 54_374_000 picoseconds. + Weight::from_parts(55_365_000, 3800) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -468,8 +481,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `373` // Estimated: `3759` - // Minimum execution time: 51_403_000 picoseconds. - Weight::from_parts(52_206_000, 3759) + // Minimum execution time: 51_086_000 picoseconds. + Weight::from_parts(52_359_000, 3759) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -485,8 +498,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3759` - // Minimum execution time: 50_720_000 picoseconds. - Weight::from_parts(51_692_000, 3759) + // Minimum execution time: 50_725_000 picoseconds. + Weight::from_parts(51_770_000, 3759) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -498,8 +511,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `385` // Estimated: `4062` - // Minimum execution time: 24_116_000 picoseconds. - Weight::from_parts(25_104_000, 4062) + // Minimum execution time: 24_198_000 picoseconds. + Weight::from_parts(24_694_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -509,8 +522,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `382` // Estimated: `4062` - // Minimum execution time: 20_907_000 picoseconds. - Weight::from_parts(21_484_000, 4062) + // Minimum execution time: 20_498_000 picoseconds. + Weight::from_parts(21_283_000, 4062) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -520,8 +533,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `382` // Estimated: `4062` - // Minimum execution time: 19_916_000 picoseconds. - Weight::from_parts(20_689_000, 4062) + // Minimum execution time: 19_691_000 picoseconds. + Weight::from_parts(20_311_000, 4062) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -531,8 +544,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3505` - // Minimum execution time: 17_199_000 picoseconds. - Weight::from_parts(17_750_000, 3505) + // Minimum execution time: 17_136_000 picoseconds. + Weight::from_parts(17_724_000, 3505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -544,8 +557,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `327` // Estimated: `3538` - // Minimum execution time: 22_256_000 picoseconds. - Weight::from_parts(22_786_000, 3538) + // Minimum execution time: 21_869_000 picoseconds. + Weight::from_parts(22_412_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -557,8 +570,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `311` // Estimated: `3538` - // Minimum execution time: 21_133_000 picoseconds. - Weight::from_parts(21_821_000, 3538) + // Minimum execution time: 20_940_000 picoseconds. + Weight::from_parts(21_667_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -574,8 +587,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `493` // Estimated: `4062` - // Minimum execution time: 30_502_000 picoseconds. - Weight::from_parts(31_519_000, 4062) + // Minimum execution time: 30_933_000 picoseconds. + Weight::from_parts(31_812_000, 4062) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -599,8 +612,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `655` // Estimated: `4062` - // Minimum execution time: 66_549_000 picoseconds. - Weight::from_parts(67_947_000, 4062) + // Minimum execution time: 67_354_000 picoseconds. + Weight::from_parts(68_275_000, 4062) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -609,10 +622,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_265_000 picoseconds. - Weight::from_parts(4_739_944, 0) - // Standard Error: 7_976 - .saturating_add(Weight::from_parts(2_546_489, 0).saturating_mul(n.into())) + // Minimum execution time: 3_130_000 picoseconds. + Weight::from_parts(4_593_303, 0) + // Standard Error: 7_933 + .saturating_add(Weight::from_parts(2_683_953, 0).saturating_mul(n.into())) } /// Storage: `Nfts::Item` (r:2 w:0) /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`) @@ -622,8 +635,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `444` // Estimated: `7134` - // Minimum execution time: 26_741_000 picoseconds. - Weight::from_parts(27_648_000, 7134) + // Minimum execution time: 27_037_000 picoseconds. + Weight::from_parts(27_785_000, 7134) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -635,8 +648,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `488` // Estimated: `4062` - // Minimum execution time: 27_430_000 picoseconds. - Weight::from_parts(28_020_000, 4062) + // Minimum execution time: 27_690_000 picoseconds. + Weight::from_parts(28_468_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -660,8 +673,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `771` // Estimated: `7134` - // Minimum execution time: 109_567_000 picoseconds. - Weight::from_parts(111_480_000, 7134) + // Minimum execution time: 111_892_000 picoseconds. + Weight::from_parts(114_487_000, 7134) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(10_u64)) } @@ -688,10 +701,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `580` // Estimated: `6054 + n * (2930 ±0)` - // Minimum execution time: 159_539_000 picoseconds. - Weight::from_parts(165_962_526, 6054) - // Standard Error: 69_524 - .saturating_add(Weight::from_parts(43_681_845, 0).saturating_mul(n.into())) + // Minimum execution time: 160_963_000 picoseconds. + Weight::from_parts(170_585_705, 6054) + // Standard Error: 74_051 + .saturating_add(Weight::from_parts(45_662_844, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -715,10 +728,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `575` // Estimated: `4062 + n * (2930 ±0)` - // Minimum execution time: 75_482_000 picoseconds. - Weight::from_parts(89_133_467, 4062) - // Standard Error: 95_313 - .saturating_add(Weight::from_parts(42_327_087, 0).saturating_mul(n.into())) + // Minimum execution time: 75_592_000 picoseconds. + Weight::from_parts(89_494_385, 4062) + // Standard Error: 94_512 + .saturating_add(Weight::from_parts(43_776_743, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) diff --git a/operator/runtime/stagenet/src/weights/pallet_parameters.rs b/operator/runtime/stagenet/src/weights/pallet_parameters.rs index f95cb00c..951a37ec 100644 --- a/operator/runtime/stagenet/src/weights/pallet_parameters.rs +++ b/operator/runtime/stagenet/src/weights/pallet_parameters.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_parameters` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,19 +50,19 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_parameters`. pub struct WeightInfo(PhantomData); impl pallet_parameters::WeightInfo for WeightInfo { /// Storage: `Parameters::Parameters` (r:1 w:1) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) fn set_parameter() -> Weight { // Proof Size summary in bytes: // Measured: `3` - // Estimated: `3517` - // Minimum execution time: 11_254_000 picoseconds. - Weight::from_parts(11_753_000, 3517) + // Estimated: `3846` + // Minimum execution time: 11_359_000 picoseconds. + Weight::from_parts(11_799_000, 3846) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs b/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs index 3ac0c1d5..a7ff8275 100644 --- a/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs +++ b/operator/runtime/stagenet/src/weights/pallet_payment_streams.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_payment_streams` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_payment_streams`. pub struct WeightInfo(PhantomData); @@ -75,10 +75,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn create_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `523` + // Measured: `556` // Estimated: `6054` - // Minimum execution time: 109_755_000 picoseconds. - Weight::from_parts(111_256_000, 6054) + // Minimum execution time: 107_309_000 picoseconds. + Weight::from_parts(109_575_000, 6054) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -88,10 +88,6 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0) /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -112,21 +108,17 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`) fn update_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1427` + // Measured: `1372` // Estimated: `12414` - // Minimum execution time: 410_091_000 picoseconds. - Weight::from_parts(423_942_000, 12414) - .saturating_add(T::DbWeight::get().reads(21_u64)) + // Minimum execution time: 411_432_000 picoseconds. + Weight::from_parts(423_636_000, 12414) + .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -151,11 +143,11 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn delete_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1304` + // Measured: `1249` // Estimated: `12414` - // Minimum execution time: 299_884_000 picoseconds. - Weight::from_parts(304_140_000, 12414) - .saturating_add(T::DbWeight::get().reads(22_u64)) + // Minimum execution time: 295_433_000 picoseconds. + Weight::from_parts(300_746_000, 12414) + .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) @@ -180,10 +172,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn create_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `525` + // Measured: `558` // Estimated: `6054` - // Minimum execution time: 111_177_000 picoseconds. - Weight::from_parts(113_406_000, 6054) + // Minimum execution time: 109_616_000 picoseconds. + Weight::from_parts(110_986_000, 6054) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -193,10 +185,6 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0) /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -217,21 +205,17 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn update_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1387` + // Measured: `1332` // Estimated: `12414` - // Minimum execution time: 367_704_000 picoseconds. - Weight::from_parts(372_410_000, 12414) - .saturating_add(T::DbWeight::get().reads(21_u64)) + // Minimum execution time: 356_302_000 picoseconds. + Weight::from_parts(362_825_000, 12414) + .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -256,11 +240,11 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn delete_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1455` + // Measured: `1400` // Estimated: `12414` - // Minimum execution time: 408_008_000 picoseconds. - Weight::from_parts(420_144_000, 12414) - .saturating_add(T::DbWeight::get().reads(22_u64)) + // Minimum execution time: 399_556_000 picoseconds. + Weight::from_parts(413_451_000, 12414) + .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) @@ -293,21 +277,21 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn charge_payment_streams() -> Weight { // Proof Size summary in bytes: - // Measured: `1441` + // Measured: `1386` // Estimated: `12414` - // Minimum execution time: 341_010_000 picoseconds. - Weight::from_parts(353_585_000, 12414) + // Minimum execution time: 353_984_000 picoseconds. + Weight::from_parts(359_641_000, 12414) .saturating_add(T::DbWeight::get().reads(21_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) /// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0) - /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Providers::InsolventProviders` (r:2 w:0) /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0) + /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:10 w:10) @@ -331,13 +315,13 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[0, 10]`. fn charge_multiple_users_payment_streams(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1122 + n * (331 ±0)` + // Measured: `1038 + n * (325 ±0)` // Estimated: `12414 + n * (2604 ±0)` - // Minimum execution time: 20_290_000 picoseconds. - Weight::from_parts(44_658_677, 12414) - // Standard Error: 159_356 - .saturating_add(Weight::from_parts(299_090_828, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(12_u64)) + // Minimum execution time: 33_167_000 picoseconds. + Weight::from_parts(70_702_612, 12414) + // Standard Error: 234_693 + .saturating_add(Weight::from_parts(284_621_060, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) @@ -370,12 +354,12 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[1, 1000]`. fn pay_outstanding_debt(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1422 + n * (644 ±0)` + // Measured: `1292 + n * (644 ±0)` // Estimated: `12414 + n * (3634 ±0)` - // Minimum execution time: 382_387_000 picoseconds. - Weight::from_parts(386_938_000, 12414) - // Standard Error: 160_843 - .saturating_add(Weight::from_parts(288_094_697, 0).saturating_mul(n.into())) + // Minimum execution time: 397_070_000 picoseconds. + Weight::from_parts(399_589_000, 12414) + // Standard Error: 175_642 + .saturating_add(Weight::from_parts(284_912_025, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -390,10 +374,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn clear_insolvent_flag() -> Weight { // Proof Size summary in bytes: - // Measured: `231` + // Measured: `264` // Estimated: `3505` - // Minimum execution time: 22_156_000 picoseconds. - Weight::from_parts(23_278_000, 3505) + // Minimum execution time: 22_550_000 picoseconds. + Weight::from_parts(23_605_000, 3505) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -403,10 +387,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn price_index_update() -> Weight { // Proof Size summary in bytes: - // Measured: `116` + // Measured: `149` // Estimated: `1501` - // Minimum execution time: 5_701_000 picoseconds. - Weight::from_parts(6_021_000, 1501) + // Minimum execution time: 5_907_000 picoseconds. + Weight::from_parts(6_184_000, 1501) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -414,10 +398,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn tick_update() -> Weight { // Proof Size summary in bytes: - // Measured: `114` + // Measured: `147` // Estimated: `1489` - // Minimum execution time: 3_827_000 picoseconds. - Weight::from_parts(4_161_000, 1489) + // Minimum execution time: 3_791_000 picoseconds. + Weight::from_parts(4_048_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -434,12 +418,12 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[0, 244]`. fn update_providers_last_chargeable_info(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `270 + n * (32 ±0)` + // Measured: `303 + n * (32 ±0)` // Estimated: `11295 + n * (2543 ±0)` - // Minimum execution time: 12_555_000 picoseconds. - Weight::from_parts(10_548_186, 11295) - // Standard Error: 4_805 - .saturating_add(Weight::from_parts(7_024_412, 0).saturating_mul(n.into())) + // Minimum execution time: 12_724_000 picoseconds. + Weight::from_parts(12_883_772, 11295) + // Standard Error: 4_559 + .saturating_add(Weight::from_parts(7_015_694, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(1_u64)) diff --git a/operator/runtime/stagenet/src/weights/pallet_preimage.rs b/operator/runtime/stagenet/src/weights/pallet_preimage.rs index 07cba0f5..44b905fc 100644 --- a/operator/runtime/stagenet/src/weights/pallet_preimage.rs +++ b/operator/runtime/stagenet/src/weights/pallet_preimage.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_preimage`. pub struct WeightInfo(PhantomData); @@ -68,10 +68,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3` // Estimated: `3754` - // Minimum execution time: 67_227_000 picoseconds. - Weight::from_parts(68_222_000, 3754) + // Minimum execution time: 66_710_000 picoseconds. + Weight::from_parts(67_390_000, 3754) // Standard Error: 5 - .saturating_add(Weight::from_parts(2_677, 0).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(2_745, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -86,10 +86,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 20_498_000 picoseconds. - Weight::from_parts(20_996_000, 3544) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_668, 0).saturating_mul(s.into())) + // Minimum execution time: 20_204_000 picoseconds. + Weight::from_parts(20_537_000, 3544) + // Standard Error: 7 + .saturating_add(Weight::from_parts(2_806, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -104,10 +104,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 20_039_000 picoseconds. - Weight::from_parts(20_377_000, 3544) + // Minimum execution time: 19_849_000 picoseconds. + Weight::from_parts(20_137_000, 3544) // Standard Error: 5 - .saturating_add(Weight::from_parts(2_680, 0).saturating_mul(s.into())) + .saturating_add(Weight::from_parts(2_705, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -123,8 +123,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `180` // Estimated: `3754` - // Minimum execution time: 81_136_000 picoseconds. - Weight::from_parts(86_539_000, 3754) + // Minimum execution time: 79_955_000 picoseconds. + Weight::from_parts(86_070_000, 3754) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -138,8 +138,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 35_514_000 picoseconds. - Weight::from_parts(39_456_000, 3544) + // Minimum execution time: 39_371_000 picoseconds. + Weight::from_parts(42_668_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -151,8 +151,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `137` // Estimated: `3544` - // Minimum execution time: 30_179_000 picoseconds. - Weight::from_parts(36_807_000, 3544) + // Minimum execution time: 34_992_000 picoseconds. + Weight::from_parts(37_059_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -164,8 +164,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 24_064_000 picoseconds. - Weight::from_parts(25_335_000, 3544) + // Minimum execution time: 25_635_000 picoseconds. + Weight::from_parts(28_098_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -177,8 +177,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3` // Estimated: `3544` - // Minimum execution time: 21_430_000 picoseconds. - Weight::from_parts(26_324_000, 3544) + // Minimum execution time: 27_063_000 picoseconds. + Weight::from_parts(29_707_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -190,8 +190,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 13_910_000 picoseconds. - Weight::from_parts(14_811_000, 3544) + // Minimum execution time: 14_854_000 picoseconds. + Weight::from_parts(16_370_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -205,8 +205,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 31_709_000 picoseconds. - Weight::from_parts(34_427_000, 3544) + // Minimum execution time: 32_555_000 picoseconds. + Weight::from_parts(39_800_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -218,8 +218,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 14_843_000 picoseconds. - Weight::from_parts(15_874_000, 3544) + // Minimum execution time: 15_535_000 picoseconds. + Weight::from_parts(16_289_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -231,8 +231,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 14_215_000 picoseconds. - Weight::from_parts(14_954_000, 3544) + // Minimum execution time: 15_264_000 picoseconds. + Weight::from_parts(15_852_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -247,12 +247,12 @@ impl pallet_preimage::WeightInfo for WeightInfo { /// The range of component `n` is `[1, 1024]`. fn ensure_updated(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `648 + n * (203 ±0)` + // Measured: `558 + n * (204 ±0)` // Estimated: `990 + n * (2764 ±0)` - // Minimum execution time: 77_456_000 picoseconds. - Weight::from_parts(78_336_000, 990) - // Standard Error: 67_652 - .saturating_add(Weight::from_parts(78_656_943, 0).saturating_mul(n.into())) + // Minimum execution time: 78_094_000 picoseconds. + Weight::from_parts(78_653_000, 990) + // Standard Error: 64_483 + .saturating_add(Weight::from_parts(77_850_262, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into()))) .saturating_add(Weight::from_parts(0, 2764).saturating_mul(n.into())) diff --git a/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs b/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs index 8fb40c96..84234612 100644 --- a/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs +++ b/operator/runtime/stagenet/src/weights/pallet_proofs_dealer.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_proofs_dealer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proofs_dealer`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `41` // Estimated: `4687` - // Minimum execution time: 11_702_000 picoseconds. - Weight::from_parts(12_152_000, 4687) + // Minimum execution time: 11_720_000 picoseconds. + Weight::from_parts(12_183_000, 4687) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -90,17 +90,13 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) /// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0) /// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:1) + /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Providers::TotalBspsCapacity` (r:1 w:0) /// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) @@ -115,14 +111,14 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// The range of component `n` is `[1, 20]`. fn submit_proof_no_checkpoint_challenges_key_proofs(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2070` + // Measured: `1980` // Estimated: `15270` - // Minimum execution time: 2_158_744_000 picoseconds. - Weight::from_parts(2_068_488_029, 15270) - // Standard Error: 330_919 - .saturating_add(Weight::from_parts(133_424_014, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(30_u64)) - .saturating_add(T::DbWeight::get().writes(9_u64)) + // Minimum execution time: 2_127_733_000 picoseconds. + Weight::from_parts(2_036_876_599, 15270) + // Standard Error: 149_800 + .saturating_add(Weight::from_parts(131_677_827, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(26_u64)) + .saturating_add(T::DbWeight::get().writes(10_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) /// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) @@ -154,17 +150,13 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) /// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0) /// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:1) + /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Providers::TotalBspsCapacity` (r:1 w:0) /// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) @@ -173,14 +165,14 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// The range of component `n` is `[21, 40]`. fn submit_proof_with_checkpoint_challenges_key_proofs(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2070` + // Measured: `1980` // Estimated: `20676` - // Minimum execution time: 4_534_427_000 picoseconds. - Weight::from_parts(3_936_459_939, 20676) - // Standard Error: 918_274 - .saturating_add(Weight::from_parts(38_816_629, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(39_u64)) - .saturating_add(T::DbWeight::get().writes(11_u64)) + // Minimum execution time: 4_693_912_000 picoseconds. + Weight::from_parts(3_931_692_776, 20676) + // Standard Error: 900_039 + .saturating_add(Weight::from_parts(43_286_304, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(34_u64)) + .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:1) /// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -211,10 +203,10 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `1155 + n * (271 ±0)` // Estimated: `6172 + n * (3634 ±0)` - // Minimum execution time: 29_919_000 picoseconds. - Weight::from_parts(30_247_000, 6172) - // Standard Error: 50_330 - .saturating_add(Weight::from_parts(40_561_686, 0).saturating_mul(n.into())) + // Minimum execution time: 30_250_000 picoseconds. + Weight::from_parts(30_577_000, 6172) + // Standard Error: 48_885 + .saturating_add(Weight::from_parts(39_169_641, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3_u64)) @@ -234,10 +226,10 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `65 + n * (32 ±0)` // Estimated: `4787` - // Minimum execution time: 14_102_000 picoseconds. - Weight::from_parts(16_065_088, 4787) - // Standard Error: 3_474 - .saturating_add(Weight::from_parts(431_594, 0).saturating_mul(n.into())) + // Minimum execution time: 14_237_000 picoseconds. + Weight::from_parts(16_288_097, 4787) + // Standard Error: 3_306 + .saturating_add(Weight::from_parts(436_260, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -253,8 +245,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `248` // Estimated: `3501` - // Minimum execution time: 14_156_000 picoseconds. - Weight::from_parts(14_699_000, 3501) + // Minimum execution time: 14_021_000 picoseconds. + Weight::from_parts(14_547_000, 3501) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -266,8 +258,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `41` // Estimated: `1489` - // Minimum execution time: 4_462_000 picoseconds. - Weight::from_parts(4_676_000, 1489) + // Minimum execution time: 4_508_000 picoseconds. + Weight::from_parts(4_651_000, 1489) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `ProofsDealer::LastDeletedTick` (r:0 w:1) @@ -278,8 +270,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_654_000 picoseconds. - Weight::from_parts(2_799_000, 0) + // Minimum execution time: 2_469_000 picoseconds. + Weight::from_parts(2_623_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `ProofsDealer::PastBlocksWeight` (r:0 w:2) @@ -288,8 +280,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_988_000 picoseconds. - Weight::from_parts(5_139_000, 0) + // Minimum execution time: 4_894_000 picoseconds. + Weight::from_parts(5_054_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) @@ -308,8 +300,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `552` // Estimated: `4624` - // Minimum execution time: 45_404_000 picoseconds. - Weight::from_parts(46_675_000, 4624) + // Minimum execution time: 45_153_000 picoseconds. + Weight::from_parts(46_402_000, 4624) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -319,8 +311,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_538_000 picoseconds. - Weight::from_parts(7_804_000, 0) + // Minimum execution time: 7_397_000 picoseconds. + Weight::from_parts(7_665_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_proxy.rs b/operator/runtime/stagenet/src/weights/pallet_proxy.rs index 7e12be9d..b3a3d394 100644 --- a/operator/runtime/stagenet/src/weights/pallet_proxy.rs +++ b/operator/runtime/stagenet/src/weights/pallet_proxy.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proxy`. pub struct WeightInfo(PhantomData); @@ -66,10 +66,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `228 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 27_044_000 picoseconds. - Weight::from_parts(27_911_292, 4310) - // Standard Error: 1_622 - .saturating_add(Weight::from_parts(49_308, 0).saturating_mul(p.into())) + // Minimum execution time: 27_089_000 picoseconds. + Weight::from_parts(28_156_064, 4310) + // Standard Error: 1_770 + .saturating_add(Weight::from_parts(49_145, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) // 1 DB read that happen when filtering the proxy call transaction .saturating_add(T::DbWeight::get().reads(1)) @@ -90,12 +90,12 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480 + a * (56 ±0) + p * (25 ±0)` // Estimated: `5302` - // Minimum execution time: 57_880_000 picoseconds. - Weight::from_parts(59_011_948, 5302) - // Standard Error: 3_445 - .saturating_add(Weight::from_parts(258_796, 0).saturating_mul(a.into())) - // Standard Error: 3_559 - .saturating_add(Weight::from_parts(22_962, 0).saturating_mul(p.into())) + // Minimum execution time: 57_620_000 picoseconds. + Weight::from_parts(58_618_667, 5302) + // Standard Error: 4_513 + .saturating_add(Weight::from_parts(251_379, 0).saturating_mul(a.into())) + // Standard Error: 4_663 + .saturating_add(Weight::from_parts(16_192, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -109,10 +109,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `362 + a * (56 ±0)` // Estimated: `5302` - // Minimum execution time: 35_927_000 picoseconds. - Weight::from_parts(37_422_749, 5302) - // Standard Error: 2_332 - .saturating_add(Weight::from_parts(250_068, 0).saturating_mul(a.into())) + // Minimum execution time: 35_709_000 picoseconds. + Weight::from_parts(36_854_561, 5302) + // Standard Error: 2_096 + .saturating_add(Weight::from_parts(237_514, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -126,10 +126,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `362 + a * (56 ±0)` // Estimated: `5302` - // Minimum execution time: 36_250_000 picoseconds. - Weight::from_parts(37_179_583, 5302) - // Standard Error: 2_298 - .saturating_add(Weight::from_parts(248_750, 0).saturating_mul(a.into())) + // Minimum execution time: 35_957_000 picoseconds. + Weight::from_parts(36_800_421, 5302) + // Standard Error: 2_113 + .saturating_add(Weight::from_parts(237_193, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -145,12 +145,12 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `378 + a * (56 ±0) + p * (25 ±0)` // Estimated: `5302` - // Minimum execution time: 45_699_000 picoseconds. - Weight::from_parts(46_470_755, 5302) - // Standard Error: 3_504 - .saturating_add(Weight::from_parts(248_030, 0).saturating_mul(a.into())) - // Standard Error: 3_620 - .saturating_add(Weight::from_parts(12_234, 0).saturating_mul(p.into())) + // Minimum execution time: 45_730_000 picoseconds. + Weight::from_parts(46_717_829, 5302) + // Standard Error: 2_982 + .saturating_add(Weight::from_parts(251_066, 0).saturating_mul(a.into())) + // Standard Error: 3_081 + .saturating_add(Weight::from_parts(2_101, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -161,10 +161,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 33_426_000 picoseconds. - Weight::from_parts(34_572_959, 4310) - // Standard Error: 1_379 - .saturating_add(Weight::from_parts(46_699, 0).saturating_mul(p.into())) + // Minimum execution time: 33_860_000 picoseconds. + Weight::from_parts(34_824_822, 4310) + // Standard Error: 1_359 + .saturating_add(Weight::from_parts(45_897, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -175,10 +175,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 33_479_000 picoseconds. - Weight::from_parts(34_794_629, 4310) - // Standard Error: 1_434 - .saturating_add(Weight::from_parts(49_922, 0).saturating_mul(p.into())) + // Minimum execution time: 33_469_000 picoseconds. + Weight::from_parts(34_461_298, 4310) + // Standard Error: 1_384 + .saturating_add(Weight::from_parts(40_223, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -189,10 +189,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 30_549_000 picoseconds. - Weight::from_parts(31_704_003, 4310) - // Standard Error: 1_295 - .saturating_add(Weight::from_parts(25_860, 0).saturating_mul(p.into())) + // Minimum execution time: 30_494_000 picoseconds. + Weight::from_parts(31_627_445, 4310) + // Standard Error: 1_362 + .saturating_add(Weight::from_parts(23_597, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -203,10 +203,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `194` // Estimated: `4310` - // Minimum execution time: 36_219_000 picoseconds. - Weight::from_parts(37_500_614, 4310) - // Standard Error: 1_579 - .saturating_add(Weight::from_parts(27_593, 0).saturating_mul(p.into())) + // Minimum execution time: 36_109_000 picoseconds. + Weight::from_parts(37_344_366, 4310) + // Standard Error: 1_457 + .saturating_add(Weight::from_parts(14_272, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -217,11 +217,26 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `207 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 31_531_000 picoseconds. - Weight::from_parts(32_607_358, 4310) - // Standard Error: 1_257 - .saturating_add(Weight::from_parts(33_494, 0).saturating_mul(p.into())) + // Minimum execution time: 31_817_000 picoseconds. + Weight::from_parts(32_731_244, 4310) + // Standard Error: 1_273 + .saturating_add(Weight::from_parts(30_666, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) + fn poke_deposit() -> Weight { + // Proof Size summary in bytes: + // Measured: `496` + // Estimated: `5302` + // Minimum execution time: 63_415_000 picoseconds. + Weight::from_parts(64_444_000, 5302) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } } diff --git a/operator/runtime/stagenet/src/weights/pallet_randomness.rs b/operator/runtime/stagenet/src/weights/pallet_randomness.rs index 477df36c..b22a8020 100644 --- a/operator/runtime/stagenet/src/weights/pallet_randomness.rs +++ b/operator/runtime/stagenet/src/weights/pallet_randomness.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_randomness`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/pallet_referenda.rs b/operator/runtime/stagenet/src/weights/pallet_referenda.rs index dfe4de99..4935932c 100644 --- a/operator/runtime/stagenet/src/weights/pallet_referenda.rs +++ b/operator/runtime/stagenet/src/weights/pallet_referenda.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_referenda` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_referenda`. pub struct WeightInfo(PhantomData); @@ -65,8 +65,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `341` // Estimated: `13328` - // Minimum execution time: 47_663_000 picoseconds. - Weight::from_parts(49_002_000, 13328) + // Minimum execution time: 46_664_000 picoseconds. + Weight::from_parts(47_908_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -80,8 +80,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 64_570_000 picoseconds. - Weight::from_parts(65_868_000, 25666) + // Minimum execution time: 64_495_000 picoseconds. + Weight::from_parts(66_071_000, 25666) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -99,8 +99,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3375` // Estimated: `13328` - // Minimum execution time: 83_419_000 picoseconds. - Weight::from_parts(85_156_000, 13328) + // Minimum execution time: 83_925_000 picoseconds. + Weight::from_parts(85_070_000, 13328) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -118,8 +118,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3395` // Estimated: `13328` - // Minimum execution time: 82_328_000 picoseconds. - Weight::from_parts(84_483_000, 13328) + // Minimum execution time: 83_042_000 picoseconds. + Weight::from_parts(84_436_000, 13328) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -135,8 +135,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 75_337_000 picoseconds. - Weight::from_parts(77_289_000, 25666) + // Minimum execution time: 75_171_000 picoseconds. + Weight::from_parts(76_878_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -152,8 +152,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 72_551_000 picoseconds. - Weight::from_parts(74_527_000, 25666) + // Minimum execution time: 73_269_000 picoseconds. + Weight::from_parts(75_215_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -163,8 +163,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `492` // Estimated: `3795` - // Minimum execution time: 42_024_000 picoseconds. - Weight::from_parts(43_242_000, 3795) + // Minimum execution time: 40_391_000 picoseconds. + Weight::from_parts(41_295_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -174,8 +174,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `450` // Estimated: `3795` - // Minimum execution time: 38_680_000 picoseconds. - Weight::from_parts(39_590_000, 3795) + // Minimum execution time: 37_210_000 picoseconds. + Weight::from_parts(38_505_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -189,8 +189,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `25666` - // Minimum execution time: 41_832_000 picoseconds. - Weight::from_parts(42_922_000, 25666) + // Minimum execution time: 41_390_000 picoseconds. + Weight::from_parts(43_107_000, 25666) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -206,10 +206,10 @@ impl pallet_referenda::WeightInfo for WeightInfo { /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) fn kill() -> Weight { // Proof Size summary in bytes: - // Measured: `946` + // Measured: `858` // Estimated: `25666` - // Minimum execution time: 130_193_000 picoseconds. - Weight::from_parts(132_421_000, 25666) + // Minimum execution time: 131_536_000 picoseconds. + Weight::from_parts(134_013_000, 25666) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -221,8 +221,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `240` // Estimated: `5477` - // Minimum execution time: 14_393_000 picoseconds. - Weight::from_parts(14_789_000, 5477) + // Minimum execution time: 14_220_000 picoseconds. + Weight::from_parts(14_715_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -236,8 +236,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3228` // Estimated: `13328` - // Minimum execution time: 55_888_000 picoseconds. - Weight::from_parts(56_966_000, 13328) + // Minimum execution time: 53_945_000 picoseconds. + Weight::from_parts(56_174_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -251,8 +251,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3228` // Estimated: `13328` - // Minimum execution time: 58_146_000 picoseconds. - Weight::from_parts(59_372_000, 13328) + // Minimum execution time: 57_278_000 picoseconds. + Weight::from_parts(58_994_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -264,8 +264,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3053` // Estimated: `5477` - // Minimum execution time: 29_737_000 picoseconds. - Weight::from_parts(31_024_000, 5477) + // Minimum execution time: 29_286_000 picoseconds. + Weight::from_parts(30_408_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -277,8 +277,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3053` // Estimated: `5477` - // Minimum execution time: 29_541_000 picoseconds. - Weight::from_parts(31_117_000, 5477) + // Minimum execution time: 29_865_000 picoseconds. + Weight::from_parts(31_137_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -292,8 +292,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3057` // Estimated: `5477` - // Minimum execution time: 36_123_000 picoseconds. - Weight::from_parts(37_361_000, 5477) + // Minimum execution time: 36_570_000 picoseconds. + Weight::from_parts(37_688_000, 5477) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -307,8 +307,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3077` // Estimated: `5477` - // Minimum execution time: 35_219_000 picoseconds. - Weight::from_parts(36_749_000, 5477) + // Minimum execution time: 36_275_000 picoseconds. + Weight::from_parts(36_980_000, 5477) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -320,8 +320,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `387` // Estimated: `13328` - // Minimum execution time: 27_482_000 picoseconds. - Weight::from_parts(28_706_000, 13328) + // Minimum execution time: 28_006_000 picoseconds. + Weight::from_parts(28_622_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -333,8 +333,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 27_961_000 picoseconds. - Weight::from_parts(28_895_000, 13328) + // Minimum execution time: 27_987_000 picoseconds. + Weight::from_parts(28_662_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -344,8 +344,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `332` // Estimated: `3795` - // Minimum execution time: 18_445_000 picoseconds. - Weight::from_parts(18_973_000, 3795) + // Minimum execution time: 18_056_000 picoseconds. + Weight::from_parts(18_590_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -359,8 +359,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 37_171_000 picoseconds. - Weight::from_parts(37_637_000, 13328) + // Minimum execution time: 36_510_000 picoseconds. + Weight::from_parts(37_600_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -374,8 +374,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 38_846_000 picoseconds. - Weight::from_parts(39_814_000, 13328) + // Minimum execution time: 38_517_000 picoseconds. + Weight::from_parts(39_747_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -387,8 +387,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 34_643_000 picoseconds. - Weight::from_parts(35_664_000, 13328) + // Minimum execution time: 34_035_000 picoseconds. + Weight::from_parts(35_010_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -400,8 +400,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `459` // Estimated: `13328` - // Minimum execution time: 34_165_000 picoseconds. - Weight::from_parts(34_711_000, 13328) + // Minimum execution time: 33_829_000 picoseconds. + Weight::from_parts(34_783_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -413,8 +413,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 32_303_000 picoseconds. - Weight::from_parts(33_358_000, 13328) + // Minimum execution time: 32_450_000 picoseconds. + Weight::from_parts(33_352_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -426,8 +426,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `13328` - // Minimum execution time: 32_148_000 picoseconds. - Weight::from_parts(33_280_000, 13328) + // Minimum execution time: 31_830_000 picoseconds. + Weight::from_parts(32_688_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -441,8 +441,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `25666` - // Minimum execution time: 48_357_000 picoseconds. - Weight::from_parts(49_702_000, 25666) + // Minimum execution time: 47_943_000 picoseconds. + Weight::from_parts(49_290_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -454,8 +454,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 34_804_000 picoseconds. - Weight::from_parts(35_668_000, 13328) + // Minimum execution time: 34_053_000 picoseconds. + Weight::from_parts(35_574_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -471,8 +471,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `437` // Estimated: `3795` - // Minimum execution time: 26_295_000 picoseconds. - Weight::from_parts(27_057_000, 3795) + // Minimum execution time: 25_542_000 picoseconds. + Weight::from_parts(26_650_000, 3795) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -484,8 +484,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `409` // Estimated: `3795` - // Minimum execution time: 21_150_000 picoseconds. - Weight::from_parts(22_081_000, 3795) + // Minimum execution time: 21_235_000 picoseconds. + Weight::from_parts(21_758_000, 3795) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs b/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs index 67af1dcc..bc61a916 100644 --- a/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs +++ b/operator/runtime/stagenet/src/weights/pallet_safe_mode.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_safe_mode` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_safe_mode`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `42` // Estimated: `1489` - // Minimum execution time: 2_915_000 picoseconds. - Weight::from_parts(3_026_000, 1489) + // Minimum execution time: 2_929_000 picoseconds. + Weight::from_parts(3_069_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:1) @@ -71,8 +71,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 8_695_000 picoseconds. - Weight::from_parts(8_981_000, 1489) + // Minimum execution time: 8_893_000 picoseconds. + Weight::from_parts(9_161_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -89,8 +89,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `42` // Estimated: `1489` - // Minimum execution time: 10_285_000 picoseconds. - Weight::from_parts(10_867_000, 1489) + // Minimum execution time: 10_602_000 picoseconds. + Weight::from_parts(10_937_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -107,8 +107,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 11_141_000 picoseconds. - Weight::from_parts(11_705_000, 1489) + // Minimum execution time: 11_556_000 picoseconds. + Weight::from_parts(11_995_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -118,8 +118,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 10_926_000 picoseconds. - Weight::from_parts(11_368_000, 1489) + // Minimum execution time: 11_458_000 picoseconds. + Weight::from_parts(11_739_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -138,8 +138,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `167` // Estimated: `3754` - // Minimum execution time: 54_360_000 picoseconds. - Weight::from_parts(56_010_000, 3754) + // Minimum execution time: 54_694_000 picoseconds. + Weight::from_parts(55_817_000, 3754) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -151,8 +151,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `167` // Estimated: `3754` - // Minimum execution time: 41_695_000 picoseconds. - Weight::from_parts(42_880_000, 3754) + // Minimum execution time: 42_560_000 picoseconds. + Weight::from_parts(43_524_000, 3754) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_scheduler.rs b/operator/runtime/stagenet/src/weights/pallet_scheduler.rs index 3fb00841..ec613cc9 100644 --- a/operator/runtime/stagenet/src/weights/pallet_scheduler.rs +++ b/operator/runtime/stagenet/src/weights/pallet_scheduler.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_scheduler`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `31` // Estimated: `1489` - // Minimum execution time: 4_338_000 picoseconds. - Weight::from_parts(4_630_000, 1489) + // Minimum execution time: 7_892_000 picoseconds. + Weight::from_parts(8_204_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -73,10 +73,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 4_985_000 picoseconds. - Weight::from_parts(8_782_750, 13328) - // Standard Error: 1_767 - .saturating_add(Weight::from_parts(428_844, 0).saturating_mul(s.into())) + // Minimum execution time: 5_118_000 picoseconds. + Weight::from_parts(8_502_790, 13328) + // Standard Error: 1_628 + .saturating_add(Weight::from_parts(429_922, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -84,8 +84,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_816_000 picoseconds. - Weight::from_parts(4_955_000, 0) + // Minimum execution time: 4_540_000 picoseconds. + Weight::from_parts(4_713_000, 0) } /// Storage: `Preimage::PreimageFor` (r:1 w:1) /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) @@ -98,10 +98,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `140 + s * (1 ±0)` // Estimated: `3605 + s * (1 ±0)` - // Minimum execution time: 23_601_000 picoseconds. - Weight::from_parts(23_998_000, 3605) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_581, 0).saturating_mul(s.into())) + // Minimum execution time: 23_840_000 picoseconds. + Weight::from_parts(24_142_000, 3605) + // Standard Error: 13 + .saturating_add(Weight::from_parts(1_736, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) @@ -112,16 +112,16 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_041_000 picoseconds. - Weight::from_parts(7_195_000, 0) + // Minimum execution time: 6_946_000 picoseconds. + Weight::from_parts(7_125_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } fn service_task_periodic() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_726_000 picoseconds. - Weight::from_parts(4_956_000, 0) + // Minimum execution time: 4_597_000 picoseconds. + Weight::from_parts(4_751_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -131,16 +131,16 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 10_206_000 picoseconds. - Weight::from_parts(10_583_000, 3997) + // Minimum execution time: 10_076_000 picoseconds. + Weight::from_parts(10_441_000, 3997) .saturating_add(T::DbWeight::get().reads(2_u64)) } fn execute_dispatch_unsigned() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_287_000 picoseconds. - Weight::from_parts(3_440_000, 0) + // Minimum execution time: 3_335_000 picoseconds. + Weight::from_parts(3_513_000, 0) } /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(9863), added: 12338, mode: `MaxEncodedLen`) @@ -149,10 +149,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 14_288_000 picoseconds. - Weight::from_parts(17_898_063, 13328) - // Standard Error: 1_730 - .saturating_add(Weight::from_parts(470_154, 0).saturating_mul(s.into())) + // Minimum execution time: 14_133_000 picoseconds. + Weight::from_parts(17_475_131, 13328) + // Standard Error: 1_624 + .saturating_add(Weight::from_parts(467_086, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -167,10 +167,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 21_181_000 picoseconds. - Weight::from_parts(20_631_066, 13328) - // Standard Error: 1_116 - .saturating_add(Weight::from_parts(723_587, 0).saturating_mul(s.into())) + // Minimum execution time: 20_555_000 picoseconds. + Weight::from_parts(20_467_713, 13328) + // Standard Error: 1_122 + .saturating_add(Weight::from_parts(705_780, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -183,10 +183,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `255 + s * (185 ±0)` // Estimated: `13328` - // Minimum execution time: 18_979_000 picoseconds. - Weight::from_parts(24_017_649, 13328) - // Standard Error: 2_890 - .saturating_add(Weight::from_parts(517_911, 0).saturating_mul(s.into())) + // Minimum execution time: 18_526_000 picoseconds. + Weight::from_parts(23_572_359, 13328) + // Standard Error: 2_953 + .saturating_add(Weight::from_parts(513_481, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -201,10 +201,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `281 + s * (185 ±0)` // Estimated: `13328` - // Minimum execution time: 24_175_000 picoseconds. - Weight::from_parts(24_838_171, 13328) - // Standard Error: 1_492 - .saturating_add(Weight::from_parts(757_870, 0).saturating_mul(s.into())) + // Minimum execution time: 23_811_000 picoseconds. + Weight::from_parts(24_214_705, 13328) + // Standard Error: 1_448 + .saturating_add(Weight::from_parts(755_725, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -217,10 +217,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `118` // Estimated: `13328` - // Minimum execution time: 13_155_000 picoseconds. - Weight::from_parts(13_474_771, 13328) - // Standard Error: 491 - .saturating_add(Weight::from_parts(34_382, 0).saturating_mul(s.into())) + // Minimum execution time: 13_033_000 picoseconds. + Weight::from_parts(13_420_367, 13328) + // Standard Error: 504 + .saturating_add(Weight::from_parts(31_056, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -232,8 +232,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `8928` // Estimated: `13328` - // Minimum execution time: 33_052_000 picoseconds. - Weight::from_parts(34_111_000, 13328) + // Minimum execution time: 32_786_000 picoseconds. + Weight::from_parts(33_709_000, 13328) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -247,8 +247,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `9606` // Estimated: `13328` - // Minimum execution time: 41_703_000 picoseconds. - Weight::from_parts(43_007_000, 13328) + // Minimum execution time: 41_186_000 picoseconds. + Weight::from_parts(42_126_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -260,8 +260,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `8940` // Estimated: `13328` - // Minimum execution time: 31_859_000 picoseconds. - Weight::from_parts(32_751_000, 13328) + // Minimum execution time: 31_162_000 picoseconds. + Weight::from_parts(31_911_000, 13328) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -275,8 +275,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `9618` // Estimated: `13328` - // Minimum execution time: 39_711_000 picoseconds. - Weight::from_parts(40_746_000, 13328) + // Minimum execution time: 39_047_000 picoseconds. + Weight::from_parts(40_330_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_session.rs b/operator/runtime/stagenet/src/weights/pallet_session.rs index 9c65f513..1e96e27f 100644 --- a/operator/runtime/stagenet/src/weights/pallet_session.rs +++ b/operator/runtime/stagenet/src/weights/pallet_session.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_session`. pub struct WeightInfo(PhantomData); @@ -63,8 +63,8 @@ impl pallet_session::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `350` // Estimated: `11240` - // Minimum execution time: 37_322_000 picoseconds. - Weight::from_parts(38_272_000, 11240) + // Minimum execution time: 38_516_000 picoseconds. + Weight::from_parts(39_076_000, 11240) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -76,8 +76,8 @@ impl pallet_session::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `328` // Estimated: `3793` - // Minimum execution time: 21_685_000 picoseconds. - Weight::from_parts(22_489_000, 3793) + // Minimum execution time: 22_660_000 picoseconds. + Weight::from_parts(23_277_000, 3793) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs b/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs index 005a1700..7cbbd283 100644 --- a/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs +++ b/operator/runtime/stagenet/src/weights/pallet_storage_providers.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_storage_providers` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_storage_providers`. pub struct WeightInfo(PhantomData); @@ -69,8 +69,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 90_021_000 picoseconds. - Weight::from_parts(92_670_000, 5628) + // Minimum execution time: 89_125_000 picoseconds. + Weight::from_parts(90_834_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -88,8 +88,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 91_611_000 picoseconds. - Weight::from_parts(93_053_000, 5628) + // Minimum execution time: 90_497_000 picoseconds. + Weight::from_parts(92_022_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -111,8 +111,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `474` // Estimated: `5628` - // Minimum execution time: 38_428_000 picoseconds. - Weight::from_parts(39_861_000, 5628) + // Minimum execution time: 38_958_000 picoseconds. + Weight::from_parts(39_924_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -136,8 +136,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `487` // Estimated: `5628` - // Minimum execution time: 54_665_000 picoseconds. - Weight::from_parts(56_343_000, 5628) + // Minimum execution time: 54_780_000 picoseconds. + Weight::from_parts(56_666_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -151,8 +151,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `507` // Estimated: `5628` - // Minimum execution time: 65_055_000 picoseconds. - Weight::from_parts(67_002_000, 5628) + // Minimum execution time: 65_366_000 picoseconds. + Weight::from_parts(67_060_000, 5628) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -175,10 +175,10 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `775 + n * (83 ±0)` // Estimated: `8186 + n * (3598 ±0)` - // Minimum execution time: 92_437_000 picoseconds. - Weight::from_parts(92_181_442, 8186) - // Standard Error: 9_739 - .saturating_add(Weight::from_parts(6_392_076, 0).saturating_mul(n.into())) + // Minimum execution time: 92_747_000 picoseconds. + Weight::from_parts(93_538_109, 8186) + // Standard Error: 10_039 + .saturating_add(Weight::from_parts(6_465_562, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(7_u64)) @@ -205,8 +205,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `720` // Estimated: `4624` - // Minimum execution time: 93_925_000 picoseconds. - Weight::from_parts(95_582_000, 4624) + // Minimum execution time: 93_898_000 picoseconds. + Weight::from_parts(95_912_000, 4624) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -228,8 +228,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `679` // Estimated: `4624` - // Minimum execution time: 84_814_000 picoseconds. - Weight::from_parts(86_666_000, 4624) + // Minimum execution time: 84_455_000 picoseconds. + Weight::from_parts(86_224_000, 4624) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -251,8 +251,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `679` // Estimated: `4624` - // Minimum execution time: 105_285_000 picoseconds. - Weight::from_parts(106_175_000, 4624) + // Minimum execution time: 105_054_000 picoseconds. + Weight::from_parts(106_544_000, 4624) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -270,8 +270,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `649` // Estimated: `4608` - // Minimum execution time: 79_570_000 picoseconds. - Weight::from_parts(80_600_000, 4608) + // Minimum execution time: 79_174_000 picoseconds. + Weight::from_parts(80_455_000, 4608) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -289,8 +289,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `649` // Estimated: `4608` - // Minimum execution time: 99_554_000 picoseconds. - Weight::from_parts(100_542_000, 4608) + // Minimum execution time: 100_238_000 picoseconds. + Weight::from_parts(101_757_000, 4608) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -306,8 +306,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `591` // Estimated: `4608` - // Minimum execution time: 45_279_000 picoseconds. - Weight::from_parts(45_906_000, 4608) + // Minimum execution time: 45_390_000 picoseconds. + Weight::from_parts(45_994_000, 4608) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -321,8 +321,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `631` // Estimated: `4608` - // Minimum execution time: 33_017_000 picoseconds. - Weight::from_parts(33_762_000, 4608) + // Minimum execution time: 33_169_000 picoseconds. + Weight::from_parts(34_140_000, 4608) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -338,8 +338,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `508` // Estimated: `4624` - // Minimum execution time: 34_075_000 picoseconds. - Weight::from_parts(35_656_000, 4624) + // Minimum execution time: 34_936_000 picoseconds. + Weight::from_parts(35_444_000, 4624) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -353,8 +353,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1316` // Estimated: `4624` - // Minimum execution time: 32_962_000 picoseconds. - Weight::from_parts(33_729_000, 4624) + // Minimum execution time: 32_783_000 picoseconds. + Weight::from_parts(33_788_000, 4624) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -382,8 +382,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 126_394_000 picoseconds. - Weight::from_parts(129_027_000, 5628) + // Minimum execution time: 128_007_000 picoseconds. + Weight::from_parts(130_637_000, 5628) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -409,8 +409,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 106_273_000 picoseconds. - Weight::from_parts(108_690_000, 5628) + // Minimum execution time: 106_680_000 picoseconds. + Weight::from_parts(108_278_000, 5628) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -432,10 +432,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn slash_without_awaiting_top_up() -> Weight { // Proof Size summary in bytes: - // Measured: `871` + // Measured: `783` // Estimated: `6172` - // Minimum execution time: 160_594_000 picoseconds. - Weight::from_parts(163_915_000, 6172) + // Minimum execution time: 184_962_000 picoseconds. + Weight::from_parts(187_600_000, 6172) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -463,10 +463,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`) fn slash_with_awaiting_top_up() -> Weight { // Proof Size summary in bytes: - // Measured: `871` + // Measured: `783` // Estimated: `6787` - // Minimum execution time: 128_483_000 picoseconds. - Weight::from_parts(129_763_000, 6787) + // Minimum execution time: 153_044_000 picoseconds. + Weight::from_parts(155_460_000, 6787) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -492,8 +492,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `758` // Estimated: `4624` - // Minimum execution time: 115_081_000 picoseconds. - Weight::from_parts(116_579_000, 4624) + // Minimum execution time: 113_989_000 picoseconds. + Weight::from_parts(115_668_000, 4624) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -523,10 +523,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) fn delete_provider_bsp() -> Weight { // Proof Size summary in bytes: - // Measured: `853` + // Measured: `887` // Estimated: `6038` - // Minimum execution time: 80_980_000 picoseconds. - Weight::from_parts(82_589_000, 6038) + // Minimum execution time: 80_627_000 picoseconds. + Weight::from_parts(83_071_000, 6038) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(9_u64)) } @@ -550,14 +550,14 @@ impl pallet_storage_providers::weights::WeightInfo for /// The range of component `m` is `[0, 20]`. fn delete_provider_msp(n: u32, m: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1845 + m * (54 ±0) + n * (83 ±0)` + // Measured: `1878 + m * (54 ±0) + n * (83 ±0)` // Estimated: `8186 + m * (2571 ±0) + n * (3598 ±0)` - // Minimum execution time: 184_369_000 picoseconds. - Weight::from_parts(77_759_231, 8186) - // Standard Error: 28_443 - .saturating_add(Weight::from_parts(6_795_099, 0).saturating_mul(n.into())) - // Standard Error: 28_443 - .saturating_add(Weight::from_parts(5_705_653, 0).saturating_mul(m.into())) + // Minimum execution time: 185_606_000 picoseconds. + Weight::from_parts(76_878_571, 8186) + // Standard Error: 31_063 + .saturating_add(Weight::from_parts(6_987_274, 0).saturating_mul(n.into())) + // Standard Error: 31_063 + .saturating_add(Weight::from_parts(5_795_408, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into()))) @@ -577,8 +577,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `549` // Estimated: `4624` - // Minimum execution time: 27_473_000 picoseconds. - Weight::from_parts(28_240_000, 4624) + // Minimum execution time: 27_660_000 picoseconds. + Weight::from_parts(28_334_000, 4624) .saturating_add(T::DbWeight::get().reads(3_u64)) } /// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1) @@ -601,8 +601,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1038` // Estimated: `6172` - // Minimum execution time: 102_791_000 picoseconds. - Weight::from_parts(105_581_000, 6172) + // Minimum execution time: 105_275_000 picoseconds. + Weight::from_parts(107_298_000, 6172) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -622,8 +622,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `775` // Estimated: `6172` - // Minimum execution time: 83_518_000 picoseconds. - Weight::from_parts(84_579_000, 6172) + // Minimum execution time: 85_476_000 picoseconds. + Weight::from_parts(86_890_000, 6172) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_sudo.rs b/operator/runtime/stagenet/src/weights/pallet_sudo.rs index e84c4d05..e2399091 100644 --- a/operator/runtime/stagenet/src/weights/pallet_sudo.rs +++ b/operator/runtime/stagenet/src/weights/pallet_sudo.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_sudo` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_sudo`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 13_553_000 picoseconds. - Weight::from_parts(14_133_000, 1505) + // Minimum execution time: 13_302_000 picoseconds. + Weight::from_parts(13_789_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 14_614_000 picoseconds. - Weight::from_parts(15_317_000, 1505) + // Minimum execution time: 15_078_000 picoseconds. + Weight::from_parts(15_553_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Sudo::Key` (r:1 w:0) @@ -82,8 +82,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 14_696_000 picoseconds. - Weight::from_parts(15_144_000, 1505) + // Minimum execution time: 15_130_000 picoseconds. + Weight::from_parts(15_539_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Sudo::Key` (r:1 w:1) @@ -92,8 +92,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 12_538_000 picoseconds. - Weight::from_parts(13_077_000, 1505) + // Minimum execution time: 12_544_000 picoseconds. + Weight::from_parts(12_944_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -103,8 +103,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 5_767_000 picoseconds. - Weight::from_parts(6_012_000, 1505) + // Minimum execution time: 7_285_000 picoseconds. + Weight::from_parts(7_695_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_timestamp.rs b/operator/runtime/stagenet/src/weights/pallet_timestamp.rs index b098ca83..1fbe6a00 100644 --- a/operator/runtime/stagenet/src/weights/pallet_timestamp.rs +++ b/operator/runtime/stagenet/src/weights/pallet_timestamp.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_timestamp`. pub struct WeightInfo(PhantomData); @@ -63,8 +63,8 @@ impl pallet_timestamp::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `1493` - // Minimum execution time: 11_591_000 picoseconds. - Weight::from_parts(12_120_000, 1493) + // Minimum execution time: 11_667_000 picoseconds. + Weight::from_parts(12_079_000, 1493) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,7 +72,7 @@ impl pallet_timestamp::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `94` // Estimated: `0` - // Minimum execution time: 5_261_000 picoseconds. - Weight::from_parts(5_466_000, 0) + // Minimum execution time: 5_298_000 picoseconds. + Weight::from_parts(5_456_000, 0) } } diff --git a/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs b/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs index ea62e0a5..1498c6fb 100644 --- a/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs +++ b/operator/runtime/stagenet/src/weights/pallet_transaction_payment.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_transaction_payment` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_transaction_payment`. pub struct WeightInfo(PhantomData); @@ -58,13 +58,13 @@ impl pallet_transaction_payment::WeightInfo for WeightI /// Storage: `System::Account` (r:3 w:3) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) fn charge_transaction_payment() -> Weight { // Proof Size summary in bytes: - // Measured: `403` + // Measured: `315` // Estimated: `8763` - // Minimum execution time: 98_147_000 picoseconds. - Weight::from_parts(99_279_000, 8763) + // Minimum execution time: 94_309_000 picoseconds. + Weight::from_parts(95_557_000, 8763) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_treasury.rs b/operator/runtime/stagenet/src/weights/pallet_treasury.rs index 69ffe3b2..66971976 100644 --- a/operator/runtime/stagenet/src/weights/pallet_treasury.rs +++ b/operator/runtime/stagenet/src/weights/pallet_treasury.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_treasury` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_treasury`. pub struct WeightInfo(PhantomData); @@ -63,10 +63,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) fn spend_local() -> Weight { // Proof Size summary in bytes: - // Measured: `76` + // Measured: `109` // Estimated: `1887` - // Minimum execution time: 15_759_000 picoseconds. - Weight::from_parts(16_122_000, 1887) + // Minimum execution time: 15_349_000 picoseconds. + Weight::from_parts(15_763_000, 1887) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -74,30 +74,30 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) fn remove_approval() -> Weight { // Proof Size summary in bytes: - // Measured: `161` + // Measured: `194` // Estimated: `1887` - // Minimum execution time: 8_604_000 picoseconds. - Weight::from_parts(8_944_000, 1887) + // Minimum execution time: 8_516_000 picoseconds. + Weight::from_parts(8_748_000, 1887) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `System::Account` (r:1 w:0) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Deactivated` (r:1 w:1) + /// Storage: `Treasury::Deactivated` (r:1 w:0) /// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `Treasury::LastSpendPeriod` (r:1 w:1) /// Proof: `Treasury::LastSpendPeriod` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// The range of component `p` is `[0, 99]`. fn on_initialize_proposals(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `262 + p * (1 ±0)` + // Measured: `295 + p * (1 ±0)` // Estimated: `3581` - // Minimum execution time: 16_972_000 picoseconds. - Weight::from_parts(19_851_536, 3581) - // Standard Error: 811 - .saturating_add(Weight::from_parts(61_203, 0).saturating_mul(p.into())) + // Minimum execution time: 10_940_000 picoseconds. + Weight::from_parts(13_180_153, 3581) + // Standard Error: 575 + .saturating_add(Weight::from_parts(46_726, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Treasury::SpendCount` (r:1 w:1) /// Proof: `Treasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -105,10 +105,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn spend() -> Weight { // Proof Size summary in bytes: - // Measured: `76` + // Measured: `109` // Estimated: `1489` - // Minimum execution time: 14_065_000 picoseconds. - Weight::from_parts(14_604_000, 1489) + // Minimum execution time: 13_853_000 picoseconds. + Weight::from_parts(14_322_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -118,10 +118,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) fn payout() -> Weight { // Proof Size summary in bytes: - // Measured: `387` + // Measured: `383` // Estimated: `6172` - // Minimum execution time: 76_282_000 picoseconds. - Weight::from_parts(77_474_000, 6172) + // Minimum execution time: 74_976_000 picoseconds. + Weight::from_parts(76_243_000, 6172) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -129,10 +129,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn check_status() -> Weight { // Proof Size summary in bytes: - // Measured: `182` + // Measured: `215` // Estimated: `3522` - // Minimum execution time: 16_267_000 picoseconds. - Weight::from_parts(16_768_000, 3522) + // Minimum execution time: 16_029_000 picoseconds. + Weight::from_parts(16_422_000, 3522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -140,10 +140,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn void_spend() -> Weight { // Proof Size summary in bytes: - // Measured: `182` + // Measured: `215` // Estimated: `3522` - // Minimum execution time: 14_915_000 picoseconds. - Weight::from_parts(15_594_000, 3522) + // Minimum execution time: 14_749_000 picoseconds. + Weight::from_parts(15_182_000, 3522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs b/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs index a88c0fd3..4f0ff42b 100644 --- a/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs +++ b/operator/runtime/stagenet/src/weights/pallet_tx_pause.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_tx_pause` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_tx_pause`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_tx_pause::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `4` // Estimated: `3997` - // Minimum execution time: 15_680_000 picoseconds. - Weight::from_parts(16_122_000, 3997) + // Minimum execution time: 15_987_000 picoseconds. + Weight::from_parts(16_421_000, 3997) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_tx_pause::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `566` // Estimated: `3997` - // Minimum execution time: 22_780_000 picoseconds. - Weight::from_parts(23_390_000, 3997) + // Minimum execution time: 22_747_000 picoseconds. + Weight::from_parts(23_362_000, 3997) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/pallet_utility.rs b/operator/runtime/stagenet/src/weights/pallet_utility.rs index 0b5be39c..48517ea0 100644 --- a/operator/runtime/stagenet/src/weights/pallet_utility.rs +++ b/operator/runtime/stagenet/src/weights/pallet_utility.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_utility`. pub struct WeightInfo(PhantomData); @@ -119,4 +119,11 @@ impl pallet_utility::WeightInfo for WeightInfo { .saturating_add(Weight::from_parts(6_810_676, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + fn dispatch_as_fallible() -> Weight { + todo!() + } + + fn if_else() -> Weight { + todo!() + } } diff --git a/operator/runtime/stagenet/src/weights/pallet_whitelist.rs b/operator/runtime/stagenet/src/weights/pallet_whitelist.rs index 88463552..61d0369c 100644 --- a/operator/runtime/stagenet/src/weights/pallet_whitelist.rs +++ b/operator/runtime/stagenet/src/weights/pallet_whitelist.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_whitelist` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_whitelist`. pub struct WeightInfo(PhantomData); @@ -65,8 +65,8 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `79` // Estimated: `3544` - // Minimum execution time: 24_316_000 picoseconds. - Weight::from_parts(24_756_000, 3544) + // Minimum execution time: 24_054_000 picoseconds. + Weight::from_parts(24_814_000, 3544) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -80,8 +80,8 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `208` // Estimated: `3544` - // Minimum execution time: 23_177_000 picoseconds. - Weight::from_parts(23_921_000, 3544) + // Minimum execution time: 23_711_000 picoseconds. + Weight::from_parts(24_244_000, 3544) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -98,10 +98,10 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `284 + n * (1 ±0)` // Estimated: `3748 + n * (1 ±0)` - // Minimum execution time: 38_247_000 picoseconds. - Weight::from_parts(38_728_000, 3748) - // Standard Error: 17 - .saturating_add(Weight::from_parts(1_889, 0).saturating_mul(n.into())) + // Minimum execution time: 38_404_000 picoseconds. + Weight::from_parts(38_713_000, 3748) + // Standard Error: 9 + .saturating_add(Weight::from_parts(1_717, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) @@ -117,10 +117,10 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `208` // Estimated: `3544` - // Minimum execution time: 28_691_000 picoseconds. - Weight::from_parts(29_411_888, 3544) + // Minimum execution time: 28_862_000 picoseconds. + Weight::from_parts(29_407_101, 3544) // Standard Error: 4 - .saturating_add(Weight::from_parts(1_344, 0).saturating_mul(n.into())) + .saturating_add(Weight::from_parts(1_342, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs index ba87788d..71d88f12 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_ethereum_client.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_ethereum_client`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs index 4aa69fde..91ab6f88 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_inbound_queue_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_inbound_queue_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_inbound_queue_v2`. pub struct WeightInfo(PhantomData); @@ -62,15 +62,15 @@ impl snowbridge_pallet_inbound_queue_v2::WeightInfo for /// Storage: `EthereumBeaconClient::FinalizedBeaconState` (r:1 w:0) /// Proof: `EthereumBeaconClient::FinalizedBeaconState` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) /// Storage: `EthereumInboundQueueV2::NonceBitmap` (r:1 w:1) /// Proof: `EthereumInboundQueueV2::NonceBitmap` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn submit() -> Weight { // Proof Size summary in bytes: // Measured: `339` - // Estimated: `3537` - // Minimum execution time: 109_946_000 picoseconds. - Weight::from_parts(112_630_000, 3537) + // Estimated: `3846` + // Minimum execution time: 112_569_000 picoseconds. + Weight::from_parts(113_910_000, 3846) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs index 90400a2e..8366c411 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_outbound_queue_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_outbound_queue_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_outbound_queue_v2`. pub struct WeightInfo(PhantomData); @@ -67,8 +67,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `109` // Estimated: `1594` - // Minimum execution time: 26_814_000 picoseconds. - Weight::from_parts(27_398_000, 1594) + // Minimum execution time: 27_019_000 picoseconds. + Weight::from_parts(27_590_000, 1594) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -80,8 +80,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `1195` // Estimated: `2680` - // Minimum execution time: 40_095_000 picoseconds. - Weight::from_parts(40_943_000, 2680) + // Minimum execution time: 40_715_000 picoseconds. + Weight::from_parts(41_563_000, 2680) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -93,8 +93,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `202` // Estimated: `1687` - // Minimum execution time: 16_303_000 picoseconds. - Weight::from_parts(16_944_000, 1687) + // Minimum execution time: 16_557_000 picoseconds. + Weight::from_parts(17_107_000, 1687) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -106,8 +106,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_129_000 picoseconds. - Weight::from_parts(1_236_000, 0) + // Minimum execution time: 1_198_000 picoseconds. + Weight::from_parts(1_326_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `EthereumOutboundQueueV2::Nonce` (r:1 w:1) @@ -124,8 +124,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `180` // Estimated: `1493` - // Minimum execution time: 690_846_000 picoseconds. - Weight::from_parts(705_960_000, 1493) + // Minimum execution time: 693_264_000 picoseconds. + Weight::from_parts(710_689_000, 1493) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(36_u64)) } @@ -134,15 +134,15 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo /// Storage: `EthereumBeaconClient::FinalizedBeaconState` (r:1 w:0) /// Proof: `EthereumBeaconClient::FinalizedBeaconState` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) /// Storage: `EthereumOutboundQueueV2::PendingOrders` (r:1 w:1) /// Proof: `EthereumOutboundQueueV2::PendingOrders` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) fn submit_delivery_receipt() -> Weight { // Proof Size summary in bytes: // Measured: `498` - // Estimated: `3537` - // Minimum execution time: 108_241_000 picoseconds. - Weight::from_parts(110_020_000, 3537) + // Estimated: `3846` + // Minimum execution time: 108_909_000 picoseconds. + Weight::from_parts(110_781_000, 3846) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs index fcfc581c..08b8bb44 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system`. pub struct WeightInfo(PhantomData); @@ -59,15 +59,15 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_042_000 picoseconds. - Weight::from_parts(9_520_000, 0) + // Minimum execution time: 9_498_000 picoseconds. + Weight::from_parts(9_801_000, 0) } fn set_operating_mode() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_819_000 picoseconds. - Weight::from_parts(7_080_000, 0) + // Minimum execution time: 7_196_000 picoseconds. + Weight::from_parts(7_411_000, 0) } /// Storage: `SnowbridgeSystem::PricingParameters` (r:0 w:1) /// Proof: `SnowbridgeSystem::PricingParameters` (`max_values`: Some(1), `max_size`: Some(112), added: 607, mode: `MaxEncodedLen`) @@ -75,16 +75,16 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_389_000 picoseconds. - Weight::from_parts(9_709_000, 0) + // Minimum execution time: 9_616_000 picoseconds. + Weight::from_parts(9_918_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } fn set_token_transfer_fees() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_646_000 picoseconds. - Weight::from_parts(7_882_000, 0) + // Minimum execution time: 7_853_000 picoseconds. + Weight::from_parts(8_035_000, 0) } /// Storage: `SnowbridgeSystem::ForeignToNativeId` (r:1 w:1) /// Proof: `SnowbridgeSystem::ForeignToNativeId` (`max_values`: None, `max_size`: Some(650), added: 3125, mode: `MaxEncodedLen`) @@ -94,8 +94,8 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `75` // Estimated: `4115` - // Minimum execution time: 20_036_000 picoseconds. - Weight::from_parts(20_566_000, 4115) + // Minimum execution time: 20_069_000 picoseconds. + Weight::from_parts(20_694_000, 4115) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs index ec6d7508..fc87927d 100644 --- a/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs +++ b/operator/runtime/stagenet/src/weights/snowbridge_pallet_system_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_system_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system_v2`. pub struct WeightInfo(PhantomData); @@ -69,8 +69,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `81` // Estimated: `4115` - // Minimum execution time: 45_780_000 picoseconds. - Weight::from_parts(46_911_000, 4115) + // Minimum execution time: 46_602_000 picoseconds. + Weight::from_parts(47_383_000, 4115) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -84,8 +84,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `6` // Estimated: `3601` - // Minimum execution time: 36_440_000 picoseconds. - Weight::from_parts(37_213_000, 3601) + // Minimum execution time: 36_809_000 picoseconds. + Weight::from_parts(37_586_000, 3601) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -99,8 +99,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `6` // Estimated: `3601` - // Minimum execution time: 30_190_000 picoseconds. - Weight::from_parts(30_775_000, 3601) + // Minimum execution time: 30_591_000 picoseconds. + Weight::from_parts(31_221_000, 3601) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/stagenet/tests/common.rs b/operator/runtime/stagenet/tests/common.rs index 9a8edc40..fa7639e4 100644 --- a/operator/runtime/stagenet/tests/common.rs +++ b/operator/runtime/stagenet/tests/common.rs @@ -168,9 +168,12 @@ impl ExtBuilder { .build_storage() .expect("System pallet builds valid default genesis config"); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); // Set up session keys for validators let session_keys: Vec<_> = validators diff --git a/operator/runtime/stagenet/tests/governance/benchmarks.rs b/operator/runtime/stagenet/tests/governance/benchmarks.rs index 1cf51ad2..c40e6110 100644 --- a/operator/runtime/stagenet/tests/governance/benchmarks.rs +++ b/operator/runtime/stagenet/tests/governance/benchmarks.rs @@ -23,6 +23,8 @@ #![cfg(feature = "runtime-benchmarks")] use crate::common::*; +use alloc::vec::Vec; +use core::str::from_utf8; use datahaven_stagenet_runtime::{ configs::governance::council::{TechnicalMaxMembers, TechnicalMaxProposals}, governance::TracksInfo, @@ -36,7 +38,6 @@ use frame_support::{ traits::{Get, StorePreimage}, }; use pallet_conviction_voting::{AccountVote, Conviction, Vote}; -use sp_std::vec::Vec; /// Benchmark council proposal creation with varying member counts #[test] @@ -443,29 +444,32 @@ fn benchmark_council_maximum_load() { #[test] fn benchmark_track_operations() { ExtBuilder::governance().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); println!("Testing {} governance tracks", tracks.len()); - for (track_id, track_info) in tracks.iter() { + for track in tracks.iter() { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); let start_block = System::block_number(); // Create proposal for this track let proposal = RuntimeCall::System(frame_system::Call::set_storage { items: vec![( - format!(":track:{}:{}", track_id, track_info.name).into_bytes(), + format!(":track:{}:{}", track.id, track_name).into_bytes(), b"test".to_vec(), )], }); - let proposal_hash = make_proposal_hash(&proposal); assert_ok!(Preimage::note_preimage( RuntimeOrigin::signed(alice()), proposal.encode() )); + let bounded_proposal = ::bound(proposal).unwrap(); + // Map track to appropriate origin - let origin = if *track_id == 0 { + let origin = if track.id == 0 { frame_system::RawOrigin::Root.into() } else { frame_system::RawOrigin::Signed(alice()).into() @@ -474,19 +478,19 @@ fn benchmark_track_operations() { assert_ok!(Referenda::submit( RuntimeOrigin::signed(alice()), Box::new(origin), - DispatchTime::After(track_info.min_enactment_period), - Box::new(proposal_hash.into()) + bounded_proposal, + DispatchTime::After(track.info.min_enactment_period), )); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(bob()), - *track_id as u32 + track.id as u32 )); // Test voting on this track assert_ok!(ConvictionVoting::vote( RuntimeOrigin::signed(charlie()), - *track_id as u32, + track.id as u32, AccountVote::Standard { vote: Vote { aye: true, @@ -500,11 +504,11 @@ fn benchmark_track_operations() { println!( "Track {} ({}): processed in {} blocks (max_deciding: {}, decision_deposit: {})", - track_id, - track_info.name, + track.id, + track_name, end_block - start_block, - track_info.max_deciding, - track_info.decision_deposit + track.info.max_deciding, + track.info.decision_deposit ); } }); diff --git a/operator/runtime/stagenet/tests/governance/referenda.rs b/operator/runtime/stagenet/tests/governance/referenda.rs index fa8a0c8a..00ea4ca4 100644 --- a/operator/runtime/stagenet/tests/governance/referenda.rs +++ b/operator/runtime/stagenet/tests/governance/referenda.rs @@ -21,6 +21,7 @@ use crate::common::*; use codec::Encode; +use core::str::from_utf8; use datahaven_stagenet_runtime::{ currency::{HAVE, SUPPLY_FACTOR}, governance::TracksInfo, @@ -42,13 +43,16 @@ use pallet_referenda::{Event as ReferendaEvent, ReferendumInfo}; #[test] fn tracks_info_configured_correctly() { ExtBuilder::default().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); // Should have 6 tracks as configured assert_eq!(tracks.len(), 6); // Verify track IDs and names - let track_names: Vec<&str> = tracks.iter().map(|(_, info)| info.name).collect(); + let track_names: Vec<&str> = tracks + .iter() + .map(|track| from_utf8(&track.info.name).unwrap().trim_end_matches('\0')) + .collect(); assert_eq!( track_names, vec![ @@ -62,16 +66,17 @@ fn tracks_info_configured_correctly() { ); // Verify root track has strictest requirements - let (root_id, root_info) = &tracks[0]; - assert_eq!(*root_id, 0u16); - assert_eq!(root_info.max_deciding, 5); - assert_eq!(root_info.decision_deposit, 100000 * HAVE * SUPPLY_FACTOR); // 100 * KILO_HAVE + assert_eq!(tracks[0].id, 0u16); + assert_eq!(tracks[0].info.max_deciding, 5); + assert_eq!( + tracks[0].info.decision_deposit, + 100000 * HAVE * SUPPLY_FACTOR + ); // 100 * KILO_HAVE // Verify general admin track - let (admin_id, admin_info) = &tracks[2]; - assert_eq!(*admin_id, 2u16); - assert_eq!(admin_info.max_deciding, 10); - assert_eq!(admin_info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); + assert_eq!(tracks[2].id, 2u16); + assert_eq!(tracks[2].info.max_deciding, 10); + assert_eq!(tracks[2].info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); }); } @@ -225,7 +230,8 @@ fn referendum_timing_works() { )); // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); // Place decision deposit @@ -243,7 +249,8 @@ fn referendum_timing_works() { } // Advance time through decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + 1); // Referendum should still exist (may have timed out) @@ -499,7 +506,8 @@ fn referendum_insufficient_support_fails() { )); // Advance through the entire decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + track_info.confirm_period + 1); // Should still be ongoing or rejected due to insufficient support @@ -578,7 +586,8 @@ fn decision_deposit_mechanics_work() { } // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); let alice_balance_before = Balances::free_balance(&alice()); @@ -591,7 +600,8 @@ fn decision_deposit_mechanics_work() { // Alice's balance should decrease by decision deposit let alice_balance_after = Balances::free_balance(&alice()); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track assert_eq!( alice_balance_before - alice_balance_after, track_info.decision_deposit @@ -619,7 +629,8 @@ fn decision_deposit_mechanics_work() { fn track_capacity_limits_enforced() { ExtBuilder::default().build().execute_with(|| { // Use root track which has max_deciding of 5 (more reasonable for testing) - let track_info = &TracksInfo::tracks()[0].1; // root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // root track let max_deciding = track_info.max_deciding.min(5); // Use smaller number for testing // Submit max_deciding referenda (but cap at 5 for scheduler limits) @@ -723,7 +734,8 @@ fn insufficient_balance_for_deposits() { )); // Advance through prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); // Should fail to place decision deposit due to insufficient balance @@ -753,7 +765,8 @@ fn referendum_confirmation_period_works() { DispatchTime::After(10) )); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track // Advance through prepare period advance_referendum_time(track_info.prepare_period + 1); @@ -821,7 +834,8 @@ fn split_votes_with_conviction() { )); // Place decision deposit after prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(alice()), diff --git a/operator/runtime/stagenet/tests/lib.rs b/operator/runtime/stagenet/tests/lib.rs index 4277d463..93ee9058 100644 --- a/operator/runtime/stagenet/tests/lib.rs +++ b/operator/runtime/stagenet/tests/lib.rs @@ -66,6 +66,7 @@ fn validate_transaction_fails_on_filtered_call() { max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } .into(), ); diff --git a/operator/runtime/stagenet/tests/treasury.rs b/operator/runtime/stagenet/tests/treasury.rs index 82d3eeee..7bf9f502 100644 --- a/operator/runtime/stagenet/tests/treasury.rs +++ b/operator/runtime/stagenet/tests/treasury.rs @@ -73,6 +73,7 @@ fn author_does_receive_priority_fee() { max_priority_fee_per_gas: Some(U256::from(200 * MILLIHAVE)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -115,6 +116,7 @@ fn total_issuance_after_evm_transaction_with_priority_fee() { max_priority_fee_per_gas: Some(U256::from(BASE_FEE_GENESIS)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -184,6 +186,7 @@ fn total_issuance_after_evm_transaction_without_priority_fee() { max_priority_fee_per_gas: None, nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); diff --git a/operator/runtime/testnet/Cargo.toml b/operator/runtime/testnet/Cargo.toml index 9eb0d7d0..1675a8c2 100644 --- a/operator/runtime/testnet/Cargo.toml +++ b/operator/runtime/testnet/Cargo.toml @@ -18,10 +18,11 @@ bridge-hub-common = { workspace = true, optional = true } codec = { workspace = true, features = ["derive"] } datahaven-runtime-common = { workspace = true } dhp-bridge = { workspace = true } +ethereum = { workspace = true } fp-account = { workspace = true, features = ["serde"] } fp-evm = { workspace = true, features = ["serde"] } fp-rpc = { workspace = true } -fp-self-contained = { workspace = true, features = ["serde", "try-runtime"] } +fp-self-contained = { workspace = true, features = ["serde"] } frame-benchmarking = { workspace = true, optional = true } frame-executive = { workspace = true } frame-metadata-hash-extension = { workspace = true } @@ -121,7 +122,6 @@ sp-offchain = { workspace = true } sp-runtime = { workspace = true, features = ["serde"] } sp-session = { workspace = true } sp-staking = { workspace = true } -sp-std = { workspace = true } sp-storage = { workspace = true } sp-transaction-pool = { workspace = true } sp-version = { workspace = true, features = ["serde"] } @@ -191,6 +191,7 @@ std = [ "alloy-core/std", "codec/std", "datahaven-runtime-common/std", + "ethereum/std", "fp-account/std", "fp-evm/std", "frame-benchmarking?/std", @@ -280,7 +281,6 @@ std = [ "sp-runtime/std", "sp-session/std", "sp-staking/std", - "sp-std/std", "sp-storage/std", "sp-transaction-pool/std", "sp-version/std", diff --git a/operator/runtime/testnet/src/configs/governance/origins.rs b/operator/runtime/testnet/src/configs/governance/origins.rs index 0f943cf6..be8043d8 100644 --- a/operator/runtime/testnet/src/configs/governance/origins.rs +++ b/operator/runtime/testnet/src/configs/governance/origins.rs @@ -34,7 +34,16 @@ pub mod custom_origins { pub struct Pallet(_); #[derive( - PartialEq, Eq, Clone, MaxEncodedLen, Encode, Decode, TypeInfo, RuntimeDebug, EnumString, + PartialEq, + Eq, + Clone, + MaxEncodedLen, + Encode, + Decode, + TypeInfo, + RuntimeDebug, + EnumString, + DecodeWithMemTracking, )] #[strum(serialize_all = "snake_case")] #[pallet::origin] diff --git a/operator/runtime/testnet/src/configs/governance/referenda.rs b/operator/runtime/testnet/src/configs/governance/referenda.rs index cbb68bf5..e65727d3 100644 --- a/operator/runtime/testnet/src/configs/governance/referenda.rs +++ b/operator/runtime/testnet/src/configs/governance/referenda.rs @@ -57,6 +57,8 @@ impl pallet_conviction_voting::Config for Runtime { type MaxVotes = ConstU32<20>; type MaxTurnout = frame_support::traits::TotalIssuanceOf; type Polls = Referenda; + type BlockNumberProvider = System; + type VotingHooks = (); } impl pallet_whitelist::Config for Runtime { @@ -79,8 +81,6 @@ impl pallet_whitelist::Config for Runtime { type WeightInfo = testnet_weights::pallet_whitelist::WeightInfo; } -pallet_referenda::impl_tracksinfo_get!(TracksInfo, Balance, BlockNumber); - // Referenda Implementation impl pallet_referenda::Config for Runtime { type WeightInfo = testnet_weights::pallet_referenda::WeightInfo; @@ -100,4 +100,5 @@ impl pallet_referenda::Config for Runtime { type AlarmInterval = AlarmInterval; type Tracks = TracksInfo; type Preimages = Preimage; + type BlockNumberProvider = System; } diff --git a/operator/runtime/testnet/src/configs/governance/tracks.rs b/operator/runtime/testnet/src/configs/governance/tracks.rs index c1b8a233..21d171b4 100644 --- a/operator/runtime/testnet/src/configs/governance/tracks.rs +++ b/operator/runtime/testnet/src/configs/governance/tracks.rs @@ -21,9 +21,13 @@ use super::*; use crate::currency::{HAVE, KILOHAVE, SUPPLY_FACTOR}; +use alloc::borrow::Cow; +use core::str::from_utf8; +use core::str::FromStr; use datahaven_runtime_common::time::*; use pallet_referenda::Curve; -use sp_std::str::FromStr; +use pallet_referenda::Track; +use sp_runtime::str_array; const fn percent(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 100) @@ -32,12 +36,12 @@ const fn permill(x: i32) -> sp_runtime::FixedI64 { sp_runtime::FixedI64::from_rational(x as u128, 1000) } -const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] = [ - ( - 0, - pallet_referenda::TrackInfo { +const TRACKS_DATA: [Track; 6] = [ + Track { + id: 0, + info: pallet_referenda::TrackInfo { // Name of this track. - name: "root", + name: str_array("root"), // A limit for the number of referenda on this track that can be being decided at once. // For Root origin this should generally be just one. max_deciding: 5, @@ -58,11 +62,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] // is needed for approval as a function of time into decision period. min_support: Curve::make_linear(14, 14, permill(5), percent(25)), }, - ), - ( - 1, - pallet_referenda::TrackInfo { - name: "whitelisted_caller", + }, + Track { + id: 1, + info: pallet_referenda::TrackInfo { + name: str_array("whitelisted_caller"), max_deciding: 100, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 10 * MINUTES, @@ -72,11 +76,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14 * 24, percent(1), percent(0), percent(2)), }, - ), - ( - 2, - pallet_referenda::TrackInfo { - name: "general_admin", + }, + Track { + id: 2, + info: pallet_referenda::TrackInfo { + name: str_array("general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -86,11 +90,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(7, 14, percent(10), percent(0), percent(50)), }, - ), - ( - 3, - pallet_referenda::TrackInfo { - name: "referendum_canceller", + }, + Track { + id: 3, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_canceller"), max_deciding: 20, decision_deposit: 10 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -100,11 +104,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 4, - pallet_referenda::TrackInfo { - name: "referendum_killer", + }, + Track { + id: 4, + info: pallet_referenda::TrackInfo { + name: str_array("referendum_killer"), max_deciding: 100, decision_deposit: 20 * KILOHAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -114,11 +118,11 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(1, 14, percent(96), percent(50), percent(100)), min_support: Curve::make_reciprocal(1, 14, percent(1), percent(0), percent(10)), }, - ), - ( - 5, - pallet_referenda::TrackInfo { - name: "fast_general_admin", + }, + Track { + id: 5, + info: pallet_referenda::TrackInfo { + name: str_array("fast_general_admin"), max_deciding: 10, decision_deposit: 500 * HAVE * SUPPLY_FACTOR, prepare_period: 1 * HOURS, @@ -128,25 +132,25 @@ const TRACKS_DATA: [(u16, pallet_referenda::TrackInfo); 6] min_approval: Curve::make_reciprocal(4, 14, percent(80), percent(50), percent(100)), min_support: Curve::make_reciprocal(5, 14, percent(1), percent(0), percent(50)), }, - ), + }, ]; pub struct TracksInfo; impl pallet_referenda::TracksInfo for TracksInfo { type Id = u16; type RuntimeOrigin = ::PalletsOrigin; - fn tracks() -> &'static [(Self::Id, pallet_referenda::TrackInfo)] { - &TRACKS_DATA[..] + fn tracks() -> impl Iterator>> { + TRACKS_DATA.iter().map(Cow::Borrowed) } fn track_for(id: &Self::RuntimeOrigin) -> Result { if let Ok(system_origin) = frame_system::RawOrigin::try_from(id.clone()) { match system_origin { frame_system::RawOrigin::Root => { - if let Some((track_id, _)) = Self::tracks() + if let Some(track) = Self::tracks() .into_iter() - .find(|(_, track)| track.name == "root") + .find(|track| track.info.name == str_array("root")) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -154,14 +158,18 @@ impl pallet_referenda::TracksInfo for TracksInfo { _ => Err(()), } } else if let Ok(custom_origin) = custom_origins::Origin::try_from(id.clone()) { - if let Some((track_id, _)) = Self::tracks().into_iter().find(|(_, track)| { - if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track.name) { + if let Some(track) = Self::tracks().into_iter().find(|track| { + let Ok(track_name) = from_utf8(&track.info.name) else { + return false; + }; + let track_name = track_name.trim_end_matches('\0'); + if let Ok(track_custom_origin) = custom_origins::Origin::from_str(track_name) { track_custom_origin == custom_origin } else { false } }) { - Ok(*track_id) + Ok(track.id) } else { Err(()) } @@ -174,13 +182,15 @@ impl pallet_referenda::TracksInfo for TracksInfo { #[test] /// To ensure voters are always locked into their vote fn vote_locking_always_longer_than_enactment_period() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); assert!( ::VoteLockingPeriod::get() - >= track.min_enactment_period, + >= track.info.min_enactment_period, "Track {} has enactment period {} < vote locking period {}", - track.name, - track.min_enactment_period, + track_name, + track.info.min_enactment_period, ::VoteLockingPeriod::get(), ); } @@ -188,10 +198,12 @@ fn vote_locking_always_longer_than_enactment_period() { #[test] fn all_tracks_have_origins() { - for (_, track) in TRACKS_DATA { + for track in TRACKS_DATA { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); // check name.into() is successful either converts into "root" or custom origin - let track_is_root = track.name == "root"; - let track_has_custom_origin = custom_origins::Origin::from_str(track.name).is_ok(); + let track_is_root = track_name == "root"; + let track_has_custom_origin = custom_origins::Origin::from_str(track_name).is_ok(); assert!(track_is_root || track_has_custom_origin); } } diff --git a/operator/runtime/testnet/src/configs/mod.rs b/operator/runtime/testnet/src/configs/mod.rs index 27dbc538..3c40349d 100644 --- a/operator/runtime/testnet/src/configs/mod.rs +++ b/operator/runtime/testnet/src/configs/mod.rs @@ -30,8 +30,9 @@ use super::{ Signature, System, Timestamp, Treasury, TxPause, BLOCK_HASH_COUNT, EXTRINSIC_BASE_WEIGHT, MAXIMUM_BLOCK_WEIGHT, NORMAL_BLOCK_WEIGHT, NORMAL_DISPATCH_RATIO, SLOT_DURATION, VERSION, }; +use alloc::vec::Vec; use alloy_core::primitives::Address; -use codec::{Decode, Encode, MaxEncodedLen}; +use codec::{Decode, DecodeWithMemTracking, Encode, MaxEncodedLen}; use scale_info::TypeInfo; use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; @@ -49,6 +50,7 @@ use sp_runtime::{traits::AccountIdConversion, RuntimeDebug}; RuntimeDebug, MaxEncodedLen, TypeInfo, + DecodeWithMemTracking, serde::Serialize, serde::Deserialize, )] @@ -76,6 +78,7 @@ impl Default for ProxyType { Self::Any } } +use core::convert::{From, Into}; use datahaven_runtime_common::{ deal_with_fees::{ DealWithEthereumBaseFees, DealWithEthereumPriorityFees, DealWithSubstrateFeesAndTip, @@ -141,10 +144,6 @@ use sp_runtime::{ FixedPointNumber, Perbill, Perquintill, }; use sp_staking::EraIndex; -use sp_std::{ - convert::{From, Into}, - prelude::*, -}; use sp_version::RuntimeVersion; use xcm::latest::NetworkId; use xcm::prelude::*; @@ -395,6 +394,7 @@ impl pallet_session::Config for Runtime { type SessionHandler = ::KeyTypeIdProviders; type Keys = SessionKeys; type WeightInfo = testnet_weights::pallet_session::WeightInfo; + type DisablingStrategy = (); } parameter_types! { @@ -593,6 +593,7 @@ impl pallet_scheduler::Config for Runtime { type OriginPrivilegeCmp = EqualPrivilegeOnly; type Preimages = Preimage; type WeightInfo = testnet_weights::pallet_scheduler::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -656,8 +657,7 @@ impl pallet_identity::Config for Runtime { type UsernameDeposit = UsernameDeposit; type UsernameGracePeriod = UsernameGracePeriod; - // TODO: Re-enable after upgrade to Polkadot SDK stable2412-8 - // see https://github.com/paritytech/polkadot-sdk/releases/tag/polkadot-stable2412-8 + // TODO: Replace by Identity pallet's BenchmarkHelper when available (stable2506). // #[cfg(feature = "runtime-benchmarks")] // fn benchmark_helper(message: &[u8]) -> (Vec, Vec) { // let public = sp_io::crypto::ecdsa_generate(0.into(), None); @@ -687,6 +687,7 @@ impl pallet_multisig::Config for Runtime { type DepositFactor = DepositFactor; type MaxSignatories = MaxSignatories; type WeightInfo = testnet_weights::pallet_multisig::WeightInfo; + type BlockNumberProvider = System; } parameter_types! { @@ -852,6 +853,7 @@ impl pallet_proxy::Config for Runtime { type CallHasher = sp_runtime::traits::BlakeTwo256; type AnnouncementDepositBase = AnnouncementDepositBase; type AnnouncementDepositFactor = AnnouncementDepositFactor; + type BlockNumberProvider = System; } impl pallet_proxy_genesis_companion::Config for Runtime { @@ -1053,6 +1055,8 @@ impl pallet_evm::Config for Runtime { type GasLimitPovSizeRatio = GasLimitPovSizeRatio; type GasLimitStorageGrowthRatio = GasLimitStorageGrowthRatio; type Timestamp = Timestamp; + type CreateOriginFilter = (); + type CreateInnerOriginFilter = (); type WeightInfo = testnet_weights::pallet_evm::WeightInfo; } @@ -1505,10 +1509,6 @@ pub struct TestnetRewardsConfig; impl datahaven_runtime_common::rewards_adapter::RewardsSubmissionConfig for TestnetRewardsConfig { type OutboundQueue = EthereumOutboundQueueV2; - fn rewards_duration() -> u32 { - runtime_params::dynamic_params::runtime_config::RewardsDuration::get() - } - fn whave_token_address() -> H160 { runtime_params::dynamic_params::runtime_config::WHAVETokenAddress::get() } @@ -1573,6 +1573,10 @@ parameter_types! { /// Maximum inflation percentage (caps at 100% even if blocks exceed expectations) pub const MaxInflationPercent: u32 = 100; + + /// EigenLayer RewardsCoordinator GENESIS_REWARDS_TIMESTAMP. + /// This is the immutable genesis timestamp from the deployed RewardsCoordinator contract. + pub const RewardsWindowGenesisTimestamp: u32 = 1_712_188_800; } impl pallet_external_validators_rewards::Config for Runtime { @@ -1596,6 +1600,9 @@ impl pallet_external_validators_rewards::Config for Runtime { type Hashing = Keccak256; type Currency = Balances; type RewardsEthereumSovereignAccount = ExternalValidatorRewardsAccount; + type RewardsWindowGenesisTimestamp = RewardsWindowGenesisTimestamp; + type RewardsWindowDuration = runtime_params::dynamic_params::runtime_config::RewardsDuration; + type UnixTime = Timestamp; type SendMessage = RewardsSendAdapter; type HandleInflation = ExternalRewardsInflationHandler; type GovernanceOrigin = @@ -1729,6 +1736,7 @@ impl pallet_external_validator_slashes::Config for Runtime { type QueuedSlashesProcessedPerBlock = ConstU32<10>; type WeightInfo = testnet_weights::pallet_external_validator_slashes::WeightInfo; type SendMessage = SlashesSendAdapter; + type GovernanceOrigin = EnsureRootWithSuccess; } parameter_types! { @@ -1788,13 +1796,14 @@ mod tests { #[test] fn test_rewards_send_adapter_with_zero_address() { - use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; + use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; use sp_io::TestExternalities; TestExternalities::default().execute_with(|| { - let rewards_utils = EraRewardsUtils { - era_index: 1, - era_start_timestamp: 1_700_000_000, + let rewards_utils = RewardsPeriodUtils { + period_index: 1, + period_start: 1_700_000_000, + duration: runtime_params::dynamic_params::runtime_config::RewardsDuration::get(), total_points: 1000, individual_points: vec![ (H160::from_low_u64_be(1), 500), @@ -1812,7 +1821,7 @@ mod tests { #[test] fn test_rewards_send_adapter_with_valid_config() { - use pallet_external_validators_rewards::types::{EraRewardsUtils, SendMessage}; + use pallet_external_validators_rewards::types::{RewardsPeriodUtils, SendMessage}; TestExternalities::default().execute_with(|| { let service_manager = H160::from_low_u64_be(0x1234567890abcdef); @@ -1844,9 +1853,10 @@ mod tests { snowbridge_pallet_system::NativeToForeignId::::insert(reanchored.clone(), token_id); snowbridge_pallet_system::ForeignToNativeId::::insert(token_id, reanchored); - let rewards_utils = EraRewardsUtils { - era_index: 1, - era_start_timestamp: 1_700_000_000, + let rewards_utils = RewardsPeriodUtils { + period_index: 1, + period_start: 1_700_000_000, + duration: runtime_params::dynamic_params::runtime_config::RewardsDuration::get(), total_points: 1000, individual_points: vec![(H160::from_low_u64_be(1), 600), (H160::from_low_u64_be(2), 400)], inflation_amount: 1_000_000_000, diff --git a/operator/runtime/testnet/src/configs/runtime_params.rs b/operator/runtime/testnet/src/configs/runtime_params.rs index 40c89108..abcf74dc 100644 --- a/operator/runtime/testnet/src/configs/runtime_params.rs +++ b/operator/runtime/testnet/src/configs/runtime_params.rs @@ -14,11 +14,11 @@ // You should have received a copy of the GNU General Public License // along with DataHaven. If not, see . +use alloc::vec; use frame_support::dynamic_params::{dynamic_pallet_params, dynamic_params}; use hex_literal::hex; use sp_core::{ConstU32, H160, H256}; use sp_runtime::{BoundedVec, Perbill}; -use sp_std::vec; use crate::Runtime; @@ -401,14 +401,11 @@ pub mod dynamic_params { /// The wHAVE ERC20 token address on Ethereum. pub static WHAVETokenAddress: H160 = H160::repeat_byte(0x0); - #[codec(index = 43)] - #[allow(non_upper_case_globals)] - /// EigenLayer-aligned genesis timestamp for rewards calculation. - pub static RewardsGenesisTimestamp: u32 = 0; - #[codec(index = 44)] #[allow(non_upper_case_globals)] /// Rewards duration in seconds. + /// Must be a positive multiple of EigenLayer interval (86400 = 1 day) + /// and must not exceed EigenLayer max rewards duration. pub static RewardsDuration: u32 = 86400; #[codec(index = 45)] diff --git a/operator/runtime/testnet/src/configs/storagehub/client.rs b/operator/runtime/testnet/src/configs/storagehub/client.rs index 110bec9d..1e0bf339 100644 --- a/operator/runtime/testnet/src/configs/storagehub/client.rs +++ b/operator/runtime/testnet/src/configs/storagehub/client.rs @@ -50,6 +50,7 @@ impl ExtensionOperations for crate::SignedEx minimal.tip, ), frame_metadata_hash_extension::CheckMetadataHash::::new(false), + frame_system::WeightReclaim::::new(), ) } } diff --git a/operator/runtime/testnet/src/configs/storagehub/mod.rs b/operator/runtime/testnet/src/configs/storagehub/mod.rs index 7717475c..9f3eb3a3 100644 --- a/operator/runtime/testnet/src/configs/storagehub/mod.rs +++ b/operator/runtime/testnet/src/configs/storagehub/mod.rs @@ -13,13 +13,14 @@ // You should have received a copy of the GNU General Public License // along with DataHaven. If not, see . +extern crate alloc; #[cfg(not(feature = "runtime-benchmarks"))] use super::HAVE; #[cfg(feature = "runtime-benchmarks")] use super::MICROHAVE; use super::{ - AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, + AccountId, Balance, Balances, BlockNumber, Hash, RuntimeEvent, RuntimeHoldReason, System, TreasuryAccount, }; use crate::configs::runtime_params::dynamic_params::runtime_config; @@ -27,6 +28,8 @@ use crate::{ BucketNfts, Nfts, PaymentStreams, ProofsDealer, Providers, Runtime, Signature, WeightToFee, HOURS, }; +use alloc::{vec, vec::Vec}; +use core::convert::{From, Into}; use core::marker::PhantomData; #[cfg(feature = "runtime-benchmarks")] use datahaven_runtime_common::benchmarking::StorageHubBenchmarking; @@ -59,8 +62,6 @@ use sp_runtime::traits::Verify; use sp_runtime::traits::Zero; use sp_runtime::SaturatedConversion; use sp_runtime::{traits::BlakeTwo256, Perbill}; -use sp_std::convert::{From, Into}; -use sp_std::{vec, vec::Vec}; use sp_trie::{LayoutV1, TrieConfiguration, TrieLayout}; #[cfg(feature = "std")] @@ -126,6 +127,7 @@ impl pallet_nfts::Config for Runtime { type OffchainPublic = ::Signer; type WeightInfo = crate::weights::pallet_nfts::WeightInfo; type Locker = (); + type BlockNumberProvider = System; #[cfg(feature = "runtime-benchmarks")] type Helper = benchmark_helpers::NftHelper; } @@ -627,16 +629,16 @@ parameter_types! { /// "\x19Ethereum Signed Message:\n" + len(message) + message" pub struct Eip191Adapter; impl shp_traits::MessageAdapter for Eip191Adapter { - fn bytes_to_verify(message: &[u8]) -> Vec { + fn bytes_to_verify(intention: &[u8], _context: &[u8]) -> Vec { const PREFIX: &str = "\x19Ethereum Signed Message:\n"; - let len = message.len(); + let len = intention.len(); let mut len_string_buffer = itoa::Buffer::new(); let len_string = len_string_buffer.format(len); let mut eth_message = Vec::with_capacity(PREFIX.len() + len_string.len() + len); eth_message.extend_from_slice(PREFIX.as_bytes()); eth_message.extend_from_slice(len_string.as_bytes()); - eth_message.extend_from_slice(message); + eth_message.extend_from_slice(intention); eth_message } } @@ -700,6 +702,8 @@ impl pallet_file_system::Config for Runtime { type OffchainPublicKey = ::Signer; type MaxFileDeletionsPerExtrinsic = ConstU32<100>; type IntentionMsgAdapter = Eip191Adapter; + type MaxBspVolunteers = ConstU32<1000>; + type MaxMspRespondFileKeys = ConstU32<10>; } impl MostlyStablePriceIndexUpdaterConfig for Runtime { diff --git a/operator/runtime/testnet/src/genesis_config_presets.rs b/operator/runtime/testnet/src/genesis_config_presets.rs index e568f266..d5875718 100644 --- a/operator/runtime/testnet/src/genesis_config_presets.rs +++ b/operator/runtime/testnet/src/genesis_config_presets.rs @@ -56,6 +56,7 @@ fn testnet_genesis( .cloned() .map(|k| (k, 1u128 << 80)) .collect::>(), + dev_accounts: Default::default(), }, babe: pallet_babe::GenesisConfig { epoch_config: BABE_GENESIS_EPOCH_CONFIG, diff --git a/operator/runtime/testnet/src/lib.rs b/operator/runtime/testnet/src/lib.rs index a8248dbd..554f337e 100644 --- a/operator/runtime/testnet/src/lib.rs +++ b/operator/runtime/testnet/src/lib.rs @@ -31,14 +31,18 @@ pub mod weights; pub use configs::governance; pub use configs::Precompiles; -// TODO: Temporary workaround before upgrading to latest polkadot-sdk - fix https://github.com/paritytech/polkadot-sdk/pull/6435 +// Aliases required by define_benchmarks! for pallet_collective instances. +// PR #6435 (in stable2503) fixes the underlying issue, so these can be removed +// when benchmarks are regenerated and weight files renamed accordingly. #[allow(unused_imports)] use pallet_collective as pallet_collective_treasury_council; #[allow(unused_imports)] use pallet_collective as pallet_collective_technical_committee; +use alloc::collections::btree_map::BTreeMap; use alloc::{borrow::Cow, vec::Vec}; use codec::Encode; +use ethereum::AuthorizationList; use fp_rpc::TransactionStatus; use frame_support::{ genesis_builder_helper::{build_state, get_preset}, @@ -54,7 +58,7 @@ pub use frame_system::Call as SystemCall; pub use pallet_balances::Call as BalancesCall; use pallet_ethereum::{Call::transact, Transaction as EthereumTransaction}; use pallet_evm::{Account as EVMAccount, FeeCalculator, GasWeightMapping, Runner}; -use pallet_file_system::types::StorageRequestMetadata; +use pallet_file_system::types::{PendingStopStoringRequest, StorageRequestMetadata}; use pallet_file_system_runtime_api::*; use pallet_grandpa::{fg_primitives, AuthorityId as GrandpaId}; use pallet_payment_streams_runtime_api::*; @@ -85,7 +89,6 @@ use sp_runtime::{ transaction_validity::{InvalidTransaction, TransactionSource}, ApplyExtrinsicResult, Perbill, Permill, }; -use sp_std::collections::btree_map::BTreeMap; #[cfg(feature = "std")] use sp_version::NativeVersion; use sp_version::RuntimeVersion; @@ -142,7 +145,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion { // `spec_version`, and `authoring_version` are the same between Wasm and native. // This value is set to 200 to notify Polkadot-JS App (https://polkadot.js.org/apps) to use // the compatible custom types. - spec_version: 1400, + spec_version: 1500, impl_version: 1, apis: RUNTIME_API_VERSIONS, transaction_version: 1, @@ -193,16 +196,10 @@ pub const NORMAL_BLOCK_WEIGHT: Weight = MAXIMUM_BLOCK_WEIGHT.saturating_mul(3).s pub const EXTRINSIC_BASE_WEIGHT: Weight = Weight::from_parts(10000 * WEIGHT_PER_GAS, 0); // Existential deposit. -#[cfg(not(feature = "runtime-benchmarks"))] +// PR #7379 (included in stable2503) ensures benchmarks handle ED=0 internally. parameter_types! { pub const ExistentialDeposit: Balance = 0; } -#[cfg(feature = "runtime-benchmarks")] -parameter_types! { - // TODO: Change ED to 1 after upgrade to Polkadot SDK stable2503 - // cfr. https://github.com/paritytech/polkadot-sdk/pull/7379 - pub const ExistentialDeposit: Balance = 1; -} /// The version information used to identify this runtime when compiled natively. #[cfg(feature = "std")] @@ -227,6 +224,7 @@ pub type SignedExtra = ( frame_system::CheckWeight, pallet_transaction_payment::ChargeTransactionPayment, frame_metadata_hash_extension::CheckMetadataHash, + frame_system::WeightReclaim, ); /// Unchecked extrinsic type as expected by this runtime. @@ -1073,6 +1071,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1102,6 +1101,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1120,6 +1120,7 @@ impl_runtime_apis! { nonce: Option, estimate: bool, access_list: Option)>>, + authorization_list: Option, ) -> Result { let config = if estimate { let mut config = ::config().clone(); @@ -1153,6 +1154,7 @@ impl_runtime_apis! { max_priority_fee_per_gas, nonce, access_list.unwrap_or_default(), + authorization_list.unwrap_or_default(), is_transactional, validate, Some(weight_limit), @@ -1232,7 +1234,7 @@ impl_runtime_apis! { //║ STORAGEHUB APIS ║ //╚═══════════════════════════════════════════════════════════════════════════════════════════════════════════════╝ - impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256> for Runtime { + impl pallet_file_system_runtime_api::FileSystemApi, MainStorageProviderId, H256, BlockNumber, ChunkId, BucketId, StorageRequestMetadata, BucketId, StorageDataUnit, H256, PendingStopStoringRequest> for Runtime { fn is_storage_request_open_to_volunteers(file_key: H256) -> Result { FileSystem::is_storage_request_open_to_volunteers(file_key) } @@ -1279,6 +1281,15 @@ impl_runtime_apis! { fn get_max_batch_confirm_storage_requests() -> BlockNumber { FileSystem::get_max_batch_confirm_storage_requests() } + fn query_min_wait_for_stop_storing() -> BlockNumber { + FileSystem::query_min_wait_for_stop_storing() + } + fn has_pending_stop_storing_request(bsp_id: BackupStorageProviderId, file_key: H256) -> bool { + FileSystem::has_pending_stop_storing_request(bsp_id, file_key) + } + fn pending_stop_storing_requests_by_bsp(bsp_id: BackupStorageProviderId) -> BTreeMap> { + FileSystem::pending_stop_storing_requests_by_bsp(bsp_id) + } } impl pallet_payment_streams_runtime_api::PaymentStreamsApi, Balance, AccountId> for Runtime { @@ -1414,7 +1425,7 @@ impl_runtime_apis! { fn compute_signed_extra_implicit( era: sp_runtime::generic::Era, enable_metadata: bool, - ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { + ) -> Result, sp_runtime::transaction_validity::TransactionValidityError> { // Build the SignedExtra tuple with minimal values; only `era` and `enable_metadata` // influence the implicit. Other extensions have `()` implicit. let extra: SignedExtra = ( @@ -1427,6 +1438,7 @@ impl_runtime_apis! { frame_system::CheckWeight::::new(), pallet_transaction_payment::ChargeTransactionPayment::::from(::default()), frame_metadata_hash_extension::CheckMetadataHash::::new(enable_metadata), + frame_system::WeightReclaim::::new(), ); let implicit = >::implicit(&extra)?; Ok(implicit.encode()) diff --git a/operator/runtime/testnet/src/weights/frame_system.rs b/operator/runtime/testnet/src/weights/frame_system.rs index 059a1edf..efc8ab9e 100644 --- a/operator/runtime/testnet/src/weights/frame_system.rs +++ b/operator/runtime/testnet/src/weights/frame_system.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `frame_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `frame_system`. pub struct WeightInfo(PhantomData); @@ -60,20 +60,20 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_230_000 picoseconds. - Weight::from_parts(9_251_587, 0) + // Minimum execution time: 3_238_000 picoseconds. + Weight::from_parts(10_177_937, 0) // Standard Error: 2 - .saturating_add(Weight::from_parts(400, 0).saturating_mul(b.into())) + .saturating_add(Weight::from_parts(463, 0).saturating_mul(b.into())) } /// The range of component `b` is `[0, 3932160]`. fn remark_with_event(b: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_961_000 picoseconds. - Weight::from_parts(8_099_000, 0) - // Standard Error: 4 - .saturating_add(Weight::from_parts(1_875, 0).saturating_mul(b.into())) + // Minimum execution time: 8_149_000 picoseconds. + Weight::from_parts(8_299_000, 0) + // Standard Error: 5 + .saturating_add(Weight::from_parts(1_943, 0).saturating_mul(b.into())) } /// Storage: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) /// Proof: UNKNOWN KEY `0x3a686561707061676573` (r:0 w:1) @@ -81,8 +81,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 5_005_000 picoseconds. - Weight::from_parts(5_186_000, 0) + // Minimum execution time: 5_012_000 picoseconds. + Weight::from_parts(5_210_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `MultiBlockMigrations::Cursor` (r:1 w:0) @@ -93,8 +93,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `142` // Estimated: `67035` - // Minimum execution time: 139_309_455_000 picoseconds. - Weight::from_parts(141_744_394_000, 67035) + // Minimum execution time: 137_549_032_000 picoseconds. + Weight::from_parts(138_794_666_000, 67035) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -105,10 +105,10 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_147_000 picoseconds. - Weight::from_parts(3_225_000, 0) - // Standard Error: 2_846 - .saturating_add(Weight::from_parts(963_077, 0).saturating_mul(i.into())) + // Minimum execution time: 3_134_000 picoseconds. + Weight::from_parts(3_220_000, 0) + // Standard Error: 2_705 + .saturating_add(Weight::from_parts(955_277, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -118,10 +118,10 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_131_000 picoseconds. - Weight::from_parts(3_205_000, 0) - // Standard Error: 1_227 - .saturating_add(Weight::from_parts(686_641, 0).saturating_mul(i.into())) + // Minimum execution time: 3_140_000 picoseconds. + Weight::from_parts(3_235_000, 0) + // Standard Error: 1_117 + .saturating_add(Weight::from_parts(670_876, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) } /// Storage: `Skipped::Metadata` (r:0 w:0) @@ -130,11 +130,11 @@ impl frame_system::WeightInfo for WeightInfo { fn kill_prefix(p: u32, ) -> Weight { // Proof Size summary in bytes: // Measured: `131 + p * (69 ±0)` - // Estimated: `119 + p * (70 ±0)` - // Minimum execution time: 5_960_000 picoseconds. - Weight::from_parts(6_140_000, 119) - // Standard Error: 2_045 - .saturating_add(Weight::from_parts(1_452_270, 0).saturating_mul(p.into())) + // Estimated: `118 + p * (70 ±0)` + // Minimum execution time: 5_991_000 picoseconds. + Weight::from_parts(6_074_000, 118) + // Standard Error: 2_620 + .saturating_add(Weight::from_parts(1_433_692, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(p.into()))) .saturating_add(Weight::from_parts(0, 70).saturating_mul(p.into())) @@ -145,8 +145,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 16_577_000 picoseconds. - Weight::from_parts(19_105_000, 0) + // Minimum execution time: 20_892_000 picoseconds. + Weight::from_parts(23_826_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `System::AuthorizedUpgrade` (r:1 w:1) @@ -159,8 +159,8 @@ impl frame_system::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `164` // Estimated: `67035` - // Minimum execution time: 142_977_465_000 picoseconds. - Weight::from_parts(145_442_678_000, 67035) + // Minimum execution time: 143_863_178_000 picoseconds. + Weight::from_parts(144_564_738_000, 67035) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_babe.rs b/operator/runtime/testnet/src/weights/pallet_babe.rs index f8a55290..576458be 100644 --- a/operator/runtime/testnet/src/weights/pallet_babe.rs +++ b/operator/runtime/testnet/src/weights/pallet_babe.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_babe` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_babe`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_balances.rs b/operator/runtime/testnet/src/weights/pallet_balances.rs index 7cdcf267..5a273675 100644 --- a/operator/runtime/testnet/src/weights/pallet_balances.rs +++ b/operator/runtime/testnet/src/weights/pallet_balances.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_balances` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_balances`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 69_341_000 picoseconds. - Weight::from_parts(70_639_000, 3581) + // Minimum execution time: 59_314_000 picoseconds. + Weight::from_parts(60_028_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 56_142_000 picoseconds. - Weight::from_parts(56_976_000, 3581) + // Minimum execution time: 58_238_000 picoseconds. + Weight::from_parts(59_204_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -81,10 +81,10 @@ impl pallet_balances::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) fn force_set_balance_creating() -> Weight { // Proof Size summary in bytes: - // Measured: `195` + // Measured: `72` // Estimated: `3581` - // Minimum execution time: 21_399_000 picoseconds. - Weight::from_parts(21_924_000, 3581) + // Minimum execution time: 31_465_000 picoseconds. + Weight::from_parts(32_060_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -94,8 +94,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `195` // Estimated: `3581` - // Minimum execution time: 30_690_000 picoseconds. - Weight::from_parts(31_275_000, 3581) + // Minimum execution time: 26_250_000 picoseconds. + Weight::from_parts(26_753_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -105,8 +105,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `235` // Estimated: `6172` - // Minimum execution time: 73_292_000 picoseconds. - Weight::from_parts(74_207_000, 6172) + // Minimum execution time: 62_766_000 picoseconds. + Weight::from_parts(63_405_000, 6172) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -116,8 +116,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `40` // Estimated: `3581` - // Minimum execution time: 68_800_000 picoseconds. - Weight::from_parts(70_120_000, 3581) + // Minimum execution time: 63_767_000 picoseconds. + Weight::from_parts(64_893_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -127,8 +127,8 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `195` // Estimated: `3581` - // Minimum execution time: 25_134_000 picoseconds. - Weight::from_parts(26_010_000, 3581) + // Minimum execution time: 25_448_000 picoseconds. + Weight::from_parts(26_188_000, 3581) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -137,12 +137,12 @@ impl pallet_balances::WeightInfo for WeightInfo { /// The range of component `u` is `[1, 1000]`. fn upgrade_accounts(u: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `658 + u * (124 ±0)` + // Measured: `577 + u * (124 ±0)` // Estimated: `990 + u * (2591 ±0)` - // Minimum execution time: 23_211_000 picoseconds. - Weight::from_parts(23_454_000, 990) - // Standard Error: 12_091 - .saturating_add(Weight::from_parts(19_164_743, 0).saturating_mul(u.into())) + // Minimum execution time: 24_124_000 picoseconds. + Weight::from_parts(24_353_000, 990) + // Standard Error: 10_218 + .saturating_add(Weight::from_parts(19_930_282, 0).saturating_mul(u.into())) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(u.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(u.into()))) .saturating_add(Weight::from_parts(0, 2591).saturating_mul(u.into())) @@ -151,21 +151,21 @@ impl pallet_balances::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 8_512_000 picoseconds. - Weight::from_parts(8_745_000, 0) + // Minimum execution time: 8_630_000 picoseconds. + Weight::from_parts(8_964_000, 0) } fn burn_allow_death() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 43_704_000 picoseconds. - Weight::from_parts(44_325_000, 0) + // Minimum execution time: 34_235_000 picoseconds. + Weight::from_parts(34_812_000, 0) } fn burn_keep_alive() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 30_313_000 picoseconds. - Weight::from_parts(31_504_000, 0) + // Minimum execution time: 30_402_000 picoseconds. + Weight::from_parts(30_962_000, 0) } } diff --git a/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs b/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs index 50120ed7..d483c873 100644 --- a/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs +++ b/operator/runtime/testnet/src/weights/pallet_beefy_mmr.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_beefy_mmr` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,19 +50,29 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_beefy_mmr`. pub struct WeightInfo(PhantomData); impl pallet_beefy_mmr::WeightInfo for WeightInfo { + /// The range of component `n` is `[2, 512]`. + fn n_leafs_proof_is_optimal(n: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 931_000 picoseconds. + Weight::from_parts(1_580_213, 0) + // Standard Error: 95 + .saturating_add(Weight::from_parts(2_200, 0).saturating_mul(n.into())) + } /// Storage: `System::BlockHash` (r:1 w:0) /// Proof: `System::BlockHash` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) fn extract_validation_context() -> Weight { // Proof Size summary in bytes: // Measured: `68` // Estimated: `3509` - // Minimum execution time: 7_890_000 picoseconds. - Weight::from_parts(8_207_000, 3509) + // Minimum execution time: 7_781_000 picoseconds. + Weight::from_parts(8_039_000, 3509) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Mmr::Nodes` (r:1 w:0) @@ -71,8 +81,8 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `221` // Estimated: `3505` - // Minimum execution time: 6_894_000 picoseconds. - Weight::from_parts(7_132_000, 3505) + // Minimum execution time: 6_920_000 picoseconds. + Weight::from_parts(7_348_000, 3505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Mmr::RootHash` (r:1 w:0) @@ -84,10 +94,10 @@ impl pallet_beefy_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `213` // Estimated: `1517` - // Minimum execution time: 14_227_000 picoseconds. - Weight::from_parts(22_742_127, 1517) - // Standard Error: 2_418 - .saturating_add(Weight::from_parts(1_513_924, 0).saturating_mul(n.into())) + // Minimum execution time: 14_507_000 picoseconds. + Weight::from_parts(23_140_469, 1517) + // Standard Error: 2_485 + .saturating_add(Weight::from_parts(1_641_031, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs b/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs index 3527a3f4..58417960 100644 --- a/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs +++ b/operator/runtime/testnet/src/weights/pallet_collective_technical_committee.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_collective_technical_committee` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_technical_committee`. pub struct WeightInfo(PhantomData); @@ -70,12 +70,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + m * (2021 ±0) + p * (2026 ±0)` // Estimated: `12234 + m * (1231 ±14) + p * (3660 ±14)` - // Minimum execution time: 16_485_000 picoseconds. - Weight::from_parts(16_662_000, 12234) - // Standard Error: 64_959 - .saturating_add(Weight::from_parts(4_715_217, 0).saturating_mul(m.into())) - // Standard Error: 64_959 - .saturating_add(Weight::from_parts(9_652_575, 0).saturating_mul(p.into())) + // Minimum execution time: 17_186_000 picoseconds. + Weight::from_parts(17_463_000, 12234) + // Standard Error: 65_057 + .saturating_add(Weight::from_parts(4_668_642, 0).saturating_mul(m.into())) + // Standard Error: 65_057 + .saturating_add(Weight::from_parts(9_841_722, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -95,12 +95,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `149 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 24_678_000 picoseconds. - Weight::from_parts(24_400_918, 3997) - // Standard Error: 56 - .saturating_add(Weight::from_parts(1_527, 0).saturating_mul(b.into())) - // Standard Error: 582 - .saturating_add(Weight::from_parts(11_077, 0).saturating_mul(m.into())) + // Minimum execution time: 24_695_000 picoseconds. + Weight::from_parts(24_626_872, 3997) + // Standard Error: 33 + .saturating_add(Weight::from_parts(1_481, 0).saturating_mul(b.into())) + // Standard Error: 348 + .saturating_add(Weight::from_parts(9_105, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -118,12 +118,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `149 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 27_581_000 picoseconds. - Weight::from_parts(27_654_781, 3997) - // Standard Error: 40 - .saturating_add(Weight::from_parts(1_387, 0).saturating_mul(b.into())) - // Standard Error: 422 - .saturating_add(Weight::from_parts(13_563, 0).saturating_mul(m.into())) + // Minimum execution time: 28_114_000 picoseconds. + Weight::from_parts(27_930_641, 3997) + // Standard Error: 45 + .saturating_add(Weight::from_parts(1_430, 0).saturating_mul(b.into())) + // Standard Error: 465 + .saturating_add(Weight::from_parts(16_475, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -144,14 +144,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `391 + m * (20 ±0) + p * (36 ±0)` // Estimated: `3785 + m * (21 ±0) + p * (36 ±0)` - // Minimum execution time: 27_423_000 picoseconds. - Weight::from_parts(27_645_225, 3785) - // Standard Error: 145 - .saturating_add(Weight::from_parts(3_725, 0).saturating_mul(b.into())) - // Standard Error: 1_512 - .saturating_add(Weight::from_parts(30_076, 0).saturating_mul(m.into())) - // Standard Error: 1_493 - .saturating_add(Weight::from_parts(307_509, 0).saturating_mul(p.into())) + // Minimum execution time: 27_838_000 picoseconds. + Weight::from_parts(28_087_808, 3785) + // Standard Error: 138 + .saturating_add(Weight::from_parts(4_122, 0).saturating_mul(b.into())) + // Standard Error: 1_444 + .saturating_add(Weight::from_parts(23_625, 0).saturating_mul(m.into())) + // Standard Error: 1_426 + .saturating_add(Weight::from_parts(301_326, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 21).saturating_mul(m.into())) @@ -166,10 +166,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `866 + m * (40 ±0)` // Estimated: `4330 + m * (40 ±0)` - // Minimum execution time: 33_334_000 picoseconds. - Weight::from_parts(35_136_666, 4330) - // Standard Error: 1_141 - .saturating_add(Weight::from_parts(21_722, 0).saturating_mul(m.into())) + // Minimum execution time: 33_415_000 picoseconds. + Weight::from_parts(34_111_064, 4330) + // Standard Error: 2_215 + .saturating_add(Weight::from_parts(46_659, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 40).saturating_mul(m.into())) @@ -188,12 +188,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `443 + m * (40 ±0) + p * (36 ±0)` // Estimated: `3888 + m * (41 ±0) + p * (36 ±0)` - // Minimum execution time: 32_517_000 picoseconds. - Weight::from_parts(32_634_522, 3888) - // Standard Error: 1_167 - .saturating_add(Weight::from_parts(31_119, 0).saturating_mul(m.into())) - // Standard Error: 1_138 - .saturating_add(Weight::from_parts(273_850, 0).saturating_mul(p.into())) + // Minimum execution time: 32_875_000 picoseconds. + Weight::from_parts(33_677_496, 3888) + // Standard Error: 1_988 + .saturating_add(Weight::from_parts(22_215, 0).saturating_mul(m.into())) + // Standard Error: 1_939 + .saturating_add(Weight::from_parts(293_477, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 41).saturating_mul(m.into())) @@ -218,14 +218,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `791 + b * (1 ±0) + m * (40 ±0) + p * (40 ±0)` // Estimated: `4108 + b * (1 ±0) + m * (42 ±0) + p * (40 ±0)` - // Minimum execution time: 52_976_000 picoseconds. - Weight::from_parts(53_899_822, 4108) - // Standard Error: 221 - .saturating_add(Weight::from_parts(3_498, 0).saturating_mul(b.into())) - // Standard Error: 2_344 - .saturating_add(Weight::from_parts(23_498, 0).saturating_mul(m.into())) - // Standard Error: 2_285 - .saturating_add(Weight::from_parts(321_519, 0).saturating_mul(p.into())) + // Minimum execution time: 53_305_000 picoseconds. + Weight::from_parts(59_499_664, 4108) + // Standard Error: 200 + .saturating_add(Weight::from_parts(910, 0).saturating_mul(b.into())) + // Standard Error: 2_116 + .saturating_add(Weight::from_parts(5_272, 0).saturating_mul(m.into())) + // Standard Error: 2_062 + .saturating_add(Weight::from_parts(312_934, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -248,12 +248,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `512 + m * (30 ±0) + p * (36 ±0)` // Estimated: `3954 + m * (31 ±0) + p * (36 ±0)` - // Minimum execution time: 33_932_000 picoseconds. - Weight::from_parts(34_311_659, 3954) - // Standard Error: 1_329 - .saturating_add(Weight::from_parts(29_051, 0).saturating_mul(m.into())) - // Standard Error: 1_296 - .saturating_add(Weight::from_parts(287_547, 0).saturating_mul(p.into())) + // Minimum execution time: 34_883_000 picoseconds. + Weight::from_parts(35_262_848, 3954) + // Standard Error: 1_578 + .saturating_add(Weight::from_parts(27_777, 0).saturating_mul(m.into())) + // Standard Error: 1_538 + .saturating_add(Weight::from_parts(290_272, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 31).saturating_mul(m.into())) @@ -280,14 +280,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `811 + b * (1 ±0) + m * (40 ±0) + p * (40 ±0)` // Estimated: `4128 + b * (1 ±0) + m * (42 ±0) + p * (40 ±0)` - // Minimum execution time: 55_802_000 picoseconds. - Weight::from_parts(57_905_230, 4128) - // Standard Error: 223 - .saturating_add(Weight::from_parts(3_034, 0).saturating_mul(b.into())) - // Standard Error: 2_364 - .saturating_add(Weight::from_parts(18_891, 0).saturating_mul(m.into())) - // Standard Error: 2_304 - .saturating_add(Weight::from_parts(319_447, 0).saturating_mul(p.into())) + // Minimum execution time: 56_860_000 picoseconds. + Weight::from_parts(57_305_073, 4128) + // Standard Error: 214 + .saturating_add(Weight::from_parts(4_090, 0).saturating_mul(b.into())) + // Standard Error: 2_266 + .saturating_add(Weight::from_parts(21_282, 0).saturating_mul(m.into())) + // Standard Error: 2_209 + .saturating_add(Weight::from_parts(331_588, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -305,10 +305,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `260 + p * (32 ±0)` // Estimated: `1745 + p * (32 ±0)` - // Minimum execution time: 17_309_000 picoseconds. - Weight::from_parts(18_756_752, 1745) - // Standard Error: 1_355 - .saturating_add(Weight::from_parts(246_695, 0).saturating_mul(p.into())) + // Minimum execution time: 17_707_000 picoseconds. + Weight::from_parts(18_996_730, 1745) + // Standard Error: 874 + .saturating_add(Weight::from_parts(247_870, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) @@ -327,12 +327,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1531 + p * (36 ±0)` // Estimated: `4930 + d * (123 ±6) + p * (37 ±0)` - // Minimum execution time: 25_410_000 picoseconds. - Weight::from_parts(29_152_557, 4930) - // Standard Error: 80_001 - .saturating_add(Weight::from_parts(710_710, 0).saturating_mul(d.into())) - // Standard Error: 1_238 - .saturating_add(Weight::from_parts(290_155, 0).saturating_mul(p.into())) + // Minimum execution time: 25_511_000 picoseconds. + Weight::from_parts(29_898_301, 4930) + // Standard Error: 74_274 + .saturating_add(Weight::from_parts(212_850, 0).saturating_mul(d.into())) + // Standard Error: 1_150 + .saturating_add(Weight::from_parts(294_855, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 123).saturating_mul(d.into())) @@ -346,8 +346,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `945` // Estimated: `4410` - // Minimum execution time: 19_835_000 picoseconds. - Weight::from_parts(20_333_000, 4410) + // Minimum execution time: 19_405_000 picoseconds. + Weight::from_parts(19_767_000, 4410) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs b/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs index b2cdaa06..8b75db99 100644 --- a/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs +++ b/operator/runtime/testnet/src/weights/pallet_collective_treasury_council.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_collective_treasury_council` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_collective_treasury_council`. pub struct WeightInfo(PhantomData); @@ -70,12 +70,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0 + m * (425 ±0) + p * (206 ±0)` // Estimated: `4117 + m * (266 ±3) + p * (2556 ±1)` - // Minimum execution time: 11_089_000 picoseconds. - Weight::from_parts(11_386_000, 4117) - // Standard Error: 122_271 - .saturating_add(Weight::from_parts(3_658_528, 0).saturating_mul(m.into())) - // Standard Error: 55_863 - .saturating_add(Weight::from_parts(4_818_108, 0).saturating_mul(p.into())) + // Minimum execution time: 11_019_000 picoseconds. + Weight::from_parts(11_334_000, 4117) + // Standard Error: 124_297 + .saturating_add(Weight::from_parts(3_710_235, 0).saturating_mul(m.into())) + // Standard Error: 56_789 + .saturating_add(Weight::from_parts(4_875_978, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(p.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -95,12 +95,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `181 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 23_896_000 picoseconds. - Weight::from_parts(24_120_539, 3997) - // Standard Error: 36 - .saturating_add(Weight::from_parts(1_436, 0).saturating_mul(b.into())) - // Standard Error: 4_373 - .saturating_add(Weight::from_parts(65_279, 0).saturating_mul(m.into())) + // Minimum execution time: 24_107_000 picoseconds. + Weight::from_parts(24_228_535, 3997) + // Standard Error: 44 + .saturating_add(Weight::from_parts(1_729, 0).saturating_mul(b.into())) + // Standard Error: 5_291 + .saturating_add(Weight::from_parts(71_198, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -118,12 +118,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `181 + m * (20 ±0)` // Estimated: `3997 + m * (20 ±0)` - // Minimum execution time: 26_742_000 picoseconds. - Weight::from_parts(26_727_704, 3997) - // Standard Error: 45 - .saturating_add(Weight::from_parts(1_857, 0).saturating_mul(b.into())) - // Standard Error: 5_433 - .saturating_add(Weight::from_parts(95_981, 0).saturating_mul(m.into())) + // Minimum execution time: 26_981_000 picoseconds. + Weight::from_parts(27_231_431, 3997) + // Standard Error: 46 + .saturating_add(Weight::from_parts(1_646, 0).saturating_mul(b.into())) + // Standard Error: 5_500 + .saturating_add(Weight::from_parts(73_039, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(Weight::from_parts(0, 20).saturating_mul(m.into())) } @@ -144,14 +144,14 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `127 + m * (20 ±0) + p * (55 ±0)` // Estimated: `3548 + m * (27 ±0) + p * (54 ±0)` - // Minimum execution time: 26_839_000 picoseconds. - Weight::from_parts(24_781_821, 3548) - // Standard Error: 119 - .saturating_add(Weight::from_parts(4_189, 0).saturating_mul(b.into())) - // Standard Error: 16_290 - .saturating_add(Weight::from_parts(84_824, 0).saturating_mul(m.into())) - // Standard Error: 6_248 - .saturating_add(Weight::from_parts(555_052, 0).saturating_mul(p.into())) + // Minimum execution time: 27_075_000 picoseconds. + Weight::from_parts(25_034_569, 3548) + // Standard Error: 114 + .saturating_add(Weight::from_parts(4_070, 0).saturating_mul(b.into())) + // Standard Error: 15_591 + .saturating_add(Weight::from_parts(87_683, 0).saturating_mul(m.into())) + // Standard Error: 5_980 + .saturating_add(Weight::from_parts(558_706, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 27).saturating_mul(m.into())) @@ -166,10 +166,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `701 + m * (40 ±0)` // Estimated: `4166 + m * (40 ±0)` - // Minimum execution time: 27_034_000 picoseconds. - Weight::from_parts(28_322_973, 4166) - // Standard Error: 8_686 - .saturating_add(Weight::from_parts(44_166, 0).saturating_mul(m.into())) + // Minimum execution time: 26_994_000 picoseconds. + Weight::from_parts(28_229_960, 4166) + // Standard Error: 9_747 + .saturating_add(Weight::from_parts(37_550, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(Weight::from_parts(0, 40).saturating_mul(m.into())) @@ -188,12 +188,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `234 + m * (40 ±0) + p * (55 ±0)` // Estimated: `3696 + m * (43 ±0) + p * (55 ±0)` - // Minimum execution time: 30_282_000 picoseconds. - Weight::from_parts(31_486_340, 3696) - // Standard Error: 11_030 - .saturating_add(Weight::from_parts(14_213, 0).saturating_mul(m.into())) - // Standard Error: 3_129 - .saturating_add(Weight::from_parts(381_384, 0).saturating_mul(p.into())) + // Minimum execution time: 30_618_000 picoseconds. + Weight::from_parts(31_260_000, 3696) + // Standard Error: 10_521 + .saturating_add(Weight::from_parts(78_620, 0).saturating_mul(m.into())) + // Standard Error: 2_984 + .saturating_add(Weight::from_parts(391_988, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 43).saturating_mul(m.into())) @@ -218,12 +218,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `225 + b * (1 ±0) + m * (40 ±0) + p * (78 ±0)` // Estimated: `3997 + b * (1 ±0) + m * (29 ±1) + p * (74 ±0)` - // Minimum execution time: 49_752_000 picoseconds. - Weight::from_parts(51_676_194, 3997) - // Standard Error: 120 - .saturating_add(Weight::from_parts(3_079, 0).saturating_mul(b.into())) - // Standard Error: 6_286 - .saturating_add(Weight::from_parts(626_267, 0).saturating_mul(p.into())) + // Minimum execution time: 50_455_000 picoseconds. + Weight::from_parts(53_486_955, 3997) + // Standard Error: 152 + .saturating_add(Weight::from_parts(2_850, 0).saturating_mul(b.into())) + // Standard Error: 7_963 + .saturating_add(Weight::from_parts(594_485, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -246,12 +246,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `284 + m * (33 ±0) + p * (55 ±0)` // Estimated: `3747 + m * (34 ±0) + p * (56 ±0)` - // Minimum execution time: 32_846_000 picoseconds. - Weight::from_parts(33_959_748, 3747) - // Standard Error: 10_551 - .saturating_add(Weight::from_parts(38_088, 0).saturating_mul(m.into())) - // Standard Error: 2_993 - .saturating_add(Weight::from_parts(388_148, 0).saturating_mul(p.into())) + // Minimum execution time: 33_380_000 picoseconds. + Weight::from_parts(34_740_223, 3747) + // Standard Error: 10_281 + .saturating_add(Weight::from_parts(35_372, 0).saturating_mul(m.into())) + // Standard Error: 2_916 + .saturating_add(Weight::from_parts(374_808, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 34).saturating_mul(m.into())) @@ -278,12 +278,12 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `245 + b * (1 ±0) + m * (40 ±0) + p * (78 ±0)` // Estimated: `3997 + b * (1 ±0) + m * (30 ±1) + p * (74 ±0)` - // Minimum execution time: 52_810_000 picoseconds. - Weight::from_parts(54_134_548, 3997) - // Standard Error: 126 - .saturating_add(Weight::from_parts(3_014, 0).saturating_mul(b.into())) - // Standard Error: 6_579 - .saturating_add(Weight::from_parts(640_368, 0).saturating_mul(p.into())) + // Minimum execution time: 53_566_000 picoseconds. + Weight::from_parts(56_594_127, 3997) + // Standard Error: 119 + .saturating_add(Weight::from_parts(3_127, 0).saturating_mul(b.into())) + // Standard Error: 6_225 + .saturating_add(Weight::from_parts(619_510, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(b.into())) @@ -301,10 +301,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `293 + p * (32 ±0)` // Estimated: `1778 + p * (32 ±0)` - // Minimum execution time: 17_599_000 picoseconds. - Weight::from_parts(18_141_290, 1778) - // Standard Error: 1_780 - .saturating_add(Weight::from_parts(303_171, 0).saturating_mul(p.into())) + // Minimum execution time: 18_016_000 picoseconds. + Weight::from_parts(18_402_901, 1778) + // Standard Error: 1_927 + .saturating_add(Weight::from_parts(313_403, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 32).saturating_mul(p.into())) @@ -323,10 +323,10 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `1347 + p * (55 ±0)` // Estimated: `4814 + d * (5 ±1) + p * (55 ±0)` - // Minimum execution time: 25_295_000 picoseconds. - Weight::from_parts(28_603_056, 4814) - // Standard Error: 4_404 - .saturating_add(Weight::from_parts(440_516, 0).saturating_mul(p.into())) + // Minimum execution time: 25_676_000 picoseconds. + Weight::from_parts(28_444_846, 4814) + // Standard Error: 4_264 + .saturating_add(Weight::from_parts(467_850, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 5).saturating_mul(d.into())) @@ -340,8 +340,8 @@ impl pallet_collective::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `780` // Estimated: `4245` - // Minimum execution time: 16_408_000 picoseconds. - Weight::from_parts(17_020_000, 4245) + // Minimum execution time: 16_434_000 picoseconds. + Weight::from_parts(16_929_000, 4245) .saturating_add(T::DbWeight::get().reads(2_u64)) } } diff --git a/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs b/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs index 22a06d01..4c69eb6e 100644 --- a/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs +++ b/operator/runtime/testnet/src/weights/pallet_conviction_voting.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_conviction_voting` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_conviction_voting`. pub struct WeightInfo(PhantomData); @@ -71,8 +71,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1963` // Estimated: `13328` - // Minimum execution time: 89_138_000 picoseconds. - Weight::from_parts(92_052_000, 13328) + // Minimum execution time: 92_355_000 picoseconds. + Weight::from_parts(94_051_000, 13328) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -94,8 +94,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `2264` // Estimated: `25666` - // Minimum execution time: 116_211_000 picoseconds. - Weight::from_parts(119_336_000, 25666) + // Minimum execution time: 117_797_000 picoseconds. + Weight::from_parts(120_940_000, 25666) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -111,8 +111,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1979` // Estimated: `25666` - // Minimum execution time: 76_241_000 picoseconds. - Weight::from_parts(78_935_000, 25666) + // Minimum execution time: 79_279_000 picoseconds. + Weight::from_parts(81_226_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -124,8 +124,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1523` // Estimated: `4617` - // Minimum execution time: 29_173_000 picoseconds. - Weight::from_parts(30_691_000, 4617) + // Minimum execution time: 30_057_000 picoseconds. + Weight::from_parts(31_963_000, 4617) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -148,10 +148,10 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1655 + r * (248 ±0)` // Estimated: `25666 + r * (2805 ±0)` - // Minimum execution time: 60_889_000 picoseconds. - Weight::from_parts(63_350_373, 25666) - // Standard Error: 79_057 - .saturating_add(Weight::from_parts(34_394_339, 0).saturating_mul(r.into())) + // Minimum execution time: 61_922_000 picoseconds. + Weight::from_parts(65_647_754, 25666) + // Standard Error: 61_617 + .saturating_add(Weight::from_parts(33_768_070, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -171,10 +171,10 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1478 + r * (248 ±0)` // Estimated: `25666 + r * (2805 ±0)` - // Minimum execution time: 27_547_000 picoseconds. - Weight::from_parts(20_192_434, 25666) - // Standard Error: 83_262 - .saturating_add(Weight::from_parts(34_027_810, 0).saturating_mul(r.into())) + // Minimum execution time: 28_237_000 picoseconds. + Weight::from_parts(21_521_502, 25666) + // Standard Error: 78_256 + .saturating_add(Weight::from_parts(34_142_941, 0).saturating_mul(r.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(r.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -193,8 +193,8 @@ impl pallet_conviction_voting::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `1229` // Estimated: `4752` - // Minimum execution time: 61_755_000 picoseconds. - Weight::from_parts(62_992_000, 4752) + // Minimum execution time: 66_674_000 picoseconds. + Weight::from_parts(69_452_000, 4752) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs b/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs index 30942c1e..4708c248 100644 --- a/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs +++ b/operator/runtime/testnet/src/weights/pallet_datahaven_native_transfer.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_datahaven_native_transfer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_datahaven_native_transfer`. pub struct WeightInfo(PhantomData); @@ -67,10 +67,10 @@ impl pallet_datahaven_native_transfer::WeightInfo for W /// Proof: `MessageQueue::Pages` (`max_values`: None, `max_size`: Some(32845), added: 35320, mode: `MaxEncodedLen`) fn transfer_to_ethereum() -> Weight { // Proof Size summary in bytes: - // Measured: `467` + // Measured: `379` // Estimated: `8763` - // Minimum execution time: 139_054_000 picoseconds. - Weight::from_parts(140_999_000, 8763) + // Minimum execution time: 148_267_000 picoseconds. + Weight::from_parts(150_827_000, 8763) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -80,8 +80,8 @@ impl pallet_datahaven_native_transfer::WeightInfo for W // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_968_000 picoseconds. - Weight::from_parts(7_332_000, 0) + // Minimum execution time: 7_089_000 picoseconds. + Weight::from_parts(7_333_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `DataHavenNativeTransfer::Paused` (r:0 w:1) @@ -90,8 +90,8 @@ impl pallet_datahaven_native_transfer::WeightInfo for W // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_897_000 picoseconds. - Weight::from_parts(7_187_000, 0) + // Minimum execution time: 7_116_000 picoseconds. + Weight::from_parts(7_511_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/operator/runtime/testnet/src/weights/pallet_evm.rs b/operator/runtime/testnet/src/weights/pallet_evm.rs index a637fc67..f8124a9d 100644 --- a/operator/runtime/testnet/src/weights/pallet_evm.rs +++ b/operator/runtime/testnet/src/weights/pallet_evm.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_evm` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_evm`. pub struct WeightInfo(PhantomData); @@ -59,7 +59,7 @@ impl pallet_evm::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_939_000 picoseconds. - Weight::from_parts(3_134_000, 0) + // Minimum execution time: 2_832_000 picoseconds. + Weight::from_parts(2_992_000, 0) } } diff --git a/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs b/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs index 85e6f04f..c3d9c314 100644 --- a/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs +++ b/operator/runtime/testnet/src/weights/pallet_external_validator_slashes.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validator_slashes`. pub struct WeightInfo(PhantomData); @@ -113,6 +113,9 @@ impl pallet_external_validator_slashes::WeightInfo for .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 38).saturating_mul(s.into())) } + fn retry_unsent_slash_era() -> Weight { + Self::process_slashes_queue(10) + } /// Storage: `ExternalValidatorsSlashes::SlashingMode` (r:0 w:1) /// Proof: `ExternalValidatorsSlashes::SlashingMode` (`max_values`: Some(1), `max_size`: Some(1), added: 496, mode: `MaxEncodedLen`) fn set_slashing_mode() -> Weight { diff --git a/operator/runtime/testnet/src/weights/pallet_external_validators.rs b/operator/runtime/testnet/src/weights/pallet_external_validators.rs index d989bab6..2a5559fd 100644 --- a/operator/runtime/testnet/src/weights/pallet_external_validators.rs +++ b/operator/runtime/testnet/src/weights/pallet_external_validators.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs b/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs index 9b7e752d..e7ee6b8c 100644 --- a/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs +++ b/operator/runtime/testnet/src/weights/pallet_external_validators_rewards.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_external_validators_rewards`. pub struct WeightInfo(PhantomData); @@ -75,6 +75,15 @@ impl pallet_external_validators_rewards::WeightInfo for .saturating_add(T::DbWeight::get().writes(2_u64)) } + fn process_closed_windows_idle() -> Weight { + Weight::from_parts(10_000_000, 0) + .saturating_add(T::DbWeight::get().reads(3_u64)) + } + + fn process_closed_windows_processed() -> Weight { + Self::process_unsent_reward_eras_success() + } + fn process_unsent_reward_eras_empty() -> Weight { Weight::from_parts(5_000_000, 0) .saturating_add(T::DbWeight::get().reads(1_u64)) diff --git a/operator/runtime/testnet/src/weights/pallet_grandpa.rs b/operator/runtime/testnet/src/weights/pallet_grandpa.rs index 6d02ae74..ac0f4d1e 100644 --- a/operator/runtime/testnet/src/weights/pallet_grandpa.rs +++ b/operator/runtime/testnet/src/weights/pallet_grandpa.rs @@ -51,7 +51,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_grandpa`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_identity.rs b/operator/runtime/testnet/src/weights/pallet_identity.rs index 37a46dc8..1cba2573 100644 --- a/operator/runtime/testnet/src/weights/pallet_identity.rs +++ b/operator/runtime/testnet/src/weights/pallet_identity.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_identity`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_im_online.rs b/operator/runtime/testnet/src/weights/pallet_im_online.rs index bd568124..99a7373c 100644 --- a/operator/runtime/testnet/src/weights/pallet_im_online.rs +++ b/operator/runtime/testnet/src/weights/pallet_im_online.rs @@ -1,11 +1,26 @@ +// Copyright 2025 DataHaven +// This file is part of DataHaven. + +// DataHaven is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// DataHaven is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with DataHaven. If not, see . //! Autogenerated weights for `pallet_im_online` //! -//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 49.0.0 -//! DATE: 2025-08-20, STEPS: `2`, REPEAT: `2`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` -//! HOSTNAME: `blocked.local`, CPU: `` +//! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 // Executed Command: @@ -14,26 +29,28 @@ // benchmark // pallet // --runtime -// target/release/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm +// target/production/wbuild/datahaven-testnet-runtime/datahaven_testnet_runtime.compact.compressed.wasm // --pallet // pallet_im_online // --extrinsic // +// --header +// ../file_header.txt // --template // benchmarking/frame-weight-template.hbs // --output // runtime/testnet/src/weights/pallet_im_online.rs // --steps -// 2 +// 50 // --repeat -// 2 +// 20 #![cfg_attr(rustfmt, rustfmt_skip)] #![allow(unused_parens)] #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_im_online`. pub struct WeightInfo(PhantomData); @@ -51,12 +68,14 @@ impl pallet_im_online::WeightInfo for WeightInfo { /// The range of component `k` is `[1, 32]`. fn validate_unsigned_and_then_heartbeat(k: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `278 + k * (32 ±0)` - // Estimated: `3509 + k * (32 ±0)` - // Minimum execution time: 39_000_000 picoseconds. - Weight::from_parts(51_838_709, 3509) - .saturating_add(T::DbWeight::get().reads(5_u64)) + // Measured: `280 + k * (32 ±0)` + // Estimated: `3490 + k * (1754 ±0)` + // Minimum execution time: 72_069_000 picoseconds. + Weight::from_parts(77_196_770, 3490) + // Standard Error: 9_554 + .saturating_add(Weight::from_parts(277_183, 0).saturating_mul(k.into())) + .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) - .saturating_add(Weight::from_parts(0, 32).saturating_mul(k.into())) + .saturating_add(Weight::from_parts(0, 1754).saturating_mul(k.into())) } } diff --git a/operator/runtime/testnet/src/weights/pallet_message_queue.rs b/operator/runtime/testnet/src/weights/pallet_message_queue.rs index eea08550..c9c4413c 100644 --- a/operator/runtime/testnet/src/weights/pallet_message_queue.rs +++ b/operator/runtime/testnet/src/weights/pallet_message_queue.rs @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_message_queue`. pub struct WeightInfo(PhantomData); @@ -178,4 +178,8 @@ impl pallet_message_queue::WeightInfo for WeightInfo .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } + + fn set_service_head() -> Weight { + todo!() + } } diff --git a/operator/runtime/testnet/src/weights/pallet_mmr.rs b/operator/runtime/testnet/src/weights/pallet_mmr.rs index f4b2df6a..bfea42ed 100644 --- a/operator/runtime/testnet/src/weights/pallet_mmr.rs +++ b/operator/runtime/testnet/src/weights/pallet_mmr.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_mmr` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_mmr`. pub struct WeightInfo(PhantomData); @@ -74,10 +74,10 @@ impl pallet_mmr::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `536` // Estimated: `9242 + x * (8 ±0)` - // Minimum execution time: 25_803_000 picoseconds. - Weight::from_parts(49_390_107, 9242) - // Standard Error: 1_167 - .saturating_add(Weight::from_parts(34_025, 0).saturating_mul(x.into())) + // Minimum execution time: 25_984_000 picoseconds. + Weight::from_parts(49_866_250, 9242) + // Standard Error: 1_215 + .saturating_add(Weight::from_parts(35_079, 0).saturating_mul(x.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) .saturating_add(Weight::from_parts(0, 8).saturating_mul(x.into())) diff --git a/operator/runtime/testnet/src/weights/pallet_multisig.rs b/operator/runtime/testnet/src/weights/pallet_multisig.rs index 98c41959..15100c7a 100644 --- a/operator/runtime/testnet/src/weights/pallet_multisig.rs +++ b/operator/runtime/testnet/src/weights/pallet_multisig.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_multisig` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_multisig`. pub struct WeightInfo(PhantomData); @@ -64,10 +64,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 29_017_000 picoseconds. - Weight::from_parts(30_184_679, 3997) - // Standard Error: 8 - .saturating_add(Weight::from_parts(379, 0).saturating_mul(z.into())) + // Minimum execution time: 29_604_000 picoseconds. + Weight::from_parts(30_700_048, 3997) + // Standard Error: 13 + .saturating_add(Weight::from_parts(415, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `Multisig::Multisigs` (r:1 w:1) @@ -78,12 +78,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `218` // Estimated: `5587` - // Minimum execution time: 60_389_000 picoseconds. - Weight::from_parts(44_281_970, 5587) - // Standard Error: 2_017 - .saturating_add(Weight::from_parts(173_685, 0).saturating_mul(s.into())) - // Standard Error: 19 - .saturating_add(Weight::from_parts(4_275, 0).saturating_mul(z.into())) + // Minimum execution time: 61_079_000 picoseconds. + Weight::from_parts(45_963_820, 5587) + // Standard Error: 2_150 + .saturating_add(Weight::from_parts(168_318, 0).saturating_mul(s.into())) + // Standard Error: 21 + .saturating_add(Weight::from_parts(4_139, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -95,12 +95,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `246` // Estimated: `5587` - // Minimum execution time: 37_541_000 picoseconds. - Weight::from_parts(23_191_089, 5587) - // Standard Error: 616 - .saturating_add(Weight::from_parts(152_842, 0).saturating_mul(s.into())) - // Standard Error: 6 - .saturating_add(Weight::from_parts(4_200, 0).saturating_mul(z.into())) + // Minimum execution time: 37_722_000 picoseconds. + Weight::from_parts(24_022_036, 5587) + // Standard Error: 928 + .saturating_add(Weight::from_parts(152_126, 0).saturating_mul(s.into())) + // Standard Error: 9 + .saturating_add(Weight::from_parts(4_108, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -118,12 +118,12 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `393 + s * (20 ±0)` // Estimated: `5587` - // Minimum execution time: 76_563_000 picoseconds. - Weight::from_parts(52_787_560, 5587) - // Standard Error: 3_532 - .saturating_add(Weight::from_parts(266_191, 0).saturating_mul(s.into())) - // Standard Error: 34 - .saturating_add(Weight::from_parts(4_614, 0).saturating_mul(z.into())) + // Minimum execution time: 75_467_000 picoseconds. + Weight::from_parts(54_226_873, 5587) + // Standard Error: 2_410 + .saturating_add(Weight::from_parts(262_275, 0).saturating_mul(s.into())) + // Standard Error: 23 + .saturating_add(Weight::from_parts(4_485, 0).saturating_mul(z.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -134,10 +134,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `220` // Estimated: `5587` - // Minimum execution time: 41_282_000 picoseconds. - Weight::from_parts(43_376_121, 5587) - // Standard Error: 1_451 - .saturating_add(Weight::from_parts(177_477, 0).saturating_mul(s.into())) + // Minimum execution time: 41_115_000 picoseconds. + Weight::from_parts(43_230_390, 5587) + // Standard Error: 1_009 + .saturating_add(Weight::from_parts(179_006, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -148,10 +148,10 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `246` // Estimated: `5587` - // Minimum execution time: 20_908_000 picoseconds. - Weight::from_parts(21_826_478, 5587) - // Standard Error: 681 - .saturating_add(Weight::from_parts(155_164, 0).saturating_mul(s.into())) + // Minimum execution time: 21_026_000 picoseconds. + Weight::from_parts(21_761_652, 5587) + // Standard Error: 592 + .saturating_add(Weight::from_parts(157_525, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -162,10 +162,24 @@ impl pallet_multisig::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `390` // Estimated: `5587` - // Minimum execution time: 41_003_000 picoseconds. - Weight::from_parts(44_286_235, 5587) - // Standard Error: 1_852 - .saturating_add(Weight::from_parts(185_637, 0).saturating_mul(s.into())) + // Minimum execution time: 41_741_000 picoseconds. + Weight::from_parts(44_394_681, 5587) + // Standard Error: 1_557 + .saturating_add(Weight::from_parts(190_896, 0).saturating_mul(s.into())) + .saturating_add(T::DbWeight::get().reads(1_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) + } + /// Storage: `Multisig::Multisigs` (r:1 w:1) + /// Proof: `Multisig::Multisigs` (`max_values`: None, `max_size`: Some(2122), added: 4597, mode: `MaxEncodedLen`) + /// The range of component `s` is `[2, 100]`. + fn poke_deposit(s: u32, ) -> Weight { + // Proof Size summary in bytes: + // Measured: `390` + // Estimated: `5587` + // Minimum execution time: 39_188_000 picoseconds. + Weight::from_parts(42_267_760, 5587) + // Standard Error: 1_636 + .saturating_add(Weight::from_parts(182_673, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_nfts.rs b/operator/runtime/testnet/src/weights/pallet_nfts.rs index 2e594b5b..5d3b63df 100644 --- a/operator/runtime/testnet/src/weights/pallet_nfts.rs +++ b/operator/runtime/testnet/src/weights/pallet_nfts.rs @@ -1,9 +1,24 @@ +// Copyright 2025 DataHaven +// This file is part of DataHaven. + +// DataHaven is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// DataHaven is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License +// along with DataHaven. If not, see . //! Autogenerated weights for `pallet_nfts` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2025-11-14, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -19,6 +34,8 @@ // pallet_nfts // --extrinsic // +// --header +// ../file_header.txt // --template // benchmarking/frame-weight-template.hbs // --output @@ -33,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_nfts`. pub struct WeightInfo(PhantomData); @@ -52,8 +69,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `271` // Estimated: `3537` - // Minimum execution time: 47_561_000 picoseconds. - Weight::from_parts(48_583_000, 3537) + // Minimum execution time: 47_431_000 picoseconds. + Weight::from_parts(48_534_000, 3537) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -71,8 +88,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3537` - // Minimum execution time: 25_742_000 picoseconds. - Weight::from_parts(26_196_000, 3537) + // Minimum execution time: 25_885_000 picoseconds. + Weight::from_parts(26_567_000, 3537) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -99,10 +116,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `32179 + a * (366 ±0)` // Estimated: `2523990 + a * (2930 ±0)` - // Minimum execution time: 1_304_607_000 picoseconds. - Weight::from_parts(3_891_413_864, 2523990) - // Standard Error: 30_112 - .saturating_add(Weight::from_parts(7_300_422, 0).saturating_mul(a.into())) + // Minimum execution time: 1_389_080_000 picoseconds. + Weight::from_parts(1_452_873_319, 2523990) + // Standard Error: 15_506 + .saturating_add(Weight::from_parts(8_242_394, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(1004_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(a.into()))) .saturating_add(T::DbWeight::get().writes(1005_u64)) @@ -125,8 +142,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `418` // Estimated: `4062` - // Minimum execution time: 68_983_000 picoseconds. - Weight::from_parts(69_802_000, 4062) + // Minimum execution time: 68_737_000 picoseconds. + Weight::from_parts(69_912_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -146,8 +163,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `418` // Estimated: `4062` - // Minimum execution time: 65_803_000 picoseconds. - Weight::from_parts(67_191_000, 4062) + // Minimum execution time: 66_243_000 picoseconds. + Weight::from_parts(67_879_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -173,8 +190,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `526` // Estimated: `4062` - // Minimum execution time: 74_085_000 picoseconds. - Weight::from_parts(75_919_000, 4062) + // Minimum execution time: 74_275_000 picoseconds. + Weight::from_parts(76_080_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -198,8 +215,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `555` // Estimated: `4062` - // Minimum execution time: 56_531_000 picoseconds. - Weight::from_parts(57_676_000, 4062) + // Minimum execution time: 57_106_000 picoseconds. + Weight::from_parts(57_751_000, 4062) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -214,10 +231,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `750 + i * (83 ±0)` // Estimated: `3538 + i * (3072 ±0)` - // Minimum execution time: 18_545_000 picoseconds. - Weight::from_parts(18_987_000, 3538) - // Standard Error: 11_750 - .saturating_add(Weight::from_parts(23_672_529, 0).saturating_mul(i.into())) + // Minimum execution time: 18_967_000 picoseconds. + Weight::from_parts(19_415_000, 3538) + // Standard Error: 28_309 + .saturating_add(Weight::from_parts(25_758_720, 0).saturating_mul(i.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(i.into()))) .saturating_add(T::DbWeight::get().writes((1_u64).saturating_mul(i.into()))) @@ -231,8 +248,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 24_040_000 picoseconds. - Weight::from_parts(24_947_000, 3522) + // Minimum execution time: 24_224_000 picoseconds. + Weight::from_parts(25_289_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -244,8 +261,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 23_941_000 picoseconds. - Weight::from_parts(24_858_000, 3522) + // Minimum execution time: 24_185_000 picoseconds. + Weight::from_parts(24_834_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -257,7 +274,7 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `327` // Estimated: `3538` - // Minimum execution time: 19_598_000 picoseconds. + // Minimum execution time: 19_791_000 picoseconds. Weight::from_parts(20_471_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) @@ -274,8 +291,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `524` // Estimated: `3581` - // Minimum execution time: 35_013_000 picoseconds. - Weight::from_parts(36_104_000, 3581) + // Minimum execution time: 34_905_000 picoseconds. + Weight::from_parts(36_150_000, 3581) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -287,8 +304,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `344` // Estimated: `6054` - // Minimum execution time: 48_777_000 picoseconds. - Weight::from_parts(50_672_000, 6054) + // Minimum execution time: 49_164_000 picoseconds. + Weight::from_parts(50_771_000, 6054) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -300,8 +317,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `298` // Estimated: `3537` - // Minimum execution time: 20_455_000 picoseconds. - Weight::from_parts(21_229_000, 3537) + // Minimum execution time: 20_519_000 picoseconds. + Weight::from_parts(21_098_000, 3537) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -313,8 +330,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `276` // Estimated: `3537` - // Minimum execution time: 16_326_000 picoseconds. - Weight::from_parts(16_897_000, 3537) + // Minimum execution time: 16_646_000 picoseconds. + Weight::from_parts(17_088_000, 3537) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -326,8 +343,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `3522` - // Minimum execution time: 22_519_000 picoseconds. - Weight::from_parts(23_274_000, 3522) + // Minimum execution time: 22_603_000 picoseconds. + Weight::from_parts(23_340_000, 3522) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -345,8 +362,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `514` // Estimated: `3920` - // Minimum execution time: 69_247_000 picoseconds. - Weight::from_parts(70_996_000, 3920) + // Minimum execution time: 70_069_000 picoseconds. + Weight::from_parts(71_704_000, 3920) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -358,8 +375,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `331` // Estimated: `3920` - // Minimum execution time: 33_077_000 picoseconds. - Weight::from_parts(33_810_000, 3920) + // Minimum execution time: 33_102_000 picoseconds. + Weight::from_parts(33_809_000, 3920) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -375,8 +392,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `958` // Estimated: `3920` - // Minimum execution time: 63_523_000 picoseconds. - Weight::from_parts(64_779_000, 3920) + // Minimum execution time: 63_582_000 picoseconds. + Weight::from_parts(64_990_000, 3920) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -388,8 +405,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `356` // Estimated: `4062` - // Minimum execution time: 20_686_000 picoseconds. - Weight::from_parts(21_511_000, 4062) + // Minimum execution time: 20_591_000 picoseconds. + Weight::from_parts(21_250_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -406,10 +423,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `769 + n * (386 ±0)` // Estimated: `4062 + n * (2930 ±0)` - // Minimum execution time: 33_029_000 picoseconds. - Weight::from_parts(33_938_000, 4062) - // Standard Error: 3_029 - .saturating_add(Weight::from_parts(7_579_917, 0).saturating_mul(n.into())) + // Minimum execution time: 33_195_000 picoseconds. + Weight::from_parts(33_616_000, 4062) + // Standard Error: 5_666 + .saturating_add(Weight::from_parts(8_015_566, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) @@ -430,8 +447,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `514` // Estimated: `3800` - // Minimum execution time: 56_219_000 picoseconds. - Weight::from_parts(57_548_000, 3800) + // Minimum execution time: 56_416_000 picoseconds. + Weight::from_parts(58_397_000, 3800) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -447,8 +464,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `824` // Estimated: `3800` - // Minimum execution time: 53_360_000 picoseconds. - Weight::from_parts(54_827_000, 3800) + // Minimum execution time: 54_258_000 picoseconds. + Weight::from_parts(55_307_000, 3800) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -464,8 +481,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `373` // Estimated: `3759` - // Minimum execution time: 50_851_000 picoseconds. - Weight::from_parts(52_322_000, 3759) + // Minimum execution time: 52_063_000 picoseconds. + Weight::from_parts(52_959_000, 3759) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -481,8 +498,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `691` // Estimated: `3759` - // Minimum execution time: 50_304_000 picoseconds. - Weight::from_parts(51_259_000, 3759) + // Minimum execution time: 50_450_000 picoseconds. + Weight::from_parts(51_502_000, 3759) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -494,8 +511,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `385` // Estimated: `4062` - // Minimum execution time: 24_516_000 picoseconds. - Weight::from_parts(25_110_000, 4062) + // Minimum execution time: 24_143_000 picoseconds. + Weight::from_parts(24_686_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -505,8 +522,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `382` // Estimated: `4062` - // Minimum execution time: 20_404_000 picoseconds. - Weight::from_parts(21_281_000, 4062) + // Minimum execution time: 20_496_000 picoseconds. + Weight::from_parts(21_122_000, 4062) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -516,8 +533,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `382` // Estimated: `4062` - // Minimum execution time: 19_568_000 picoseconds. - Weight::from_parts(20_376_000, 4062) + // Minimum execution time: 19_713_000 picoseconds. + Weight::from_parts(20_473_000, 4062) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -527,8 +544,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `76` // Estimated: `3505` - // Minimum execution time: 17_232_000 picoseconds. - Weight::from_parts(17_555_000, 3505) + // Minimum execution time: 17_282_000 picoseconds. + Weight::from_parts(18_004_000, 3505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -540,8 +557,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `327` // Estimated: `3538` - // Minimum execution time: 22_353_000 picoseconds. - Weight::from_parts(22_864_000, 3538) + // Minimum execution time: 21_662_000 picoseconds. + Weight::from_parts(22_294_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -553,8 +570,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `311` // Estimated: `3538` - // Minimum execution time: 21_008_000 picoseconds. - Weight::from_parts(21_821_000, 3538) + // Minimum execution time: 20_899_000 picoseconds. + Weight::from_parts(21_506_000, 3538) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -570,8 +587,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `493` // Estimated: `4062` - // Minimum execution time: 30_820_000 picoseconds. - Weight::from_parts(31_676_000, 4062) + // Minimum execution time: 30_542_000 picoseconds. + Weight::from_parts(31_746_000, 4062) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -595,8 +612,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `655` // Estimated: `4062` - // Minimum execution time: 67_391_000 picoseconds. - Weight::from_parts(69_020_000, 4062) + // Minimum execution time: 67_250_000 picoseconds. + Weight::from_parts(69_139_000, 4062) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -605,10 +622,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_194_000 picoseconds. - Weight::from_parts(4_693_046, 0) - // Standard Error: 8_482 - .saturating_add(Weight::from_parts(2_570_624, 0).saturating_mul(n.into())) + // Minimum execution time: 3_157_000 picoseconds. + Weight::from_parts(4_569_650, 0) + // Standard Error: 7_703 + .saturating_add(Weight::from_parts(2_713_029, 0).saturating_mul(n.into())) } /// Storage: `Nfts::Item` (r:2 w:0) /// Proof: `Nfts::Item` (`max_values`: None, `max_size`: Some(597), added: 3072, mode: `MaxEncodedLen`) @@ -618,8 +635,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `444` // Estimated: `7134` - // Minimum execution time: 26_668_000 picoseconds. - Weight::from_parts(27_700_000, 7134) + // Minimum execution time: 26_999_000 picoseconds. + Weight::from_parts(27_581_000, 7134) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -631,8 +648,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `488` // Estimated: `4062` - // Minimum execution time: 27_612_000 picoseconds. - Weight::from_parts(28_523_000, 4062) + // Minimum execution time: 27_656_000 picoseconds. + Weight::from_parts(28_277_000, 4062) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -656,8 +673,8 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `771` // Estimated: `7134` - // Minimum execution time: 109_691_000 picoseconds. - Weight::from_parts(111_678_000, 7134) + // Minimum execution time: 110_362_000 picoseconds. + Weight::from_parts(112_222_000, 7134) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(10_u64)) } @@ -684,10 +701,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `580` // Estimated: `6054 + n * (2930 ±0)` - // Minimum execution time: 158_638_000 picoseconds. - Weight::from_parts(165_550_686, 6054) - // Standard Error: 65_710 - .saturating_add(Weight::from_parts(43_677_181, 0).saturating_mul(n.into())) + // Minimum execution time: 161_059_000 picoseconds. + Weight::from_parts(168_744_059, 6054) + // Standard Error: 67_664 + .saturating_add(Weight::from_parts(44_544_449, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(6_u64)) @@ -711,10 +728,10 @@ impl pallet_nfts::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `575` // Estimated: `4062 + n * (2930 ±0)` - // Minimum execution time: 75_427_000 picoseconds. - Weight::from_parts(88_971_257, 4062) - // Standard Error: 91_158 - .saturating_add(Weight::from_parts(42_253_239, 0).saturating_mul(n.into())) + // Minimum execution time: 75_626_000 picoseconds. + Weight::from_parts(90_707_634, 4062) + // Standard Error: 101_493 + .saturating_add(Weight::from_parts(42_880_364, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(2_u64)) diff --git a/operator/runtime/testnet/src/weights/pallet_parameters.rs b/operator/runtime/testnet/src/weights/pallet_parameters.rs index 612a193e..1e05f4c0 100644 --- a/operator/runtime/testnet/src/weights/pallet_parameters.rs +++ b/operator/runtime/testnet/src/weights/pallet_parameters.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_parameters` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-07, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,19 +50,19 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_parameters`. pub struct WeightInfo(PhantomData); impl pallet_parameters::WeightInfo for WeightInfo { /// Storage: `Parameters::Parameters` (r:1 w:1) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) fn set_parameter() -> Weight { // Proof Size summary in bytes: // Measured: `3` - // Estimated: `3517` - // Minimum execution time: 11_354_000 picoseconds. - Weight::from_parts(11_885_000, 3517) + // Estimated: `3846` + // Minimum execution time: 11_310_000 picoseconds. + Weight::from_parts(11_700_000, 3846) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_payment_streams.rs b/operator/runtime/testnet/src/weights/pallet_payment_streams.rs index d094d81d..5bb208c0 100644 --- a/operator/runtime/testnet/src/weights/pallet_payment_streams.rs +++ b/operator/runtime/testnet/src/weights/pallet_payment_streams.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_payment_streams` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_payment_streams`. pub struct WeightInfo(PhantomData); @@ -75,10 +75,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn create_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `523` + // Measured: `556` // Estimated: `6054` - // Minimum execution time: 108_671_000 picoseconds. - Weight::from_parts(110_483_000, 6054) + // Minimum execution time: 106_760_000 picoseconds. + Weight::from_parts(109_445_000, 6054) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -88,10 +88,6 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0) /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -112,21 +108,17 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `Balances::Holds` (`max_values`: None, `max_size`: Some(289), added: 2764, mode: `MaxEncodedLen`) fn update_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1427` + // Measured: `1372` // Estimated: `12414` - // Minimum execution time: 406_731_000 picoseconds. - Weight::from_parts(416_205_000, 12414) - .saturating_add(T::DbWeight::get().reads(21_u64)) + // Minimum execution time: 409_663_000 picoseconds. + Weight::from_parts(422_906_000, 12414) + .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -151,11 +143,11 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn delete_fixed_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1304` + // Measured: `1249` // Estimated: `12414` - // Minimum execution time: 294_818_000 picoseconds. - Weight::from_parts(298_194_000, 12414) - .saturating_add(T::DbWeight::get().reads(22_u64)) + // Minimum execution time: 294_151_000 picoseconds. + Weight::from_parts(297_007_000, 12414) + .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) @@ -180,10 +172,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn create_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `525` + // Measured: `558` // Estimated: `6054` - // Minimum execution time: 110_206_000 picoseconds. - Weight::from_parts(112_480_000, 6054) + // Minimum execution time: 109_307_000 picoseconds. + Weight::from_parts(111_920_000, 6054) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -193,10 +185,6 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::UsersWithoutFunds` (r:1 w:0) /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -217,21 +205,17 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::CurrentPricePerGigaUnitPerTick` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn update_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1387` + // Measured: `1332` // Estimated: `12414` - // Minimum execution time: 350_407_000 picoseconds. - Weight::from_parts(353_687_000, 12414) - .saturating_add(T::DbWeight::get().reads(21_u64)) + // Minimum execution time: 358_286_000 picoseconds. + Weight::from_parts(370_593_000, 12414) + .saturating_add(T::DbWeight::get().reads(17_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) @@ -256,11 +240,11 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn delete_dynamic_rate_payment_stream() -> Weight { // Proof Size summary in bytes: - // Measured: `1455` + // Measured: `1400` // Estimated: `12414` - // Minimum execution time: 407_867_000 picoseconds. - Weight::from_parts(423_394_000, 12414) - .saturating_add(T::DbWeight::get().reads(22_u64)) + // Minimum execution time: 399_462_000 picoseconds. + Weight::from_parts(414_077_000, 12414) + .saturating_add(T::DbWeight::get().reads(18_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) @@ -293,21 +277,21 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn charge_payment_streams() -> Weight { // Proof Size summary in bytes: - // Measured: `1441` + // Measured: `1386` // Estimated: `12414` - // Minimum execution time: 337_670_000 picoseconds. - Weight::from_parts(343_494_000, 12414) + // Minimum execution time: 360_406_000 picoseconds. + Weight::from_parts(363_602_000, 12414) .saturating_add(T::DbWeight::get().reads(21_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) /// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0) - /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Providers::InsolventProviders` (r:2 w:0) /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) + /// Storage: `PaymentStreams::OnPollTicker` (r:1 w:0) + /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) /// Proof: `Providers::BackupStorageProviders` (`max_values`: None, `max_size`: Some(1159), added: 3634, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:10 w:10) @@ -331,13 +315,13 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[0, 10]`. fn charge_multiple_users_payment_streams(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1122 + n * (331 ±0)` + // Measured: `1038 + n * (325 ±0)` // Estimated: `12414 + n * (2604 ±0)` - // Minimum execution time: 20_398_000 picoseconds. - Weight::from_parts(45_361_517, 12414) - // Standard Error: 164_730 - .saturating_add(Weight::from_parts(296_339_119, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(12_u64)) + // Minimum execution time: 33_434_000 picoseconds. + Weight::from_parts(65_554_079, 12414) + // Standard Error: 206_466 + .saturating_add(Weight::from_parts(288_733_431, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(1_u64)) .saturating_add(T::DbWeight::get().writes((3_u64).saturating_mul(n.into()))) @@ -370,12 +354,12 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[1, 1000]`. fn pay_outstanding_debt(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1422 + n * (644 ±0)` + // Measured: `1292 + n * (644 ±0)` // Estimated: `12414 + n * (3634 ±0)` - // Minimum execution time: 379_144_000 picoseconds. - Weight::from_parts(384_440_000, 12414) - // Standard Error: 164_472 - .saturating_add(Weight::from_parts(287_945_137, 0).saturating_mul(n.into())) + // Minimum execution time: 399_594_000 picoseconds. + Weight::from_parts(401_632_000, 12414) + // Standard Error: 168_790 + .saturating_add(Weight::from_parts(287_843_562, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(11_u64)) .saturating_add(T::DbWeight::get().reads((6_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(4_u64)) @@ -390,10 +374,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::RegisteredUsers` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn clear_insolvent_flag() -> Weight { // Proof Size summary in bytes: - // Measured: `231` + // Measured: `264` // Estimated: `3505` - // Minimum execution time: 22_622_000 picoseconds. - Weight::from_parts(23_508_000, 3505) + // Minimum execution time: 23_002_000 picoseconds. + Weight::from_parts(23_631_000, 3505) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -403,10 +387,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::AccumulatedPriceIndex` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) fn price_index_update() -> Weight { // Proof Size summary in bytes: - // Measured: `116` + // Measured: `149` // Estimated: `1501` - // Minimum execution time: 5_924_000 picoseconds. - Weight::from_parts(6_148_000, 1501) + // Minimum execution time: 5_958_000 picoseconds. + Weight::from_parts(6_204_000, 1501) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -414,10 +398,10 @@ impl pallet_payment_streams::weights::WeightInfo for We /// Proof: `PaymentStreams::OnPollTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) fn tick_update() -> Weight { // Proof Size summary in bytes: - // Measured: `114` + // Measured: `147` // Estimated: `1489` - // Minimum execution time: 4_037_000 picoseconds. - Weight::from_parts(4_180_000, 1489) + // Minimum execution time: 3_952_000 picoseconds. + Weight::from_parts(4_117_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -434,12 +418,12 @@ impl pallet_payment_streams::weights::WeightInfo for We /// The range of component `n` is `[0, 244]`. fn update_providers_last_chargeable_info(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `270 + n * (32 ±0)` + // Measured: `303 + n * (32 ±0)` // Estimated: `11295 + n * (2543 ±0)` - // Minimum execution time: 12_833_000 picoseconds. - Weight::from_parts(14_336_361, 11295) - // Standard Error: 5_031 - .saturating_add(Weight::from_parts(6_893_894, 0).saturating_mul(n.into())) + // Minimum execution time: 12_714_000 picoseconds. + Weight::from_parts(11_445_137, 11295) + // Standard Error: 4_582 + .saturating_add(Weight::from_parts(7_209_648, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(1_u64)) diff --git a/operator/runtime/testnet/src/weights/pallet_preimage.rs b/operator/runtime/testnet/src/weights/pallet_preimage.rs index da320fba..23f375c6 100644 --- a/operator/runtime/testnet/src/weights/pallet_preimage.rs +++ b/operator/runtime/testnet/src/weights/pallet_preimage.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_preimage` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_preimage`. pub struct WeightInfo(PhantomData); @@ -68,10 +68,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3` // Estimated: `3754` - // Minimum execution time: 66_957_000 picoseconds. - Weight::from_parts(67_564_000, 3754) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_615, 0).saturating_mul(s.into())) + // Minimum execution time: 66_817_000 picoseconds. + Weight::from_parts(67_177_000, 3754) + // Standard Error: 10 + .saturating_add(Weight::from_parts(2_810, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -86,10 +86,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 20_569_000 picoseconds. - Weight::from_parts(20_916_000, 3544) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_612, 0).saturating_mul(s.into())) + // Minimum execution time: 20_161_000 picoseconds. + Weight::from_parts(20_387_000, 3544) + // Standard Error: 10 + .saturating_add(Weight::from_parts(2_886, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -104,10 +104,10 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 19_993_000 picoseconds. - Weight::from_parts(20_310_000, 3544) - // Standard Error: 5 - .saturating_add(Weight::from_parts(2_601, 0).saturating_mul(s.into())) + // Minimum execution time: 19_634_000 picoseconds. + Weight::from_parts(19_981_000, 3544) + // Standard Error: 10 + .saturating_add(Weight::from_parts(2_869, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -123,8 +123,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `180` // Estimated: `3754` - // Minimum execution time: 75_933_000 picoseconds. - Weight::from_parts(86_560_000, 3754) + // Minimum execution time: 82_445_000 picoseconds. + Weight::from_parts(84_914_000, 3754) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -138,8 +138,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 37_307_000 picoseconds. - Weight::from_parts(43_008_000, 3544) + // Minimum execution time: 42_688_000 picoseconds. + Weight::from_parts(44_643_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -151,8 +151,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `137` // Estimated: `3544` - // Minimum execution time: 30_749_000 picoseconds. - Weight::from_parts(35_579_000, 3544) + // Minimum execution time: 37_351_000 picoseconds. + Weight::from_parts(39_271_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -164,8 +164,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 20_927_000 picoseconds. - Weight::from_parts(23_779_000, 3544) + // Minimum execution time: 26_360_000 picoseconds. + Weight::from_parts(28_241_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -177,8 +177,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3` // Estimated: `3544` - // Minimum execution time: 24_833_000 picoseconds. - Weight::from_parts(28_992_000, 3544) + // Minimum execution time: 31_605_000 picoseconds. + Weight::from_parts(33_132_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -190,8 +190,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 14_136_000 picoseconds. - Weight::from_parts(14_778_000, 3544) + // Minimum execution time: 15_823_000 picoseconds. + Weight::from_parts(17_053_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -205,8 +205,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `105` // Estimated: `3544` - // Minimum execution time: 29_809_000 picoseconds. - Weight::from_parts(33_203_000, 3544) + // Minimum execution time: 34_127_000 picoseconds. + Weight::from_parts(39_431_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -218,8 +218,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 14_390_000 picoseconds. - Weight::from_parts(14_700_000, 3544) + // Minimum execution time: 15_128_000 picoseconds. + Weight::from_parts(15_945_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -231,8 +231,8 @@ impl pallet_preimage::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `67` // Estimated: `3544` - // Minimum execution time: 14_470_000 picoseconds. - Weight::from_parts(15_418_000, 3544) + // Minimum execution time: 14_358_000 picoseconds. + Weight::from_parts(15_651_000, 3544) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -247,12 +247,12 @@ impl pallet_preimage::WeightInfo for WeightInfo { /// The range of component `n` is `[1, 1024]`. fn ensure_updated(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `648 + n * (203 ±0)` + // Measured: `558 + n * (204 ±0)` // Estimated: `990 + n * (2764 ±0)` - // Minimum execution time: 78_232_000 picoseconds. - Weight::from_parts(78_743_000, 990) - // Standard Error: 67_544 - .saturating_add(Weight::from_parts(78_286_981, 0).saturating_mul(n.into())) + // Minimum execution time: 77_131_000 picoseconds. + Weight::from_parts(78_201_000, 990) + // Standard Error: 69_293 + .saturating_add(Weight::from_parts(79_374_288, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads((3_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes((4_u64).saturating_mul(n.into()))) .saturating_add(Weight::from_parts(0, 2764).saturating_mul(n.into())) diff --git a/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs b/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs index 7ad738bf..ec1f4aa1 100644 --- a/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs +++ b/operator/runtime/testnet/src/weights/pallet_proofs_dealer.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_proofs_dealer` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proofs_dealer`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `41` // Estimated: `4687` - // Minimum execution time: 11_486_000 picoseconds. - Weight::from_parts(11_900_000, 4687) + // Minimum execution time: 11_574_000 picoseconds. + Weight::from_parts(12_153_000, 4687) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -90,17 +90,13 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) /// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0) /// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:1) + /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Providers::TotalBspsCapacity` (r:1 w:0) /// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) @@ -115,14 +111,14 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// The range of component `n` is `[1, 20]`. fn submit_proof_no_checkpoint_challenges_key_proofs(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2070` + // Measured: `1980` // Estimated: `15270` - // Minimum execution time: 2_174_837_000 picoseconds. - Weight::from_parts(2_059_384_726, 15270) - // Standard Error: 314_390 - .saturating_add(Weight::from_parts(135_797_182, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(30_u64)) - .saturating_add(T::DbWeight::get().writes(9_u64)) + // Minimum execution time: 2_173_320_000 picoseconds. + Weight::from_parts(2_078_762_965, 15270) + // Standard Error: 264_435 + .saturating_add(Weight::from_parts(138_422_337, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(26_u64)) + .saturating_add(T::DbWeight::get().writes(10_u64)) } /// Storage: `Providers::AccountIdToBackupStorageProviderId` (r:1 w:0) /// Proof: `Providers::AccountIdToBackupStorageProviderId` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) @@ -154,17 +150,13 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// Proof: `PaymentStreams::UsersWithoutFunds` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::DynamicRatePaymentStreams` (r:1 w:1) /// Proof: `PaymentStreams::DynamicRatePaymentStreams` (`max_values`: None, `max_size`: Some(129), added: 2604, mode: `MaxEncodedLen`) - /// Storage: `Providers::InsolventProviders` (r:2 w:0) - /// Proof: `Providers::InsolventProviders` (`max_values`: None, `max_size`: Some(49), added: 2524, mode: `MaxEncodedLen`) - /// Storage: `Providers::AwaitingTopUpFromProviders` (r:2 w:0) - /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::FixedRatePaymentStreams` (r:1 w:0) /// Proof: `PaymentStreams::FixedRatePaymentStreams` (`max_values`: None, `max_size`: Some(125), added: 2600, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::PrivilegedProviders` (r:1 w:0) /// Proof: `PaymentStreams::PrivilegedProviders` (`max_values`: None, `max_size`: Some(48), added: 2523, mode: `MaxEncodedLen`) /// Storage: `PaymentStreams::LastChargeableInfo` (r:1 w:0) /// Proof: `PaymentStreams::LastChargeableInfo` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) - /// Storage: `System::Account` (r:2 w:1) + /// Storage: `System::Account` (r:2 w:2) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Providers::TotalBspsCapacity` (r:1 w:0) /// Proof: `Providers::TotalBspsCapacity` (`max_values`: Some(1), `max_size`: Some(8), added: 503, mode: `MaxEncodedLen`) @@ -173,14 +165,14 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig /// The range of component `n` is `[21, 40]`. fn submit_proof_with_checkpoint_challenges_key_proofs(n: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `2070` + // Measured: `1980` // Estimated: `20676` - // Minimum execution time: 4_570_889_000 picoseconds. - Weight::from_parts(4_000_730_198, 20676) - // Standard Error: 951_176 - .saturating_add(Weight::from_parts(35_912_979, 0).saturating_mul(n.into())) - .saturating_add(T::DbWeight::get().reads(39_u64)) - .saturating_add(T::DbWeight::get().writes(11_u64)) + // Minimum execution time: 4_713_114_000 picoseconds. + Weight::from_parts(3_977_195_440, 20676) + // Standard Error: 976_459 + .saturating_add(Weight::from_parts(43_839_376, 0).saturating_mul(n.into())) + .saturating_add(T::DbWeight::get().reads(34_u64)) + .saturating_add(T::DbWeight::get().writes(13_u64)) } /// Storage: `ProofsDealer::ChallengesTicker` (r:1 w:1) /// Proof: `ProofsDealer::ChallengesTicker` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -211,10 +203,10 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `1155 + n * (271 ±0)` // Estimated: `6172 + n * (3634 ±0)` - // Minimum execution time: 29_687_000 picoseconds. - Weight::from_parts(30_010_000, 6172) - // Standard Error: 49_079 - .saturating_add(Weight::from_parts(40_156_766, 0).saturating_mul(n.into())) + // Minimum execution time: 29_781_000 picoseconds. + Weight::from_parts(30_128_000, 6172) + // Standard Error: 46_870 + .saturating_add(Weight::from_parts(39_711_912, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((5_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(3_u64)) @@ -234,10 +226,10 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `65 + n * (32 ±0)` // Estimated: `4787` - // Minimum execution time: 14_023_000 picoseconds. - Weight::from_parts(16_003_551, 4787) - // Standard Error: 3_466 - .saturating_add(Weight::from_parts(429_621, 0).saturating_mul(n.into())) + // Minimum execution time: 13_970_000 picoseconds. + Weight::from_parts(16_010_121, 4787) + // Standard Error: 3_521 + .saturating_add(Weight::from_parts(437_932, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -253,8 +245,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `248` // Estimated: `3501` - // Minimum execution time: 13_925_000 picoseconds. - Weight::from_parts(14_476_000, 3501) + // Minimum execution time: 13_837_000 picoseconds. + Weight::from_parts(14_342_000, 3501) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -266,8 +258,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `41` // Estimated: `1489` - // Minimum execution time: 4_422_000 picoseconds. - Weight::from_parts(4_638_000, 1489) + // Minimum execution time: 4_428_000 picoseconds. + Weight::from_parts(4_537_000, 1489) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `ProofsDealer::LastDeletedTick` (r:0 w:1) @@ -278,8 +270,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 2_453_000 picoseconds. - Weight::from_parts(2_608_000, 0) + // Minimum execution time: 2_405_000 picoseconds. + Weight::from_parts(2_589_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `ProofsDealer::PastBlocksWeight` (r:0 w:2) @@ -288,8 +280,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_835_000 picoseconds. - Weight::from_parts(5_018_000, 0) + // Minimum execution time: 4_667_000 picoseconds. + Weight::from_parts(4_848_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `Providers::BackupStorageProviders` (r:1 w:0) @@ -308,8 +300,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `552` // Estimated: `4624` - // Minimum execution time: 44_075_000 picoseconds. - Weight::from_parts(45_401_000, 4624) + // Minimum execution time: 45_699_000 picoseconds. + Weight::from_parts(46_479_000, 4624) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -319,8 +311,8 @@ impl pallet_proofs_dealer::weights::WeightInfo for Weig // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_190_000 picoseconds. - Weight::from_parts(7_572_000, 0) + // Minimum execution time: 7_264_000 picoseconds. + Weight::from_parts(7_584_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } } diff --git a/operator/runtime/testnet/src/weights/pallet_proxy.rs b/operator/runtime/testnet/src/weights/pallet_proxy.rs index 44438277..2e0321d7 100644 --- a/operator/runtime/testnet/src/weights/pallet_proxy.rs +++ b/operator/runtime/testnet/src/weights/pallet_proxy.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_proxy` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_proxy`. pub struct WeightInfo(PhantomData); @@ -66,10 +66,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `228 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 26_375_000 picoseconds. - Weight::from_parts(27_305_417, 4310) - // Standard Error: 1_795 - .saturating_add(Weight::from_parts(54_557, 0).saturating_mul(p.into())) + // Minimum execution time: 26_345_000 picoseconds. + Weight::from_parts(27_433_829, 4310) + // Standard Error: 1_807 + .saturating_add(Weight::from_parts(51_186, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) // 1 DB read that happen when filtering the proxy call transaction .saturating_add(T::DbWeight::get().reads(1)) @@ -90,12 +90,12 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480 + a * (56 ±0) + p * (25 ±0)` // Estimated: `5302` - // Minimum execution time: 55_749_000 picoseconds. - Weight::from_parts(57_395_999, 5302) - // Standard Error: 2_967 - .saturating_add(Weight::from_parts(247_288, 0).saturating_mul(a.into())) - // Standard Error: 3_066 - .saturating_add(Weight::from_parts(20_613, 0).saturating_mul(p.into())) + // Minimum execution time: 56_477_000 picoseconds. + Weight::from_parts(57_683_311, 5302) + // Standard Error: 3_453 + .saturating_add(Weight::from_parts(258_942, 0).saturating_mul(a.into())) + // Standard Error: 3_568 + .saturating_add(Weight::from_parts(9_621, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -109,10 +109,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `362 + a * (56 ±0)` // Estimated: `5302` - // Minimum execution time: 34_894_000 picoseconds. - Weight::from_parts(35_844_791, 5302) - // Standard Error: 2_126 - .saturating_add(Weight::from_parts(241_545, 0).saturating_mul(a.into())) + // Minimum execution time: 35_344_000 picoseconds. + Weight::from_parts(36_057_742, 5302) + // Standard Error: 2_193 + .saturating_add(Weight::from_parts(239_135, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -126,10 +126,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `362 + a * (56 ±0)` // Estimated: `5302` - // Minimum execution time: 34_736_000 picoseconds. - Weight::from_parts(35_851_022, 5302) - // Standard Error: 2_229 - .saturating_add(Weight::from_parts(239_788, 0).saturating_mul(a.into())) + // Minimum execution time: 35_300_000 picoseconds. + Weight::from_parts(36_326_257, 5302) + // Standard Error: 2_193 + .saturating_add(Weight::from_parts(239_707, 0).saturating_mul(a.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -145,12 +145,12 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `378 + a * (56 ±0) + p * (25 ±0)` // Estimated: `5302` - // Minimum execution time: 44_403_000 picoseconds. - Weight::from_parts(45_442_059, 5302) - // Standard Error: 2_333 - .saturating_add(Weight::from_parts(247_735, 0).saturating_mul(a.into())) - // Standard Error: 2_411 - .saturating_add(Weight::from_parts(7_259, 0).saturating_mul(p.into())) + // Minimum execution time: 45_147_000 picoseconds. + Weight::from_parts(45_874_337, 5302) + // Standard Error: 2_140 + .saturating_add(Weight::from_parts(243_655, 0).saturating_mul(a.into())) + // Standard Error: 2_211 + .saturating_add(Weight::from_parts(7_050, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -161,10 +161,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 32_612_000 picoseconds. - Weight::from_parts(33_609_016, 4310) - // Standard Error: 1_270 - .saturating_add(Weight::from_parts(42_643, 0).saturating_mul(p.into())) + // Minimum execution time: 33_339_000 picoseconds. + Weight::from_parts(34_059_987, 4310) + // Standard Error: 1_238 + .saturating_add(Weight::from_parts(43_459, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -175,10 +175,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 32_486_000 picoseconds. - Weight::from_parts(33_393_138, 4310) - // Standard Error: 1_404 - .saturating_add(Weight::from_parts(49_528, 0).saturating_mul(p.into())) + // Minimum execution time: 32_844_000 picoseconds. + Weight::from_parts(33_774_939, 4310) + // Standard Error: 1_264 + .saturating_add(Weight::from_parts(49_115, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -189,10 +189,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `182 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 29_721_000 picoseconds. - Weight::from_parts(30_671_963, 4310) - // Standard Error: 1_247 - .saturating_add(Weight::from_parts(31_417, 0).saturating_mul(p.into())) + // Minimum execution time: 30_099_000 picoseconds. + Weight::from_parts(30_976_747, 4310) + // Standard Error: 1_249 + .saturating_add(Weight::from_parts(25_324, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -203,10 +203,10 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `194` // Estimated: `4310` - // Minimum execution time: 35_040_000 picoseconds. - Weight::from_parts(36_398_084, 4310) - // Standard Error: 2_423 - .saturating_add(Weight::from_parts(21_162, 0).saturating_mul(p.into())) + // Minimum execution time: 35_882_000 picoseconds. + Weight::from_parts(37_130_368, 4310) + // Standard Error: 1_517 + .saturating_add(Weight::from_parts(17_328, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -217,11 +217,26 @@ impl pallet_proxy::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `207 + p * (25 ±0)` // Estimated: `4310` - // Minimum execution time: 30_679_000 picoseconds. - Weight::from_parts(31_643_325, 4310) - // Standard Error: 1_203 - .saturating_add(Weight::from_parts(38_649, 0).saturating_mul(p.into())) + // Minimum execution time: 31_222_000 picoseconds. + Weight::from_parts(32_190_526, 4310) + // Standard Error: 1_292 + .saturating_add(Weight::from_parts(32_077, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } + /// Storage: `Proxy::Proxies` (r:1 w:1) + /// Proof: `Proxy::Proxies` (`max_values`: None, `max_size`: Some(845), added: 3320, mode: `MaxEncodedLen`) + /// Storage: `System::Account` (r:1 w:1) + /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) + /// Storage: `Proxy::Announcements` (r:1 w:1) + /// Proof: `Proxy::Announcements` (`max_values`: None, `max_size`: Some(1837), added: 4312, mode: `MaxEncodedLen`) + fn poke_deposit() -> Weight { + // Proof Size summary in bytes: + // Measured: `496` + // Estimated: `5302` + // Minimum execution time: 62_924_000 picoseconds. + Weight::from_parts(64_146_000, 5302) + .saturating_add(T::DbWeight::get().reads(3_u64)) + .saturating_add(T::DbWeight::get().writes(3_u64)) + } } diff --git a/operator/runtime/testnet/src/weights/pallet_randomness.rs b/operator/runtime/testnet/src/weights/pallet_randomness.rs index c206ef94..c5e51f01 100644 --- a/operator/runtime/testnet/src/weights/pallet_randomness.rs +++ b/operator/runtime/testnet/src/weights/pallet_randomness.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_randomness`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/pallet_referenda.rs b/operator/runtime/testnet/src/weights/pallet_referenda.rs index a20ffdc7..b6375145 100644 --- a/operator/runtime/testnet/src/weights/pallet_referenda.rs +++ b/operator/runtime/testnet/src/weights/pallet_referenda.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_referenda` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_referenda`. pub struct WeightInfo(PhantomData); @@ -65,8 +65,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `341` // Estimated: `13328` - // Minimum execution time: 46_606_000 picoseconds. - Weight::from_parts(47_806_000, 13328) + // Minimum execution time: 46_516_000 picoseconds. + Weight::from_parts(47_854_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -80,8 +80,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 64_381_000 picoseconds. - Weight::from_parts(66_533_000, 25666) + // Minimum execution time: 64_542_000 picoseconds. + Weight::from_parts(66_238_000, 25666) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -99,8 +99,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3375` // Estimated: `13328` - // Minimum execution time: 84_738_000 picoseconds. - Weight::from_parts(86_542_000, 13328) + // Minimum execution time: 83_804_000 picoseconds. + Weight::from_parts(86_669_000, 13328) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -118,8 +118,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3395` // Estimated: `13328` - // Minimum execution time: 83_611_000 picoseconds. - Weight::from_parts(85_038_000, 13328) + // Minimum execution time: 83_458_000 picoseconds. + Weight::from_parts(85_235_000, 13328) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -135,8 +135,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 75_991_000 picoseconds. - Weight::from_parts(77_442_000, 25666) + // Minimum execution time: 76_556_000 picoseconds. + Weight::from_parts(77_987_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -152,8 +152,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `582` // Estimated: `25666` - // Minimum execution time: 73_683_000 picoseconds. - Weight::from_parts(75_649_000, 25666) + // Minimum execution time: 72_974_000 picoseconds. + Weight::from_parts(74_639_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -163,8 +163,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `492` // Estimated: `3795` - // Minimum execution time: 41_334_000 picoseconds. - Weight::from_parts(42_318_000, 3795) + // Minimum execution time: 41_379_000 picoseconds. + Weight::from_parts(42_421_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -174,8 +174,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `450` // Estimated: `3795` - // Minimum execution time: 38_241_000 picoseconds. - Weight::from_parts(38_934_000, 3795) + // Minimum execution time: 37_878_000 picoseconds. + Weight::from_parts(38_984_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -189,8 +189,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `25666` - // Minimum execution time: 42_361_000 picoseconds. - Weight::from_parts(43_283_000, 25666) + // Minimum execution time: 42_064_000 picoseconds. + Weight::from_parts(43_153_000, 25666) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -206,10 +206,10 @@ impl pallet_referenda::WeightInfo for WeightInfo { /// Proof: `Scheduler::Retries` (`max_values`: None, `max_size`: Some(30), added: 2505, mode: `MaxEncodedLen`) fn kill() -> Weight { // Proof Size summary in bytes: - // Measured: `946` + // Measured: `858` // Estimated: `25666` - // Minimum execution time: 126_873_000 picoseconds. - Weight::from_parts(128_320_000, 25666) + // Minimum execution time: 132_377_000 picoseconds. + Weight::from_parts(135_044_000, 25666) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -221,8 +221,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `240` // Estimated: `5477` - // Minimum execution time: 14_299_000 picoseconds. - Weight::from_parts(14_797_000, 5477) + // Minimum execution time: 13_860_000 picoseconds. + Weight::from_parts(14_547_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -236,8 +236,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3228` // Estimated: `13328` - // Minimum execution time: 55_277_000 picoseconds. - Weight::from_parts(57_232_000, 13328) + // Minimum execution time: 55_041_000 picoseconds. + Weight::from_parts(56_702_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -251,8 +251,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3228` // Estimated: `13328` - // Minimum execution time: 57_431_000 picoseconds. - Weight::from_parts(58_803_000, 13328) + // Minimum execution time: 56_985_000 picoseconds. + Weight::from_parts(59_522_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -264,8 +264,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3053` // Estimated: `5477` - // Minimum execution time: 30_465_000 picoseconds. - Weight::from_parts(32_722_000, 5477) + // Minimum execution time: 29_955_000 picoseconds. + Weight::from_parts(31_444_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -277,8 +277,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3053` // Estimated: `5477` - // Minimum execution time: 30_638_000 picoseconds. - Weight::from_parts(32_258_000, 5477) + // Minimum execution time: 30_211_000 picoseconds. + Weight::from_parts(31_644_000, 5477) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -292,8 +292,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3057` // Estimated: `5477` - // Minimum execution time: 37_039_000 picoseconds. - Weight::from_parts(38_854_000, 5477) + // Minimum execution time: 37_414_000 picoseconds. + Weight::from_parts(38_465_000, 5477) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -307,8 +307,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `3077` // Estimated: `5477` - // Minimum execution time: 35_936_000 picoseconds. - Weight::from_parts(37_289_000, 5477) + // Minimum execution time: 36_389_000 picoseconds. + Weight::from_parts(37_824_000, 5477) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -320,8 +320,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `387` // Estimated: `13328` - // Minimum execution time: 27_940_000 picoseconds. - Weight::from_parts(28_726_000, 13328) + // Minimum execution time: 27_919_000 picoseconds. + Weight::from_parts(28_598_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -333,8 +333,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 27_991_000 picoseconds. - Weight::from_parts(28_879_000, 13328) + // Minimum execution time: 28_303_000 picoseconds. + Weight::from_parts(29_264_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -344,8 +344,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `332` // Estimated: `3795` - // Minimum execution time: 18_836_000 picoseconds. - Weight::from_parts(19_354_000, 3795) + // Minimum execution time: 18_660_000 picoseconds. + Weight::from_parts(18_944_000, 3795) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -359,8 +359,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 36_724_000 picoseconds. - Weight::from_parts(37_381_000, 13328) + // Minimum execution time: 36_334_000 picoseconds. + Weight::from_parts(37_632_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -374,8 +374,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `423` // Estimated: `13328` - // Minimum execution time: 38_247_000 picoseconds. - Weight::from_parts(39_708_000, 13328) + // Minimum execution time: 38_914_000 picoseconds. + Weight::from_parts(39_695_000, 13328) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -387,8 +387,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 34_638_000 picoseconds. - Weight::from_parts(35_471_000, 13328) + // Minimum execution time: 34_435_000 picoseconds. + Weight::from_parts(35_333_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -400,8 +400,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `459` // Estimated: `13328` - // Minimum execution time: 34_358_000 picoseconds. - Weight::from_parts(35_125_000, 13328) + // Minimum execution time: 34_157_000 picoseconds. + Weight::from_parts(34_833_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -413,8 +413,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 32_939_000 picoseconds. - Weight::from_parts(33_687_000, 13328) + // Minimum execution time: 32_405_000 picoseconds. + Weight::from_parts(33_277_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -426,8 +426,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `13328` - // Minimum execution time: 32_526_000 picoseconds. - Weight::from_parts(33_238_000, 13328) + // Minimum execution time: 32_096_000 picoseconds. + Weight::from_parts(33_106_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -441,8 +441,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `480` // Estimated: `25666` - // Minimum execution time: 48_497_000 picoseconds. - Weight::from_parts(49_408_000, 25666) + // Minimum execution time: 48_027_000 picoseconds. + Weight::from_parts(49_253_000, 25666) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -454,8 +454,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `476` // Estimated: `13328` - // Minimum execution time: 34_221_000 picoseconds. - Weight::from_parts(35_520_000, 13328) + // Minimum execution time: 34_358_000 picoseconds. + Weight::from_parts(35_375_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -471,8 +471,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `437` // Estimated: `3795` - // Minimum execution time: 25_924_000 picoseconds. - Weight::from_parts(26_732_000, 3795) + // Minimum execution time: 26_078_000 picoseconds. + Weight::from_parts(27_139_000, 3795) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -484,8 +484,8 @@ impl pallet_referenda::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `409` // Estimated: `3795` - // Minimum execution time: 21_048_000 picoseconds. - Weight::from_parts(22_033_000, 3795) + // Minimum execution time: 21_191_000 picoseconds. + Weight::from_parts(22_195_000, 3795) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_safe_mode.rs b/operator/runtime/testnet/src/weights/pallet_safe_mode.rs index ab029bd6..ffd06089 100644 --- a/operator/runtime/testnet/src/weights/pallet_safe_mode.rs +++ b/operator/runtime/testnet/src/weights/pallet_safe_mode.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_safe_mode` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_safe_mode`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `42` // Estimated: `1489` - // Minimum execution time: 2_831_000 picoseconds. - Weight::from_parts(2_995_000, 1489) + // Minimum execution time: 2_881_000 picoseconds. + Weight::from_parts(3_102_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:1) @@ -71,8 +71,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 8_591_000 picoseconds. - Weight::from_parts(9_040_000, 1489) + // Minimum execution time: 8_705_000 picoseconds. + Weight::from_parts(9_009_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -89,8 +89,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `42` // Estimated: `1489` - // Minimum execution time: 10_479_000 picoseconds. - Weight::from_parts(10_885_000, 1489) + // Minimum execution time: 10_250_000 picoseconds. + Weight::from_parts(10_705_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -107,8 +107,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 11_098_000 picoseconds. - Weight::from_parts(11_716_000, 1489) + // Minimum execution time: 11_056_000 picoseconds. + Weight::from_parts(11_825_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -118,8 +118,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `69` // Estimated: `1489` - // Minimum execution time: 11_074_000 picoseconds. - Weight::from_parts(11_505_000, 1489) + // Minimum execution time: 11_054_000 picoseconds. + Weight::from_parts(11_469_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -138,8 +138,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `167` // Estimated: `3754` - // Minimum execution time: 55_002_000 picoseconds. - Weight::from_parts(55_775_000, 3754) + // Minimum execution time: 54_942_000 picoseconds. + Weight::from_parts(55_563_000, 3754) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -151,8 +151,8 @@ impl pallet_safe_mode::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `167` // Estimated: `3754` - // Minimum execution time: 42_445_000 picoseconds. - Weight::from_parts(43_468_000, 3754) + // Minimum execution time: 42_078_000 picoseconds. + Weight::from_parts(42_601_000, 3754) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_scheduler.rs b/operator/runtime/testnet/src/weights/pallet_scheduler.rs index d4fcdad1..6ff8844b 100644 --- a/operator/runtime/testnet/src/weights/pallet_scheduler.rs +++ b/operator/runtime/testnet/src/weights/pallet_scheduler.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_scheduler` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_scheduler`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `31` // Estimated: `1489` - // Minimum execution time: 4_258_000 picoseconds. - Weight::from_parts(4_450_000, 1489) + // Minimum execution time: 7_904_000 picoseconds. + Weight::from_parts(8_126_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -73,10 +73,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 5_443_000 picoseconds. - Weight::from_parts(9_100_506, 13328) - // Standard Error: 1_734 - .saturating_add(Weight::from_parts(415_931, 0).saturating_mul(s.into())) + // Minimum execution time: 5_091_000 picoseconds. + Weight::from_parts(8_730_370, 13328) + // Standard Error: 1_768 + .saturating_add(Weight::from_parts(432_906, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -84,8 +84,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_546_000 picoseconds. - Weight::from_parts(4_812_000, 0) + // Minimum execution time: 4_600_000 picoseconds. + Weight::from_parts(4_843_000, 0) } /// Storage: `Preimage::PreimageFor` (r:1 w:1) /// Proof: `Preimage::PreimageFor` (`max_values`: None, `max_size`: Some(4194344), added: 4196819, mode: `Measured`) @@ -98,10 +98,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `140 + s * (1 ±0)` // Estimated: `3605 + s * (1 ±0)` - // Minimum execution time: 23_824_000 picoseconds. - Weight::from_parts(23_948_000, 3605) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_437, 0).saturating_mul(s.into())) + // Minimum execution time: 24_359_000 picoseconds. + Weight::from_parts(24_510_000, 3605) + // Standard Error: 15 + .saturating_add(Weight::from_parts(2_017, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(s.into())) @@ -112,16 +112,16 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_162_000 picoseconds. - Weight::from_parts(7_469_000, 0) + // Minimum execution time: 7_026_000 picoseconds. + Weight::from_parts(7_212_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } fn service_task_periodic() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 4_621_000 picoseconds. - Weight::from_parts(4_735_000, 0) + // Minimum execution time: 4_545_000 picoseconds. + Weight::from_parts(4_767_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -131,16 +131,16 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 10_181_000 picoseconds. - Weight::from_parts(10_522_000, 3997) + // Minimum execution time: 10_130_000 picoseconds. + Weight::from_parts(10_614_000, 3997) .saturating_add(T::DbWeight::get().reads(2_u64)) } fn execute_dispatch_unsigned() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 3_380_000 picoseconds. - Weight::from_parts(3_516_000, 0) + // Minimum execution time: 3_371_000 picoseconds. + Weight::from_parts(3_529_000, 0) } /// Storage: `Scheduler::Agenda` (r:1 w:1) /// Proof: `Scheduler::Agenda` (`max_values`: None, `max_size`: Some(9863), added: 12338, mode: `MaxEncodedLen`) @@ -149,10 +149,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 14_307_000 picoseconds. - Weight::from_parts(17_849_017, 13328) - // Standard Error: 1_690 - .saturating_add(Weight::from_parts(454_436, 0).saturating_mul(s.into())) + // Minimum execution time: 14_220_000 picoseconds. + Weight::from_parts(17_908_224, 13328) + // Standard Error: 1_670 + .saturating_add(Weight::from_parts(477_944, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -167,10 +167,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `78 + s * (177 ±0)` // Estimated: `13328` - // Minimum execution time: 21_600_000 picoseconds. - Weight::from_parts(21_145_598, 13328) - // Standard Error: 1_124 - .saturating_add(Weight::from_parts(699_106, 0).saturating_mul(s.into())) + // Minimum execution time: 21_172_000 picoseconds. + Weight::from_parts(20_792_306, 13328) + // Standard Error: 1_080 + .saturating_add(Weight::from_parts(730_854, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -183,10 +183,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `255 + s * (185 ±0)` // Estimated: `13328` - // Minimum execution time: 19_279_000 picoseconds. - Weight::from_parts(24_341_584, 13328) - // Standard Error: 3_014 - .saturating_add(Weight::from_parts(499_195, 0).saturating_mul(s.into())) + // Minimum execution time: 19_344_000 picoseconds. + Weight::from_parts(24_114_439, 13328) + // Standard Error: 2_906 + .saturating_add(Weight::from_parts(526_029, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -201,10 +201,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `281 + s * (185 ±0)` // Estimated: `13328` - // Minimum execution time: 24_980_000 picoseconds. - Weight::from_parts(25_295_005, 13328) - // Standard Error: 1_415 - .saturating_add(Weight::from_parts(735_525, 0).saturating_mul(s.into())) + // Minimum execution time: 24_519_000 picoseconds. + Weight::from_parts(24_931_025, 13328) + // Standard Error: 1_606 + .saturating_add(Weight::from_parts(762_041, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -217,10 +217,10 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `118` // Estimated: `13328` - // Minimum execution time: 13_364_000 picoseconds. - Weight::from_parts(13_874_944, 13328) - // Standard Error: 545 - .saturating_add(Weight::from_parts(35_446, 0).saturating_mul(s.into())) + // Minimum execution time: 12_958_000 picoseconds. + Weight::from_parts(13_482_872, 13328) + // Standard Error: 557 + .saturating_add(Weight::from_parts(32_770, 0).saturating_mul(s.into())) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -232,8 +232,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `8928` // Estimated: `13328` - // Minimum execution time: 33_009_000 picoseconds. - Weight::from_parts(33_972_000, 13328) + // Minimum execution time: 33_506_000 picoseconds. + Weight::from_parts(34_530_000, 13328) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -247,8 +247,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `9606` // Estimated: `13328` - // Minimum execution time: 40_375_000 picoseconds. - Weight::from_parts(41_698_000, 13328) + // Minimum execution time: 41_433_000 picoseconds. + Weight::from_parts(42_736_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -260,8 +260,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `8940` // Estimated: `13328` - // Minimum execution time: 31_059_000 picoseconds. - Weight::from_parts(32_254_000, 13328) + // Minimum execution time: 31_242_000 picoseconds. + Weight::from_parts(33_218_000, 13328) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -275,8 +275,8 @@ impl pallet_scheduler::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `9618` // Estimated: `13328` - // Minimum execution time: 39_427_000 picoseconds. - Weight::from_parts(40_257_000, 13328) + // Minimum execution time: 39_066_000 picoseconds. + Weight::from_parts(40_501_000, 13328) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_session.rs b/operator/runtime/testnet/src/weights/pallet_session.rs index 154c1a57..79229157 100644 --- a/operator/runtime/testnet/src/weights/pallet_session.rs +++ b/operator/runtime/testnet/src/weights/pallet_session.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_session` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_session`. pub struct WeightInfo(PhantomData); @@ -63,8 +63,8 @@ impl pallet_session::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `350` // Estimated: `11240` - // Minimum execution time: 37_208_000 picoseconds. - Weight::from_parts(38_300_000, 11240) + // Minimum execution time: 37_200_000 picoseconds. + Weight::from_parts(38_269_000, 11240) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -76,8 +76,8 @@ impl pallet_session::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `328` // Estimated: `3793` - // Minimum execution time: 21_720_000 picoseconds. - Weight::from_parts(22_535_000, 3793) + // Minimum execution time: 21_890_000 picoseconds. + Weight::from_parts(22_318_000, 3793) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_storage_providers.rs b/operator/runtime/testnet/src/weights/pallet_storage_providers.rs index 663eb999..ada79cdc 100644 --- a/operator/runtime/testnet/src/weights/pallet_storage_providers.rs +++ b/operator/runtime/testnet/src/weights/pallet_storage_providers.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_storage_providers` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-29, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_storage_providers`. pub struct WeightInfo(PhantomData); @@ -69,8 +69,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 89_826_000 picoseconds. - Weight::from_parts(90_994_000, 5628) + // Minimum execution time: 91_368_000 picoseconds. + Weight::from_parts(93_485_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -88,8 +88,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 89_741_000 picoseconds. - Weight::from_parts(91_222_000, 5628) + // Minimum execution time: 90_729_000 picoseconds. + Weight::from_parts(92_462_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -111,8 +111,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `474` // Estimated: `5628` - // Minimum execution time: 38_182_000 picoseconds. - Weight::from_parts(39_713_000, 5628) + // Minimum execution time: 38_936_000 picoseconds. + Weight::from_parts(40_167_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -136,8 +136,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `487` // Estimated: `5628` - // Minimum execution time: 54_783_000 picoseconds. - Weight::from_parts(56_744_000, 5628) + // Minimum execution time: 54_893_000 picoseconds. + Weight::from_parts(56_404_000, 5628) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(6_u64)) } @@ -151,8 +151,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `507` // Estimated: `5628` - // Minimum execution time: 65_446_000 picoseconds. - Weight::from_parts(66_906_000, 5628) + // Minimum execution time: 66_563_000 picoseconds. + Weight::from_parts(68_050_000, 5628) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -175,10 +175,10 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `775 + n * (83 ±0)` // Estimated: `8186 + n * (3598 ±0)` - // Minimum execution time: 93_251_000 picoseconds. - Weight::from_parts(91_955_675, 8186) - // Standard Error: 9_290 - .saturating_add(Weight::from_parts(6_491_321, 0).saturating_mul(n.into())) + // Minimum execution time: 94_089_000 picoseconds. + Weight::from_parts(93_805_887, 8186) + // Standard Error: 9_153 + .saturating_add(Weight::from_parts(6_398_139, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().writes(7_u64)) @@ -205,8 +205,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `720` // Estimated: `4624` - // Minimum execution time: 93_040_000 picoseconds. - Weight::from_parts(95_240_000, 4624) + // Minimum execution time: 95_171_000 picoseconds. + Weight::from_parts(96_755_000, 4624) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -228,8 +228,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `679` // Estimated: `4624` - // Minimum execution time: 83_405_000 picoseconds. - Weight::from_parts(85_132_000, 4624) + // Minimum execution time: 84_687_000 picoseconds. + Weight::from_parts(86_005_000, 4624) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -251,8 +251,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `679` // Estimated: `4624` - // Minimum execution time: 105_733_000 picoseconds. - Weight::from_parts(106_832_000, 4624) + // Minimum execution time: 106_467_000 picoseconds. + Weight::from_parts(108_042_000, 4624) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -270,8 +270,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `649` // Estimated: `4608` - // Minimum execution time: 79_140_000 picoseconds. - Weight::from_parts(80_429_000, 4608) + // Minimum execution time: 79_118_000 picoseconds. + Weight::from_parts(80_358_000, 4608) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -289,8 +289,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `649` // Estimated: `4608` - // Minimum execution time: 98_935_000 picoseconds. - Weight::from_parts(100_250_000, 4608) + // Minimum execution time: 100_721_000 picoseconds. + Weight::from_parts(102_445_000, 4608) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -306,8 +306,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `591` // Estimated: `4608` - // Minimum execution time: 44_674_000 picoseconds. - Weight::from_parts(46_159_000, 4608) + // Minimum execution time: 46_300_000 picoseconds. + Weight::from_parts(47_311_000, 4608) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -321,8 +321,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `631` // Estimated: `4608` - // Minimum execution time: 32_741_000 picoseconds. - Weight::from_parts(34_206_000, 4608) + // Minimum execution time: 33_449_000 picoseconds. + Weight::from_parts(34_496_000, 4608) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -338,8 +338,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `508` // Estimated: `4624` - // Minimum execution time: 34_779_000 picoseconds. - Weight::from_parts(35_785_000, 4624) + // Minimum execution time: 35_416_000 picoseconds. + Weight::from_parts(36_609_000, 4624) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -353,8 +353,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1316` // Estimated: `4624` - // Minimum execution time: 32_789_000 picoseconds. - Weight::from_parts(33_844_000, 4624) + // Minimum execution time: 33_168_000 picoseconds. + Weight::from_parts(34_370_000, 4624) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -382,8 +382,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 126_228_000 picoseconds. - Weight::from_parts(130_217_000, 5628) + // Minimum execution time: 128_606_000 picoseconds. + Weight::from_parts(130_631_000, 5628) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -409,8 +409,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `270` // Estimated: `5628` - // Minimum execution time: 106_118_000 picoseconds. - Weight::from_parts(107_693_000, 5628) + // Minimum execution time: 107_480_000 picoseconds. + Weight::from_parts(110_550_000, 5628) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -432,10 +432,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `Providers::AwaitingTopUpFromProviders` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn slash_without_awaiting_top_up() -> Weight { // Proof Size summary in bytes: - // Measured: `871` + // Measured: `783` // Estimated: `6172` - // Minimum execution time: 162_133_000 picoseconds. - Weight::from_parts(164_580_000, 6172) + // Minimum execution time: 185_454_000 picoseconds. + Weight::from_parts(188_146_000, 6172) .saturating_add(T::DbWeight::get().reads(9_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -463,10 +463,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `Providers::ProviderTopUpExpirations` (`max_values`: None, `max_size`: Some(3322), added: 5797, mode: `MaxEncodedLen`) fn slash_with_awaiting_top_up() -> Weight { // Proof Size summary in bytes: - // Measured: `871` + // Measured: `783` // Estimated: `6787` - // Minimum execution time: 128_623_000 picoseconds. - Weight::from_parts(130_891_000, 6787) + // Minimum execution time: 154_047_000 picoseconds. + Weight::from_parts(157_225_000, 6787) .saturating_add(T::DbWeight::get().reads(13_u64)) .saturating_add(T::DbWeight::get().writes(8_u64)) } @@ -492,8 +492,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `758` // Estimated: `4624` - // Minimum execution time: 113_271_000 picoseconds. - Weight::from_parts(115_045_000, 4624) + // Minimum execution time: 116_350_000 picoseconds. + Weight::from_parts(117_412_000, 4624) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -523,10 +523,10 @@ impl pallet_storage_providers::weights::WeightInfo for /// Proof: `ProofsDealer::TickToProvidersDeadlines` (`max_values`: None, `max_size`: Some(68), added: 2543, mode: `MaxEncodedLen`) fn delete_provider_bsp() -> Weight { // Proof Size summary in bytes: - // Measured: `853` + // Measured: `887` // Estimated: `6038` - // Minimum execution time: 81_453_000 picoseconds. - Weight::from_parts(84_499_000, 6038) + // Minimum execution time: 82_508_000 picoseconds. + Weight::from_parts(85_035_000, 6038) .saturating_add(T::DbWeight::get().reads(12_u64)) .saturating_add(T::DbWeight::get().writes(9_u64)) } @@ -550,14 +550,14 @@ impl pallet_storage_providers::weights::WeightInfo for /// The range of component `m` is `[0, 20]`. fn delete_provider_msp(n: u32, m: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `1845 + m * (54 ±0) + n * (83 ±0)` + // Measured: `1878 + m * (54 ±0) + n * (83 ±0)` // Estimated: `8186 + m * (2571 ±0) + n * (3598 ±0)` - // Minimum execution time: 186_516_000 picoseconds. - Weight::from_parts(80_100_317, 8186) - // Standard Error: 31_923 - .saturating_add(Weight::from_parts(6_927_784, 0).saturating_mul(n.into())) - // Standard Error: 31_923 - .saturating_add(Weight::from_parts(5_691_747, 0).saturating_mul(m.into())) + // Minimum execution time: 182_516_000 picoseconds. + Weight::from_parts(76_553_456, 8186) + // Standard Error: 28_447 + .saturating_add(Weight::from_parts(6_994_304, 0).saturating_mul(n.into())) + // Standard Error: 28_447 + .saturating_add(Weight::from_parts(5_787_272, 0).saturating_mul(m.into())) .saturating_add(T::DbWeight::get().reads(8_u64)) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(n.into()))) .saturating_add(T::DbWeight::get().reads((1_u64).saturating_mul(m.into()))) @@ -577,8 +577,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `549` // Estimated: `4624` - // Minimum execution time: 27_371_000 picoseconds. - Weight::from_parts(28_106_000, 4624) + // Minimum execution time: 27_701_000 picoseconds. + Weight::from_parts(28_273_000, 4624) .saturating_add(T::DbWeight::get().reads(3_u64)) } /// Storage: `Providers::AwaitingTopUpFromProviders` (r:1 w:1) @@ -601,8 +601,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `1038` // Estimated: `6172` - // Minimum execution time: 103_589_000 picoseconds. - Weight::from_parts(106_013_000, 6172) + // Minimum execution time: 107_576_000 picoseconds. + Weight::from_parts(109_503_000, 6172) .saturating_add(T::DbWeight::get().reads(7_u64)) .saturating_add(T::DbWeight::get().writes(7_u64)) } @@ -622,8 +622,8 @@ impl pallet_storage_providers::weights::WeightInfo for // Proof Size summary in bytes: // Measured: `775` // Estimated: `6172` - // Minimum execution time: 83_393_000 picoseconds. - Weight::from_parts(84_682_000, 6172) + // Minimum execution time: 87_203_000 picoseconds. + Weight::from_parts(88_554_000, 6172) .saturating_add(T::DbWeight::get().reads(6_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_sudo.rs b/operator/runtime/testnet/src/weights/pallet_sudo.rs index 769930bd..831ec11e 100644 --- a/operator/runtime/testnet/src/weights/pallet_sudo.rs +++ b/operator/runtime/testnet/src/weights/pallet_sudo.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_sudo` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_sudo`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 13_376_000 picoseconds. - Weight::from_parts(13_934_000, 1505) + // Minimum execution time: 13_793_000 picoseconds. + Weight::from_parts(14_204_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 14_847_000 picoseconds. - Weight::from_parts(15_208_000, 1505) + // Minimum execution time: 15_134_000 picoseconds. + Weight::from_parts(15_676_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Sudo::Key` (r:1 w:0) @@ -82,8 +82,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 14_860_000 picoseconds. - Weight::from_parts(15_185_000, 1505) + // Minimum execution time: 15_218_000 picoseconds. + Weight::from_parts(15_613_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } /// Storage: `Sudo::Key` (r:1 w:1) @@ -92,8 +92,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 12_734_000 picoseconds. - Weight::from_parts(13_050_000, 1505) + // Minimum execution time: 12_400_000 picoseconds. + Weight::from_parts(12_924_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -103,8 +103,8 @@ impl pallet_sudo::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `191` // Estimated: `1505` - // Minimum execution time: 5_754_000 picoseconds. - Weight::from_parts(5_993_000, 1505) + // Minimum execution time: 7_287_000 picoseconds. + Weight::from_parts(7_590_000, 1505) .saturating_add(T::DbWeight::get().reads(1_u64)) } } diff --git a/operator/runtime/testnet/src/weights/pallet_timestamp.rs b/operator/runtime/testnet/src/weights/pallet_timestamp.rs index a94add38..7f935063 100644 --- a/operator/runtime/testnet/src/weights/pallet_timestamp.rs +++ b/operator/runtime/testnet/src/weights/pallet_timestamp.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_timestamp` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_timestamp`. pub struct WeightInfo(PhantomData); @@ -63,8 +63,8 @@ impl pallet_timestamp::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `278` // Estimated: `1493` - // Minimum execution time: 11_603_000 picoseconds. - Weight::from_parts(11_889_000, 1493) + // Minimum execution time: 11_367_000 picoseconds. + Weight::from_parts(11_870_000, 1493) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,7 +72,7 @@ impl pallet_timestamp::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `94` // Estimated: `0` - // Minimum execution time: 5_143_000 picoseconds. - Weight::from_parts(5_304_000, 0) + // Minimum execution time: 5_103_000 picoseconds. + Weight::from_parts(5_249_000, 0) } } diff --git a/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs b/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs index 55b4152e..7ec6e084 100644 --- a/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs +++ b/operator/runtime/testnet/src/weights/pallet_transaction_payment.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_transaction_payment` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_transaction_payment`. pub struct WeightInfo(PhantomData); @@ -58,13 +58,13 @@ impl pallet_transaction_payment::WeightInfo for WeightI /// Storage: `System::Account` (r:3 w:3) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) fn charge_transaction_payment() -> Weight { // Proof Size summary in bytes: - // Measured: `403` + // Measured: `315` // Estimated: `8763` - // Minimum execution time: 96_396_000 picoseconds. - Weight::from_parts(97_856_000, 8763) + // Minimum execution time: 94_560_000 picoseconds. + Weight::from_parts(95_962_000, 8763) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_treasury.rs b/operator/runtime/testnet/src/weights/pallet_treasury.rs index b78574e3..7d512968 100644 --- a/operator/runtime/testnet/src/weights/pallet_treasury.rs +++ b/operator/runtime/testnet/src/weights/pallet_treasury.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_treasury` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_treasury`. pub struct WeightInfo(PhantomData); @@ -63,10 +63,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Proposals` (`max_values`: None, `max_size`: Some(84), added: 2559, mode: `MaxEncodedLen`) fn spend_local() -> Weight { // Proof Size summary in bytes: - // Measured: `76` + // Measured: `109` // Estimated: `1887` - // Minimum execution time: 15_328_000 picoseconds. - Weight::from_parts(16_290_000, 1887) + // Minimum execution time: 15_516_000 picoseconds. + Weight::from_parts(15_978_000, 1887) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -74,30 +74,30 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Approvals` (`max_values`: Some(1), `max_size`: Some(402), added: 897, mode: `MaxEncodedLen`) fn remove_approval() -> Weight { // Proof Size summary in bytes: - // Measured: `161` + // Measured: `194` // Estimated: `1887` - // Minimum execution time: 8_599_000 picoseconds. - Weight::from_parts(8_933_000, 1887) + // Minimum execution time: 8_569_000 picoseconds. + Weight::from_parts(8_889_000, 1887) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `System::Account` (r:1 w:0) /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) - /// Storage: `Treasury::Deactivated` (r:1 w:1) + /// Storage: `Treasury::Deactivated` (r:1 w:0) /// Proof: `Treasury::Deactivated` (`max_values`: Some(1), `max_size`: Some(16), added: 511, mode: `MaxEncodedLen`) /// Storage: `Treasury::LastSpendPeriod` (r:1 w:1) /// Proof: `Treasury::LastSpendPeriod` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) /// The range of component `p` is `[0, 99]`. fn on_initialize_proposals(p: u32, ) -> Weight { // Proof Size summary in bytes: - // Measured: `262 + p * (1 ±0)` + // Measured: `295 + p * (1 ±0)` // Estimated: `3581` - // Minimum execution time: 16_972_000 picoseconds. - Weight::from_parts(19_568_871, 3581) - // Standard Error: 761 - .saturating_add(Weight::from_parts(60_418, 0).saturating_mul(p.into())) + // Minimum execution time: 11_040_000 picoseconds. + Weight::from_parts(13_372_329, 3581) + // Standard Error: 569 + .saturating_add(Weight::from_parts(41_937, 0).saturating_mul(p.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) - .saturating_add(T::DbWeight::get().writes(2_u64)) + .saturating_add(T::DbWeight::get().writes(1_u64)) } /// Storage: `Treasury::SpendCount` (r:1 w:1) /// Proof: `Treasury::SpendCount` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -105,10 +105,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn spend() -> Weight { // Proof Size summary in bytes: - // Measured: `76` + // Measured: `109` // Estimated: `1489` - // Minimum execution time: 13_951_000 picoseconds. - Weight::from_parts(14_300_000, 1489) + // Minimum execution time: 14_276_000 picoseconds. + Weight::from_parts(14_789_000, 1489) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -118,10 +118,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `System::Account` (`max_values`: None, `max_size`: Some(116), added: 2591, mode: `MaxEncodedLen`) fn payout() -> Weight { // Proof Size summary in bytes: - // Measured: `387` + // Measured: `383` // Estimated: `6172` - // Minimum execution time: 75_130_000 picoseconds. - Weight::from_parts(76_066_000, 6172) + // Minimum execution time: 77_086_000 picoseconds. + Weight::from_parts(78_025_000, 6172) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -129,10 +129,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn check_status() -> Weight { // Proof Size summary in bytes: - // Measured: `182` + // Measured: `215` // Estimated: `3522` - // Minimum execution time: 16_098_000 picoseconds. - Weight::from_parts(16_625_000, 3522) + // Minimum execution time: 16_327_000 picoseconds. + Weight::from_parts(16_900_000, 3522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -140,10 +140,10 @@ impl pallet_treasury::WeightInfo for WeightInfo { /// Proof: `Treasury::Spends` (`max_values`: None, `max_size`: Some(57), added: 2532, mode: `MaxEncodedLen`) fn void_spend() -> Weight { // Proof Size summary in bytes: - // Measured: `182` + // Measured: `215` // Estimated: `3522` - // Minimum execution time: 14_822_000 picoseconds. - Weight::from_parts(15_257_000, 3522) + // Minimum execution time: 15_074_000 picoseconds. + Weight::from_parts(15_512_000, 3522) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_tx_pause.rs b/operator/runtime/testnet/src/weights/pallet_tx_pause.rs index 402c7223..80e347fb 100644 --- a/operator/runtime/testnet/src/weights/pallet_tx_pause.rs +++ b/operator/runtime/testnet/src/weights/pallet_tx_pause.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_tx_pause` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_tx_pause`. pub struct WeightInfo(PhantomData); @@ -61,8 +61,8 @@ impl pallet_tx_pause::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `4` // Estimated: `3997` - // Minimum execution time: 15_738_000 picoseconds. - Weight::from_parts(16_151_000, 3997) + // Minimum execution time: 16_324_000 picoseconds. + Weight::from_parts(16_872_000, 3997) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -72,8 +72,8 @@ impl pallet_tx_pause::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `566` // Estimated: `3997` - // Minimum execution time: 22_882_000 picoseconds. - Weight::from_parts(23_473_000, 3997) + // Minimum execution time: 23_613_000 picoseconds. + Weight::from_parts(23_884_000, 3997) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/pallet_utility.rs b/operator/runtime/testnet/src/weights/pallet_utility.rs index 8928dc1e..0cfa30f3 100644 --- a/operator/runtime/testnet/src/weights/pallet_utility.rs +++ b/operator/runtime/testnet/src/weights/pallet_utility.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_utility` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_utility`. pub struct WeightInfo(PhantomData); @@ -64,10 +64,10 @@ impl pallet_utility::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 6_921_000 picoseconds. - Weight::from_parts(10_221_439, 3997) - // Standard Error: 2_072 - .saturating_add(Weight::from_parts(6_521_419, 0).saturating_mul(c.into())) + // Minimum execution time: 7_047_000 picoseconds. + Weight::from_parts(19_409_848, 3997) + // Standard Error: 2_097 + .saturating_add(Weight::from_parts(6_732_786, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) @@ -78,8 +78,8 @@ impl pallet_utility::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 13_252_000 picoseconds. - Weight::from_parts(13_707_000, 3997) + // Minimum execution time: 13_181_000 picoseconds. + Weight::from_parts(13_820_000, 3997) .saturating_add(T::DbWeight::get().reads(2_u64)) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) @@ -91,18 +91,18 @@ impl pallet_utility::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 6_817_000 picoseconds. - Weight::from_parts(17_130_179, 3997) - // Standard Error: 2_420 - .saturating_add(Weight::from_parts(6_969_471, 0).saturating_mul(c.into())) + // Minimum execution time: 6_984_000 picoseconds. + Weight::from_parts(5_270_166, 3997) + // Standard Error: 2_533 + .saturating_add(Weight::from_parts(7_078_473, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } fn dispatch_as() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_623_000 picoseconds. - Weight::from_parts(9_915_000, 0) + // Minimum execution time: 9_511_000 picoseconds. + Weight::from_parts(9_802_000, 0) } /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) @@ -113,10 +113,29 @@ impl pallet_utility::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `46` // Estimated: `3997` - // Minimum execution time: 6_851_000 picoseconds. - Weight::from_parts(12_863_872, 3997) - // Standard Error: 2_864 - .saturating_add(Weight::from_parts(6_535_635, 0).saturating_mul(c.into())) + // Minimum execution time: 6_850_000 picoseconds. + Weight::from_parts(7_807_844, 3997) + // Standard Error: 3_006 + .saturating_add(Weight::from_parts(6_738_531, 0).saturating_mul(c.into())) .saturating_add(T::DbWeight::get().reads(2_u64)) } + fn dispatch_as_fallible() -> Weight { + // Proof Size summary in bytes: + // Measured: `0` + // Estimated: `0` + // Minimum execution time: 9_409_000 picoseconds. + Weight::from_parts(9_815_000, 0) + } + /// Storage: `SafeMode::EnteredUntil` (r:1 w:0) + /// Proof: `SafeMode::EnteredUntil` (`max_values`: Some(1), `max_size`: Some(4), added: 499, mode: `MaxEncodedLen`) + /// Storage: `TxPause::PausedCalls` (r:2 w:0) + /// Proof: `TxPause::PausedCalls` (`max_values`: None, `max_size`: Some(532), added: 3007, mode: `MaxEncodedLen`) + fn if_else() -> Weight { + // Proof Size summary in bytes: + // Measured: `46` + // Estimated: `7004` + // Minimum execution time: 22_230_000 picoseconds. + Weight::from_parts(22_865_000, 7004) + .saturating_add(T::DbWeight::get().reads(3_u64)) + } } diff --git a/operator/runtime/testnet/src/weights/pallet_whitelist.rs b/operator/runtime/testnet/src/weights/pallet_whitelist.rs index 5bccb462..a404340a 100644 --- a/operator/runtime/testnet/src/weights/pallet_whitelist.rs +++ b/operator/runtime/testnet/src/weights/pallet_whitelist.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `pallet_whitelist` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `pallet_whitelist`. pub struct WeightInfo(PhantomData); @@ -65,8 +65,8 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `79` // Estimated: `3544` - // Minimum execution time: 23_649_000 picoseconds. - Weight::from_parts(24_458_000, 3544) + // Minimum execution time: 24_394_000 picoseconds. + Weight::from_parts(25_228_000, 3544) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -80,8 +80,8 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `208` // Estimated: `3544` - // Minimum execution time: 23_153_000 picoseconds. - Weight::from_parts(23_913_000, 3544) + // Minimum execution time: 23_308_000 picoseconds. + Weight::from_parts(23_883_000, 3544) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } @@ -98,10 +98,10 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `284 + n * (1 ±0)` // Estimated: `3748 + n * (1 ±0)` - // Minimum execution time: 37_351_000 picoseconds. - Weight::from_parts(37_926_000, 3748) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_498, 0).saturating_mul(n.into())) + // Minimum execution time: 38_029_000 picoseconds. + Weight::from_parts(38_485_000, 3748) + // Standard Error: 6 + .saturating_add(Weight::from_parts(1_584, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) .saturating_add(Weight::from_parts(0, 1).saturating_mul(n.into())) @@ -117,10 +117,10 @@ impl pallet_whitelist::WeightInfo for WeightInfo { // Proof Size summary in bytes: // Measured: `208` // Estimated: `3544` - // Minimum execution time: 28_590_000 picoseconds. - Weight::from_parts(29_179_566, 3544) - // Standard Error: 3 - .saturating_add(Weight::from_parts(1_265, 0).saturating_mul(n.into())) + // Minimum execution time: 28_748_000 picoseconds. + Weight::from_parts(29_304_620, 3544) + // Standard Error: 4 + .saturating_add(Weight::from_parts(1_360, 0).saturating_mul(n.into())) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs index fe2056db..6b63e15f 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_ethereum_client.rs @@ -33,7 +33,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_ethereum_client`. pub struct WeightInfo(PhantomData); diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs index 060c275a..16c322e7 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_inbound_queue_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_inbound_queue_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_inbound_queue_v2`. pub struct WeightInfo(PhantomData); @@ -62,15 +62,15 @@ impl snowbridge_pallet_inbound_queue_v2::WeightInfo for /// Storage: `EthereumBeaconClient::FinalizedBeaconState` (r:1 w:0) /// Proof: `EthereumBeaconClient::FinalizedBeaconState` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) /// Storage: `EthereumInboundQueueV2::NonceBitmap` (r:1 w:1) /// Proof: `EthereumInboundQueueV2::NonceBitmap` (`max_values`: None, `max_size`: Some(40), added: 2515, mode: `MaxEncodedLen`) fn submit() -> Weight { // Proof Size summary in bytes: // Measured: `339` - // Estimated: `3537` - // Minimum execution time: 109_535_000 picoseconds. - Weight::from_parts(110_359_000, 3537) + // Estimated: `3846` + // Minimum execution time: 109_212_000 picoseconds. + Weight::from_parts(111_167_000, 3846) .saturating_add(T::DbWeight::get().reads(5_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs index 7190ed81..92a7dc24 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_outbound_queue_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_outbound_queue_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_outbound_queue_v2`. pub struct WeightInfo(PhantomData); @@ -67,8 +67,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `109` // Estimated: `1594` - // Minimum execution time: 26_638_000 picoseconds. - Weight::from_parts(27_399_000, 1594) + // Minimum execution time: 27_043_000 picoseconds. + Weight::from_parts(27_872_000, 1594) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(4_u64)) } @@ -80,8 +80,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `1195` // Estimated: `2680` - // Minimum execution time: 40_391_000 picoseconds. - Weight::from_parts(41_435_000, 2680) + // Minimum execution time: 40_435_000 picoseconds. + Weight::from_parts(41_026_000, 2680) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -93,8 +93,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `202` // Estimated: `1687` - // Minimum execution time: 16_426_000 picoseconds. - Weight::from_parts(16_827_000, 1687) + // Minimum execution time: 16_474_000 picoseconds. + Weight::from_parts(16_811_000, 1687) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } @@ -106,8 +106,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 1_153_000 picoseconds. - Weight::from_parts(1_335_000, 0) + // Minimum execution time: 1_155_000 picoseconds. + Weight::from_parts(1_290_000, 0) .saturating_add(T::DbWeight::get().writes(2_u64)) } /// Storage: `EthereumOutboundQueueV2::Nonce` (r:1 w:1) @@ -124,8 +124,8 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo // Proof Size summary in bytes: // Measured: `180` // Estimated: `1493` - // Minimum execution time: 674_707_000 picoseconds. - Weight::from_parts(692_113_000, 1493) + // Minimum execution time: 692_353_000 picoseconds. + Weight::from_parts(708_781_000, 1493) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(36_u64)) } @@ -134,15 +134,15 @@ impl snowbridge_pallet_outbound_queue_v2::WeightInfo fo /// Storage: `EthereumBeaconClient::FinalizedBeaconState` (r:1 w:0) /// Proof: `EthereumBeaconClient::FinalizedBeaconState` (`max_values`: None, `max_size`: Some(72), added: 2547, mode: `MaxEncodedLen`) /// Storage: `Parameters::Parameters` (r:1 w:0) - /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(52), added: 2527, mode: `MaxEncodedLen`) + /// Proof: `Parameters::Parameters` (`max_values`: None, `max_size`: Some(381), added: 2856, mode: `MaxEncodedLen`) /// Storage: `EthereumOutboundQueueV2::PendingOrders` (r:1 w:1) /// Proof: `EthereumOutboundQueueV2::PendingOrders` (`max_values`: None, `max_size`: Some(44), added: 2519, mode: `MaxEncodedLen`) fn submit_delivery_receipt() -> Weight { // Proof Size summary in bytes: // Measured: `498` - // Estimated: `3537` - // Minimum execution time: 107_585_000 picoseconds. - Weight::from_parts(108_646_000, 3537) + // Estimated: `3846` + // Minimum execution time: 111_353_000 picoseconds. + Weight::from_parts(113_211_000, 3846) .saturating_add(T::DbWeight::get().reads(4_u64)) .saturating_add(T::DbWeight::get().writes(1_u64)) } diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs index 4dddbeec..08885fb1 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_system.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_system` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system`. pub struct WeightInfo(PhantomData); @@ -59,15 +59,15 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_100_000 picoseconds. - Weight::from_parts(9_490_000, 0) + // Minimum execution time: 9_450_000 picoseconds. + Weight::from_parts(9_880_000, 0) } fn set_operating_mode() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 6_937_000 picoseconds. - Weight::from_parts(7_149_000, 0) + // Minimum execution time: 7_124_000 picoseconds. + Weight::from_parts(7_619_000, 0) } /// Storage: `SnowbridgeSystem::PricingParameters` (r:0 w:1) /// Proof: `SnowbridgeSystem::PricingParameters` (`max_values`: Some(1), `max_size`: Some(112), added: 607, mode: `MaxEncodedLen`) @@ -75,16 +75,16 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 9_398_000 picoseconds. - Weight::from_parts(9_695_000, 0) + // Minimum execution time: 9_619_000 picoseconds. + Weight::from_parts(9_988_000, 0) .saturating_add(T::DbWeight::get().writes(1_u64)) } fn set_token_transfer_fees() -> Weight { // Proof Size summary in bytes: // Measured: `0` // Estimated: `0` - // Minimum execution time: 7_667_000 picoseconds. - Weight::from_parts(7_919_000, 0) + // Minimum execution time: 7_755_000 picoseconds. + Weight::from_parts(8_037_000, 0) } /// Storage: `SnowbridgeSystem::ForeignToNativeId` (r:1 w:1) /// Proof: `SnowbridgeSystem::ForeignToNativeId` (`max_values`: None, `max_size`: Some(650), added: 3125, mode: `MaxEncodedLen`) @@ -94,8 +94,8 @@ impl snowbridge_pallet_system::WeightInfo for WeightInf // Proof Size summary in bytes: // Measured: `75` // Estimated: `4115` - // Minimum execution time: 20_176_000 picoseconds. - Weight::from_parts(20_614_000, 4115) + // Minimum execution time: 20_550_000 picoseconds. + Weight::from_parts(21_197_000, 4115) .saturating_add(T::DbWeight::get().reads(1_u64)) .saturating_add(T::DbWeight::get().writes(2_u64)) } diff --git a/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs b/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs index 129b8ec4..e9a55962 100644 --- a/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs +++ b/operator/runtime/testnet/src/weights/snowbridge_pallet_system_v2.rs @@ -18,7 +18,7 @@ //! Autogenerated weights for `snowbridge_pallet_system_v2` //! //! THIS FILE WAS AUTO-GENERATED USING THE SUBSTRATE BENCHMARK CLI VERSION 51.0.0 -//! DATE: 2026-01-08, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` +//! DATE: 2026-03-28, STEPS: `50`, REPEAT: `20`, LOW RANGE: `[]`, HIGH RANGE: `[]` //! WORST CASE MAP SIZE: `1000000` //! HOSTNAME: `ip-10-0-0-176`, CPU: `Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz` //! WASM-EXECUTION: Compiled, CHAIN: None, DB CACHE: 1024 @@ -50,7 +50,7 @@ #![allow(unused_imports)] use frame_support::{traits::Get, weights::{Weight, constants::RocksDbWeight}}; -use sp_std::marker::PhantomData; +use core::marker::PhantomData; /// Weights for `snowbridge_pallet_system_v2`. pub struct WeightInfo(PhantomData); @@ -69,8 +69,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `81` // Estimated: `4115` - // Minimum execution time: 45_271_000 picoseconds. - Weight::from_parts(46_147_000, 4115) + // Minimum execution time: 45_995_000 picoseconds. + Weight::from_parts(47_099_000, 4115) .saturating_add(T::DbWeight::get().reads(3_u64)) .saturating_add(T::DbWeight::get().writes(5_u64)) } @@ -84,8 +84,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `6` // Estimated: `3601` - // Minimum execution time: 35_499_000 picoseconds. - Weight::from_parts(36_304_000, 3601) + // Minimum execution time: 36_244_000 picoseconds. + Weight::from_parts(37_174_000, 3601) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } @@ -99,8 +99,8 @@ impl snowbridge_pallet_system_v2::WeightInfo for Weight // Proof Size summary in bytes: // Measured: `6` // Estimated: `3601` - // Minimum execution time: 29_941_000 picoseconds. - Weight::from_parts(30_490_000, 3601) + // Minimum execution time: 30_222_000 picoseconds. + Weight::from_parts(30_942_000, 3601) .saturating_add(T::DbWeight::get().reads(2_u64)) .saturating_add(T::DbWeight::get().writes(3_u64)) } diff --git a/operator/runtime/testnet/tests/common.rs b/operator/runtime/testnet/tests/common.rs index b2df06ea..77550995 100644 --- a/operator/runtime/testnet/tests/common.rs +++ b/operator/runtime/testnet/tests/common.rs @@ -168,9 +168,12 @@ impl ExtBuilder { .build_storage() .expect("System pallet builds valid default genesis config"); - pallet_balances::GenesisConfig:: { balances } - .assimilate_storage(&mut t) - .expect("Pallet balances storage can be assimilated"); + pallet_balances::GenesisConfig:: { + balances, + dev_accounts: Default::default(), + } + .assimilate_storage(&mut t) + .expect("Pallet balances storage can be assimilated"); // Set up session keys for validators let session_keys: Vec<_> = validators diff --git a/operator/runtime/testnet/tests/governance/benchmarks.rs b/operator/runtime/testnet/tests/governance/benchmarks.rs index 0bd3b245..2b5629f4 100644 --- a/operator/runtime/testnet/tests/governance/benchmarks.rs +++ b/operator/runtime/testnet/tests/governance/benchmarks.rs @@ -23,6 +23,8 @@ #![cfg(feature = "runtime-benchmarks")] use crate::common::*; +use alloc::vec::Vec; +use core::str::from_utf8; use datahaven_testnet_runtime::{ configs::governance::council::{TechnicalMaxMembers, TechnicalMaxProposals}, governance::TracksInfo, @@ -36,7 +38,6 @@ use frame_support::{ traits::{Get, StorePreimage}, }; use pallet_conviction_voting::{AccountVote, Conviction, Vote}; -use sp_std::vec::Vec; /// Benchmark council proposal creation with varying member counts #[test] @@ -443,29 +444,32 @@ fn benchmark_council_maximum_load() { #[test] fn benchmark_track_operations() { ExtBuilder::governance().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); println!("Testing {} governance tracks", tracks.len()); - for (track_id, track_info) in tracks.iter() { + for track in tracks.iter() { + let track_name = from_utf8(&track.info.name).unwrap(); + let track_name = track_name.trim_end_matches('\0'); let start_block = System::block_number(); // Create proposal for this track let proposal = RuntimeCall::System(frame_system::Call::set_storage { items: vec![( - format!(":track:{}:{}", track_id, track_info.name).into_bytes(), + format!(":track:{}:{}", track.id, track_name).into_bytes(), b"test".to_vec(), )], }); - let proposal_hash = make_proposal_hash(&proposal); assert_ok!(Preimage::note_preimage( RuntimeOrigin::signed(alice()), proposal.encode() )); + let bounded_proposal = ::bound(proposal).unwrap(); + // Map track to appropriate origin - let origin = if *track_id == 0 { + let origin = if track.id == 0 { frame_system::RawOrigin::Root.into() } else { frame_system::RawOrigin::Signed(alice()).into() @@ -474,19 +478,19 @@ fn benchmark_track_operations() { assert_ok!(Referenda::submit( RuntimeOrigin::signed(alice()), Box::new(origin), - DispatchTime::After(track_info.min_enactment_period), - Box::new(proposal_hash.into()) + bounded_proposal, + DispatchTime::After(track.info.min_enactment_period), )); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(bob()), - *track_id as u32 + track.id as u32 )); // Test voting on this track assert_ok!(ConvictionVoting::vote( RuntimeOrigin::signed(charlie()), - *track_id as u32, + track.id as u32, AccountVote::Standard { vote: Vote { aye: true, @@ -500,11 +504,11 @@ fn benchmark_track_operations() { println!( "Track {} ({}): processed in {} blocks (max_deciding: {}, decision_deposit: {})", - track_id, - track_info.name, + track.id, + track_name, end_block - start_block, - track_info.max_deciding, - track_info.decision_deposit + track.info.max_deciding, + track.info.decision_deposit ); } }); diff --git a/operator/runtime/testnet/tests/governance/referenda.rs b/operator/runtime/testnet/tests/governance/referenda.rs index 0ff9c1e6..9625884b 100644 --- a/operator/runtime/testnet/tests/governance/referenda.rs +++ b/operator/runtime/testnet/tests/governance/referenda.rs @@ -21,6 +21,7 @@ use crate::common::*; use codec::Encode; +use core::str::from_utf8; use datahaven_testnet_runtime::{ currency::{HAVE, SUPPLY_FACTOR}, governance::TracksInfo, @@ -42,13 +43,16 @@ use pallet_referenda::{Event as ReferendaEvent, ReferendumInfo}; #[test] fn tracks_info_configured_correctly() { ExtBuilder::default().build().execute_with(|| { - let tracks = TracksInfo::tracks(); + let tracks: Vec<_> = TracksInfo::tracks().collect(); // Should have 6 tracks as configured assert_eq!(tracks.len(), 6); // Verify track IDs and names - let track_names: Vec<&str> = tracks.iter().map(|(_, info)| info.name).collect(); + let track_names: Vec<&str> = tracks + .iter() + .map(|track| from_utf8(&track.info.name).unwrap().trim_end_matches('\0')) + .collect(); assert_eq!( track_names, vec![ @@ -62,16 +66,17 @@ fn tracks_info_configured_correctly() { ); // Verify root track has strictest requirements - let (root_id, root_info) = &tracks[0]; - assert_eq!(*root_id, 0u16); - assert_eq!(root_info.max_deciding, 5); - assert_eq!(root_info.decision_deposit, 100000 * HAVE * SUPPLY_FACTOR); // 100 * KILO_HAVE + assert_eq!(tracks[0].id, 0u16); + assert_eq!(tracks[0].info.max_deciding, 5); + assert_eq!( + tracks[0].info.decision_deposit, + 100000 * HAVE * SUPPLY_FACTOR + ); // 100 * KILO_HAVE // Verify general admin track - let (admin_id, admin_info) = &tracks[2]; - assert_eq!(*admin_id, 2u16); - assert_eq!(admin_info.max_deciding, 10); - assert_eq!(admin_info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); + assert_eq!(tracks[2].id, 2u16); + assert_eq!(tracks[2].info.max_deciding, 10); + assert_eq!(tracks[2].info.decision_deposit, 500 * HAVE * SUPPLY_FACTOR); }); } @@ -225,7 +230,8 @@ fn referendum_timing_works() { )); // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); // Place decision deposit @@ -243,7 +249,8 @@ fn referendum_timing_works() { } // Advance time through decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + 1); // Referendum should still exist (may have timed out) @@ -499,7 +506,8 @@ fn referendum_insufficient_support_fails() { )); // Advance through the entire decision period - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.decision_period + track_info.confirm_period + 1); // Should still be ongoing or rejected due to insufficient support @@ -578,7 +586,8 @@ fn decision_deposit_mechanics_work() { } // Advance time through prepare period (1 DAY for root track) - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track advance_referendum_time(track_info.prepare_period + 1); let alice_balance_before = Balances::free_balance(&alice()); @@ -591,7 +600,8 @@ fn decision_deposit_mechanics_work() { // Alice's balance should decrease by decision deposit let alice_balance_after = Balances::free_balance(&alice()); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track assert_eq!( alice_balance_before - alice_balance_after, track_info.decision_deposit @@ -619,7 +629,8 @@ fn decision_deposit_mechanics_work() { fn track_capacity_limits_enforced() { ExtBuilder::default().build().execute_with(|| { // Use root track which has max_deciding of 5 (more reasonable for testing) - let track_info = &TracksInfo::tracks()[0].1; // root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // root track let max_deciding = track_info.max_deciding.min(5); // Use smaller number for testing // Submit max_deciding referenda (but cap at 5 for scheduler limits) @@ -723,7 +734,8 @@ fn insufficient_balance_for_deposits() { )); // Advance through prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); // Should fail to place decision deposit due to insufficient balance @@ -753,7 +765,8 @@ fn referendum_confirmation_period_works() { DispatchTime::After(10) )); - let track_info = &TracksInfo::tracks()[0].1; // Root track + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; // Root track // Advance through prepare period advance_referendum_time(track_info.prepare_period + 1); @@ -821,7 +834,8 @@ fn split_votes_with_conviction() { )); // Place decision deposit after prepare period - let track_info = &TracksInfo::tracks()[0].1; + let tracks: Vec<_> = TracksInfo::tracks().collect(); + let track_info = &tracks[0].info; advance_referendum_time(track_info.prepare_period + 1); assert_ok!(Referenda::place_decision_deposit( RuntimeOrigin::signed(alice()), diff --git a/operator/runtime/testnet/tests/lib.rs b/operator/runtime/testnet/tests/lib.rs index e97fde3c..6e1eb99f 100644 --- a/operator/runtime/testnet/tests/lib.rs +++ b/operator/runtime/testnet/tests/lib.rs @@ -67,6 +67,7 @@ fn validate_transaction_fails_on_filtered_call() { max_priority_fee_per_gas: Some(sp_core::U256::zero()), nonce: None, access_list: Vec::new(), + authorization_list: Vec::new(), } .into(), ); diff --git a/operator/runtime/testnet/tests/treasury.rs b/operator/runtime/testnet/tests/treasury.rs index 35b3f306..7f5dc514 100644 --- a/operator/runtime/testnet/tests/treasury.rs +++ b/operator/runtime/testnet/tests/treasury.rs @@ -72,6 +72,7 @@ fn author_does_receive_priority_fee() { max_priority_fee_per_gas: Some(U256::from(200 * MILLIHAVE)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -114,6 +115,7 @@ fn total_issuance_after_evm_transaction_with_priority_fee() { max_priority_fee_per_gas: Some(U256::from(BASE_FEE_GENESIS)), nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); @@ -184,6 +186,7 @@ fn total_issuance_after_evm_transaction_without_priority_fee() { max_priority_fee_per_gas: None, nonce: Some(U256::from(0)), access_list: Vec::new(), + authorization_list: Vec::new(), }) .dispatch(::RuntimeOrigin::root())); diff --git a/test/.papi/descriptors/package.json b/test/.papi/descriptors/package.json index 185bc678..b90127de 100644 --- a/test/.papi/descriptors/package.json +++ b/test/.papi/descriptors/package.json @@ -1,5 +1,5 @@ { - "version": "0.1.0-autogenerated.18139584469151706411", + "version": "0.1.0-autogenerated.14138049732278430947", "name": "@polkadot-api/descriptors", "files": [ "dist" diff --git a/test/.papi/metadata/datahaven.scale b/test/.papi/metadata/datahaven.scale index 3f4882b2..5debf5a7 100644 Binary files a/test/.papi/metadata/datahaven.scale and b/test/.papi/metadata/datahaven.scale differ diff --git a/test/cli/handlers/contracts/status.ts b/test/cli/handlers/contracts/status.ts index 3c61e04b..33fde8d2 100644 --- a/test/cli/handlers/contracts/status.ts +++ b/test/cli/handlers/contracts/status.ts @@ -24,7 +24,7 @@ export const showDeploymentPlanAndStatus = async (chain: string, environment?: s "Block Explorer": deploymentParams.blockExplorer, "Genesis Time": new Date(deploymentParams.genesisTime * 1000).toISOString(), "AVS Owner": `${config.avs.avsOwner.slice(0, 10)}...${config.avs.avsOwner.slice(-8)}`, - "Rewards Initiator": `${config.avs.rewardsInitiator.slice(0, 10)}...${config.avs.rewardsInitiator.slice(-8)}` + "Rewards Initiator": `${config.avs.snowbridgeInitiator.slice(0, 10)}...${config.avs.snowbridgeInitiator.slice(-8)}` }; if (environment) { diff --git a/test/contract-bindings/generated.ts b/test/contract-bindings/generated.ts index 16cacad6..e4f66346 100644 --- a/test/contract-bindings/generated.ts +++ b/test/contract-bindings/generated.ts @@ -2149,7 +2149,11 @@ export const dataHavenServiceManagerAbi = [ type: 'function', inputs: [ { name: 'initialOwner', internalType: 'address', type: 'address' }, - { name: '_rewardsInitiator', internalType: 'address', type: 'address' }, + { + name: '_snowbridgeInitiator', + internalType: 'address', + type: 'address', + }, { name: 'validatorsStrategiesAndMultipliers', internalType: 'struct IRewardsCoordinatorTypes.StrategyAndMultiplier[]', @@ -2225,13 +2229,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, - { - type: 'function', - inputs: [], - name: 'rewardsInitiator', - outputs: [{ name: '', internalType: 'address', type: 'address' }], - stateMutability: 'view', - }, { type: 'function', inputs: [ @@ -2253,15 +2250,6 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'payable', }, - { - type: 'function', - inputs: [ - { name: 'newRewardsInitiator', internalType: 'address', type: 'address' }, - ], - name: 'setRewardsInitiator', - outputs: [], - stateMutability: 'nonpayable', - }, { type: 'function', inputs: [ @@ -2275,6 +2263,19 @@ export const dataHavenServiceManagerAbi = [ outputs: [], stateMutability: 'nonpayable', }, + { + type: 'function', + inputs: [ + { + name: 'newSnowbridgeInitiator', + internalType: 'address', + type: 'address', + }, + ], + name: 'setSnowbridgeInitiator', + outputs: [], + stateMutability: 'nonpayable', + }, { type: 'function', inputs: [ @@ -2335,6 +2336,13 @@ export const dataHavenServiceManagerAbi = [ outputs: [{ name: '', internalType: 'address', type: 'address' }], stateMutability: 'view', }, + { + type: 'function', + inputs: [], + name: 'snowbridgeInitiator', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, { type: 'function', inputs: [{ name: '', internalType: 'contract IStrategy', type: 'address' }], @@ -2525,25 +2533,6 @@ export const dataHavenServiceManagerAbi = [ ], name: 'OwnershipTransferred', }, - { - type: 'event', - anonymous: false, - inputs: [ - { - name: 'oldInitiator', - internalType: 'address', - type: 'address', - indexed: true, - }, - { - name: 'newInitiator', - internalType: 'address', - type: 'address', - indexed: true, - }, - ], - name: 'RewardsInitiatorSet', - }, { type: 'event', anonymous: false, @@ -2577,6 +2566,25 @@ export const dataHavenServiceManagerAbi = [ ], name: 'SnowbridgeGatewaySet', }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'oldInitiator', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'newInitiator', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'SnowbridgeInitiatorSet', + }, { type: 'event', anonymous: false, @@ -11040,15 +11048,6 @@ export const readDataHavenServiceManagerOwner = functionName: 'owner', }) -/** - * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"rewardsInitiator"` - */ -export const readDataHavenServiceManagerRewardsInitiator = - /*#__PURE__*/ createReadContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'rewardsInitiator', - }) - /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"rewardsSubmittedForEra"` */ @@ -11067,6 +11066,15 @@ export const readDataHavenServiceManagerSnowbridgeGateway = functionName: 'snowbridgeGateway', }) +/** + * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"snowbridgeInitiator"` + */ +export const readDataHavenServiceManagerSnowbridgeInitiator = + /*#__PURE__*/ createReadContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'snowbridgeInitiator', + }) + /** * Wraps __{@link readContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"strategiesAndMultipliers"` */ @@ -11227,15 +11235,6 @@ export const writeDataHavenServiceManagerSendNewValidatorSetForEra = functionName: 'sendNewValidatorSetForEra', }) -/** - * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsInitiator"` - */ -export const writeDataHavenServiceManagerSetRewardsInitiator = - /*#__PURE__*/ createWriteContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsInitiator', - }) - /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeGateway"` */ @@ -11245,6 +11244,15 @@ export const writeDataHavenServiceManagerSetSnowbridgeGateway = functionName: 'setSnowbridgeGateway', }) +/** + * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeInitiator"` + */ +export const writeDataHavenServiceManagerSetSnowbridgeInitiator = + /*#__PURE__*/ createWriteContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'setSnowbridgeInitiator', + }) + /** * Wraps __{@link writeContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setStrategiesAndMultipliers"` */ @@ -11413,15 +11421,6 @@ export const simulateDataHavenServiceManagerSendNewValidatorSetForEra = functionName: 'sendNewValidatorSetForEra', }) -/** - * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setRewardsInitiator"` - */ -export const simulateDataHavenServiceManagerSetRewardsInitiator = - /*#__PURE__*/ createSimulateContract({ - abi: dataHavenServiceManagerAbi, - functionName: 'setRewardsInitiator', - }) - /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeGateway"` */ @@ -11431,6 +11430,15 @@ export const simulateDataHavenServiceManagerSetSnowbridgeGateway = functionName: 'setSnowbridgeGateway', }) +/** + * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setSnowbridgeInitiator"` + */ +export const simulateDataHavenServiceManagerSetSnowbridgeInitiator = + /*#__PURE__*/ createSimulateContract({ + abi: dataHavenServiceManagerAbi, + functionName: 'setSnowbridgeInitiator', + }) + /** * Wraps __{@link simulateContract}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `functionName` set to `"setStrategiesAndMultipliers"` */ @@ -11545,15 +11553,6 @@ export const watchDataHavenServiceManagerOwnershipTransferredEvent = eventName: 'OwnershipTransferred', }) -/** - * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"RewardsInitiatorSet"` - */ -export const watchDataHavenServiceManagerRewardsInitiatorSetEvent = - /*#__PURE__*/ createWatchContractEvent({ - abi: dataHavenServiceManagerAbi, - eventName: 'RewardsInitiatorSet', - }) - /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"RewardsSubmitted"` */ @@ -11581,6 +11580,15 @@ export const watchDataHavenServiceManagerSnowbridgeGatewaySetEvent = eventName: 'SnowbridgeGatewaySet', }) +/** + * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"SnowbridgeInitiatorSet"` + */ +export const watchDataHavenServiceManagerSnowbridgeInitiatorSetEvent = + /*#__PURE__*/ createWatchContractEvent({ + abi: dataHavenServiceManagerAbi, + eventName: 'SnowbridgeInitiatorSet', + }) + /** * Wraps __{@link watchContractEvent}__ with `abi` set to __{@link dataHavenServiceManagerAbi}__ and `eventName` set to `"SolochainAddressUpdated"` */ diff --git a/test/e2e/suites/rewards-message.test.ts b/test/e2e/suites/rewards-message.test.ts index d76fa97c..7900761e 100644 --- a/test/e2e/suites/rewards-message.test.ts +++ b/test/e2e/suites/rewards-message.test.ts @@ -10,7 +10,7 @@ import { BaseTestSuite } from "../framework"; * Temporary helper to set V2 rewards parameters via sudo. * This is needed until the launcher properly configures these parameters. */ -async function setV2RewardsParameters(dhApi: any) { +async function setV2RewardsParameters(dhApi: any, publicClient: any) { const signer = getEvmEcdsaSigner(SUBSTRATE_FUNDED_ACCOUNTS.ALITH.privateKey); // Get addresses from deployments @@ -21,16 +21,25 @@ async function setV2RewardsParameters(dhApi: any) { const strategyAddress = deployments.DeployedStrategies?.[0]?.address ?? "0x0000000000000000000000000000000000000000"; const serviceManagerAddress = deployments.ServiceManager; + const rewardsCoordinator = await getContractInstance("RewardsCoordinator"); + const rewardsDuration = Number( + await publicClient.readContract({ + address: rewardsCoordinator.address, + abi: rewardsCoordinator.abi, + functionName: "CALCULATION_INTERVAL_SECONDS", + args: [] + }) + ); - // Set RewardsGenesisTimestamp to 1 day ago (aligned to day boundary) to ensure valid rewards periods - const genesisTimestamp = Math.floor((Date.now() / 1000 - 86400) / 86400) * 86400; - + // The window genesis is now a runtime constant. For local e2e we only need to + // match the runtime rewards duration to the locally deployed RewardsCoordinator + // interval so a rewards window can close during CI. logger.debug( "Setting V2 rewards parameters:\n" + ` WHAVETokenAddress=${whaveTokenAddress}\n` + ` StrategyAddress=${strategyAddress}\n` + ` ServiceManagerAddress=${serviceManagerAddress}\n` + - ` RewardsGenesisTimestamp=${genesisTimestamp}` + ` RewardsDuration=${rewardsDuration}` ); // Build sudo calls to set parameters @@ -58,8 +67,8 @@ async function setV2RewardsParameters(dhApi: any) { key_value: { type: "RuntimeConfig", value: { - type: "RewardsGenesisTimestamp", - value: [genesisTimestamp] + type: "RewardsDuration", + value: [rewardsDuration] } } }).decodedCall, @@ -84,6 +93,16 @@ async function setV2RewardsParameters(dhApi: any) { throw new Error("Failed to set V2 rewards parameters"); } + const sudidEvent = result.events.find((e: any) => e.type === "Sudo" && e.value?.type === "Sudid"); + if (!sudidEvent) { + throw new Error("Sudo.Sudid event not found while setting V2 rewards parameters"); + } + + const sudoResult = (sudidEvent.value as any).value.sudo_result; + if (sudoResult.type === "Err") { + throw new Error(`Failed to set V2 rewards parameters: ${JSON.stringify(sudoResult)}`); + } + logger.debug("V2 rewards parameters set successfully"); } @@ -104,7 +123,6 @@ describe("Rewards Message Flow", () => { let publicClient!: any; let dhApi!: any; let eraIndex!: number; - let totalPoints!: bigint; beforeAll(async () => { const connectors = suite.getTestConnectors(); @@ -114,7 +132,7 @@ describe("Rewards Message Flow", () => { serviceManager = await getContractInstance("ServiceManager"); // Set V2 rewards parameters (temporary until launcher configures them) - await setV2RewardsParameters(dhApi); + await setV2RewardsParameters(dhApi, publicClient); }); it("should verify rewards infrastructure deployment", async () => { @@ -123,41 +141,39 @@ describe("Rewards Message Flow", () => { expect(serviceManager.address).toBeDefined(); expect(gateway.address).toBeDefined(); - const rewardsInitiator = (await publicClient.readContract({ + const snowbridgeInitiator = (await publicClient.readContract({ address: serviceManager.address, abi: serviceManager.abi, - functionName: "rewardsInitiator", + functionName: "snowbridgeInitiator", args: [] })) as Address; - // ServiceManager must have a rewardsInitiator configured for EigenLayer rewards submission - expect(rewardsInitiator).toBeDefined(); - logger.debug(`ServiceManager rewardsInitiator: ${rewardsInitiator}`); + // ServiceManager must have a snowbridgeInitiator configured for EigenLayer rewards submission + expect(snowbridgeInitiator).toBeDefined(); + logger.debug(`ServiceManager snowbridgeInitiator: ${snowbridgeInitiator}`); }); - it("should wait for era end and emit RewardsMessageSent", async () => { - // Get current era for event filtering + it("should wait for era end and record reward points", async () => { const currentEra = await dhApi.query.ExternalValidators.ActiveEra.getValue(); - const currentEraIndex = currentEra?.index ?? 0; - logger.debug(`Waiting for RewardsMessageSent for era ${currentEraIndex}`); + eraIndex = currentEra?.index ?? 0; + logger.debug(`Waiting for ExternalValidators.NewEra after era ${eraIndex}`); const payload = await waitForDataHavenEvent({ api: dhApi, - pallet: "ExternalValidatorsRewards", - event: "RewardsMessageSent", - filter: (e) => e.era_index === currentEraIndex, + pallet: "ExternalValidators", + event: "NewEra", + filter: (e) => e.era > eraIndex, timeout: CROSS_CHAIN_TIMEOUTS.DH_TO_ETH_MS }); expect(payload).toBeDefined(); - totalPoints = payload.total_points; - eraIndex = payload.era_index; - expect(totalPoints).toBeGreaterThan(0n); - logger.debug(`RewardsMessageSent received: era=${eraIndex}, totalPoints=${totalPoints}`); + expect(payload.era).toBeGreaterThan(eraIndex); + logger.debug( + `ExternalValidators.NewEra received: previousEra=${eraIndex}, newEra=${payload.era}` + ); }); it("should verify reward points were recorded for the era", async () => { - // Verify reward points were recorded on DataHaven side const rewardPoints = await dhApi.query.ExternalValidatorsRewards.RewardPointsForEra.getValue(eraIndex); expect(rewardPoints).toBeDefined(); diff --git a/test/e2e/suites/slash.test.ts b/test/e2e/suites/slash.test.ts index 7547a84c..3419b007 100644 --- a/test/e2e/suites/slash.test.ts +++ b/test/e2e/suites/slash.test.ts @@ -91,16 +91,16 @@ describe("Should slash an operator", () => { expect(serviceManager.address).toBeDefined(); expect(gateway.address).toBeDefined(); - const rewardsInitiator = (await publicClient.readContract({ + const snowbridgeInitiator = (await publicClient.readContract({ address: serviceManager.address, abi: serviceManager.abi, - functionName: "rewardsInitiator", + functionName: "snowbridgeInitiator", args: [] })) as Address; - // ServiceManager must have a rewardsInitiator configured for EigenLayer rewards submission - expect(rewardsInitiator).toBeDefined(); - logger.info(`ServiceManager rewardsInitiator: ${rewardsInitiator}`); + // ServiceManager must have a snowbridgeInitiator configured for EigenLayer rewards submission + expect(snowbridgeInitiator).toBeDefined(); + logger.info(`ServiceManager snowbridgeInitiator: ${snowbridgeInitiator}`); }); it("Activate slashing", async () => { diff --git a/test/launcher/storagehub-docker.ts b/test/launcher/storagehub-docker.ts index 9cb9c7df..70e972b5 100644 --- a/test/launcher/storagehub-docker.ts +++ b/test/launcher/storagehub-docker.ts @@ -110,24 +110,25 @@ export const getPostgresUrl = (networkId: string): string => { }; /** - * Injects a BCSV ECDSA key into a StorageHub provider node's keystore. - * - * @param containerName - Name of the Docker container - * @param secretKey - The secret key (or private key) we want to add to the node + * Prepares a persistent data volume for a StorageHub provider and seeds its keystore + * before the node starts. Provider nodes can now require `bcsv` on first block import, + * so post-start injection is too late. */ -export const injectStorageHubKey = async ( - containerName: string, +const prepareStorageHubProviderVolume = async ( + volumeName: string, + imageTag: string, secretKey: string ): Promise => { - logger.info(`🔑 Injecting key into ${containerName}...`); + logger.info(`🔑 Preparing provider volume ${volumeName}...`); + + await $`docker volume rm -f ${volumeName}`.nothrow().quiet(); + await $`docker volume create ${volumeName}`.quiet(); - // Use Bun's $ directly with docker exec (no sh -c wrapper needed) - // This properly handles the spaces in the seed phrase try { - await $`docker exec ${containerName} datahaven-node key insert --chain local --key-type bcsv --scheme ecdsa --suri ${secretKey}`; - logger.success("Key injected successfully"); + await $`docker run --rm -v ${volumeName}:/data ${imageTag} key insert --base-path /data --chain local --key-type bcsv --scheme ecdsa --suri ${secretKey}`; + logger.success(`Provider volume ${volumeName} seeded with bcsv key`); } catch (error) { - logger.error(`Failed to inject key : ${error}`); + logger.error(`Failed to seed provider volume ${volumeName}: ${error}`); throw error; } }; @@ -146,8 +147,15 @@ export const launchMspNode = async ( const containerName = `storagehub-msp-${options.networkId}`; const dockerNetworkName = `datahaven-${options.networkId}`; + const dataVolumeName = `${containerName}-data`; const wsPort = 9945; // External port for MSP node + await prepareStorageHubProviderVolume( + dataVolumeName, + options.datahavenImageTag, + SUBSTRATE_FUNDED_ACCOUNTS.CHARLETH.privateKey + ); + const command: string[] = [ "docker", "run", @@ -156,6 +164,8 @@ export const launchMspNode = async ( containerName, "--network", dockerNetworkName, + "-v", + `${dataVolumeName}:/data`, "-p", `${wsPort}:${DEFAULT_SUBSTRATE_WS_PORT}`, options.datahavenImageTag, @@ -193,14 +203,6 @@ export const launchMspNode = async ( await waitForContainerToStart(containerName); - // Inject key - await injectStorageHubKey(containerName, SUBSTRATE_FUNDED_ACCOUNTS.CHARLETH.privateKey); - - // Restart container to load key - logger.info("🔄 Restarting MSP node to load key..."); - await $`docker restart ${containerName}`.nothrow(); - await waitForContainerToStart(containerName); - // Wait for node to be ready logger.info("⌛️ Waiting for MSP node to be ready..."); await waitFor({ @@ -238,8 +240,15 @@ export const launchBspNode = async ( const containerName = `storagehub-bsp-${options.networkId}`; const dockerNetworkName = `datahaven-${options.networkId}`; + const dataVolumeName = `${containerName}-data`; const wsPort = 9946; // External port for BSP node + await prepareStorageHubProviderVolume( + dataVolumeName, + options.datahavenImageTag, + SUBSTRATE_FUNDED_ACCOUNTS.DOROTHY.privateKey + ); + const command: string[] = [ "docker", "run", @@ -248,6 +257,8 @@ export const launchBspNode = async ( containerName, "--network", dockerNetworkName, + "-v", + `${dataVolumeName}:/data`, "-p", `${wsPort}:${DEFAULT_SUBSTRATE_WS_PORT}`, options.datahavenImageTag, @@ -280,14 +291,6 @@ export const launchBspNode = async ( await waitForContainerToStart(containerName); - // Inject key - await injectStorageHubKey(containerName, SUBSTRATE_FUNDED_ACCOUNTS.DOROTHY.privateKey); - - // Restart container to load key - logger.info("🔄 Restarting BSP node to load key..."); - await $`docker restart ${containerName}`.nothrow(); - await waitForContainerToStart(containerName); - // Wait for node to be ready logger.info("⌛️ Waiting for BSP node to be ready..."); await waitFor({ diff --git a/test/moonwall/suites/dev/stagenet/eth-tx/test-eth-tx-types.ts b/test/moonwall/suites/dev/stagenet/eth-tx/test-eth-tx-types.ts index 021bf425..857a0010 100644 --- a/test/moonwall/suites/dev/stagenet/eth-tx/test-eth-tx-types.ts +++ b/test/moonwall/suites/dev/stagenet/eth-tx/test-eth-tx-types.ts @@ -84,9 +84,7 @@ describeSuite({ value, input, accessList, - oddYParity, - r, - s + signature } = extrinsic.asEip2930; expect(chainId.toNumber()).to.equal(DATAHAVEN_CHAIN_ID); expect(nonce.toNumber()).to.equal(currentNonce); @@ -96,11 +94,11 @@ describeSuite({ expect(value.toBigInt()).to.equal(512n); expect(input.toHex()).to.equal("0x"); expect(accessList.toString()).toBe("[]"); - expect(oddYParity.isFalse).to.be.true; - expect(r.toHex()).to.equal( + expect(signature.oddYParity.isFalse).to.be.true; + expect(signature.r.toHex()).to.equal( "0x1a703ae78b4f5bd48b04e848a0e261c195e037f39a4e1e2b2637edfe7bdf5328" ); - expect(s.toHex()).to.equal( + expect(signature.s.toHex()).to.equal( "0x772b2d95acc14739bdd57565a87ce4e51fb7457724e4c42b148c544e4ae3e968" ); } @@ -141,9 +139,7 @@ describeSuite({ value, input, accessList, - oddYParity, - r, - s + signature } = extrinsic.asEip1559; expect(chainId.toNumber()).to.equal(DATAHAVEN_CHAIN_ID); expect(nonce.toNumber()).to.equal(currentNonce); @@ -154,11 +150,11 @@ describeSuite({ expect(value.toBigInt()).to.equal(512n); expect(input.toHex()).to.equal("0x"); expect(accessList.toString()).toBe("[]"); - expect(oddYParity.isFalse).to.be.true; - expect(r.toHex()).to.equal( + expect(signature.oddYParity.isFalse).to.be.true; + expect(signature.r.toHex()).to.equal( "0x07a83a8cea51ecfc21533dbec98de47b37d7f54110395b2b9fd514a9216bb741" ); - expect(s.toHex()).to.equal( + expect(signature.s.toHex()).to.equal( "0x6448665043b9a23baa7d58c3f26c8a291f0db6c38a36a7df21bcc26091f1c5aa" ); } diff --git a/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-overflow.ts b/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-overflow.ts index 90f62346..b29b4f38 100644 --- a/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-overflow.ts +++ b/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-overflow.ts @@ -29,6 +29,7 @@ describeSuite({ 1_000_000_000n, "0", null, + [], [] ) ) diff --git a/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-transfer.ts b/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-transfer.ts index eb597495..e2f5b4a7 100644 --- a/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-transfer.ts +++ b/test/moonwall/suites/dev/stagenet/evm/test-pallet-evm-transfer.ts @@ -32,6 +32,7 @@ describeSuite({ 1_000_000_000n, "0", null, + [], [] ) ) @@ -63,6 +64,7 @@ describeSuite({ 100_000_000_000_000n, "0", null, + [], [] ) ) diff --git a/test/moonwall/suites/dev/stagenet/sudo/test-sudo.ts b/test/moonwall/suites/dev/stagenet/sudo/test-sudo.ts index b134f7cb..161a3e75 100644 --- a/test/moonwall/suites/dev/stagenet/sudo/test-sudo.ts +++ b/test/moonwall/suites/dev/stagenet/sudo/test-sudo.ts @@ -79,11 +79,11 @@ describeSuite({ const account = await context.polkadotJs().query.system.account(CHARLETH_ADDRESS); expect(account.data.free.toBigInt()).toBe(DEFAULT_GENESIS_BALANCE); - expect(result!.events.length === 8).to.be.true; - expect(context.polkadotJs().events.system.NewAccount.is(result!.events[3].event)).to.be + expect(result!.events.length).to.eq(7); + expect(context.polkadotJs().events.system.NewAccount.is(result!.events[2].event)).to.be .true; - expect(context.polkadotJs().events.balances.Endowed.is(result!.events[4].event)).to.be.true; - expect(context.polkadotJs().events.system.ExtrinsicFailed.is(result!.events[7].event)).to.be + expect(context.polkadotJs().events.balances.Endowed.is(result!.events[3].event)).to.be.true; + expect(context.polkadotJs().events.system.ExtrinsicFailed.is(result!.events[6].event)).to.be .true; }, });