From a56378115c22a9a537438439962eab6a35c019f1 Mon Sep 17 00:00:00 2001 From: zjubfd <296179868@qq.com> Date: Mon, 26 Feb 2024 14:50:51 +0800 Subject: [PATCH] feat: implement BEP294 and BEP297 (#436) * feat: implement BEP294 and BEP297 (#404) * feat: implement BEP294 * feat: add BSCGovernor and GovToken contracts for bc-fusion (#403) * feat: implement BEP294 --------- Co-authored-by: Ethan * feat: implement BEP299 (#391) * chore: add init lock amount (#425) * chore: add init lock amount * add annotations * more comment --------- Co-authored-by: zjubfd <296179868@qq.com> * chore: add redelegate fee (#426) * feat: add comments and pause for governor (#428) * chore: fix typo and update scripts (#429) * feat: add apy and reward record of validators (#430) * feat: add apy and reward record of validators * fix review comments * feat: add ci to bc-fusion contracts and lint code (#431) * feat: add ci and add lint check script * chore: lint code in BC_fusion * chore: add bc-fusion branch to ci * fix: test error in SlashIndicator.t.sol * feat: add python script (#433) * chore: fix typo * feat: add python script * fix review comments * fix review comments * chore: fix bugs and add annotation for error msgs * fix: init params error in BSCGovernor (#439) * chore: update storages and generate.py (#440) * chore: disable editing moniker (#442) * fix: update slash logic to avoid malicious slash (#444) * chore: add check for moniker and update script (#445) * chore: ensure burnRatio plus systemRewardRatio not greater than 100% (#446) * fix: ensure validator incoming will be clear after distribution (#447) * chore: add view function and update annotations (#448) * fix: recover sig failed in token recover portal (#451) * fix: token recover contract recover approval sig * docs: update abi * fix: add generate option to tokenhub * fix: lint * fix: `felonySlashScope` not initialized (#452) * fix: resolve review comments (#454) * fix: resolve review comments * add check to `_jailValidator` * fix lint issue * fix review comments * fix: audit report (#455) * feat: add whenNotPaused for queue in BSCGovernor (#456) * feat: add whenNotPaused for queue in BSCGovernor * chores: lint code * feat: add comments * fix: lint * feat: add `handleSynPackage` to `StakeHub` (#457) * feat: add `handleSynPackage` to `StakeHub` * fix lint issue * fix review comments * fix unit tests * remove `delegateVotingPower` from `StakeMigrationPackage` * fix review comments * update annotations * feat: add comment for governorProtector (#460) * feat: add comment for governorProtector * feat: add comment for assetProtector * chore: revert transaction when delegator in blacklist (#461) * chore: add `tmpValidatorSetUpdated` event (#462) * fix: sync govToken in `_doMigration` (#463) * fix: add `isAutoUndelegate` for auto `DistributeUndelegatedSynPackage` (#464) * fix: add `isAutoUndelegate` for auto `DistributeUndelegatedSynPackage` * add annotation * chore: fix issues from audit report (#465) * chore: fix issues from audit report * fix unit tests * feat: deprecate `transferOut` in `TokenHub` (#466) * feat: deprecate `transferOut` in `TokenHub` * fix review comments * fix: wrong jail time in `_checkValidatorSelfDelegation` (#471) * feat: add `whenNotPaused` to slash functions (#472) * chore: add annotation (#474) * chore: add annotation * chore: add annotation * fix: disable burn in GovToken (#473) * fix: disable burn in GovToken contract * chores: add comments * fix: check approval address is not 0x0 (#476) * feat: emit NotBoundToken event (#479) * feat: emit NotBoundToken event * chore: add comments * chore: update contracts init params to be consistent with mainnet setting (#480) * docs: update tokenhub abi (#482) * fix: add upper limit for some params (#481) * fix: add upper limit for some params * fix lint issue * chore: fix review comments (#483) * chore: fix audit issues (#485) * chore: fix audit issues * fix review comments * fix review comments * fix review comments * chore: refactor codes (#486) * chore: refactor codes * fix review comments * fmt script * chore: fix review comments (#489) * fix: wrong flags passed in generate:dev (#490) * feat: add governor test (#491) * feat: add governor test * fix: rebase interface for stakeHub in latest bc-fusion * fix test cases * rename modifier name --------- Co-authored-by: Roshan * test: add unit-test for TokenRecoverPortal (#492) * fix report 8 issue 1 * fix report 8 issue 2 * fix report 9 issue 2 * fix report 9 issue 4 * fix report 9 issue 7 * fix ToB report issue 5 * fix ToB report issue 1 * test: add failed cases to TokenRecoverPortal unit-test (#495) * test: add failed cases to token recover portal ut * chore: emit owner address after TokenRecoverRequested * docs: update token recover portal abi (#498) * fix review comments * fix lint issue * fix: improve the code readablity (#499) * fix: improve the code readablity * fix: change the wrong comment * fix: add check in `_forceMaintainingValidatorsExit` (#500) * fix: add check in `_forceMaintainingValidatorsExit` * add `latestConsensusAddress` * chore: update npm script (#501) * chore: update generate script * change default `SOURCE_CHAIN_ID` in `TokenRecoverPortal` * update testnet asset protector address * update testnet INIT_VOTING_DELAY * fix ut * feat: add more tests for governor (#502) * feat: remove whitelist check while propose, move the check to queue and execute (#503) * fix: add check to make sure there is at least one validator in `_forceMaintainingValidatorsExit` (#504) * fix: add check to make sure there is at least one validator in `_forceMaintainingValidatorsExit` * optimize code * fix: add empty address check and clear state before extracall (#507) * chore: update tokenrecoverportal.abi (#508) * chore: update testnet legacy address bytes (#509) --------- Co-authored-by: Roshan <48975233+Pythonberg1997@users.noreply.github.com> Co-authored-by: Ethan Co-authored-by: dylanhuang Co-authored-by: Roshan Co-authored-by: buddho --- .env.example | 2 + .github/PULL_REQUEST_TEMPLATE.md | 17 + .github/workflows/lint-pr.yml | 30 + .github/workflows/unit-test.yml | 59 + .gitignore | 2 + README.md | 25 +- abi/README.md | 10 +- abi/bscgovernor.abi | 1942 ++++++++++++++++ abi/bsctimelock.abi | 1001 +++++++++ abi/bscvalidatorset.abi | 1762 ++++++++------- abi/crosschain.abi | 1247 ++++++----- abi/govhub.abi | 462 ++-- abi/govtoken.abi | 901 ++++++++ abi/relayerhub.abi | 582 +++-- abi/relayerincentivize.abi | 707 +++--- abi/slashindicator.abi | 838 ++++--- abi/stakecredit.abi | 860 +++++++ abi/stakehub.abi | 1812 +++++++++++++++ abi/staking.abi | 1587 ++++++------- abi/systemreward.abi | 501 +++-- abi/tendermintlightclient.abi | 650 +++--- abi/tokenhub.abi | 1555 +++++++------ abi/tokenmanager.abi | 1048 +++++---- abi/tokenrecoverportal.abi | 490 ++++ contracts/BC_fusion/BSCGovernor.sol | 323 +++ contracts/BC_fusion/BSCTimelock.sol | 42 + contracts/BC_fusion/GovToken.sol | 122 + contracts/BC_fusion/StakeCredit.sol | 346 +++ contracts/BC_fusion/StakeHub.sol | 1186 ++++++++++ contracts/BC_fusion/System.sol | 87 + contracts/BC_fusion/TokenRecoverPortal.sol | 275 +++ contracts/BC_fusion/extension/Protectable.sol | 105 + .../BC_fusion/interface/IBSCValidatorSet.sol | 7 + contracts/BC_fusion/interface/ICrossChain.sol | 6 + contracts/BC_fusion/interface/IGovToken.sol | 9 + .../BC_fusion/interface/IStakeCredit.sol | 20 + contracts/BC_fusion/interface/IStakeHub.sol | 10 + contracts/BC_fusion/interface/ITokenHub.sol | 8 + .../interface/ITokenRecoverPortal.sol | 25 + contracts/BC_fusion/lib/RLPDecode.sol | 283 +++ contracts/BC_fusion/lib/Utils.sol | 55 + contracts/BSCValidatorSet.sol | 396 +++- contracts/CrossChain.sol | 2 +- contracts/GovHub.sol | 9 +- contracts/SlashIndicator.sol | 149 +- contracts/Staking.sol | 81 +- contracts/System.sol | 24 +- contracts/SystemReward.sol | 17 +- contracts/TendermintLightClient.sol | 9 +- contracts/TokenHub.sol | 126 +- contracts/TokenManager.sol | 2 - contracts/interface/IBSCValidatorSet.sol | 2 +- contracts/interface/ISlashIndicator.sol | 1 + contracts/interface/IStakeHub.sol | 14 + contracts/interface/ISystemReward.sol | 1 - contracts/interface/ITokenHub.sol | 4 + contracts/mock/MockTokenHub.sol | 11 + contracts/test/ABCToken.sol | 248 -- contracts/test/DEFToken.sol | 248 -- contracts/test/MaliciousToken.sol | 242 -- contracts/test/MiniToken.sol | 248 -- contracts/test/XYZToken.sol | 298 --- flatten.sh | 11 - foundry.toml | 10 +- genesis-template.json | 25 + genesis.json | 23 +- lib/Deployer.sol | 161 -- lib/interface/IDEFToken.sol | 26 - lib/interface/IMaliciousToken.sol | 26 - lib/interface/IMiniToken.sol | 26 - lib/interface/IXYZToken.sol | 28 - package-lock.json | 33 +- package.json | 10 +- poetry.lock | 1787 +++++++++++++++ pyproject.toml | 18 + scripts/BLSkeystore.json | 45 - scripts/flatten.sh | 17 + scripts/generate-crossChain.sh | 31 - scripts/generate-genesis.js | 8 +- scripts/generate-initHolders.js | 29 - scripts/generate-relayerHub.sh | 60 - scripts/generate-relayerIncentivize.sh | 55 - scripts/generate-slashIndicator.sh | 31 - scripts/generate-system.sh | 25 - scripts/generate-systemReward.sh | 35 - scripts/generate-tendermintLightClient.sh | 44 - scripts/generate-tokenHub.sh | 43 - scripts/generate-validator.js | 38 - scripts/generate-validatorSet.sh | 54 - scripts/generate.py | 605 +++++ scripts/generate.sh | 76 - scripts/init_holders.template | 8 +- scripts/validators.js | 4 +- scripts/validators.template | 2 - test/GovHub.t.sol | 353 ++- test/Governor.t.sol | 520 +++++ test/RelayerHub.t.sol | 278 ++- test/RelayerIncentivize.t.sol | 437 ++-- test/SlashIndicator.t.sol | 613 ++--- test/StakeHub.t.sol | 643 ++++++ test/Staking.t.sol | 924 ++++---- test/SystemReward.t.sol | 112 +- test/TendermintLightClient.t.sol | 24 +- test/TokenHub.t.sol | 1993 +++++++++-------- test/TokenRecoverPortal.t.sol | 317 +++ test/ValidatorSet.t.sol | 1130 +++++----- test/ValidatorSetTool.t.sol | 29 +- test/utils/Deployer.sol | 226 ++ {lib => test/utils}/RLPDecode.sol | 126 +- {lib => test/utils}/RLPEncode.sol | 101 +- test/utils/interface/IBSCGovernor.sol | 224 ++ test/utils/interface/IBSCTimelock.sol | 108 + .../utils}/interface/IBSCValidatorSet.sol | 37 +- .../utils}/interface/IBSCValidatorSetTool.sol | 1 + {lib => test/utils}/interface/ICrossChain.sol | 57 +- {lib => test/utils}/interface/IGovHub.sol | 9 + test/utils/interface/IGovToken.sol | 80 + {lib => test/utils}/interface/IRelayerHub.sol | 23 +- .../utils}/interface/IRelayerIncentivize.sol | 23 +- .../utils}/interface/ISlashIndicator.sol | 34 +- test/utils/interface/IStakeCredit.sol | 71 + test/utils/interface/IStakeHub.sol | 182 ++ {lib => test/utils}/interface/IStaking.sol | 23 +- {lib => test/utils}/interface/ISystem.sol | 8 + .../utils}/interface/ISystemReward.sol | 16 +- .../interface/ITendermintLightClient.sol | 12 +- .../utils/interface/ITestToken.sol | 12 +- {lib => test/utils}/interface/ITokenHub.sol | 50 +- .../utils}/interface/ITokenManager.sol | 8 + test/utils/interface/ITokenRecoverPortal.sol | 57 + test/utils/test_token/ABCToken.sol | 248 ++ test/utils/test_token/DEFToken.sol | 248 ++ test/utils/test_token/MaliciousToken.sol | 242 ++ test/utils/test_token/MiniToken.sol | 248 ++ test/utils/test_token/XYZToken.sol | 297 +++ 135 files changed, 26463 insertions(+), 10206 deletions(-) create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/lint-pr.yml create mode 100644 .github/workflows/unit-test.yml create mode 100644 abi/bscgovernor.abi create mode 100644 abi/bsctimelock.abi create mode 100644 abi/govtoken.abi create mode 100644 abi/stakecredit.abi create mode 100644 abi/stakehub.abi create mode 100644 abi/tokenrecoverportal.abi create mode 100644 contracts/BC_fusion/BSCGovernor.sol create mode 100644 contracts/BC_fusion/BSCTimelock.sol create mode 100644 contracts/BC_fusion/GovToken.sol create mode 100644 contracts/BC_fusion/StakeCredit.sol create mode 100644 contracts/BC_fusion/StakeHub.sol create mode 100644 contracts/BC_fusion/System.sol create mode 100644 contracts/BC_fusion/TokenRecoverPortal.sol create mode 100644 contracts/BC_fusion/extension/Protectable.sol create mode 100644 contracts/BC_fusion/interface/IBSCValidatorSet.sol create mode 100644 contracts/BC_fusion/interface/ICrossChain.sol create mode 100644 contracts/BC_fusion/interface/IGovToken.sol create mode 100644 contracts/BC_fusion/interface/IStakeCredit.sol create mode 100644 contracts/BC_fusion/interface/IStakeHub.sol create mode 100644 contracts/BC_fusion/interface/ITokenHub.sol create mode 100644 contracts/BC_fusion/interface/ITokenRecoverPortal.sol create mode 100644 contracts/BC_fusion/lib/RLPDecode.sol create mode 100644 contracts/BC_fusion/lib/Utils.sol create mode 100644 contracts/interface/IStakeHub.sol delete mode 100644 contracts/test/ABCToken.sol delete mode 100644 contracts/test/DEFToken.sol delete mode 100644 contracts/test/MaliciousToken.sol delete mode 100644 contracts/test/MiniToken.sol delete mode 100644 contracts/test/XYZToken.sol delete mode 100644 flatten.sh delete mode 100644 lib/Deployer.sol delete mode 100644 lib/interface/IDEFToken.sol delete mode 100644 lib/interface/IMaliciousToken.sol delete mode 100644 lib/interface/IMiniToken.sol delete mode 100644 lib/interface/IXYZToken.sol create mode 100644 poetry.lock create mode 100644 pyproject.toml delete mode 100644 scripts/BLSkeystore.json create mode 100644 scripts/flatten.sh delete mode 100644 scripts/generate-crossChain.sh delete mode 100644 scripts/generate-initHolders.js delete mode 100644 scripts/generate-relayerHub.sh delete mode 100644 scripts/generate-relayerIncentivize.sh delete mode 100644 scripts/generate-slashIndicator.sh delete mode 100644 scripts/generate-system.sh delete mode 100644 scripts/generate-systemReward.sh delete mode 100644 scripts/generate-tendermintLightClient.sh delete mode 100644 scripts/generate-tokenHub.sh delete mode 100644 scripts/generate-validator.js delete mode 100644 scripts/generate-validatorSet.sh create mode 100644 scripts/generate.py delete mode 100644 scripts/generate.sh create mode 100644 test/Governor.t.sol create mode 100644 test/StakeHub.t.sol create mode 100644 test/TokenRecoverPortal.t.sol create mode 100644 test/utils/Deployer.sol rename {lib => test/utils}/RLPDecode.sol (70%) rename {lib => test/utils}/RLPEncode.sol (63%) create mode 100644 test/utils/interface/IBSCGovernor.sol create mode 100644 test/utils/interface/IBSCTimelock.sol rename {lib => test/utils}/interface/IBSCValidatorSet.sol (78%) rename {lib => test/utils}/interface/IBSCValidatorSetTool.sol (88%) rename {lib => test/utils}/interface/ICrossChain.sol (67%) rename {lib => test/utils}/interface/IGovHub.sol (77%) create mode 100644 test/utils/interface/IGovToken.sol rename {lib => test/utils}/interface/IRelayerHub.sol (82%) rename {lib => test/utils}/interface/IRelayerIncentivize.sol (82%) rename {lib => test/utils}/interface/ISlashIndicator.sol (73%) create mode 100644 test/utils/interface/IStakeCredit.sol create mode 100644 test/utils/interface/IStakeHub.sol rename {lib => test/utils}/interface/IStaking.sol (87%) rename {lib => test/utils}/interface/ISystem.sol (74%) rename {lib => test/utils}/interface/ISystemReward.sol (76%) rename {lib => test/utils}/interface/ITendermintLightClient.sol (83%) rename lib/interface/IABCToken.sol => test/utils/interface/ITestToken.sol (55%) rename {lib => test/utils}/interface/ITokenHub.sol (65%) rename {lib => test/utils}/interface/ITokenManager.sol (91%) create mode 100644 test/utils/interface/ITokenRecoverPortal.sol create mode 100644 test/utils/test_token/ABCToken.sol create mode 100644 test/utils/test_token/DEFToken.sol create mode 100644 test/utils/test_token/MaliciousToken.sol create mode 100644 test/utils/test_token/MiniToken.sol create mode 100644 test/utils/test_token/XYZToken.sol diff --git a/.env.example b/.env.example index 0adf5e0e..1497afec 100644 --- a/.env.example +++ b/.env.example @@ -1,2 +1,4 @@ +RPC_BSC=https://bsc-dataseed1.ninicoin.io + UNLOCK_RECEIVER= OPERATOR_PRIVATE_KEY= diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..d9bdc912 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,17 @@ +### Description + +add a description of your changes here... + +### Rationale + +tell us why we need these changes... + +### Example + +add an example CLI or API response... + +### Changes + +Notable changes: +* add each change in a bullet point here +* ... \ No newline at end of file diff --git a/.github/workflows/lint-pr.yml b/.github/workflows/lint-pr.yml new file mode 100644 index 00000000..7b92cf9c --- /dev/null +++ b/.github/workflows/lint-pr.yml @@ -0,0 +1,30 @@ +name: "Lint PR" + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v4.5.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + types: | + feat + fix + docs + style + refactor + perf + test + build + ci + chore + revert + release diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml new file mode 100644 index 00000000..3b90170b --- /dev/null +++ b/.github/workflows/unit-test.yml @@ -0,0 +1,59 @@ +name: Unit Test +on: + push: + branches: + - master + - develop + - bc-fusion + pull_request: + branches: + - master + - develop + - bc-fusion +permissions: + contents: read + # Optional: allow read access to pull request. Use with `only-new-issues` option. + # pull-requests: read +jobs: + unit-test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + - name: Get yarn cache directory path + id: yarn-cache-dir-path + run: echo "::set-output name=dir::$(yarn cache dir)" + - uses: actions/cache@v1 + id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) + with: + path: ${{ steps.yarn-cache-dir-path.outputs.dir }} + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + + - name: Install Project Dependencies + run: | + npm install + forge install --no-git --no-commit foundry-rs/forge-std@v1.7.3 + + - name: Lint Check + run: | + npm run lint:check + + - name: Build + run: | + forge build + + - name: Start Local Chain + run: | + npm install pm2 -g + pm2 start --name local-chain "anvil -f https://bsc-dataseed1.ninicoin.io" + sleep 5 + env: + PORT: 8545 + + - name: Unit Test + run: | + forge test --rpc-url http://127.0.0.1:8545 diff --git a/.gitignore b/.gitignore index 2dfe4479..bc7b3bb0 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ out/ pids/ logs/ cache/ +broadcast/ contracts/flattened/*.sol @@ -12,3 +13,4 @@ contracts/flattened/*.sol lib/forge-std/ .env +**/.bak diff --git a/README.md b/README.md index de838a84..4cabd94b 100644 --- a/README.md +++ b/README.md @@ -13,13 +13,14 @@ Install foundry: ```shell script curl -L https://foundry.paradigm.xyz | bash foundryup -forge install --no-git --no-commit foundry-rs/forge-std@v1.1.1 +forge install --no-git --no-commit foundry-rs/forge-std@v1.7.3 ``` -Please make sure your dependency version is as follows: - -Node: v12.18.3 - +Install poetry: +```shell script +curl -sSL https://install.python-poetry.org | python3 - +poetry install +``` Tips: You can manage multi version of Node: ```Shell @@ -46,7 +47,7 @@ forge test ## Flatten all system contracts ```shell script -bash flatten.sh +bash scripts/flatten.sh ``` All system contracts will be flattened and output into `${workspace}/contracts/flattened/`. @@ -55,18 +56,18 @@ All system contracts will be flattened and output into `${workspace}/contracts/f 1. Edit `init_holders.js` file to alloc the initial BNB holder. 2. Edit `validators.js` file to alloc the initial validator set. -3. Run `bash scripts/generate-*.sh` to change system contracts setting. +3. Edit system contracts setting as needed. 4. Run `node scripts/generate-genesis.js` will generate genesis.json -## How to generate mainnet/testnet/QA genesis file +## How to generate mainnet/testnet/dev genesis file ```shell -bash scripts/generate.sh mainnet -bash scripts/generate.sh testnet -bash scripts/generate.sh QA -bash scripts/generate.sh local +poetry run python -m scripts.generate ${network} ``` Check the `genesis.json` file, and you can get the exact compiled bytecode for different network. +(`poetry run python -m scripts.generate --help ` for more details) + +You can refer to `generate:dev` in `package.json` for more details about how to custom params for local dev-net. ## How to update contract interface for test diff --git a/abi/README.md b/abi/README.md index dbbf341d..cd065a3b 100644 --- a/abi/README.md +++ b/abi/README.md @@ -1,7 +1,7 @@ # ABI Files for Build-In System Contracts | Contract Name | Address | ABI file name | -|-----------------------|--------------------------------------------|----------------------------------------------------| +| --------------------- | ------------------------------------------ | -------------------------------------------------- | | BSCValidatorSet | 0x0000000000000000000000000000000000001000 | [bscvalidatorset](bscvalidatorset.abi) | | SlashIndicator | 0x0000000000000000000000000000000000001001 | [slashindicator](slashindicator.abi) | | SystemReward | 0x0000000000000000000000000000000000001002 | [systemreward](systemreward.abi) | @@ -12,4 +12,10 @@ | GovHub | 0x0000000000000000000000000000000000001007 | [govhub](govhub.abi) | | TokenManager | 0x0000000000000000000000000000000000001008 | [tokenmanager](tokenmanager.abi) | | CrossChain | 0x0000000000000000000000000000000000002000 | [crosschain](crosschain.abi) | -| Staking | 0x0000000000000000000000000000000000002001 | [staking](staking.abi) | \ No newline at end of file +| Staking | 0x0000000000000000000000000000000000002001 | [staking](staking.abi) | +| StakeHub | 0x0000000000000000000000000000000000002002 | [stakehub](staking.abi) | +| StakeCredit | 0x0000000000000000000000000000000000002003 | [stakecredit](stakecredit.abi) | +| BSCGovernor | 0x0000000000000000000000000000000000002004 | [bscgovernor](bscgovernor.abi) | +| GovToken | 0x0000000000000000000000000000000000002005 | [govtoken](govtoken.abi) | +| BSCTimelock | 0x0000000000000000000000000000000000002006 | [bsctimelock](bsctimelock.abi) | +| TokenRecoverPortal | 0x0000000000000000000000000000000000003000 | [tokenrecoverportal](tokenrecoverportal.abi) | diff --git a/abi/bscgovernor.abi b/abi/bscgovernor.abi new file mode 100644 index 00000000..601cb50a --- /dev/null +++ b/abi/bscgovernor.abi @@ -0,0 +1,1942 @@ +[ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BALLOT_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "COUNTING_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "EXTENDED_BALLOT_TYPEHASH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STAKING_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addToBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "blackList", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancel", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "cancel", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "descriptionHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "castVote", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "castVoteBySig", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "castVoteWithReason", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "reason", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "castVoteWithReasonAndParams", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "reason", + "type": "string", + "internalType": "string" + }, + { + "name": "params", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "castVoteWithReasonAndParamsBySig", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "reason", + "type": "string", + "internalType": "string" + }, + { + "name": "params", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "descriptionHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "getActions", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "signatures", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getReceipt", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "voter", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IGovernorCompatibilityBravoUpgradeable.Receipt", + "components": [ + { + "name": "hasVoted", + "type": "bool", + "internalType": "bool" + }, + { + "name": "support", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "votes", + "type": "uint96", + "internalType": "uint96" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotesWithParams", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "params", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hasVoted", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hashProposal", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "descriptionHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "lateQuorumVoteExtension", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestProposalIds", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onERC1155BatchReceived", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onERC1155Received", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onERC721Received", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proposalDeadline", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proposalEta", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proposalProposer", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proposalSnapshot", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proposalThreshold", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proposals", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "id", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "proposer", + "type": "address", + "internalType": "address" + }, + { + "name": "eta", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "startBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "endBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "forVotes", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "againstVotes", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "abstainVotes", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "canceled", + "type": "bool", + "internalType": "bool" + }, + { + "name": "executed", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "propose", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "description", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "propose", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "signatures", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "description", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "proposeStarted", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "queue", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "descriptionHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "queue", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "quorum", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quorumDenominator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quorumNumerator", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quorumNumerator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "quorumVotes", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "relay", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "removeFromBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resume", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setLateQuorumVoteExtension", + "inputs": [ + { + "name": "newVoteExtension", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setProposalThreshold", + "inputs": [ + { + "name": "newProposalThreshold", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setVotingDelay", + "inputs": [ + { + "name": "newVotingDelay", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setVotingPeriod", + "inputs": [ + { + "name": "newVotingPeriod", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "state", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum IGovernorUpgradeable.ProposalState" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "timelock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "token", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC5805Upgradeable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateQuorumNumerator", + "inputs": [ + { + "name": "newQuorumNumerator", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateTimelock", + "inputs": [ + { + "name": "newTimelock", + "type": "address", + "internalType": "contract TimelockControllerUpgradeable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "votingDelay", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "votingPeriod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "whitelistTargets", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LateQuorumVoteExtensionSet", + "inputs": [ + { + "name": "oldVoteExtension", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "newVoteExtension", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "ProposalCanceled", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProposalCreated", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "proposer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "targets", + "type": "address[]", + "indexed": false, + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "indexed": false, + "internalType": "uint256[]" + }, + { + "name": "signatures", + "type": "string[]", + "indexed": false, + "internalType": "string[]" + }, + { + "name": "calldatas", + "type": "bytes[]", + "indexed": false, + "internalType": "bytes[]" + }, + { + "name": "voteStart", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "voteEnd", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "description", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProposalExecuted", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProposalExtended", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "extendedDeadline", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProposalQueued", + "inputs": [ + { + "name": "proposalId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "eta", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProposalThresholdSet", + "inputs": [ + { + "name": "oldProposalThreshold", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newProposalThreshold", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ProtectorChanged", + "inputs": [ + { + "name": "oldProtector", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newProtector", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "QuorumNumeratorUpdated", + "inputs": [ + { + "name": "oldQuorumNumerator", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newQuorumNumerator", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Resumed", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "TimelockChange", + "inputs": [ + { + "name": "oldTimelock", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newTimelock", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UnBlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "VoteCast", + "inputs": [ + { + "name": "voter", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "proposalId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "weight", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "VoteCastWithParams", + "inputs": [ + { + "name": "voter", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "proposalId", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "support", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "weight", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "params", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "VotingDelaySet", + "inputs": [ + { + "name": "oldVotingDelay", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newVotingDelay", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "VotingPeriodSet", + "inputs": [ + { + "name": "oldVotingPeriod", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newVotingPeriod", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AlreadyPaused", + "inputs": [] + }, + { + "type": "error", + "name": "Empty", + "inputs": [] + }, + { + "type": "error", + "name": "InBlackList", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "NotWhitelisted", + "inputs": [] + }, + { + "type": "error", + "name": "OneLiveProposalPerProposer", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyProtector", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "TotalSupplyNotEnough", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + } +] \ No newline at end of file diff --git a/abi/bsctimelock.abi b/abi/bsctimelock.abi new file mode 100644 index 00000000..0707eefc --- /dev/null +++ b/abi/bsctimelock.abi @@ -0,0 +1,1001 @@ +[ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "CANCELLER_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "EXECUTOR_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PROPOSER_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STAKING_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "TIMELOCK_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancel", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "execute", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "payload", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "predecessor", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "executeBatch", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "payloads", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "predecessor", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "getMinDelay", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTimestamp", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "hashOperation", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "predecessor", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "hashOperationBatch", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "payloads", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "predecessor", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isOperation", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isOperationDone", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isOperationPending", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isOperationReady", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "onERC1155BatchReceived", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onERC1155Received", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "onERC721Received", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "schedule", + "inputs": [ + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "predecessor", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "delay", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "scheduleBatch", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "values", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "payloads", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "predecessor", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "delay", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "updateDelay", + "inputs": [ + { + "name": "newDelay", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "CallExecuted", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "index", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "target", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CallSalt", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "salt", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CallScheduled", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "index", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "target", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "predecessor", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "delay", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Cancelled", + "inputs": [ + { + "name": "id", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MinDelayChange", + "inputs": [ + { + "name": "oldDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newDuration", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + } +] \ No newline at end of file diff --git a/abi/bscvalidatorset.abi b/abi/bscvalidatorset.abi index 207effaf..9c9c265e 100644 --- a/abi/bscvalidatorset.abi +++ b/abi/bscvalidatorset.abi @@ -1,1451 +1,1687 @@ [ { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "batchTransfer", - "type": "event" + "type": "receive", + "stateMutability": "payable" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "reason", - "type": "string" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "batchTransferFailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "reason", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "batchTransferLowerFailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "BLOCK_FEES_RATIO_SCALE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "deprecatedDeposit", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "BURN_ADDRESS", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "deprecatedFinalityRewardDeposit", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address payable", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "directTransfer", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address payable", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "directTransferFail", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "CROSS_STAKE_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "failReasonWithStr", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "DUSTY_INCOMING", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "feeBurned", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "EPOCH", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "finalityRewardDeposit", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "ERROR_FAIL_CHECK_VALIDATORS", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "ERROR_FAIL_DECODE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "systemTransfer", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, + "type": "function", + "name": "ERROR_LEN_OF_VAL_MISMATCH", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "msgBytes", - "type": "bytes" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "unexpectedPackage", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "ERROR_RELAYFEE_TOO_LARGE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "validatorDeposit", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "ERROR_UNKNOWN_PACKAGE_TYPE", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "validatorEmptyJailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "EXPIRE_TIME_SECOND_GAP", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "validatorEnterMaintenance", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "GOVERNOR_ADDR", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "validatorExitMaintenance", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "GOV_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "validatorFelony", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "GOV_HUB_ADDR", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "validatorJailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "GOV_TOKEN_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "validatorMisdemeanor", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "validatorSetUpdated", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_BURN_RATIO", "inputs": [], - "name": "BURN_ADDRESS", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_MAINTAIN_SLASH_SCALE", "inputs": [], - "name": "BURN_RATIO_SCALE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_MAX_NUM_OF_MAINTAINING", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_NUM_OF_CABINETS", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_SYSTEM_REWARD_RATIO", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_VALIDATORSET_BYTES", "inputs": [], - "name": "DUSTY_INCOMING", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "JAIL_MESSAGE_TYPE", "inputs": [], - "name": "EPOCH", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "ERROR_FAIL_CHECK_VALIDATORS", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_NUM_OF_VALIDATORS", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_SYSTEM_REWARD_BALANCE", "inputs": [], - "name": "ERROR_LEN_OF_VAL_MISMATCH", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "PRECISION", "inputs": [], - "name": "ERROR_RELAYFEE_TOO_LARGE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "ERROR_UNKNOWN_PACKAGE_TYPE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "EXPIRE_TIME_SECOND_GAP", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "INIT_BURN_RATIO", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "INIT_FINALITY_REWARD_RATIO", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "INIT_MAINTAIN_SLASH_SCALE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "INIT_MAX_NUM_OF_MAINTAINING", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "INIT_NUM_OF_CABINETS", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "INIT_VALIDATORSET_BYTES", "outputs": [ { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "JAIL_MESSAGE_TYPE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], - "name": "MAX_NUM_OF_VALIDATORS", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATORS_UPDATE_MESSAGE_TYPE", "inputs": [], - "name": "PRECISION", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATOR_CONTRACT_ADDR", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "alreadyInit", "inputs": [], - "name": "SLASH_CHANNELID", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SLASH_CONTRACT_ADDR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_CHANNELID", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_CONTRACT_ADDR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "SYSTEM_REWARD_ADDR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "TOKEN_MANAGER_ADDR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TRANSFER_IN_CHANNELID", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VALIDATORS_UPDATE_MESSAGE_TYPE", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VALIDATOR_CONTRACT_ADDR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "alreadyInit", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "burnRatio", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "burnRatioInitialized", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "canEnterMaintenance", "inputs": [ { - "internalType": "uint256", "name": "index", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "canEnterMaintenance", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "currentValidatorSet", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "currentValidatorSet", "outputs": [ { - "internalType": "address", "name": "consensusAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address payable", "name": "feeAddress", - "type": "address" + "type": "address", + "internalType": "address payable" }, { - "internalType": "address", "name": "BBCFeeAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint64", "name": "votingPower", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" }, { - "internalType": "bool", "name": "jailed", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "uint256", "name": "incoming", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "currentValidatorSetMap", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "currentValidatorSetMap", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "currentVoteAddrFullSet", "inputs": [ { - "internalType": "address", - "name": "valAddr", - "type": "address" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "deposit", + "inputs": [ + { + "name": "valAddr", + "type": "address", + "internalType": "address" + } + ], "outputs": [], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "distributeFinalityReward", "inputs": [ { - "internalType": "address[]", "name": "valAddrs", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" }, { - "internalType": "uint256[]", "name": "weights", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" } ], - "name": "distributeFinalityReward", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "enterMaintenance", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "exitMaintenance", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "expireTimeSecondGap", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "felony", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "felony", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "finalityRewardRatio", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "getCurrentValidatorIndex", "inputs": [ { - "internalType": "address", - "name": "_validator", - "type": "address" + "name": "validator", + "type": "address", + "internalType": "address" } ], - "name": "getCurrentValidatorIndex", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getIncoming", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getIncoming", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getLivingValidators", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" }, { - "internalType": "bytes[]", "name": "", - "type": "bytes[]" + "type": "bytes[]", + "internalType": "bytes[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getMiningValidators", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" }, { - "internalType": "bytes[]", "name": "", - "type": "bytes[]" + "type": "bytes[]", + "internalType": "bytes[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getValidators", + "inputs": [], "outputs": [ { - "internalType": "address[]", "name": "", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getWorkingValidatorCount", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "workingValidatorCount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "handleAckPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleFailAckPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleFailAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleSynPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleSynPackage", "outputs": [ { - "internalType": "bytes", "name": "responsePayload", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "isCurrentValidator", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "isCurrentValidator", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "isMonitoredForMaliciousVote", "inputs": [ { - "internalType": "uint256", - "name": "index", - "type": "uint256" + "name": "voteAddr", + "type": "bytes", + "internalType": "bytes" } ], - "name": "isWorkingValidator", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "isSystemRewardIncluded", "inputs": [], - "name": "maintainSlashScale", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "isWorkingValidator", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maintainSlashScale", "inputs": [], - "name": "maxNumOfCandidates", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "maxNumOfCandidates", "inputs": [], - "name": "maxNumOfMaintaining", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "maxNumOfMaintaining", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "maxNumOfWorkingCandidates", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "misdemeanor", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "misdemeanor", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "numOfCabinets", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "numOfJailed", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "numOfMaintaining", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "previousBalanceOfSystemReward", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "previousHeight", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "previousVoteAddrFullSet", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeTmpMigratedValidator", + "inputs": [ + { + "name": "validator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "systemRewardRatio", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "totalInComing", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateValidatorSetV2", "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "_consensusAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_votingPowers", + "type": "uint64[]", + "internalType": "uint64[]" + }, + { + "name": "_voteAddrs", + "type": "bytes[]", + "internalType": "bytes[]" } ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "validatorExtraSet", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [ { - "internalType": "uint256", "name": "enterMaintenanceHeight", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "isMaintaining", - "type": "bool" + "type": "bool", + "internalType": "bool" }, { - "internalType": "bytes", "name": "voteAddress", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "batchTransfer", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "batchTransferFailed", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "batchTransferLowerFailed", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "reason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "deprecatedDeposit", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "deprecatedFinalityRewardDeposit", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "directTransfer", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address payable" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "directTransferFail", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address payable" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "failReasonWithStr", + "inputs": [ + { + "name": "message", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "feeBurned", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "finalityRewardDeposit", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "systemTransfer", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "tmpValidatorSetUpdated", + "inputs": [ + { + "name": "validatorsNum", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unexpectedPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { - "stateMutability": "payable", - "type": "receive" + "type": "event", + "name": "validatorDeposit", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorEmptyJailed", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorEnterMaintenance", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorExitMaintenance", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorFelony", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorJailed", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorMisdemeanor", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorSetUpdated", + "inputs": [], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/crosschain.abi b/abi/crosschain.abi index d8f6c78a..d2537662 100644 --- a/abi/crosschain.abi +++ b/abi/crosschain.abi @@ -1,1166 +1,1257 @@ [ { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "proposalTypeHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "quorum", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "uint128", - "name": "expiredAt", - "type": "uint128" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "contentHash", - "type": "bytes32" - } - ], - "name": "ProposalSubmitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - } - ], - "name": "Reopened", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "challenger", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "packageSequence", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - } - ], - "name": "SuccessChallenge", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "executor", - "type": "address" - } - ], - "name": "Suspended", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "address", - "name": "contractAddr", - "type": "address" - } - ], - "name": "addChannel", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint16", - "name": "chainId", - "type": "uint16" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "oracleSequence", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "packageSequence", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, + "type": "function", + "name": "ACK_PACKAGE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "payload", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "crossChainPackage", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bool", - "name": "isEnable", - "type": "bool" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "enableOrDisableChannel", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "packageType", - "type": "uint8" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "packageSequence", - "type": "uint64" - }, + "type": "function", + "name": "CANCEL_TRANSFER_PROPOSAL", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "receivedPackage", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "contractAddr", - "type": "address" - }, + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelData", - "type": "bytes" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "unexpectedFailureAssertionInPackageHandler", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "contractAddr", - "type": "address" - }, + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "reason", - "type": "string" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "unexpectedRevertInPackageHandler", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "packageSequence", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, + "type": "function", + "name": "CROSS_CHAIN_KEY_PREFIX", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "payload", - "type": "bytes" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "unsupportedPackage", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "ACK_PACKAGE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "EMERGENCY_PROPOSAL_EXPIRE_PERIOD", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "EMPTY_CONTENT_HASH", "inputs": [], - "name": "CANCEL_TRANSFER_PROPOSAL", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_FAIL_DECODE", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "FAIL_ACK_PACKAGE", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "CROSS_CHAIN_KEY_PREFIX", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "EMERGENCY_PROPOSAL_EXPIRE_PERIOD", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "EMPTY_CONTENT_HASH", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_BATCH_SIZE", "inputs": [], - "name": "FAIL_ACK_PACKAGE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_CANCEL_TRANSFER_QUORUM", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_REOPEN_QUORUM", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_SUSPEND_QUORUM", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "INIT_BATCH_SIZE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "INIT_CANCEL_TRANSFER_QUORUM", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "REOPEN_PROPOSAL", "inputs": [], - "name": "INIT_REOPEN_QUORUM", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "INIT_SUSPEND_QUORUM", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "REOPEN_PROPOSAL", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STORE_NAME", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "string", + "internalType": "string" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SUSPEND_PROPOSAL", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYN_PACKAGE", "inputs": [], - "name": "STORE_NAME", "outputs": [ { - "internalType": "string", "name": "", - "type": "string" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "SUSPEND_PROPOSAL", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "SYN_PACKAGE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TOKEN_MANAGER_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TRANSFER_IN_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TRANSFER_OUT_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "VALIDATOR_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "alreadyInit", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "batchSizeForOracle", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "cancelTransfer", "inputs": [ { - "internalType": "address", "name": "tokenAddr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "attacker", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "cancelTransfer", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "challenge", "inputs": [ { - "internalType": "uint64[4]", "name": "params", - "type": "uint64[4]" + "type": "uint64[4]", + "internalType": "uint64[4]" }, { - "internalType": "bytes", "name": "payload0", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "payload1", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "proof0", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "proof1", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "challenge", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "challenged", "inputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "challenged", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "channelHandlerContractMap", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "channelHandlerContractMap", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "channelReceiveSequenceMap", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "channelReceiveSequenceMap", "outputs": [ { - "internalType": "uint64", "name": "", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "channelSendSequenceMap", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "channelSendSequenceMap", "outputs": [ { - "internalType": "uint64", "name": "", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "channelSyncedHeaderMap", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "channelSyncedHeaderMap", "outputs": [ { - "internalType": "uint64", "name": "", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "emergencyProposals", "inputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "emergencyProposals", "outputs": [ { - "internalType": "uint16", "name": "quorum", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" }, { - "internalType": "uint128", "name": "expiredAt", - "type": "uint128" + "type": "uint128", + "internalType": "uint128" }, { - "internalType": "bytes32", "name": "contentHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "encodePayload", "inputs": [ { - "internalType": "uint8", "name": "packageType", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "uint256", "name": "relayFee", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "encodePayload", "outputs": [ { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "pure", - "type": "function" + "stateMutability": "pure" }, { + "type": "function", + "name": "handlePackage", "inputs": [ { - "internalType": "bytes", "name": "payload", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "bytes", "name": "proof", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint64", "name": "height", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" }, { - "internalType": "uint64", "name": "packageSequence", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" }, { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "handlePackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "isRelayRewardFromSystemReward", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "isRelayRewardFromSystemReward", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "isSuspended", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "oracleSequence", + "inputs": [], "outputs": [ { - "internalType": "int64", "name": "", - "type": "int64" + "type": "int64", + "internalType": "int64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "previousTxHeight", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "quorumMap", "inputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "quorumMap", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "registeredContractChannelMap", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "name": "registeredContractChannelMap", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "reopen", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "sendSynPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" }, { - "internalType": "uint256", "name": "relayFee", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "sendSynPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "suspend", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "txCounter", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "ProposalSubmitted", + "inputs": [ + { + "name": "proposalTypeHash", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "proposer", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "quorum", + "type": "uint128", + "indexed": false, + "internalType": "uint128" + }, + { + "name": "expiredAt", + "type": "uint128", + "indexed": false, + "internalType": "uint128" + }, + { + "name": "contentHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Reopened", + "inputs": [ + { + "name": "executor", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SuccessChallenge", + "inputs": [ + { + "name": "challenger", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "packageSequence", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "channelId", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Suspended", + "inputs": [ + { + "name": "executor", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "addChannel", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "contractAddr", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "crossChainPackage", + "inputs": [ + { + "name": "chainId", + "type": "uint16", + "indexed": false, + "internalType": "uint16" + }, + { + "name": "oracleSequence", + "type": "uint64", + "indexed": true, + "internalType": "uint64" + }, + { + "name": "packageSequence", + "type": "uint64", + "indexed": true, + "internalType": "uint64" + }, + { + "name": "channelId", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "payload", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "enableOrDisableChannel", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "isEnable", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "receivedPackage", + "inputs": [ + { + "name": "packageType", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "packageSequence", + "type": "uint64", + "indexed": true, + "internalType": "uint64" + }, + { + "name": "channelId", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unexpectedFailureAssertionInPackageHandler", + "inputs": [ + { + "name": "contractAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "lowLevelData", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unexpectedRevertInPackageHandler", + "inputs": [ + { + "name": "contractAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reason", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unsupportedPackage", + "inputs": [ + { + "name": "packageSequence", + "type": "uint64", + "indexed": true, + "internalType": "uint64" + }, + { + "name": "channelId", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "payload", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/govhub.abi b/abi/govhub.abi index cbd6ff0a..07a7d32a 100644 --- a/abi/govhub.abi +++ b/abi/govhub.abi @@ -1,432 +1,546 @@ [ { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "message", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "failReasonWithBytes", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "message", - "type": "string" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "failReasonWithStr", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_FAIL_DECODE", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_TARGET_CONTRACT_FAIL", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_TARGET_NOT_CONTRACT", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "ERROR_TARGET_CONTRACT_FAIL", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "ERROR_TARGET_NOT_CONTRACT", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "PARAM_UPDATE_MESSAGE_TYPE", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "PARAM_UPDATE_MESSAGE_TYPE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "SYSTEM_REWARD_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "TOKEN_MANAGER_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TRANSFER_IN_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], - "name": "VALIDATOR_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATOR_CONTRACT_ADDR", "inputs": [], - "name": "alreadyInit", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "alreadyInit", "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "handleAckPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleFailAckPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleFailAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleSynPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleSynPackage", "outputs": [ { - "internalType": "bytes", "name": "responsePayload", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "failReasonWithBytes", + "inputs": [ + { + "name": "message", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "failReasonWithStr", + "inputs": [ + { + "name": "message", + "type": "string", + "indexed": false, + "internalType": "string" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false } ] \ No newline at end of file diff --git a/abi/govtoken.abi b/abi/govtoken.abi new file mode 100644 index 00000000..3b34d6f7 --- /dev/null +++ b/abi/govtoken.abi @@ -0,0 +1,901 @@ +[ + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "CLOCK_MODE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "DOMAIN_SEPARATOR", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STAKING_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allowance", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "burn", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "burnFrom", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "checkpoints", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "pos", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct ERC20VotesUpgradeable.Checkpoint", + "components": [ + { + "name": "fromBlock", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "votes", + "type": "uint224", + "internalType": "uint224" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "clock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint48", + "internalType": "uint48" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "decreaseAllowance", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegateBySig", + "inputs": [ + { + "name": "delegatee", + "type": "address", + "internalType": "address" + }, + { + "name": "nonce", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "expiry", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegateVote", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "delegatee", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegates", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip712Domain", + "inputs": [], + "outputs": [ + { + "name": "fields", + "type": "bytes1", + "internalType": "bytes1" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "version", + "type": "string", + "internalType": "string" + }, + { + "name": "chainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "verifyingContract", + "type": "address", + "internalType": "address" + }, + { + "name": "salt", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "extensions", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastTotalSupply", + "inputs": [ + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPastVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "timepoint", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVotes", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "increaseAllowance", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintedMap", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonces", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "numCheckpoints", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "permit", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "deadline", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "v", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "r", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "s", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "sync", + "inputs": [ + { + "name": "stakeCredit", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "syncBatch", + "inputs": [ + { + "name": "stakeCredits", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transfer", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateChanged", + "inputs": [ + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "fromDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "toDelegate", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DelegateVotesChanged", + "inputs": [ + { + "name": "delegate", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "previousBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newBalance", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "EIP712DomainChanged", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ApproveNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "BurnNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "TransferNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + } +] \ No newline at end of file diff --git a/abi/relayerhub.abi b/abi/relayerhub.abi index b712a5c7..c5f4b9f5 100644 --- a/abi/relayerhub.abi +++ b/abi/relayerhub.abi @@ -1,443 +1,663 @@ [ { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "address", - "name": "_relayer", - "type": "address" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "relayerRegister", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "address", - "name": "_relayer", - "type": "address" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "relayerUnRegister", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_FAIL_DECODE", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_DUES", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_REQUIRED_DEPOSIT", "inputs": [], - "name": "INIT_DUES", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "INIT_REQUIRED_DEPOSIT", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "SYSTEM_REWARD_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "TOKEN_MANAGER_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TRANSFER_IN_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "VALIDATOR_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "WHITELIST_1", "inputs": [], - "name": "alreadyInit", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "WHITELIST_2", "inputs": [], - "name": "bscChainID", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "acceptBeingRelayer", + "inputs": [ + { + "name": "manager", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "alreadyInit", "inputs": [], - "name": "dues", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "bscChainID", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "isManager", "inputs": [ { - "internalType": "address", - "name": "sender", - "type": "address" + "name": "managerAddress", + "type": "address", + "internalType": "address" } ], - "name": "isRelayer", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "register", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "type": "function", + "name": "isProvisionalRelayer", + "inputs": [ + { + "name": "relayerAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" }, { - "inputs": [], - "name": "requiredDeposit", + "type": "function", + "name": "isRelayer", + "inputs": [ + { + "name": "relayerAddress", + "type": "address", + "internalType": "address" + } + ], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "removeManagerByHimself", "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "unregister", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateRelayer", + "inputs": [ + { + "name": "relayerToBeAdded", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "whitelistInit", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "whitelistInitDone", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "managerAdded", + "inputs": [ + { + "name": "_addedManager", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "managerRemoved", + "inputs": [ + { + "name": "_removedManager", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "relayerAddedProvisionally", + "inputs": [ + { + "name": "_relayer", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "relayerUnRegister", + "inputs": [ + { + "name": "_relayer", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "relayerUpdated", + "inputs": [ + { + "name": "_from", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "_to", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/relayerincentivize.abi b/abi/relayerincentivize.abi index 4cc97425..f61f88e1 100644 --- a/abi/relayerincentivize.abi +++ b/abi/relayerincentivize.abi @@ -1,755 +1,846 @@ [ { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "sequence", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "roundRewardForHeaderRelayer", - "type": "uint256" - }, + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "roundRewardForTransferRelayer", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "distributeCollectedReward", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "CALLER_COMPENSATION_DENOMINATOR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "address", - "name": "relayer", - "type": "address" - }, + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "CALLER_COMPENSATION_MOLECULE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "rewardToRelayer", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "CODE_OK", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", "inputs": [], - "name": "CALLER_COMPENSATION_DENOMINATOR", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "CALLER_COMPENSATION_MOLECULE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_FAIL_DECODE", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "HEADER_RELAYER_REWARD_RATE_DENOMINATOR", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "HEADER_RELAYER_REWARD_RATE_MOLECULE", "inputs": [], - "name": "HEADER_RELAYER_REWARD_RATE_DENOMINATOR", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "HEADER_RELAYER_REWARD_RATE_MOLECULE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAXIMUM_WEIGHT", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "MAXIMUM_WEIGHT", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ROUND_SIZE", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "ROUND_SIZE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "SYSTEM_REWARD_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "TOKEN_MANAGER_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TRANSFER_IN_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "VALIDATOR_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "addReward", "inputs": [ { - "internalType": "address payable", "name": "headerRelayerAddr", - "type": "address" + "type": "address", + "internalType": "address payable" }, { - "internalType": "address payable", "name": "packageRelayer", - "type": "address" + "type": "address", + "internalType": "address payable" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "fromSystemReward", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "name": "addReward", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "alreadyInit", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "calculateHeaderRelayerWeight", "inputs": [ { - "internalType": "uint256", "name": "count", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "calculateHeaderRelayerWeight", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "pure", - "type": "function" + "stateMutability": "pure" }, { + "type": "function", + "name": "calculateTransferRelayerWeight", "inputs": [ { - "internalType": "uint256", "name": "count", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "calculateTransferRelayerWeight", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "pure", - "type": "function" + "stateMutability": "pure" }, { - "inputs": [], + "type": "function", "name": "callerCompensationDenominator", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "callerCompensationMolecule", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "claimRelayerReward", "inputs": [ { - "internalType": "address", "name": "relayerAddr", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "claimRelayerReward", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "collectedRewardForHeaderRelayer", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "collectedRewardForTransferRelayer", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "countInRound", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "dynamicExtraIncentiveAmount", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "headerRelayerAddressRecord", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "headerRelayerAddressRecord", "outputs": [ { - "internalType": "address payable", "name": "", - "type": "address" + "type": "address", + "internalType": "address payable" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "headerRelayerRewardRateDenominator", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "headerRelayerRewardRateMolecule", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "headerRelayersSubmitCount", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "headerRelayersSubmitCount", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "packageRelayerAddressRecord", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "packageRelayerAddressRecord", "outputs": [ { - "internalType": "address payable", "name": "", - "type": "address" + "type": "address", + "internalType": "address payable" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "packageRelayersSubmitCount", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "packageRelayersSubmitCount", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "relayerRewardVault", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "relayerRewardVault", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "roundSequence", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "distributeCollectedReward", + "inputs": [ + { + "name": "sequence", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "roundRewardForHeaderRelayer", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "roundRewardForTransferRelayer", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false }, { - "stateMutability": "payable", - "type": "receive" + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "rewardToRelayer", + "inputs": [ + { + "name": "relayer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/slashindicator.abi b/abi/slashindicator.abi index 83152d12..d76033dc 100644 --- a/abi/slashindicator.abi +++ b/abi/slashindicator.abi @@ -1,792 +1,958 @@ [ { - "anonymous": false, + "type": "function", + "name": "BC_FUSION_CHANNELID", "inputs": [], - "name": "crashResponse", - "type": "event" + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "slashCount", - "type": "uint256" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "failReason", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "failedFelony", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "CODE_OK", "inputs": [], - "name": "indicatorCleaned", - "type": "event" + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint32", - "name": "code", - "type": "uint32" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "knownResponse", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "CROSS_STAKE_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "DECREASE_RATE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint32", - "name": "code", - "type": "uint32" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "name": "unKnownResponse", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "ERROR_FAIL_DECODE", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "validatorSlashed", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "FELONY_THRESHOLD", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "BSC_RELAYER_REWARD", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "DECREASE_RATE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_FELONY_SLASH_REWARD_RATIO", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_FELONY_SLASH_SCOPE", "inputs": [], - "name": "FELONY_THRESHOLD", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MISDEMEANOR_THRESHOLD", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "INIT_FINALITY_SLASH_REWARD_RATIO", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "MISDEMEANOR_THRESHOLD", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TOKEN_MANAGER_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TRANSFER_IN_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TRANSFER_OUT_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "VALIDATOR_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "alreadyInit", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "clean", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "downtimeSlash", + "inputs": [ + { + "name": "validator", + "type": "address", + "internalType": "address" + }, + { + "name": "count", + "type": "uint256", + "internalType": "uint256" + } + ], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "enableMaliciousVoteSlash", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "felonySlashRewardRatio", "inputs": [], - "name": "felonyThreshold", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "felonySlashScope", "inputs": [], - "name": "finalitySlashRewardRatio", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "felonyThreshold", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSlashIndicator", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getSlashIndicator", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getSlashThresholds", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "handleAckPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleFailAckPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleFailAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleSynPackage", "inputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleSynPackage", "outputs": [ { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "indicators", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "indicators", "outputs": [ { - "internalType": "uint256", "name": "height", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "count", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bool", "name": "exist", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "misdemeanorThreshold", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "previousHeight", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "sendFelonyPackage", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "sendFelonyPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "slash", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "slash", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "submitDoubleSignEvidence", "inputs": [ { + "name": "header1", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "header2", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "submitFinalityViolationEvidence", + "inputs": [ + { + "name": "_evidence", + "type": "tuple", + "internalType": "struct SlashIndicator.FinalityEvidence", "components": [ { + "name": "voteA", + "type": "tuple", + "internalType": "struct SlashIndicator.VoteData", "components": [ { - "internalType": "uint256", "name": "srcNum", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "srcHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "tarNum", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "tarHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "sig", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct SlashIndicator.VoteData", - "name": "voteA", - "type": "tuple" + ] }, { + "name": "voteB", + "type": "tuple", + "internalType": "struct SlashIndicator.VoteData", "components": [ { - "internalType": "uint256", "name": "srcNum", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "srcHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "uint256", "name": "tarNum", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "bytes32", "name": "tarHash", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "bytes", "name": "sig", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct SlashIndicator.VoteData", - "name": "voteB", - "type": "tuple" + ] }, { - "internalType": "bytes", "name": "voteAddr", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } - ], - "internalType": "struct SlashIndicator.FinalityEvidence", - "name": "_evidence", - "type": "tuple" + ] } ], - "name": "submitFinalityViolationEvidence", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "validators", "inputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "validators", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "crashResponse", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "failedFelony", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "slashCount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "failReason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "indicatorCleaned", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "knownResponse", + "inputs": [ + { + "name": "code", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "maliciousVoteSlashed", + "inputs": [ + { + "name": "voteAddrSlice", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unKnownResponse", + "inputs": [ + { + "name": "code", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "validatorSlashed", + "inputs": [ + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false } ] \ No newline at end of file diff --git a/abi/stakecredit.abi b/abi/stakecredit.abi new file mode 100644 index 00000000..82ad5f08 --- /dev/null +++ b/abi/stakecredit.abi @@ -0,0 +1,860 @@ +[ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STAKING_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allowance", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "claim", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address payable" + }, + { + "name": "number", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimableUnbondRequest", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "decreaseAllowance", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "subtractedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "distributeReward", + "inputs": [ + { + "name": "commissionRate", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "getPooledBNB", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPooledBNBByShares", + "inputs": [ + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSharesByPooledBNB", + "inputs": [ + { + "name": "bnbAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "increaseAllowance", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "addedValue", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_validator", + "type": "address", + "internalType": "address" + }, + { + "name": "_moniker", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "lockedBNBs", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "number", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingUnbondRequest", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardRecord", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "slash", + "inputs": [ + { + "name": "slashBnbAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalPooledBNB", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalPooledBNBRecord", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transfer", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unbond", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "bnbAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unbondRequest", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "_index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct StakeCredit.UnbondRequest", + "components": [ + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "unlockTime", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unbondSequence", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "undelegate", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "bnbAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "validator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardReceived", + "inputs": [ + { + "name": "rewardToAll", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "commission", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "value", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ApproveNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "Empty", + "inputs": [] + }, + { + "type": "error", + "name": "InsufficientBalance", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "NoClaimableUnbondRequest", + "inputs": [] + }, + { + "type": "error", + "name": "NoUnbondRequest", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "OutOfBounds", + "inputs": [] + }, + { + "type": "error", + "name": "RequestExisted", + "inputs": [] + }, + { + "type": "error", + "name": "TransferFailed", + "inputs": [] + }, + { + "type": "error", + "name": "TransferNotAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "WrongInitContext", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroAmount", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroShares", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroTotalPooledBNB", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroTotalShares", + "inputs": [] + } +] \ No newline at end of file diff --git a/abi/stakehub.abi b/abi/stakehub.abi new file mode 100644 index 00000000..1bae4809 --- /dev/null +++ b/abi/stakehub.abi @@ -0,0 +1,1812 @@ +[ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "BREATHE_BLOCK_INTERVAL", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "DEAD_ADDRESS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "LOCK_AMOUNT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "REDELEGATE_FEE_RATE_BASE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STAKING_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addToBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "blackList", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "claim", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "requestNumber", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimBatch", + "inputs": [ + { + "name": "operatorAddresses", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "requestNumbers", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "consensusExpiration", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "consensusToOperator", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createValidator", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "voteAddress", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blsProof", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "commission", + "type": "tuple", + "internalType": "struct StakeHub.Commission", + "components": [ + { + "name": "rate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxRate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxChangeRate", + "type": "uint64", + "internalType": "uint64" + } + ] + }, + { + "name": "description", + "type": "tuple", + "internalType": "struct StakeHub.Description", + "components": [ + { + "name": "moniker", + "type": "string", + "internalType": "string" + }, + { + "name": "identity", + "type": "string", + "internalType": "string" + }, + { + "name": "website", + "type": "string", + "internalType": "string" + }, + { + "name": "details", + "type": "string", + "internalType": "string" + } + ] + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "delegateVotePower", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "distributeReward", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "doubleSignSlash", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "downtimeJailTime", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "downtimeSlash", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "downtimeSlashAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "editCommissionRate", + "inputs": [ + { + "name": "commissionRate", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "editConsensusAddress", + "inputs": [ + { + "name": "newConsensusAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "editDescription", + "inputs": [ + { + "name": "description", + "type": "tuple", + "internalType": "struct StakeHub.Description", + "components": [ + { + "name": "moniker", + "type": "string", + "internalType": "string" + }, + { + "name": "identity", + "type": "string", + "internalType": "string" + }, + { + "name": "website", + "type": "string", + "internalType": "string" + }, + { + "name": "details", + "type": "string", + "internalType": "string" + } + ] + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "editVoteAddress", + "inputs": [ + { + "name": "newVoteAddress", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "blsProof", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "felonyJailTime", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "felonySlashAmount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorBasicInfo", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "createdTime", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "jailed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "jailUntil", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorCommission", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct StakeHub.Commission", + "components": [ + { + "name": "rate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxRate", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "maxChangeRate", + "type": "uint64", + "internalType": "uint64" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorConsensusAddress", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "consensusAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorCreditContract", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "creditContract", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorDescription", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct StakeHub.Description", + "components": [ + { + "name": "moniker", + "type": "string", + "internalType": "string" + }, + { + "name": "identity", + "type": "string", + "internalType": "string" + }, + { + "name": "website", + "type": "string", + "internalType": "string" + }, + { + "name": "details", + "type": "string", + "internalType": "string" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorElectionInfo", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "limit", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "consensusAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "votingPowers", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "voteAddrs", + "type": "bytes[]", + "internalType": "bytes[]" + }, + { + "name": "totalLength", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorRewardRecord", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorTotalPooledBNBRecord", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidatorVoteAddress", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "voteAddress", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getValidators", + "inputs": [ + { + "name": "offset", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "limit", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "operatorAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "creditAddrs", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "totalLength", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "handleAckPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "handleFailAckPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "handleSynPackage", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maliciousVoteSlash", + "inputs": [ + { + "name": "voteAddress", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "maxElectedValidators", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxFelonyBetweenBreatheBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minDelegationBNBChange", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minSelfDelegationBNB", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "numOfJailed", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redelegate", + "inputs": [ + { + "name": "srcValidator", + "type": "address", + "internalType": "address" + }, + { + "name": "dstValidator", + "type": "address", + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "delegateVotePower", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redelegateFeeRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeFromBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resume", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "syncGovToken", + "inputs": [ + { + "name": "operatorAddresses", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferGasLimit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "unbondPeriod", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "undelegate", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unjail", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "voteExpiration", + "inputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "voteToOperator", + "inputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "BlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Claimed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CommissionRateEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newCommissionRate", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ConsensusAddressEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newConsensusAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Delegated", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "DescriptionEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateFailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "respCode", + "type": "uint8", + "indexed": false, + "internalType": "enum StakeHub.StakeMigrationRespCode" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MigrateSuccess", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "ProtectorChanged", + "inputs": [ + { + "name": "oldProtector", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newProtector", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Redelegated", + "inputs": [ + { + "name": "srcValidator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "dstValidator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "oldShares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newShares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Resumed", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributeFailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "failReason", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RewardDistributed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "reward", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "StakeCreditInitialized", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creditContract", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UnBlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Undelegated", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "shares", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "bnbAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UnexpectedPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorCreated", + "inputs": [ + { + "name": "consensusAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "creditContract", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "voteAddress", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorEmptyJailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorJailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorSlashed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "jailUntil", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "slashAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "slashType", + "type": "uint8", + "indexed": false, + "internalType": "enum StakeHub.SlashType" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ValidatorUnjailed", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "VoteAddressEdited", + "inputs": [ + { + "name": "operatorAddress", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newVoteAddress", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AlreadyPaused", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadySlashed", + "inputs": [] + }, + { + "type": "error", + "name": "ConsensusAddressExpired", + "inputs": [] + }, + { + "type": "error", + "name": "DelegationAmountTooSmall", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateConsensusAddress", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateMoniker", + "inputs": [] + }, + { + "type": "error", + "name": "DuplicateVoteAddress", + "inputs": [] + }, + { + "type": "error", + "name": "InBlackList", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidCommission", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidConsensusAddress", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidMoniker", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidRequest", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidSynPackage", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "InvalidVoteAddress", + "inputs": [] + }, + { + "type": "error", + "name": "JailTimeNotExpired", + "inputs": [] + }, + { + "type": "error", + "name": "NoMoreFelonyAllowed", + "inputs": [] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyProtector", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySelfDelegation", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "SameValidator", + "inputs": [] + }, + { + "type": "error", + "name": "SelfDelegationNotEnough", + "inputs": [] + }, + { + "type": "error", + "name": "TransferFailed", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "UpdateTooFrequently", + "inputs": [] + }, + { + "type": "error", + "name": "ValidatorExisted", + "inputs": [] + }, + { + "type": "error", + "name": "ValidatorNotExisted", + "inputs": [] + }, + { + "type": "error", + "name": "ValidatorNotJailed", + "inputs": [] + }, + { + "type": "error", + "name": "VoteAddressExpired", + "inputs": [] + }, + { + "type": "error", + "name": "ZeroShares", + "inputs": [] + } +] \ No newline at end of file diff --git a/abi/staking.abi b/abi/staking.abi index 495bd05b..60a90885 100644 --- a/abi/staking.abi +++ b/abi/staking.abi @@ -1,1280 +1,1371 @@ [ { - "anonymous": false, - "inputs": [ + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "uint8", - "name": "eventType", - "type": "uint8" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "crashResponse", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "errCode", - "type": "uint8" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "delegateFailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "CODE_FAILED", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "relayerFee", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "delegateSubmitted", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "delegateSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint8", - "name": "eventType", - "type": "uint8" - }, + "type": "function", + "name": "CODE_SUCCESS", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "errCode", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "failedSynPackage", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "valSrc", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "valDst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "CROSS_STAKE_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "errCode", - "type": "uint8" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "redelegateFailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validatorSrc", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validatorDst", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "ERROR_FAIL_DECODE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "relayerFee", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "redelegateSubmitted", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "valSrc", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "valDst", - "type": "address" - }, + "type": "function", + "name": "ERROR_WITHDRAW_BNB", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "redelegateSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, + "type": "function", + "name": "EVENT_DELEGATE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "rewardClaimed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, + "type": "function", + "name": "EVENT_DISTRIBUTE_REWARD", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "rewardReceived", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "EVENT_DISTRIBUTE_UNDELEGATED", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "errCode", - "type": "uint8" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "undelegateFailed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "EVENT_REDELEGATE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "relayerFee", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "undelegateSubmitted", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "EVENT_UNDELEGATE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "undelegateSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, + "type": "function", + "name": "GOVERNOR_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "undelegatedClaimed", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "validator", - "type": "address" - }, + "type": "function", + "name": "GOV_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "undelegatedReceived", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "CODE_FAILED", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_BSC_RELAYER_FEE", "inputs": [], - "name": "CODE_SUCCESS", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_MIN_DELEGATION", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_RELAYER_FEE", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_TRANSFER_GAS", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "ERROR_WITHDRAW_BNB", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LOCK_TIME", "inputs": [], - "name": "EVENT_DELEGATE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "EVENT_DISTRIBUTE_REWARD", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "EVENT_DISTRIBUTE_UNDELEGATED", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "EVENT_REDELEGATE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "EVENT_UNDELEGATE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "INIT_BSC_RELAYER_FEE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TEN_DECIMALS", "inputs": [], - "name": "INIT_MIN_DELEGATION", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "INIT_RELAYER_FEE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "INIT_TRANSFER_GAS", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "LOCK_TIME", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATOR_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "alreadyInit", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "bSCRelayerFee", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "bscChainID", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "claimReward", "inputs": [], - "name": "TEN_DECIMALS", "outputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "amount", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "claimUndelegated", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "delegate", + "inputs": [ + { "name": "", - "type": "address" + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "payable" }, { - "inputs": [], - "name": "TOKEN_MANAGER_ADDR", + "type": "function", + "name": "getDelegated", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "internalType": "address" + } + ], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "TRANSFER_IN_CHANNELID", + "type": "function", + "name": "getDistributedReward", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getMinDelegation", "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "VALIDATOR_CONTRACT_ADDR", + "type": "function", + "name": "getPendingRedelegateTime", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "valSrc", + "type": "address", + "internalType": "address" + }, + { + "name": "valDst", + "type": "address", + "internalType": "address" + } + ], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], - "name": "alreadyInit", + "type": "function", + "name": "getPendingUndelegateTime", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "internalType": "address" + } + ], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getRelayerFee", "inputs": [], - "name": "bSCRelayerFee", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRequestInFly", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[3]", + "internalType": "uint256[3]" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getTotalDelegated", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUndelegated", + "inputs": [ + { + "name": "delegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "handleAckPackage", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "handleFailAckPackage", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "handleSynPackage", + "inputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "minDelegation", "inputs": [], - "name": "bscChainID", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redelegate", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "payable" }, { + "type": "function", + "name": "relayerFee", "inputs": [], - "name": "claimReward", "outputs": [ { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "transferGas", "inputs": [], - "name": "claimUndelegated", "outputs": [ { - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "undelegate", "inputs": [ { - "internalType": "address", "name": "validator", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "delegate", "outputs": [], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "address", - "name": "delegator", - "type": "address" + "name": "key", + "type": "string", + "internalType": "string" }, { - "internalType": "address", - "name": "validator", - "type": "address" + "name": "value", + "type": "bytes", + "internalType": "bytes" } ], - "name": "getDelegated", - "outputs": [ + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "crashResponse", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "eventType", + "type": "uint8", + "indexed": true, + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "delegateFailed", "inputs": [ { - "internalType": "address", "name": "delegator", - "type": "address" - } - ], - "name": "getDistributedReward", - "outputs": [ + "type": "address", + "indexed": true, + "internalType": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getMinDelegation", - "outputs": [ + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "errCode", + "type": "uint8", + "indexed": false, + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "delegateSubmitted", "inputs": [ { - "internalType": "address", "name": "delegator", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "valSrc", - "type": "address" + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "valDst", - "type": "address" - } - ], - "name": "getPendingRedelegateTime", - "outputs": [ + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "relayerFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "delegateSuccess", "inputs": [ { - "internalType": "address", "name": "delegator", - "type": "address" + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", "name": "validator", - "type": "address" - } - ], - "name": "getPendingUndelegateTime", - "outputs": [ + "type": "address", + "indexed": true, + "internalType": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { - "inputs": [], - "name": "getRelayerFee", - "outputs": [ + "type": "event", + "name": "failedSynPackage", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "eventType", + "type": "uint8", + "indexed": true, + "internalType": "uint8" + }, + { + "name": "errCode", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "paramChange", "inputs": [ { - "internalType": "address", - "name": "delegator", - "type": "address" - } - ], - "name": "getRequestInFly", - "outputs": [ + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, { - "internalType": "uint256[3]", - "name": "", - "type": "uint256[3]" + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "redelegateFailed", "inputs": [ { - "internalType": "address", "name": "delegator", - "type": "address" - } - ], - "name": "getTotalDelegated", - "outputs": [ + "type": "address", + "indexed": true, + "internalType": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "valSrc", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "valDst", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "errCode", + "type": "uint8", + "indexed": false, + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "redelegateSubmitted", "inputs": [ { - "internalType": "address", "name": "delegator", - "type": "address" - } - ], - "name": "getUndelegated", - "outputs": [ + "type": "address", + "indexed": true, + "internalType": "address" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "validatorSrc", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "validatorDst", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "relayerFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "redelegateSuccess", "inputs": [ { - "internalType": "uint8", - "name": "", - "type": "uint8" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "bytes", - "name": "msgBytes", - "type": "bytes" + "name": "valSrc", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "valDst", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "handleAckPackage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "rewardClaimed", "inputs": [ { - "internalType": "uint8", - "name": "", - "type": "uint8" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "bytes", - "name": "msgBytes", - "type": "bytes" + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "handleFailAckPackage", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "rewardReceived", "inputs": [ { - "internalType": "uint8", - "name": "", - "type": "uint8" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "bytes", - "name": "msgBytes", - "type": "bytes" - } - ], - "name": "handleSynPackage", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false }, { - "inputs": [], - "name": "minDelegation", - "outputs": [ + "type": "event", + "name": "undelegateFailed", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "errCode", + "type": "uint8", + "indexed": false, + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "undelegateSubmitted", "inputs": [ { - "internalType": "address", - "name": "validatorSrc", - "type": "address" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "address", - "name": "validatorDst", - "type": "address" + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" - } - ], - "name": "redelegate", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "relayerFee", - "outputs": [ + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "relayerFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { - "inputs": [], - "name": "transferGas", - "outputs": [ + "type": "event", + "name": "undelegateSuccess", + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "undelegatedClaimed", "inputs": [ { - "internalType": "address", - "name": "validator", - "type": "address" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "undelegate", - "outputs": [], - "stateMutability": "payable", - "type": "function" + "anonymous": false }, { + "type": "event", + "name": "undelegatedReceived", "inputs": [ { - "internalType": "string", - "name": "key", - "type": "string" + "name": "delegator", + "type": "address", + "indexed": true, + "internalType": "address" }, { - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "validator", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" } ], - "name": "updateParam", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" + "anonymous": false } ] \ No newline at end of file diff --git a/abi/systemreward.abi b/abi/systemreward.abi index 352cd95f..e12bfe3d 100644 --- a/abi/systemreward.abi +++ b/abi/systemreward.abi @@ -1,468 +1,559 @@ [ { - "anonymous": false, - "inputs": [ + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "addOperator", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "deleteOperator", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "receiveDeposit", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "rewardEmpty", - "type": "event" + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, + "type": "function", + "name": "ERROR_FAIL_DECODE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "rewardTo", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_REWARDS", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "MAX_REWARDS", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TOKEN_HUB_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TOKEN_MANAGER_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TRANSFER_IN_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], - "name": "VALIDATOR_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATOR_CONTRACT_ADDR", "inputs": [], - "name": "alreadyInit", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "alreadyInit", "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "claimRewards", "inputs": [ { - "internalType": "address payable", "name": "to", - "type": "address" + "type": "address", + "internalType": "address payable" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "claimRewards", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "isOperator", "inputs": [ { - "internalType": "address", "name": "addr", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "isOperator", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "numOperator", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "addOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false }, { - "stateMutability": "payable", - "type": "receive" + "type": "event", + "name": "deleteOperator", + "inputs": [ + { + "name": "operator", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "receiveDeposit", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "rewardEmpty", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "rewardTo", + "inputs": [ + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/tendermintlightclient.abi b/abi/tendermintlightclient.abi index 93dc47fc..f59b4c2d 100644 --- a/abi/tendermintlightclient.abi +++ b/abi/tendermintlightclient.abi @@ -1,586 +1,698 @@ [ { + "type": "function", + "name": "BC_FUSION_CHANNELID", "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "initHeight", - "type": "uint64" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes32", - "name": "appHash", - "type": "bytes32" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "initConsensusState", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "height", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint64", - "name": "preValidatorSetChangeHeight", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "appHash", - "type": "bytes32" - }, + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bool", - "name": "validatorChanged", - "type": "bool" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "syncConsensusState", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_FAIL_DECODE", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "INCENTIVIZE_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "INIT_CONSENSUS_STATE_BYTES", + "inputs": [], "outputs": [ { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "INIT_REWARD_FOR_VALIDATOR_SER_CHANGE", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "LIGHT_CLIENT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "RELAYERHUB_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "SLASH_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "SLASH_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "TOKEN_MANAGER_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "TRANSFER_IN_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "VALIDATOR_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "alreadyInit", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "bscChainID", "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "chainID", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], - "name": "initialHeight", "outputs": [ { - "internalType": "uint64", "name": "", - "type": "uint64" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATOR_CONTRACT_ADDR", "inputs": [], - "name": "latestHeight", "outputs": [ { - "internalType": "uint64", "name": "", - "type": "uint64" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [ + "type": "function", + "name": "alreadyInit", + "inputs": [], + "outputs": [ { - "internalType": "uint64", "name": "", - "type": "uint64" + "type": "bool", + "internalType": "bool" } ], - "name": "lightClientConsensusStates", + "stateMutability": "view" + }, + { + "type": "function", + "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint64", - "name": "preValidatorSetChangeHeight", - "type": "uint64" - }, + "name": "", + "type": "uint16", + "internalType": "uint16" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "chainID", + "inputs": [], + "outputs": [ { - "internalType": "bytes32", - "name": "appHash", - "type": "bytes32" - }, + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAppHash", + "inputs": [ { - "internalType": "bytes32", - "name": "curValidatorSetHash", - "type": "bytes32" - }, + "name": "height", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [ { - "internalType": "bytes", - "name": "nextValidatorSet", - "type": "bytes" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getChainID", "inputs": [], - "name": "rewardForValidatorSetChange", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "string", + "internalType": "string" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getSubmitter", "inputs": [ { - "internalType": "uint64", - "name": "", - "type": "uint64" + "name": "height", + "type": "uint64", + "internalType": "uint64" } ], - "name": "submitters", "outputs": [ { - "internalType": "address payable", "name": "", - "type": "address" + "type": "address", + "internalType": "address payable" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [ + "type": "function", + "name": "initialHeight", + "inputs": [], + "outputs": [ { - "internalType": "bytes", - "name": "header", - "type": "bytes" - }, + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isHeaderSynced", + "inputs": [ { - "internalType": "uint64", "name": "height", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "name": "syncTendermintHeader", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestHeight", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "lightClientConsensusStates", "inputs": [ { - "internalType": "uint64", - "name": "height", - "type": "uint64" + "name": "", + "type": "uint64", + "internalType": "uint64" } ], - "name": "isHeaderSynced", "outputs": [ { - "internalType": "bool", + "name": "preValidatorSetChangeHeight", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "appHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "curValidatorSetHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "nextValidatorSet", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "rewardForValidatorSetChange", + "inputs": [], + "outputs": [ + { "name": "", - "type": "bool" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "submitters", "inputs": [ { - "internalType": "uint64", - "name": "height", - "type": "uint64" + "name": "", + "type": "uint64", + "internalType": "uint64" } ], - "name": "getAppHash", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "address", + "internalType": "address payable" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "syncTendermintHeader", "inputs": [ { - "internalType": "uint64", + "name": "header", + "type": "bytes", + "internalType": "bytes" + }, + { "name": "height", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "name": "getSubmitter", "outputs": [ { - "internalType": "address payable", "name": "", - "type": "address" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], - "name": "getChainID", - "outputs": [ + "type": "function", + "name": "updateParam", + "inputs": [ { - "internalType": "string", - "name": "", - "type": "string" + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "view", - "type": "function" + "outputs": [], + "stateMutability": "nonpayable" }, { + "type": "event", + "name": "initConsensusState", + "inputs": [ + { + "name": "initHeight", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "appHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "indexed": false, + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "indexed": false, + "internalType": "bytes" } ], - "name": "updateParam", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "anonymous": false + }, + { + "type": "event", + "name": "syncConsensusState", + "inputs": [ + { + "name": "height", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "preValidatorSetChangeHeight", + "type": "uint64", + "indexed": false, + "internalType": "uint64" + }, + { + "name": "appHash", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "validatorChanged", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/tokenhub.abi b/abi/tokenhub.abi index f8ede968..a2a1c6eb 100644 --- a/abi/tokenhub.abi +++ b/abi/tokenhub.abi @@ -1,1299 +1,1556 @@ [ { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "tokenAddr", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "attacker", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "CancelTransfer", - "type": "event" + "type": "receive", + "stateMutability": "payable" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "tokenAddr", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "largeTransferLimit", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "LargeTransferLimitSet", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "tokenAddr", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "BEP2_TOKEN_DECIMALS", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "unlockAt", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "LargeTransferLocked", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "tokenAddr", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "recipient", - "type": "address" - }, + "type": "function", + "name": "BEP2_TOKEN_SYMBOL_FOR_BNB", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "WithdrawUnlockedToken", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "from", - "type": "address" - }, + "type": "function", + "name": "CODE_OK", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "receiveDeposit", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "refundAddr", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint32", - "name": "status", - "type": "uint32" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "refundFailure", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "refundAddr", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "CROSS_STAKE_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint32", - "name": "status", - "type": "uint32" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "refundSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "to", - "type": "address" - }, + "type": "function", + "name": "ERROR_FAIL_DECODE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "uint32", + "internalType": "uint32" } ], - "name": "rewardTo", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "refundAddr", - "type": "address" - }, + "type": "function", + "name": "GOVERNOR_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "transferInSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "senderAddr", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, + "type": "function", + "name": "GOV_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "relayFee", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "transferOutSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, + "type": "function", + "name": "GOV_HUB_ADDR", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "msgBytes", - "type": "bytes" + "name": "", + "type": "address", + "internalType": "address" } ], - "name": "unexpectedPackage", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "BEP2_TOKEN_DECIMALS", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "BEP2_TOKEN_SYMBOL_FOR_BNB", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_BNB_LARGE_TRANSFER_LIMIT", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_LOCK_PERIOD", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INIT_MINIMUM_RELAY_FEE", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LOCK_PERIOD_FOR_TOKEN_RECOVER", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAXIMUM_BEP20_SYMBOL_LEN", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_BEP2_TOTAL_SUPPLY", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_GAS_FOR_CALLING_BEP20", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_GAS_FOR_TRANSFER_BNB", "inputs": [], - "name": "INIT_BNB_LARGE_TRANSFER_LIMIT", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MINIMUM_BEP20_SYMBOL_LEN", "inputs": [], - "name": "INIT_LOCK_PERIOD", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "INIT_MINIMUM_RELAY_FEE", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "REWARD_UPPER_LIMIT", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "MAXIMUM_BEP20_SYMBOL_LEN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "MAX_BEP2_TOTAL_SUPPLY", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "MAX_GAS_FOR_CALLING_BEP20", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "MAX_GAS_FOR_TRANSFER_BNB", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "MINIMUM_BEP20_SYMBOL_LEN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "REWARD_UPPER_LIMIT", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TEN_DECIMALS", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_CHANNELID", "inputs": [], - "name": "TEN_DECIMALS", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_FAILURE_INSUFFICIENT_BALANCE", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_FAILURE_NON_PAYABLE_RECIPIENT", "inputs": [], - "name": "TOKEN_MANAGER_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_FAILURE_TIMEOUT", "inputs": [], - "name": "TRANSFER_IN_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_FAILURE_UNBOUND_TOKEN", "inputs": [], - "name": "TRANSFER_IN_FAILURE_INSUFFICIENT_BALANCE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_FAILURE_UNKNOWN", "inputs": [], - "name": "TRANSFER_IN_FAILURE_NON_PAYABLE_RECIPIENT", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_IN_SUCCESS", "inputs": [], - "name": "TRANSFER_IN_FAILURE_TIMEOUT", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TRANSFER_OUT_CHANNELID", "inputs": [], - "name": "TRANSFER_IN_FAILURE_UNBOUND_TOKEN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "VALIDATOR_CONTRACT_ADDR", "inputs": [], - "name": "TRANSFER_IN_FAILURE_UNKNOWN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "alreadyInit", "inputs": [], - "name": "TRANSFER_IN_SUCCESS", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TRANSFER_OUT_CHANNELID", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VALIDATOR_CONTRACT_ADDR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "alreadyInit", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "batchTransferOutBNB", "inputs": [ { - "internalType": "address[]", "name": "recipientAddrs", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" }, { - "internalType": "uint256[]", "name": "amounts", - "type": "uint256[]" + "type": "uint256[]", + "internalType": "uint256[]" }, { - "internalType": "address[]", "name": "refundAddrs", - "type": "address[]" + "type": "address[]", + "internalType": "address[]" }, { - "internalType": "uint64", "name": "expireTime", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "name": "batchTransferOutBNB", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "bep20ContractDecimals", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "bep20ContractDecimals", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "bindToken", "inputs": [ { - "internalType": "bytes32", "name": "bep2Symbol", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "decimals", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "bindToken", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "cancelTokenRecoverLock", "inputs": [ { - "internalType": "address", - "name": "tokenAddress", - "type": "address" + "name": "tokenSymbol", + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "attacker", - "type": "address" + "type": "address", + "internalType": "address" } ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "cancelTransferIn", + "inputs": [ + { + "name": "tokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "attacker", + "type": "address", + "internalType": "address" + } + ], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "claimMigrationFund", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimRewards", "inputs": [ { - "internalType": "address payable", "name": "to", - "type": "address" + "type": "address", + "internalType": "address payable" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "claimRewards", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "getBep2SymbolByContractAddr", "inputs": [ { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getBep2SymbolByContractAddr", "outputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getBoundBep2Symbol", "inputs": [ { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "getBoundBep2Symbol", "outputs": [ { - "internalType": "string", "name": "", - "type": "string" + "type": "string", + "internalType": "string" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getBoundContract", "inputs": [ { - "internalType": "string", "name": "bep2Symbol", - "type": "string" + "type": "string", + "internalType": "string" } ], - "name": "getBoundContract", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "getContractAddrByBEP2Symbol", "inputs": [ { - "internalType": "bytes32", "name": "bep2Symbol", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "getContractAddrByBEP2Symbol", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "getMiniRelayFee", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "handleAckPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleFailAckPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleFailAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleSynPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleSynPackage", "outputs": [ { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { - "inputs": [], + "type": "function", "name": "init", + "inputs": [], "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "largeTransferLimitMap", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "largeTransferLimitMap", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "lockInfoMap", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "lockInfoMap", "outputs": [ { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "unlockAt", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "lockPeriod", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", + "name": "recoverBCAsset", + "inputs": [ + { + "name": "tokenSymbol", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "recipient", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", "name": "relayFee", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "setLargeTransferLimit", "inputs": [ { - "internalType": "address", "name": "bep20Token", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "largeTransferLimit", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "setLargeTransferLimit", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "transferOut", "inputs": [ { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint64", "name": "expireTime", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "name": "transferOut", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "unbindToken", "inputs": [ { - "internalType": "bytes32", "name": "bep2Symbol", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "unbindToken", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "withdrawStakingBNB", "inputs": [ { - "internalType": "uint256", "name": "amount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "name": "withdrawStakingBNB", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "withdrawUnlockedToken", "inputs": [ { - "internalType": "address", "name": "tokenAddress", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "address", "name": "recipient", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "withdrawUnlockedToken", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "CancelTokenRecoverLock", + "inputs": [ + { + "name": "tokenSymbol", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "tokenAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "attacker", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "CancelTransfer", + "inputs": [ + { + "name": "tokenAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "attacker", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LargeTransferLimitSet", + "inputs": [ + { + "name": "tokenAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "largeTransferLimit", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LargeTransferLocked", + "inputs": [ + { + "name": "tokenAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "unlockAt", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false }, { - "stateMutability": "payable", - "type": "receive" + "type": "event", + "name": "NotBoundToken", + "inputs": [ + { + "name": "tokenSymbol", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "TokenRecoverLocked", + "inputs": [ + { + "name": "tokenSymbol", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "tokenAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "unlockAt", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WithdrawUnlockedToken", + "inputs": [ + { + "name": "tokenAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "recipient", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "receiveDeposit", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "refundFailure", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "refundAddr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "refundSuccess", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "refundAddr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "status", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "rewardTo", + "inputs": [ + { + "name": "to", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "transferInSuccess", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "refundAddr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "transferOutSuccess", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "senderAddr", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "relayFee", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unexpectedPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/tokenmanager.abi b/abi/tokenmanager.abi index 11d7ea2a..e9969434 100644 --- a/abi/tokenmanager.abi +++ b/abi/tokenmanager.abi @@ -1,1081 +1,1167 @@ [ { + "type": "function", + "name": "BC_FUSION_CHANNELID", "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "contractAddr", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "bep2Symbol", - "type": "string" - }, - { - "indexed": false, - "internalType": "uint32", - "name": "failedReason", - "type": "uint32" - } - ], - "name": "bindFailure", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "contractAddr", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "bep2Symbol", - "type": "string" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "totalSupply", - "type": "uint256" - }, + "outputs": [ { - "indexed": false, - "internalType": "uint256", - "name": "peggyAmount", - "type": "uint256" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "bindSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, + "type": "function", + "name": "BEP2_TOKEN_DECIMALS", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "errCode", - "type": "uint8" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "mirrorFailure", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, + "type": "function", + "name": "BIND_CHANNELID", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes32", - "name": "bep2Symbol", - "type": "bytes32" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "mirrorSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "string", - "name": "key", - "type": "string" - }, + "type": "function", + "name": "BIND_PACKAGE", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "value", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "paramChange", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "bep20Addr", - "type": "address" - }, + "type": "function", + "name": "BIND_STATUS_ALREADY_BOUND_TOKEN", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "uint8", - "name": "errCode", - "type": "uint8" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "syncFailure", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ + "type": "function", + "name": "BIND_STATUS_DECIMALS_MISMATCH", + "inputs": [], + "outputs": [ { - "indexed": true, - "internalType": "address", - "name": "bep20Addr", - "type": "address" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "syncSuccess", - "type": "event" + "stateMutability": "view" }, { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "channelId", - "type": "uint8" - }, + "type": "function", + "name": "BIND_STATUS_REJECTED", + "inputs": [], + "outputs": [ { - "indexed": false, - "internalType": "bytes", - "name": "msgBytes", - "type": "bytes" + "name": "", + "type": "uint8", + "internalType": "uint8" } ], - "name": "unexpectedPackage", - "type": "event" + "stateMutability": "view" }, { + "type": "function", + "name": "BIND_STATUS_SYMBOL_MISMATCH", "inputs": [], - "name": "BEP2_TOKEN_DECIMALS", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "BIND_STATUS_TIMEOUT", "inputs": [], - "name": "BIND_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "BIND_STATUS_TOO_MUCH_TOKENHUB_BALANCE", "inputs": [], - "name": "BIND_PACKAGE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "BIND_STATUS_TOTAL_SUPPLY_MISMATCH", "inputs": [], - "name": "BIND_STATUS_ALREADY_BOUND_TOKEN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "CODE_OK", "inputs": [], - "name": "BIND_STATUS_DECIMALS_MISMATCH", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_CHAIN_CONTRACT_ADDR", "inputs": [], - "name": "BIND_STATUS_REJECTED", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "CROSS_STAKE_CHANNELID", "inputs": [], - "name": "BIND_STATUS_SYMBOL_MISMATCH", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "ERROR_FAIL_DECODE", "inputs": [], - "name": "BIND_STATUS_TIMEOUT", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint32", + "internalType": "uint32" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOVERNOR_ADDR", "inputs": [], - "name": "BIND_STATUS_TOO_MUCH_TOKENHUB_BALANCE", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_CHANNELID", "inputs": [], - "name": "BIND_STATUS_TOTAL_SUPPLY_MISMATCH", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_HUB_ADDR", "inputs": [], - "name": "CODE_OK", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "GOV_TOKEN_ADDR", "inputs": [], - "name": "CROSS_CHAIN_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "INCENTIVIZE_ADDR", "inputs": [], - "name": "CROSS_STAKE_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LIGHT_CLIENT_ADDR", "inputs": [], - "name": "ERROR_FAIL_DECODE", "outputs": [ { - "internalType": "uint32", "name": "", - "type": "uint32" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "LOG_MAX_UINT256", "inputs": [], - "name": "GOV_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAXIMUM_BEP20_SYMBOL_LEN", "inputs": [], - "name": "GOV_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_BEP2_TOTAL_SUPPLY", "inputs": [], - "name": "INCENTIVIZE_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MAX_GAS_FOR_TRANSFER_BNB", "inputs": [], - "name": "LIGHT_CLIENT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MINIMUM_BEP20_SYMBOL_LEN", "inputs": [], - "name": "LOG_MAX_UINT256", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MIRROR_CHANNELID", "inputs": [], - "name": "MAXIMUM_BEP20_SYMBOL_LEN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MIRROR_STATUS_ALREADY_BOUND", "inputs": [], - "name": "MAX_BEP2_TOTAL_SUPPLY", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MIRROR_STATUS_DUPLICATED_BEP2_SYMBOL", "inputs": [], - "name": "MAX_GAS_FOR_TRANSFER_BNB", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "MIRROR_STATUS_TIMEOUT", "inputs": [], - "name": "MINIMUM_BEP20_SYMBOL_LEN", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "RELAYERHUB_CONTRACT_ADDR", "inputs": [], - "name": "MIRROR_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CHANNELID", "inputs": [], - "name": "MIRROR_STATUS_ALREADY_BOUND", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SLASH_CONTRACT_ADDR", "inputs": [], - "name": "MIRROR_STATUS_DUPLICATED_BEP2_SYMBOL", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_CREDIT_ADDR", "inputs": [], - "name": "MIRROR_STATUS_TIMEOUT", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKE_HUB_ADDR", "inputs": [], - "name": "RELAYERHUB_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CHANNELID", "inputs": [], - "name": "SLASH_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "STAKING_CONTRACT_ADDR", "inputs": [], - "name": "SLASH_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYNC_CHANNELID", "inputs": [], - "name": "STAKING_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYNC_STATUS_NOT_BOUND_MIRROR", "inputs": [], - "name": "STAKING_CONTRACT_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYNC_STATUS_TIMEOUT", "inputs": [], - "name": "SYNC_CHANNELID", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "SYSTEM_REWARD_ADDR", "inputs": [], - "name": "SYNC_STATUS_NOT_BOUND_MIRROR", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TEN_DECIMALS", "inputs": [], - "name": "SYNC_STATUS_TIMEOUT", "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TIMELOCK_ADDR", "inputs": [], - "name": "SYSTEM_REWARD_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_HUB_ADDR", "inputs": [], - "name": "TEN_DECIMALS", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_MANAGER_ADDR", "inputs": [], - "name": "TOKEN_HUB_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "TOKEN_RECOVER_PORTAL_ADDR", "inputs": [], - "name": "TOKEN_MANAGER_ADDR", "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TRANSFER_IN_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "TRANSFER_OUT_CHANNELID", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "UNBIND_PACKAGE", + "inputs": [], "outputs": [ { - "internalType": "uint8", "name": "", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "VALIDATOR_CONTRACT_ADDR", + "inputs": [], "outputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "alreadyInit", + "inputs": [], "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "approveBind", "inputs": [ { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "string", "name": "bep2Symbol", - "type": "string" + "type": "string", + "internalType": "string" } ], - "name": "approveBind", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "bindPackageRecord", "inputs": [ { - "internalType": "bytes32", "name": "", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" } ], - "name": "bindPackageRecord", "outputs": [ { - "internalType": "uint8", "name": "packageType", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes32", "name": "bep2TokenSymbol", - "type": "bytes32" + "type": "bytes32", + "internalType": "bytes32" }, { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint256", "name": "totalSupply", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint256", "name": "peggyAmount", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" }, { - "internalType": "uint8", "name": "bep20Decimals", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "uint64", "name": "expireTime", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "boundByMirror", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "boundByMirror", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { - "inputs": [], + "type": "function", "name": "bscChainID", + "inputs": [], "outputs": [ { - "internalType": "uint16", "name": "", - "type": "uint16" + "type": "uint16", + "internalType": "uint16" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "expireBind", "inputs": [ { - "internalType": "string", "name": "bep2Symbol", - "type": "string" + "type": "string", + "internalType": "string" } ], - "name": "expireBind", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "handleAckPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleFailAckPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleFailAckPackage", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "handleSynPackage", "inputs": [ { - "internalType": "uint8", "name": "channelId", - "type": "uint8" + "type": "uint8", + "internalType": "uint8" }, { - "internalType": "bytes", "name": "msgBytes", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "handleSynPackage", "outputs": [ { - "internalType": "bytes", "name": "", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" }, { + "type": "function", + "name": "mirror", "inputs": [ { - "internalType": "address", "name": "bep20Addr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint64", "name": "expireTime", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "name": "mirror", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { - "inputs": [], + "type": "function", "name": "mirrorFee", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "mirrorPendingRecord", "inputs": [ { - "internalType": "address", "name": "", - "type": "address" + "type": "address", + "internalType": "address" } ], - "name": "mirrorPendingRecord", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "queryRequiredLockAmountForBind", "inputs": [ { - "internalType": "string", "name": "symbol", - "type": "string" + "type": "string", + "internalType": "string" } ], - "name": "queryRequiredLockAmountForBind", "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "rejectBind", "inputs": [ { - "internalType": "address", "name": "contractAddr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "string", "name": "bep2Symbol", - "type": "string" + "type": "string", + "internalType": "string" } ], - "name": "rejectBind", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { + "type": "function", + "name": "sync", "inputs": [ { - "internalType": "address", "name": "bep20Addr", - "type": "address" + "type": "address", + "internalType": "address" }, { - "internalType": "uint64", "name": "expireTime", - "type": "uint64" + "type": "uint64", + "internalType": "uint64" } ], - "name": "sync", "outputs": [ { - "internalType": "bool", "name": "", - "type": "bool" + "type": "bool", + "internalType": "bool" } ], - "stateMutability": "payable", - "type": "function" + "stateMutability": "payable" }, { - "inputs": [], + "type": "function", "name": "syncFee", + "inputs": [], "outputs": [ { - "internalType": "uint256", "name": "", - "type": "uint256" + "type": "uint256", + "internalType": "uint256" } ], - "stateMutability": "view", - "type": "function" + "stateMutability": "view" }, { + "type": "function", + "name": "updateParam", "inputs": [ { - "internalType": "string", "name": "key", - "type": "string" + "type": "string", + "internalType": "string" }, { - "internalType": "bytes", "name": "value", - "type": "bytes" + "type": "bytes", + "internalType": "bytes" } ], - "name": "updateParam", "outputs": [], - "stateMutability": "nonpayable", - "type": "function" + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "bindFailure", + "inputs": [ + { + "name": "contractAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bep2Symbol", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "failedReason", + "type": "uint32", + "indexed": false, + "internalType": "uint32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "bindSuccess", + "inputs": [ + { + "name": "contractAddr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bep2Symbol", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "totalSupply", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "peggyAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "mirrorFailure", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "errCode", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "mirrorSuccess", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "bep2Symbol", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "paramChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "syncFailure", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "errCode", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "syncSuccess", + "inputs": [ + { + "name": "bep20Addr", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "unexpectedPackage", + "inputs": [ + { + "name": "channelId", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + }, + { + "name": "msgBytes", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false } ] \ No newline at end of file diff --git a/abi/tokenrecoverportal.abi b/abi/tokenrecoverportal.abi new file mode 100644 index 00000000..c81d35aa --- /dev/null +++ b/abi/tokenrecoverportal.abi @@ -0,0 +1,490 @@ +[ + { + "type": "function", + "name": "BC_FUSION_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "SOURCE_CHAIN_ID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "STAKING_CHANNELID", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addToBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "approvalAddress", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "blackList", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cancelTokenRecover", + "inputs": [ + { + "name": "tokenSymbol", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "attacker", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "isPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isRecovered", + "inputs": [ + { + "name": "node", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "merkleRoot", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "merkleRootAlreadyInit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pause", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "recover", + "inputs": [ + { + "name": "tokenSymbol", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "ownerPubKey", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "ownerSignature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "approvalSignature", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "merkleProof", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "removeFromBlackList", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resume", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "updateParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "BlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ParamChange", + "inputs": [ + { + "name": "key", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Paused", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "ProtectorChanged", + "inputs": [ + { + "name": "oldProtector", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newProtector", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Resumed", + "inputs": [], + "anonymous": false + }, + { + "type": "event", + "name": "TokenRecoverRequested", + "inputs": [ + { + "name": "ownerAddress", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + }, + { + "name": "tokenSymbol", + "type": "bytes32", + "indexed": false, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "UnBlackListed", + "inputs": [ + { + "name": "target", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "AlreadyPaused", + "inputs": [] + }, + { + "type": "error", + "name": "AlreadyRecovered", + "inputs": [] + }, + { + "type": "error", + "name": "ApprovalAddressNotInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "InBlackList", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidApprovalSignature", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidOwnerPubKeyLength", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidOwnerSignatureLength", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidProof", + "inputs": [] + }, + { + "type": "error", + "name": "InvalidValue", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + }, + { + "type": "error", + "name": "MerkleRootAlreadyInitiated", + "inputs": [] + }, + { + "type": "error", + "name": "MerkleRootNotInitialized", + "inputs": [] + }, + { + "type": "error", + "name": "NotPaused", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyCoinbase", + "inputs": [] + }, + { + "type": "error", + "name": "OnlyProtector", + "inputs": [] + }, + { + "type": "error", + "name": "OnlySystemContract", + "inputs": [ + { + "name": "systemContract", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "OnlyZeroGasPrice", + "inputs": [] + }, + { + "type": "error", + "name": "TokenRecoverPortalPaused", + "inputs": [] + }, + { + "type": "error", + "name": "UnknownParam", + "inputs": [ + { + "name": "key", + "type": "string", + "internalType": "string" + }, + { + "name": "value", + "type": "bytes", + "internalType": "bytes" + } + ] + } +] \ No newline at end of file diff --git a/contracts/BC_fusion/BSCGovernor.sol b/contracts/BC_fusion/BSCGovernor.sol new file mode 100644 index 00000000..24c32161 --- /dev/null +++ b/contracts/BC_fusion/BSCGovernor.sol @@ -0,0 +1,323 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorSettingsUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/governance/GovernorUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/governance/compatibility/GovernorCompatibilityBravoUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorTimelockControlUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorVotesQuorumFractionUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/governance/extensions/GovernorPreventLateQuorumUpgradeable.sol"; + +import "./System.sol"; +import "./extension/Protectable.sol"; +import "./lib/Utils.sol"; +import "./interface/IGovToken.sol"; + +contract BSCGovernor is + System, + Initializable, + Protectable, + GovernorUpgradeable, + GovernorSettingsUpgradeable, + GovernorCompatibilityBravoUpgradeable, + GovernorVotesUpgradeable, + GovernorTimelockControlUpgradeable, + GovernorVotesQuorumFractionUpgradeable, + GovernorPreventLateQuorumUpgradeable +{ + using Utils for bytes; + using Utils for string; + + /*----------------- constants -----------------*/ + /** + * @dev caution: + * INIT_VOTING_DELAY, INIT_VOTING_PERIOD and INIT_MIN_PERIOD_AFTER_QUORUM are default in number of blocks, not seconds + */ + uint256 private constant BLOCK_INTERVAL = 3 seconds; + uint256 private constant INIT_VOTING_DELAY = 0 hours / BLOCK_INTERVAL; + uint256 private constant INIT_VOTING_PERIOD = 7 days / BLOCK_INTERVAL; + uint256 private constant INIT_PROPOSAL_THRESHOLD = 200 ether; // = 200 BNB + uint256 private constant INIT_QUORUM_NUMERATOR = 10; // for >= 10% + + // starting propose requires totalSupply of GovBNB >= 10000000 * 1e18 + uint256 private constant PROPOSE_START_GOVBNB_SUPPLY_THRESHOLD = 10_000_000 ether; + // ensures there is a minimum voting period (1 days) after quorum is reached + uint64 private constant INIT_MIN_PERIOD_AFTER_QUORUM = uint64(1 days / BLOCK_INTERVAL); + + /*----------------- errors -----------------*/ + // @notice signature: 0x584a7938 + error NotWhitelisted(); + // @notice signature: 0x11b6707f + error TotalSupplyNotEnough(); + // @notice signature: 0x867f3ee5 + error OneLiveProposalPerProposer(); + + /*----------------- storage -----------------*/ + // target contract => is whitelisted for governance + mapping(address => bool) public whitelistTargets; + + bool public proposeStarted; + + // @notice The latest proposal for each proposer + mapping(address => uint256) public latestProposalIds; + + /*----------------- init -----------------*/ + function initialize() external initializer onlyCoinbase onlyZeroGasPrice { + __Governor_init("BSCGovernor"); + __GovernorSettings_init(INIT_VOTING_DELAY, INIT_VOTING_PERIOD, INIT_PROPOSAL_THRESHOLD); + __GovernorCompatibilityBravo_init(); + __GovernorVotes_init(IVotesUpgradeable(GOV_TOKEN_ADDR)); + __GovernorTimelockControl_init(TimelockControllerUpgradeable(payable(TIMELOCK_ADDR))); + __GovernorVotesQuorumFraction_init(INIT_QUORUM_NUMERATOR); + __GovernorPreventLateQuorum_init(INIT_MIN_PERIOD_AFTER_QUORUM); + + // BSCGovernor => Timelock => GovHub => system contracts + whitelistTargets[GOV_HUB_ADDR] = true; + + // TODO + // Different address will be set depending on the environment + __Protectable_init_unchained(address(0xdEaD)); + } + + /*----------------- external functions -----------------*/ + /** + * @dev Create a new proposal. Vote start after a delay specified by {IGovernor-votingDelay} and lasts for a + * duration specified by {IGovernor-votingPeriod}. + * + * Emits a {ProposalCreated} event. + */ + function propose( + address[] memory targets, + uint256[] memory values, + bytes[] memory calldatas, + string memory description + ) + public + override(GovernorUpgradeable, GovernorCompatibilityBravoUpgradeable, IGovernorUpgradeable) + whenNotPaused + notInBlackList + returns (uint256) + { + _checkAndStartPropose(); + + uint256 latestProposalId = latestProposalIds[msg.sender]; + if (latestProposalId != 0) { + ProposalState proposersLatestProposalState = state(latestProposalId); + if ( + proposersLatestProposalState == ProposalState.Active + || proposersLatestProposalState == ProposalState.Pending + ) { + revert OneLiveProposalPerProposer(); + } + } + + bytes32 descriptionHash = keccak256(bytes(description)); + uint256 proposalId = hashProposal(targets, values, calldatas, descriptionHash); + latestProposalIds[msg.sender] = proposalId; + + return GovernorCompatibilityBravoUpgradeable.propose(targets, values, calldatas, description); + } + + /** + * @dev Function to queue a proposal to the timelock. + * @param targets target contracts to call + * @param values msg.value for each contract call + * @param calldatas calldata for each contract call + * @param descriptionHash the description hash + */ + function queue( + address[] memory targets, + uint256[] memory values, + bytes[] memory calldatas, + bytes32 descriptionHash + ) + public + override(GovernorTimelockControlUpgradeable, IGovernorTimelockUpgradeable) + whenNotPaused + notInBlackList + returns (uint256 proposalId) + { + for (uint256 i = 0; i < targets.length; i++) { + if (!whitelistTargets[targets[i]]) revert NotWhitelisted(); + } + + return GovernorTimelockControlUpgradeable.queue(targets, values, calldatas, descriptionHash); + } + + /** + * @dev Cancel a proposal. A proposal is cancellable by the proposer, but only while it is Pending state, i.e. + * before the vote starts. + * + * Emits a {ProposalCanceled} event. + */ + function cancel( + address[] memory targets, + uint256[] memory values, + bytes[] memory calldatas, + bytes32 descriptionHash + ) + public + override(GovernorUpgradeable, GovernorCompatibilityBravoUpgradeable, IGovernorUpgradeable) + returns (uint256) + { + return GovernorCompatibilityBravoUpgradeable.cancel(targets, values, calldatas, descriptionHash); + } + + /*----------------- system functions -----------------*/ + /** + * @param key the key of the param + * @param value the value of the param + */ + function updateParam(string calldata key, bytes calldata value) external onlyGov { + if (key.compareStrings("votingDelay")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newVotingDelay = value.bytesToUint256(32); + if (newVotingDelay == 0 || newVotingDelay > 24 hours) revert InvalidValue(key, value); + _setVotingDelay(newVotingDelay); + } else if (key.compareStrings("votingPeriod")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newVotingPeriod = value.bytesToUint256(32); + if (newVotingPeriod == 0 || newVotingPeriod > 30 days) revert InvalidValue(key, value); + _setVotingPeriod(newVotingPeriod); + } else if (key.compareStrings("proposalThreshold")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newProposalThreshold = value.bytesToUint256(32); + if (newProposalThreshold == 0 || newProposalThreshold > 10_000 ether) revert InvalidValue(key, value); + _setProposalThreshold(newProposalThreshold); + } else if (key.compareStrings("quorumNumerator")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newQuorumNumerator = value.bytesToUint256(32); + if (newQuorumNumerator < 5 || newQuorumNumerator > 20) revert InvalidValue(key, value); + _updateQuorumNumerator(newQuorumNumerator); + } else if (key.compareStrings("minPeriodAfterQuorum")) { + if (value.length != 8) revert InvalidValue(key, value); + uint64 newMinPeriodAfterQuorum = value.bytesToUint64(8); + if (newMinPeriodAfterQuorum == 0 || newMinPeriodAfterQuorum > 2 days) revert InvalidValue(key, value); + _setLateQuorumVoteExtension(newMinPeriodAfterQuorum); + } else if (key.compareStrings("governorProtector")) { + if (value.length != 20) revert InvalidValue(key, value); + address newGovernorProtector = value.bytesToAddress(20); + if (newGovernorProtector == address(0)) revert InvalidValue(key, value); + _setProtector(newGovernorProtector); + } else { + revert UnknownParam(key, value); + } + emit ParamChange(key, value); + } + + /*----------------- view functions -----------------*/ + /* + *@notice Query if a contract implements an interface + *@param interfaceID The interface identifier, as specified in ERC-165 + *@dev Interface identification is specified in ERC-165. This function + *uses less than 30,000 gas. + *@return `true` if the contract implements `interfaceID` and + *`interfaceID` is not 0xffffffff, `false` otherwise + */ + function supportsInterface(bytes4 interfaceId) + public + view + override(GovernorUpgradeable, IERC165Upgradeable, GovernorTimelockControlUpgradeable) + returns (bool) + { + return GovernorTimelockControlUpgradeable.supportsInterface(interfaceId); + } + + /** + * @notice module:core + * @dev Current state of a proposal, following Compound's convention + */ + function state(uint256 proposalId) + public + view + override(GovernorUpgradeable, IGovernorUpgradeable, GovernorTimelockControlUpgradeable) + returns (ProposalState) + { + return GovernorTimelockControlUpgradeable.state(proposalId); + } + + /** + * @dev Part of the Governor Bravo's interface: _"The number of votes required in order for a voter to become a proposer"_. + */ + function proposalThreshold() + public + view + override(GovernorSettingsUpgradeable, GovernorUpgradeable) + returns (uint256) + { + return GovernorSettingsUpgradeable.proposalThreshold(); + } + + /** + * @notice module:core + * @dev Timepoint at which votes close. If using block number, votes close at the end of this block, so it is + * possible to cast a vote during this block. + */ + function proposalDeadline(uint256 proposalId) + public + view + override(IGovernorUpgradeable, GovernorUpgradeable, GovernorPreventLateQuorumUpgradeable) + returns (uint256) + { + return GovernorPreventLateQuorumUpgradeable.proposalDeadline(proposalId); + } + + /*----------------- internal functions -----------------*/ + function _checkAndStartPropose() internal { + if (!proposeStarted) { + if (IGovToken(GOV_TOKEN_ADDR).totalSupply() < PROPOSE_START_GOVBNB_SUPPLY_THRESHOLD) { + revert TotalSupplyNotEnough(); + } + proposeStarted = true; + } + } + + function _execute( + uint256 proposalId, + address[] memory targets, + uint256[] memory values, + bytes[] memory calldatas, + bytes32 descriptionHash + ) internal override(GovernorUpgradeable, GovernorTimelockControlUpgradeable) whenNotPaused notInBlackList { + for (uint256 i = 0; i < targets.length; i++) { + if (!whitelistTargets[targets[i]]) revert NotWhitelisted(); + } + + GovernorTimelockControlUpgradeable._execute(proposalId, targets, values, calldatas, descriptionHash); + } + + function _cancel( + address[] memory targets, + uint256[] memory values, + bytes[] memory calldatas, + bytes32 descriptionHash + ) internal override(GovernorUpgradeable, GovernorTimelockControlUpgradeable) returns (uint256) { + return GovernorTimelockControlUpgradeable._cancel(targets, values, calldatas, descriptionHash); + } + + function _castVote( + uint256 proposalId, + address account, + uint8 support, + string memory reason, + bytes memory params + ) + internal + override(GovernorUpgradeable, GovernorPreventLateQuorumUpgradeable) + whenNotPaused + notInBlackList + returns (uint256) + { + return GovernorPreventLateQuorumUpgradeable._castVote(proposalId, account, support, reason, params); + } + + function _executor() + internal + view + override(GovernorUpgradeable, GovernorTimelockControlUpgradeable) + returns (address) + { + return GovernorTimelockControlUpgradeable._executor(); + } +} diff --git a/contracts/BC_fusion/BSCTimelock.sol b/contracts/BC_fusion/BSCTimelock.sol new file mode 100644 index 00000000..b01dfa3a --- /dev/null +++ b/contracts/BC_fusion/BSCTimelock.sol @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts-upgradeable/governance/TimelockControllerUpgradeable.sol"; + +import "./System.sol"; +import "./lib/Utils.sol"; + +contract BSCTimelock is System, Initializable, TimelockControllerUpgradeable { + using Utils for bytes; + using Utils for string; + + /*----------------- constants -----------------*/ + /* + * @dev caution: minDelay using second as unit + */ + uint256 private constant INIT_MINIMAL_DELAY = 24 hours; + + /*----------------- init -----------------*/ + function initialize() external initializer onlyCoinbase onlyZeroGasPrice { + address[] memory _governor = new address[](1); + _governor[0] = GOVERNOR_ADDR; + __TimelockController_init(INIT_MINIMAL_DELAY, _governor, _governor, GOVERNOR_ADDR); + } + + /*----------------- system functions -----------------*/ + /** + * @param key the key of the param + * @param value the value of the param + */ + function updateParam(string calldata key, bytes calldata value) external onlyGov { + if (key.compareStrings("minDelay")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newMinDelay = value.bytesToUint256(32); + if (newMinDelay == 0 || newMinDelay > 14 days) revert InvalidValue(key, value); + this.updateDelay(newMinDelay); + } else { + revert UnknownParam(key, value); + } + emit ParamChange(key, value); + } +} diff --git a/contracts/BC_fusion/GovToken.sol b/contracts/BC_fusion/GovToken.sol new file mode 100644 index 00000000..f0736b2c --- /dev/null +++ b/contracts/BC_fusion/GovToken.sol @@ -0,0 +1,122 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20BurnableUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20VotesUpgradeable.sol"; + +import "./System.sol"; +import "./interface/IStakeCredit.sol"; + +contract GovToken is + System, + Initializable, + ERC20Upgradeable, + ERC20BurnableUpgradeable, + ERC20PermitUpgradeable, + ERC20VotesUpgradeable +{ + /*----------------- constants -----------------*/ + string private constant NAME = "BSC Governance Token"; + string private constant SYMBOL = "govBNB"; + + /*----------------- errors -----------------*/ + // @notice signature: 0x8cd22d19 + error TransferNotAllowed(); + // @notice signature: 0x20287471 + error ApproveNotAllowed(); + // @notice signature: 0xe5d87767 + error BurnNotAllowed(); + + /*----------------- storage -----------------*/ + // validator StakeCredit contract => user => amount + mapping(address => mapping(address => uint256)) public mintedMap; + + /*----------------- init -----------------*/ + function initialize() public initializer onlyCoinbase onlyZeroGasPrice { + __ERC20_init(NAME, SYMBOL); + __ERC20Burnable_init(); + __ERC20Permit_init(NAME); + __ERC20Votes_init(); + } + + /*----------------- external functions -----------------*/ + /** + * @dev Sync the account's govBNB amount to the actual BNB value of the StakingCredit he holds + * @param stakeCredit the stakeCredit Token contract + * @param account the account to sync gov tokens to + */ + function sync(address stakeCredit, address account) external onlyStakeHub { + _sync(stakeCredit, account); + } + + /** + * @dev Batch sync the account's govBNB amount to the actual BNB value of the StakingCredit he holds + * @param stakeCredits the stakeCredit Token contracts + * @param account the account to sync gov tokens to + */ + function syncBatch(address[] calldata stakeCredits, address account) external onlyStakeHub { + uint256 _length = stakeCredits.length; + for (uint256 i = 0; i < _length; ++i) { + _sync(stakeCredits[i], account); + } + } + + /** + * @dev delegate govBNB votes to delegatee + * @param delegator the delegator + * @param delegatee the delegatee + */ + function delegateVote(address delegator, address delegatee) external onlyStakeHub { + _delegate(delegator, delegatee); + } + + function burn(uint256) public pure override { + revert BurnNotAllowed(); + } + + function burnFrom(address, uint256) public pure override { + revert BurnNotAllowed(); + } + + /*----------------- internal functions -----------------*/ + function _sync(address stakeCredit, address account) internal { + uint256 latestBNBAmount = IStakeCredit(stakeCredit).getPooledBNB(account); + uint256 _mintedAmount = mintedMap[stakeCredit][account]; + + if (_mintedAmount < latestBNBAmount) { + uint256 _needMint = latestBNBAmount - _mintedAmount; + mintedMap[stakeCredit][account] = latestBNBAmount; + _mint(account, _needMint); + } else if (_mintedAmount > latestBNBAmount) { + uint256 _needBurn = _mintedAmount - latestBNBAmount; + mintedMap[stakeCredit][account] = latestBNBAmount; + _burn(account, _needBurn); + } + } + + function _transfer(address, address, uint256) internal pure override { + revert TransferNotAllowed(); + } + + function _approve(address, address, uint256) internal pure override { + revert ApproveNotAllowed(); + } + + function _afterTokenTransfer( + address from, + address to, + uint256 amount + ) internal override(ERC20Upgradeable, ERC20VotesUpgradeable) { + ERC20VotesUpgradeable._afterTokenTransfer(from, to, amount); + } + + function _mint(address to, uint256 amount) internal override(ERC20Upgradeable, ERC20VotesUpgradeable) { + ERC20VotesUpgradeable._mint(to, amount); + } + + function _burn(address account, uint256 amount) internal override(ERC20Upgradeable, ERC20VotesUpgradeable) { + ERC20VotesUpgradeable._burn(account, amount); + } +} diff --git a/contracts/BC_fusion/StakeCredit.sol b/contracts/BC_fusion/StakeCredit.sol new file mode 100644 index 00000000..5bd41923 --- /dev/null +++ b/contracts/BC_fusion/StakeCredit.sol @@ -0,0 +1,346 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/structs/DoubleEndedQueueUpgradeable.sol"; + +import "./System.sol"; +import "./interface/IStakeHub.sol"; + +contract StakeCredit is System, Initializable, ReentrancyGuardUpgradeable, ERC20Upgradeable { + using CountersUpgradeable for CountersUpgradeable.Counter; + using DoubleEndedQueueUpgradeable for DoubleEndedQueueUpgradeable.Bytes32Deque; + + /*----------------- constants -----------------*/ + uint256 private constant COMMISSION_RATE_BASE = 10_000; // 100% + + /*----------------- errors -----------------*/ + // @notice signature: 0x2fe8dae9 + error ZeroTotalShares(); + // @notice signature: 0xf6ed9ce0 + error ZeroTotalPooledBNB(); + // @notice signature: 0x8cd22d19 + error TransferNotAllowed(); + // @notice signature: 0x20287471 + error ApproveNotAllowed(); + // @notice signature: 0x858f9ae4 + error WrongInitContext(); + // @notice signature: 0x90b8ec18 + error TransferFailed(); + // @notice signature: 0x1f2a2005 + error ZeroAmount(); + // @notice signature: 0x9811e0c7 + error ZeroShares(); + // @notice signature: 0xf4d678b8 + error InsufficientBalance(); + // @notice signature: 0xad418937 + error NoUnbondRequest(); + // @notice signature: 0x0f363824 + error NoClaimableUnbondRequest(); + // @notice signature: 0xb19e9115 + error RequestExisted(); + + /*----------------- storage -----------------*/ + address public validator; // validator's operator address + uint256 public totalPooledBNB; // total reward plus total BNB staked in the pool + + // hash of the unbond request => unbond request + mapping(bytes32 => UnbondRequest) private _unbondRequests; + // delegator address => unbond request queue(hash of the request) + mapping(address => DoubleEndedQueueUpgradeable.Bytes32Deque) private _unbondRequestsQueue; + // delegator address => personal unbond sequence + mapping(address => CountersUpgradeable.Counter) private _unbondSequence; + + // day index => receivedReward + mapping(uint256 => uint256) public rewardRecord; + // day index => totalPooledBNB + mapping(uint256 => uint256) public totalPooledBNBRecord; + + /*----------------- structs and events -----------------*/ + struct UnbondRequest { + uint256 shares; + uint256 bnbAmount; + uint256 unlockTime; + } + + event RewardReceived(uint256 rewardToAll, uint256 commission); + + /** + * @notice only accept BNB from `StakeHub` + */ + receive() external payable onlyStakeHub { + uint256 index = block.timestamp / IStakeHub(STAKE_HUB_ADDR).BREATHE_BLOCK_INTERVAL(); + totalPooledBNBRecord[index] = totalPooledBNB; + rewardRecord[index] += msg.value; + totalPooledBNB += msg.value; + } + + /*----------------- init -----------------*/ + /* + * @param _validator validator's operator address + * @param _moniker validator's moniker + */ + function initialize(address _validator, string calldata _moniker) external payable initializer onlyStakeHub { + string memory name_ = string.concat("Stake ", _moniker, " Credit"); + string memory symbol_ = string.concat("st", _moniker); + __ERC20_init_unchained(name_, symbol_); + __ReentrancyGuard_init_unchained(); + + validator = _validator; + + _bootstrapInitialHolder(msg.value); + } + + /*----------------- external functions -----------------*/ + /** + * @param delegator the address of the delegator + * @return shares the amount of shares minted + */ + function delegate(address delegator) external payable onlyStakeHub returns (uint256 shares) { + if (msg.value == 0) revert ZeroAmount(); + shares = _mintAndSync(delegator, msg.value); + if (shares == 0) revert ZeroShares(); + } + + /** + * @param delegator the address of the delegator + * @param shares the amount of shares to be undelegated + * @return bnbAmount the amount of BNB to be unlocked + */ + function undelegate(address delegator, uint256 shares) external onlyStakeHub returns (uint256 bnbAmount) { + if (shares == 0) revert ZeroShares(); + if (shares > balanceOf(delegator)) revert InsufficientBalance(); + + // add to the queue + bnbAmount = _burnAndSync(delegator, shares); + uint256 unlockTime = block.timestamp + IStakeHub(STAKE_HUB_ADDR).unbondPeriod(); + UnbondRequest memory request = UnbondRequest({ shares: shares, bnbAmount: bnbAmount, unlockTime: unlockTime }); + bytes32 hash = keccak256(abi.encodePacked(delegator, _useSequence(delegator))); + // the hash should not exist in the queue + // this will not happen in normal cases + if (_unbondRequests[hash].shares != 0) revert RequestExisted(); + _unbondRequests[hash] = request; + _unbondRequestsQueue[delegator].pushBack(hash); + } + + /** + * @dev Unbond immediately without adding to the queue. Only for redelegate process. + * @param delegator the address of the delegator + * @param shares the amount of shares to be undelegated + * @return bnbAmount the amount of BNB unlocked + */ + function unbond(address delegator, uint256 shares) external onlyStakeHub returns (uint256 bnbAmount) { + if (shares == 0) revert ZeroShares(); + if (shares > balanceOf(delegator)) revert InsufficientBalance(); + + bnbAmount = _burnAndSync(delegator, shares); + + (bool success,) = STAKE_HUB_ADDR.call{ value: bnbAmount }(""); + if (!success) revert TransferFailed(); + } + + /** + * @param delegator the address of the delegator + * @param number the number of unbond requests to be claimed. 0 means claim all + * @return _totalBnbAmount the total amount of BNB claimed + */ + function claim(address payable delegator, uint256 number) external onlyStakeHub nonReentrant returns (uint256) { + // number == 0 means claim all + // number should not exceed the length of the queue + if (_unbondRequestsQueue[delegator].length() == 0) revert NoUnbondRequest(); + number = (number == 0 || number > _unbondRequestsQueue[delegator].length()) + ? _unbondRequestsQueue[delegator].length() + : number; + + uint256 _totalBnbAmount; + while (number != 0) { + bytes32 hash = _unbondRequestsQueue[delegator].front(); + UnbondRequest memory request = _unbondRequests[hash]; + if (block.timestamp < request.unlockTime) { + break; + } + + // remove from the queue + _unbondRequestsQueue[delegator].popFront(); + + _totalBnbAmount += request.bnbAmount; + --number; + } + if (_totalBnbAmount == 0) revert NoClaimableUnbondRequest(); + + uint256 _gasLimit = IStakeHub(STAKE_HUB_ADDR).transferGasLimit(); + (bool success,) = delegator.call{ gas: _gasLimit, value: _totalBnbAmount }(""); + if (!success) revert TransferFailed(); + + return _totalBnbAmount; + } + + /** + * @dev Distribute the reward to the validator and all delegators. Only the `StakeHub` contract can call this function. + * @param commissionRate the commission rate of the validator + */ + function distributeReward(uint64 commissionRate) external payable onlyStakeHub { + uint256 bnbAmount = msg.value; + uint256 _commission = (bnbAmount * uint256(commissionRate)) / COMMISSION_RATE_BASE; + uint256 _reward = bnbAmount - _commission; + + uint256 index = block.timestamp / IStakeHub(STAKE_HUB_ADDR).BREATHE_BLOCK_INTERVAL(); + totalPooledBNBRecord[index] = totalPooledBNB; + rewardRecord[index] += _reward; + totalPooledBNB += _reward; + + // mint commission to the validator + _mintAndSync(validator, _commission); + + emit RewardReceived(_reward, _commission); + } + + /** + * @dev Slash the validator. Only the `StakeHub` contract can call this function. + * @param slashBnbAmount the amount of BNB to be slashed + * @return realSlashBnbAmount the real amount of BNB slashed + */ + function slash(uint256 slashBnbAmount) external onlyStakeHub returns (uint256) { + uint256 selfDelegation = balanceOf(validator); + uint256 slashShares = getSharesByPooledBNB(slashBnbAmount); + + slashShares = slashShares > selfDelegation ? selfDelegation : slashShares; + uint256 realSlashBnbAmount = _burnAndSync(validator, slashShares); + + (bool success,) = SYSTEM_REWARD_ADDR.call{ value: realSlashBnbAmount }(""); + if (!success) revert TransferFailed(); + + return realSlashBnbAmount; + } + + /*----------------- view functions -----------------*/ + /** + * @return the amount of shares that corresponds to `_bnbAmount` protocol-controlled BNB. + */ + function getSharesByPooledBNB(uint256 bnbAmount) public view returns (uint256) { + if (totalPooledBNB == 0) revert ZeroTotalPooledBNB(); + return (bnbAmount * totalSupply()) / totalPooledBNB; + } + + /** + * @return the amount of BNB that corresponds to `_sharesAmount` token shares. + */ + function getPooledBNBByShares(uint256 shares) public view returns (uint256) { + if (totalSupply() == 0) revert ZeroTotalShares(); + return (shares * totalPooledBNB) / totalSupply(); + } + + /** + * @return the unbond request at _index. + */ + function unbondRequest(address delegator, uint256 _index) public view returns (UnbondRequest memory) { + bytes32 hash = _unbondRequestsQueue[delegator].at(_index); + return _unbondRequests[hash]; + } + + /** + * @return the total length of delegator's pending unbond queue. + */ + function pendingUnbondRequest(address delegator) public view returns (uint256) { + return _unbondRequestsQueue[delegator].length(); + } + + /** + * @return the total number of delegator's claimable unbond requests. + */ + function claimableUnbondRequest(address delegator) public view returns (uint256) { + uint256 length = _unbondRequestsQueue[delegator].length(); + uint256 count; + for (uint256 i; i < length; ++i) { + bytes32 hash = _unbondRequestsQueue[delegator].at(i); + UnbondRequest memory request = _unbondRequests[hash]; + if (block.timestamp >= request.unlockTime) { + ++count; + } else { + break; + } + } + return count; + } + + /** + * @return the sum of first `number` requests' BNB locked in delegator's unbond queue. + */ + function lockedBNBs(address delegator, uint256 number) public view returns (uint256) { + // number == 0 means all + // number should not exceed the length of the queue + if (_unbondRequestsQueue[delegator].length() == 0) { + return 0; + } + number = (number == 0 || number > _unbondRequestsQueue[delegator].length()) + ? _unbondRequestsQueue[delegator].length() + : number; + + uint256 _totalBnbAmount; + for (uint256 i; i < number; ++i) { + bytes32 hash = _unbondRequestsQueue[delegator].at(i); + UnbondRequest memory request = _unbondRequests[hash]; + _totalBnbAmount += request.bnbAmount; + } + return _totalBnbAmount; + } + + /** + * @return the personal unbond sequence of the delegator. + */ + function unbondSequence(address delegator) public view returns (uint256) { + return _unbondSequence[delegator].current(); + } + + /** + * @return the total amount of BNB staked and reward of the delegator. + */ + function getPooledBNB(address account) public view returns (uint256) { + return getPooledBNBByShares(balanceOf(account)); + } + + /*----------------- internal functions -----------------*/ + function _bootstrapInitialHolder(uint256 initAmount) internal onlyInitializing { + // check before mint + uint256 toLock = IStakeHub(STAKE_HUB_ADDR).LOCK_AMOUNT(); + if (initAmount <= toLock || validator == address(0) || totalSupply() != 0) revert WrongInitContext(); + + // mint initial tokens to the validator and lock some of them + // shares is equal to the amount of BNB staked + address deadAddress = IStakeHub(STAKE_HUB_ADDR).DEAD_ADDRESS(); + _mint(deadAddress, toLock); + uint256 initShares = initAmount - toLock; + _mint(validator, initShares); + + totalPooledBNB = initAmount; + } + + function _mintAndSync(address account, uint256 bnbAmount) internal returns (uint256 shares) { + // shares here could be zero + shares = getSharesByPooledBNB(bnbAmount); + _mint(account, shares); + totalPooledBNB += bnbAmount; + } + + function _burnAndSync(address account, uint256 shares) internal returns (uint256 bnbAmount) { + bnbAmount = getPooledBNBByShares(shares); + _burn(account, shares); + totalPooledBNB -= bnbAmount; + } + + function _useSequence(address delegator) internal returns (uint256 current) { + CountersUpgradeable.Counter storage sequence = _unbondSequence[delegator]; + current = sequence.current(); + sequence.increment(); + } + + function _transfer(address, address, uint256) internal pure override { + revert TransferNotAllowed(); + } + + function _approve(address, address, uint256) internal pure override { + revert ApproveNotAllowed(); + } +} diff --git a/contracts/BC_fusion/StakeHub.sol b/contracts/BC_fusion/StakeHub.sol new file mode 100644 index 00000000..7601cab6 --- /dev/null +++ b/contracts/BC_fusion/StakeHub.sol @@ -0,0 +1,1186 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; + +import "./System.sol"; +import "./extension/Protectable.sol"; +import "./interface/IBSCValidatorSet.sol"; +import "./interface/ICrossChain.sol"; +import "./interface/IGovToken.sol"; +import "./interface/IStakeCredit.sol"; +import "./interface/ITokenHub.sol"; +import "./lib/RLPDecode.sol"; +import "./lib/Utils.sol"; + +contract StakeHub is System, Initializable, Protectable { + using RLPDecode for *; + using Utils for string; + using Utils for bytes; + using EnumerableSet for EnumerableSet.AddressSet; + + /*----------------- constants -----------------*/ + uint256 private constant BLS_PUBKEY_LENGTH = 48; + uint256 private constant BLS_SIG_LENGTH = 96; + + address public constant DEAD_ADDRESS = address(0xdEaD); + uint256 public constant LOCK_AMOUNT = 1 ether; + uint256 public constant REDELEGATE_FEE_RATE_BASE = 10000; // 100% + + uint256 public constant BREATHE_BLOCK_INTERVAL = 1 days; + + //TODO: set to the correct bytes of abi.encode({{BCExistingConsensusAddresses}}) and abi.encode({{BCExistingVoteAddresses}}) when landing on mainnet and testnet + // this will be set to proper value after the first sunset hardfork on Beacon Chain + bytes private constant INIT_BC_CONSENSUS_ADDRESSES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"; + bytes private constant INIT_BC_VOTE_ADDRESSES = + hex"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000"; + + // receive fund status + uint8 private constant _DISABLE = 0; + uint8 private constant _ENABLE = 1; + + /*----------------- errors -----------------*/ + // @notice signature: 0x5f28f62b + error ValidatorExisted(); + // @notice signature: 0x056e8811 + error ValidatorNotExisted(); + // @notice signature: 0x4b6b857d + error ValidatorNotJailed(); + // @notice signature: 0x3cdeb0ea + error DuplicateConsensusAddress(); + // @notice signature: 0x11fdb947 + error DuplicateVoteAddress(); + // @notice signature: 0xc0bf4143 + error DuplicateMoniker(); + // @notice signature: 0x2f64097e + error SelfDelegationNotEnough(); + // @notice signature: 0xdc81db85 + error InvalidCommission(); + // @notice signature: 0x5dba5ad7 + error InvalidMoniker(); + // @notice signature: 0x2c8fc796 + error InvalidVoteAddress(); + // @notice signature: 0xca40c236 + error InvalidConsensusAddress(); + // @notice signature: 0x3f259b7a + error UpdateTooFrequently(); + // @notice signature: 0x5c32dd9c + error JailTimeNotExpired(); + // @notice signature: 0xdc6f0bdd + error DelegationAmountTooSmall(); + // @notice signature: 0x64689203 + error OnlySelfDelegation(); + // @notice signature: 0x9811e0c7 + error ZeroShares(); + // @notice signature: 0xf0e3e629 + error SameValidator(); + // @notice signature: 0xbd52fcdb + error NoMoreFelonyAllowed(); + // @notice signature: 0x37233762 + error AlreadySlashed(); + // @notice signature: 0x90b8ec18 + error TransferFailed(); + // @notice signature: 0x41abc801 + error InvalidRequest(); + // @notice signature: 0x1898eb6b + error VoteAddressExpired(); + // @notice signature: 0xc2aee074 + error ConsensusAddressExpired(); + // @notice signature: 0x0d7b78d4 + error InvalidSynPackage(); + + /*----------------- storage -----------------*/ + uint8 private _receiveFundStatus; + uint256 public transferGasLimit; + + // stake params + uint256 public minSelfDelegationBNB; + uint256 public minDelegationBNBChange; + uint256 public maxElectedValidators; + uint256 public unbondPeriod; + uint256 public redelegateFeeRate; + + // slash params + uint256 public downtimeSlashAmount; + uint256 public felonySlashAmount; + uint256 public downtimeJailTime; + uint256 public felonyJailTime; + + // validator operator address set + EnumerableSet.AddressSet private _validatorSet; + // validator operator address => validator info + mapping(address => Validator) private _validators; + // validator moniker set(hash of the moniker) + mapping(bytes32 => bool) private _monikerSet; + // validator consensus address => validator operator address + mapping(address => address) public consensusToOperator; + // validator consensus address => expiry date + mapping(address => uint256) public consensusExpiration; + // validator vote address => validator operator address + mapping(bytes => address) public voteToOperator; + // validator vote address => expiry date + mapping(bytes => uint256) public voteExpiration; + + // legacy addresses of BC + mapping(address => bool) private _legacyConsensusAddress; + mapping(bytes => bool) private _legacyVoteAddress; + + // total number of current jailed validators + uint256 public numOfJailed; + // max number of jailed validators between breathe block(only for malicious vote and double sign) + uint256 public maxFelonyBetweenBreatheBlock; + // index(timestamp / breatheBlockInterval) => number of malicious vote and double sign slash + mapping(uint256 => uint256) private _felonyMap; + // slash key => slash jail time + mapping(bytes32 => uint256) private _felonyRecords; + + /*----------------- structs and events -----------------*/ + struct StakeMigrationPackage { + address operatorAddress; // the operator address of the target validator to delegate to + address delegator; // the beneficiary of the delegation + address refundAddress; // the Beacon Chain address to refund the fund if migration failed + uint256 amount; // the amount of BNB to be migrated(decimal: 18) + } + + enum StakeMigrationRespCode { + MIGRATE_SUCCESS, + CLAIM_FUND_FAILED, + VALIDATOR_NOT_EXISTED, + VALIDATOR_JAILED + } + + struct Validator { + address consensusAddress; + address operatorAddress; + address creditContract; + uint256 createdTime; + bytes voteAddress; + Description description; + Commission commission; + bool jailed; + uint256 jailUntil; + uint256 updateTime; + uint256[20] __reservedSlots; + } + + struct Description { + string moniker; + string identity; + string website; + string details; + } + + struct Commission { + uint64 rate; // the commission rate charged to delegators(10000 is 100%) + uint64 maxRate; // maximum commission rate which validator can ever charge + uint64 maxChangeRate; // maximum daily increase of the validator commission + } + + enum SlashType { + DoubleSign, + DownTime, + MaliciousVote + } + + event ValidatorCreated( + address indexed consensusAddress, + address indexed operatorAddress, + address indexed creditContract, + bytes voteAddress + ); + event StakeCreditInitialized(address indexed operatorAddress, address indexed creditContract); + event ConsensusAddressEdited(address indexed operatorAddress, address indexed newConsensusAddress); + event CommissionRateEdited(address indexed operatorAddress, uint64 newCommissionRate); + event DescriptionEdited(address indexed operatorAddress); + event VoteAddressEdited(address indexed operatorAddress, bytes newVoteAddress); + event Delegated(address indexed operatorAddress, address indexed delegator, uint256 shares, uint256 bnbAmount); + event Undelegated(address indexed operatorAddress, address indexed delegator, uint256 shares, uint256 bnbAmount); + event Redelegated( + address indexed srcValidator, + address indexed dstValidator, + address indexed delegator, + uint256 oldShares, + uint256 newShares, + uint256 bnbAmount + ); + event RewardDistributed(address indexed operatorAddress, uint256 reward); + event RewardDistributeFailed(address indexed operatorAddress, bytes failReason); + event ValidatorSlashed( + address indexed operatorAddress, uint256 jailUntil, uint256 slashAmount, SlashType slashType + ); + event ValidatorJailed(address indexed operatorAddress); + event ValidatorEmptyJailed(address indexed operatorAddress); + event ValidatorUnjailed(address indexed operatorAddress); + event Claimed(address indexed operatorAddress, address indexed delegator, uint256 bnbAmount); + event MigrateSuccess(address indexed operatorAddress, address indexed delegator, uint256 shares, uint256 bnbAmount); + event MigrateFailed( + address indexed operatorAddress, address indexed delegator, uint256 bnbAmount, StakeMigrationRespCode respCode + ); + event UnexpectedPackage(uint8 channelId, bytes msgBytes); + + /*----------------- modifiers -----------------*/ + modifier validatorExist(address operatorAddress) { + if (!_validatorSet.contains(operatorAddress)) revert ValidatorNotExisted(); + _; + } + + modifier enableReceivingFund() { + _receiveFundStatus = _ENABLE; + _; + _receiveFundStatus = _DISABLE; + } + + receive() external payable { + // to prevent BNB from being lost + if (_receiveFundStatus != _ENABLE) revert(); + } + + /** + * @dev this function is invoked by BSC Parlia consensus engine during the hard fork + */ + function initialize() external initializer onlyCoinbase onlyZeroGasPrice { + transferGasLimit = 5000; + minSelfDelegationBNB = 2_000 ether; + minDelegationBNBChange = 1 ether; + maxElectedValidators = 45; + unbondPeriod = 7 days; + redelegateFeeRate = 2; + downtimeSlashAmount = 10 ether; + felonySlashAmount = 200 ether; + downtimeJailTime = 2 days; + felonyJailTime = 30 days; + maxFelonyBetweenBreatheBlock = 2; + + address[] memory bcConsensusAddress; + bytes[] memory bcVoteAddress; + bcConsensusAddress = abi.decode(INIT_BC_CONSENSUS_ADDRESSES, (address[])); + bcVoteAddress = abi.decode(INIT_BC_VOTE_ADDRESSES, (bytes[])); + for (uint256 i; i < bcConsensusAddress.length; ++i) { + _legacyConsensusAddress[bcConsensusAddress[i]] = true; + } + for (uint256 i; i < bcVoteAddress.length; ++i) { + _legacyVoteAddress[bcVoteAddress[i]] = true; + } + + // TODO + // Different address will be set depending on the environment + __Protectable_init_unchained(DEAD_ADDRESS); + } + + /*----------------- Implement cross chain app -----------------*/ + function handleSynPackage( + uint8, + bytes calldata msgBytes + ) external onlyCrossChainContract enableReceivingFund returns (bytes memory) { + (StakeMigrationPackage memory migrationPkg, bool decodeSuccess) = _decodeMigrationSynPackage(msgBytes); + if (!decodeSuccess) revert InvalidSynPackage(); + + if (migrationPkg.amount == 0) { + return new bytes(0); + } + + // claim fund from TokenHub + bool claimSuccess = ITokenHub(TOKEN_HUB_ADDR).claimMigrationFund(migrationPkg.amount); + if (!claimSuccess) { + emit MigrateFailed( + migrationPkg.operatorAddress, + migrationPkg.delegator, + migrationPkg.amount, + StakeMigrationRespCode.CLAIM_FUND_FAILED + ); + return msgBytes; + } + + StakeMigrationRespCode respCode = _doMigration(migrationPkg); + + if (respCode == StakeMigrationRespCode.MIGRATE_SUCCESS) { + return new bytes(0); + } else { + emit MigrateFailed(migrationPkg.operatorAddress, migrationPkg.delegator, migrationPkg.amount, respCode); + return msgBytes; + } + } + + function handleAckPackage(uint8 channelId, bytes calldata msgBytes) external onlyCrossChainContract { + // should not happen + emit UnexpectedPackage(channelId, msgBytes); + } + + function handleFailAckPackage(uint8 channelId, bytes calldata msgBytes) external onlyCrossChainContract { + // should not happen + emit UnexpectedPackage(channelId, msgBytes); + } + + /*----------------- external functions -----------------*/ + /** + * @param consensusAddress the consensus address of the validator + * @param voteAddress the vote address of the validator + * @param blsProof the bls proof of the vote address + * @param commission the commission of the validator + * @param description the description of the validator + */ + function createValidator( + address consensusAddress, + bytes calldata voteAddress, + bytes calldata blsProof, + Commission calldata commission, + Description calldata description + ) external payable whenNotPaused notInBlackList { + // basic check + address operatorAddress = msg.sender; + if (_validatorSet.contains(operatorAddress)) revert ValidatorExisted(); + if (consensusToOperator[consensusAddress] != address(0) || _legacyConsensusAddress[consensusAddress]) { + revert DuplicateConsensusAddress(); + } + if (voteToOperator[voteAddress] != address(0) || _legacyVoteAddress[voteAddress]) { + revert DuplicateVoteAddress(); + } + bytes32 monikerHash = keccak256(abi.encodePacked(description.moniker)); + if (_monikerSet[monikerHash]) revert DuplicateMoniker(); + + uint256 delegation = msg.value - LOCK_AMOUNT; // create validator need to lock 1 BNB + if (delegation < minSelfDelegationBNB) revert SelfDelegationNotEnough(); + + if (consensusAddress == address(0)) revert InvalidConsensusAddress(); + if ( + commission.maxRate > 5_000 || commission.rate > commission.maxRate + || commission.maxChangeRate > commission.maxRate + ) revert InvalidCommission(); + if (!_checkMoniker(description.moniker)) revert InvalidMoniker(); + // proof-of-possession verify + if (!_checkVoteAddress(operatorAddress, voteAddress, blsProof)) revert InvalidVoteAddress(); + + // deploy stake credit proxy contract + address creditContract = _deployStakeCredit(operatorAddress, description.moniker); + + _validatorSet.add(operatorAddress); + _monikerSet[monikerHash] = true; + Validator storage valInfo = _validators[operatorAddress]; + valInfo.consensusAddress = consensusAddress; + valInfo.operatorAddress = operatorAddress; + valInfo.creditContract = creditContract; + valInfo.createdTime = block.timestamp; + valInfo.voteAddress = voteAddress; + valInfo.description = description; + valInfo.commission = commission; + valInfo.updateTime = block.timestamp; + consensusToOperator[consensusAddress] = operatorAddress; + voteToOperator[voteAddress] = operatorAddress; + + emit ValidatorCreated(consensusAddress, operatorAddress, creditContract, voteAddress); + emit Delegated(operatorAddress, operatorAddress, delegation, delegation); + emit Delegated(operatorAddress, DEAD_ADDRESS, LOCK_AMOUNT, LOCK_AMOUNT); + + IGovToken(GOV_TOKEN_ADDR).sync(creditContract, operatorAddress); + } + + /** + * @param newConsensusAddress the new consensus address of the validator + */ + function editConsensusAddress(address newConsensusAddress) + external + whenNotPaused + notInBlackList + validatorExist(msg.sender) + { + if (newConsensusAddress == address(0)) revert InvalidConsensusAddress(); + if (consensusToOperator[newConsensusAddress] != address(0) || _legacyConsensusAddress[newConsensusAddress]) { + revert DuplicateConsensusAddress(); + } + + address operatorAddress = msg.sender; + Validator storage valInfo = _validators[operatorAddress]; + if (valInfo.updateTime + BREATHE_BLOCK_INTERVAL > block.timestamp) revert UpdateTooFrequently(); + + consensusExpiration[valInfo.consensusAddress] = block.timestamp; + valInfo.consensusAddress = newConsensusAddress; + valInfo.updateTime = block.timestamp; + consensusToOperator[newConsensusAddress] = operatorAddress; + + emit ConsensusAddressEdited(operatorAddress, newConsensusAddress); + } + + /** + * @param commissionRate the new commission rate of the validator + */ + function editCommissionRate(uint64 commissionRate) + external + whenNotPaused + notInBlackList + validatorExist(msg.sender) + { + address operatorAddress = msg.sender; + Validator storage valInfo = _validators[operatorAddress]; + if (valInfo.updateTime + BREATHE_BLOCK_INTERVAL > block.timestamp) revert UpdateTooFrequently(); + + if (commissionRate > valInfo.commission.maxRate) revert InvalidCommission(); + uint256 changeRate = commissionRate >= valInfo.commission.rate + ? commissionRate - valInfo.commission.rate + : valInfo.commission.rate - commissionRate; + if (changeRate > valInfo.commission.maxChangeRate) revert InvalidCommission(); + + valInfo.commission.rate = commissionRate; + valInfo.updateTime = block.timestamp; + + emit CommissionRateEdited(operatorAddress, commissionRate); + } + + /** + * @notice the moniker of the validator will be ignored as it is not editable + * @param description the new description of the validator + */ + function editDescription(Description memory description) + external + whenNotPaused + notInBlackList + validatorExist(msg.sender) + { + address operatorAddress = msg.sender; + Validator storage valInfo = _validators[operatorAddress]; + if (valInfo.updateTime + BREATHE_BLOCK_INTERVAL > block.timestamp) revert UpdateTooFrequently(); + + description.moniker = valInfo.description.moniker; + valInfo.description = description; + valInfo.updateTime = block.timestamp; + + emit DescriptionEdited(operatorAddress); + } + + /** + * @param newVoteAddress the new vote address of the validator + * @param blsProof the bls proof of the vote address + */ + function editVoteAddress( + bytes calldata newVoteAddress, + bytes calldata blsProof + ) external whenNotPaused notInBlackList validatorExist(msg.sender) { + // proof-of-possession verify + address operatorAddress = msg.sender; + if (!_checkVoteAddress(operatorAddress, newVoteAddress, blsProof)) revert InvalidVoteAddress(); + if (voteToOperator[newVoteAddress] != address(0) || _legacyVoteAddress[newVoteAddress]) { + revert DuplicateVoteAddress(); + } + + Validator storage valInfo = _validators[operatorAddress]; + if (valInfo.updateTime + BREATHE_BLOCK_INTERVAL > block.timestamp) revert UpdateTooFrequently(); + + voteExpiration[valInfo.voteAddress] = block.timestamp; + valInfo.voteAddress = newVoteAddress; + valInfo.updateTime = block.timestamp; + voteToOperator[newVoteAddress] = operatorAddress; + + emit VoteAddressEdited(operatorAddress, newVoteAddress); + } + + /** + * @param operatorAddress the operator address of the validator to be unjailed + */ + function unjail(address operatorAddress) external whenNotPaused notInBlackList validatorExist(operatorAddress) { + Validator storage valInfo = _validators[operatorAddress]; + if (!valInfo.jailed) revert ValidatorNotJailed(); + + if (IStakeCredit(valInfo.creditContract).getPooledBNB(operatorAddress) < minSelfDelegationBNB) { + revert SelfDelegationNotEnough(); + } + if (valInfo.jailUntil > block.timestamp) revert JailTimeNotExpired(); + + valInfo.jailed = false; + numOfJailed -= 1; + emit ValidatorUnjailed(operatorAddress); + } + + /** + * @param operatorAddress the operator address of the validator to be delegated to + * @param delegateVotePower whether to delegate vote power to the validator + */ + function delegate( + address operatorAddress, + bool delegateVotePower + ) external payable whenNotPaused notInBlackList validatorExist(operatorAddress) { + uint256 bnbAmount = msg.value; + if (bnbAmount < minDelegationBNBChange) revert DelegationAmountTooSmall(); + + address delegator = msg.sender; + Validator memory valInfo = _validators[operatorAddress]; + if (valInfo.jailed && delegator != operatorAddress) revert OnlySelfDelegation(); + + uint256 shares = IStakeCredit(valInfo.creditContract).delegate{ value: bnbAmount }(delegator); + emit Delegated(operatorAddress, delegator, shares, bnbAmount); + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, delegator); + if (delegateVotePower) { + IGovToken(GOV_TOKEN_ADDR).delegateVote(delegator, operatorAddress); + } + } + + /** + * @dev Undelegate BNB from a validator, fund is only claimable few days later + * @param operatorAddress the operator address of the validator to be undelegated from + * @param shares the shares to be undelegated + */ + function undelegate( + address operatorAddress, + uint256 shares + ) external whenNotPaused notInBlackList validatorExist(operatorAddress) { + if (shares == 0) revert ZeroShares(); + + address delegator = msg.sender; + Validator memory valInfo = _validators[operatorAddress]; + + uint256 bnbAmount = IStakeCredit(valInfo.creditContract).undelegate(delegator, shares); + emit Undelegated(operatorAddress, delegator, shares, bnbAmount); + + if (delegator == operatorAddress) { + _checkValidatorSelfDelegation(operatorAddress); + } + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, delegator); + } + + /** + * @param srcValidator the operator address of the validator to be redelegated from + * @param dstValidator the operator address of the validator to be redelegated to + * @param shares the shares to be redelegated + * @param delegateVotePower whether to delegate vote power to the dstValidator + */ + function redelegate( + address srcValidator, + address dstValidator, + uint256 shares, + bool delegateVotePower + ) + external + whenNotPaused + notInBlackList + validatorExist(srcValidator) + validatorExist(dstValidator) + enableReceivingFund + { + if (shares == 0) revert ZeroShares(); + if (srcValidator == dstValidator) revert SameValidator(); + + address delegator = msg.sender; + Validator memory srcValInfo = _validators[srcValidator]; + Validator memory dstValInfo = _validators[dstValidator]; + if (dstValInfo.jailed && delegator != dstValidator) revert OnlySelfDelegation(); + + uint256 bnbAmount = IStakeCredit(srcValInfo.creditContract).unbond(delegator, shares); + if (bnbAmount < minDelegationBNBChange) revert DelegationAmountTooSmall(); + // check if the srcValidator has enough self delegation + if ( + delegator == srcValidator + && IStakeCredit(srcValInfo.creditContract).getPooledBNB(srcValidator) < minSelfDelegationBNB + ) { + revert SelfDelegationNotEnough(); + } + + uint256 feeCharge = bnbAmount * redelegateFeeRate / REDELEGATE_FEE_RATE_BASE; + (bool success,) = dstValInfo.creditContract.call{ value: feeCharge }(""); + if (!success) revert TransferFailed(); + + bnbAmount -= feeCharge; + uint256 newShares = IStakeCredit(dstValInfo.creditContract).delegate{ value: bnbAmount }(delegator); + emit Redelegated(srcValidator, dstValidator, delegator, shares, newShares, bnbAmount); + + address[] memory stakeCredits = new address[](2); + stakeCredits[0] = srcValInfo.creditContract; + stakeCredits[1] = dstValInfo.creditContract; + IGovToken(GOV_TOKEN_ADDR).syncBatch(stakeCredits, delegator); + if (delegateVotePower) { + IGovToken(GOV_TOKEN_ADDR).delegateVote(delegator, dstValidator); + } + } + + /** + * @dev Claim the undelegated BNB from the pool after unbondPeriod + * @param operatorAddress the operator address of the validator + * @param requestNumber the request number of the undelegation. 0 means claim all + */ + function claim(address operatorAddress, uint256 requestNumber) external whenNotPaused notInBlackList { + _claim(operatorAddress, requestNumber); + } + + /** + * @dev Claim the undelegated BNB from the pools after unbondPeriod + * @param operatorAddresses the operator addresses of the validator + * @param requestNumbers numbers of the undelegation requests. 0 means claim all + */ + function claimBatch( + address[] calldata operatorAddresses, + uint256[] calldata requestNumbers + ) external whenNotPaused notInBlackList { + if (operatorAddresses.length != requestNumbers.length) revert InvalidRequest(); + for (uint256 i; i < operatorAddresses.length; ++i) { + _claim(operatorAddresses[i], requestNumbers[i]); + } + } + + /** + * @dev Sync the gov tokens of validators in operatorAddresses + * @param operatorAddresses the operator addresses of the validators + * @param account the account to sync gov tokens to + */ + function syncGovToken( + address[] calldata operatorAddresses, + address account + ) external whenNotPaused notInBlackList { + uint256 _length = operatorAddresses.length; + address[] memory stakeCredits = new address[](_length); + address credit; + for (uint256 i = 0; i < _length; ++i) { + if (!_validatorSet.contains(operatorAddresses[i])) revert ValidatorNotExisted(); + credit = _validators[operatorAddresses[i]].creditContract; + stakeCredits[i] = credit; + } + + IGovToken(GOV_TOKEN_ADDR).syncBatch(stakeCredits, account); + } + + /*----------------- system functions -----------------*/ + /** + * @dev This function will be called by consensus engine. So it should never revert. + */ + function distributeReward(address consensusAddress) external payable onlyValidatorContract { + address operatorAddress = consensusToOperator[consensusAddress]; + Validator memory valInfo = _validators[operatorAddress]; + if (valInfo.creditContract == address(0) || valInfo.jailed) { + SYSTEM_REWARD_ADDR.call{ value: msg.value }(""); + emit RewardDistributeFailed(operatorAddress, "INVALID_VALIDATOR"); + return; + } + + IStakeCredit(valInfo.creditContract).distributeReward{ value: msg.value }(valInfo.commission.rate); + emit RewardDistributed(operatorAddress, msg.value); + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, operatorAddress); + } + + /** + * @dev Downtime slash. Only the `SlashIndicator` contract can call this function. + */ + function downtimeSlash(address consensusAddress) external onlySlash { + address operatorAddress = consensusToOperator[consensusAddress]; + if (!_validatorSet.contains(operatorAddress)) revert ValidatorNotExisted(); // should never happen + Validator storage valInfo = _validators[operatorAddress]; + + // slash + uint256 slashAmount = IStakeCredit(valInfo.creditContract).slash(downtimeSlashAmount); + uint256 jailUntil = block.timestamp + downtimeJailTime; + _jailValidator(valInfo, jailUntil); + + emit ValidatorSlashed(operatorAddress, jailUntil, slashAmount, SlashType.DownTime); + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, operatorAddress); + } + + /** + * @dev Malicious vote slash. Only the `SlashIndicator` contract can call this function. + */ + function maliciousVoteSlash(bytes calldata voteAddress) external onlySlash whenNotPaused { + address operatorAddress = voteToOperator[voteAddress]; + if (!_validatorSet.contains(operatorAddress)) revert ValidatorNotExisted(); // should never happen + Validator storage valInfo = _validators[operatorAddress]; + + uint256 index = block.timestamp / BREATHE_BLOCK_INTERVAL; + // This is to prevent many honest validators being slashed at the same time because of implementation bugs + if (_felonyMap[index] >= maxFelonyBetweenBreatheBlock) revert NoMoreFelonyAllowed(); + _felonyMap[index] += 1; + + // check if the voteAddress has already expired + if (voteExpiration[voteAddress] != 0 && voteExpiration[voteAddress] + BREATHE_BLOCK_INTERVAL < block.timestamp) + { + revert VoteAddressExpired(); + } + + // slash + (bool canSlash, uint256 jailUntil) = _checkFelonyRecord(operatorAddress, SlashType.MaliciousVote); + if (!canSlash) revert AlreadySlashed(); + uint256 slashAmount = IStakeCredit(valInfo.creditContract).slash(felonySlashAmount); + _jailValidator(valInfo, jailUntil); + + emit ValidatorSlashed(operatorAddress, jailUntil, slashAmount, SlashType.MaliciousVote); + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, operatorAddress); + } + + /** + * @dev Double sign slash. Only the `SlashIndicator` contract can call this function. + */ + function doubleSignSlash(address consensusAddress) external onlySlash whenNotPaused { + address operatorAddress = consensusToOperator[consensusAddress]; + if (!_validatorSet.contains(operatorAddress)) revert ValidatorNotExisted(); // should never happen + Validator storage valInfo = _validators[operatorAddress]; + + uint256 index = block.timestamp / BREATHE_BLOCK_INTERVAL; + // This is to prevent many honest validators being slashed at the same time because of implementation bugs + if (_felonyMap[index] >= maxFelonyBetweenBreatheBlock) revert NoMoreFelonyAllowed(); + _felonyMap[index] += 1; + + // check if the consensusAddress has already expired + if ( + consensusExpiration[consensusAddress] != 0 + && consensusExpiration[consensusAddress] + BREATHE_BLOCK_INTERVAL < block.timestamp + ) { + revert ConsensusAddressExpired(); + } + + // slash + (bool canSlash, uint256 jailUntil) = _checkFelonyRecord(operatorAddress, SlashType.DoubleSign); + if (!canSlash) revert AlreadySlashed(); + uint256 slashAmount = IStakeCredit(valInfo.creditContract).slash(felonySlashAmount); + _jailValidator(valInfo, jailUntil); + + emit ValidatorSlashed(operatorAddress, jailUntil, slashAmount, SlashType.DoubleSign); + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, operatorAddress); + } + + /** + * @param key the key of the param + * @param value the value of the param + */ + function updateParam(string calldata key, bytes calldata value) external onlyGov { + if (key.compareStrings("transferGasLimit")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newTransferGasLimit = value.bytesToUint256(32); + if (newTransferGasLimit < 2300 || newTransferGasLimit > 10_000) revert InvalidValue(key, value); + transferGasLimit = newTransferGasLimit; + } else if (key.compareStrings("minSelfDelegationBNB")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newMinSelfDelegationBNB = value.bytesToUint256(32); + if (newMinSelfDelegationBNB < 1000 ether || newMinSelfDelegationBNB > 100_000 ether) { + revert InvalidValue(key, value); + } + minSelfDelegationBNB = newMinSelfDelegationBNB; + } else if (key.compareStrings("minDelegationBNBChange")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newMinDelegationBNBChange = value.bytesToUint256(32); + if (newMinDelegationBNBChange < 0.1 ether || newMinDelegationBNBChange > 10 ether) { + revert InvalidValue(key, value); + } + minDelegationBNBChange = newMinDelegationBNBChange; + } else if (key.compareStrings("maxElectedValidators")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newMaxElectedValidators = value.bytesToUint256(32); + if (newMaxElectedValidators == 0 || newMaxElectedValidators > 500) revert InvalidValue(key, value); + maxElectedValidators = newMaxElectedValidators; + } else if (key.compareStrings("unbondPeriod")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newUnbondPeriod = value.bytesToUint256(32); + if (newUnbondPeriod < 3 days || newUnbondPeriod > 30 days) revert InvalidValue(key, value); + unbondPeriod = newUnbondPeriod; + } else if (key.compareStrings("redelegateFeeRate")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newRedelegateFeeRate = value.bytesToUint256(32); + if (newRedelegateFeeRate > 100) { + revert InvalidValue(key, value); + } + redelegateFeeRate = newRedelegateFeeRate; + } else if (key.compareStrings("downtimeSlashAmount")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newDowntimeSlashAmount = value.bytesToUint256(32); + if (newDowntimeSlashAmount < 5 ether || newDowntimeSlashAmount > felonySlashAmount) { + revert InvalidValue(key, value); + } + downtimeSlashAmount = newDowntimeSlashAmount; + } else if (key.compareStrings("felonySlashAmount")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newFelonySlashAmount = value.bytesToUint256(32); + if (newFelonySlashAmount < 100 ether || newFelonySlashAmount <= downtimeSlashAmount) { + revert InvalidValue(key, value); + } + felonySlashAmount = newFelonySlashAmount; + } else if (key.compareStrings("downtimeJailTime")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newDowntimeJailTime = value.bytesToUint256(32); + if (newDowntimeJailTime < 2 days || newDowntimeJailTime >= felonyJailTime) revert InvalidValue(key, value); + downtimeJailTime = newDowntimeJailTime; + } else if (key.compareStrings("felonyJailTime")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newFelonyJailTime = value.bytesToUint256(32); + if (newFelonyJailTime < 10 days || newFelonyJailTime <= downtimeJailTime) revert InvalidValue(key, value); + felonyJailTime = newFelonyJailTime; + } else if (key.compareStrings("maxFelonyBetweenBreatheBlock")) { + if (value.length != 32) revert InvalidValue(key, value); + uint256 newJailedPerDay = value.bytesToUint256(32); + if (newJailedPerDay == 0) revert InvalidValue(key, value); + maxFelonyBetweenBreatheBlock = newJailedPerDay; + } else if (key.compareStrings("stakeHubProtector")) { + if (value.length != 20) revert InvalidValue(key, value); + address newStakeHubProtector = value.bytesToAddress(20); + if (newStakeHubProtector == address(0)) revert InvalidValue(key, value); + _setProtector(newStakeHubProtector); + } else { + revert UnknownParam(key, value); + } + emit ParamChange(key, value); + } + + /*----------------- view functions -----------------*/ + /** + * @param operatorAddress the operator address of the validator + * @param index the index of the day to query(timestamp / 1 days) + * + * @return the validator's reward of the day + */ + function getValidatorRewardRecord(address operatorAddress, uint256 index) external view returns (uint256) { + if (!_validatorSet.contains(operatorAddress)) revert ValidatorNotExisted(); + return IStakeCredit(_validators[operatorAddress].creditContract).rewardRecord(index); + } + + /** + * @param operatorAddress the operator address of the validator + * @param index the index of the day to query(timestamp / 1 days) + * + * @return the validator's total pooled BNB of the day + */ + function getValidatorTotalPooledBNBRecord(address operatorAddress, uint256 index) external view returns (uint256) { + if (!_validatorSet.contains(operatorAddress)) revert ValidatorNotExisted(); + return IStakeCredit(_validators[operatorAddress].creditContract).totalPooledBNBRecord(index); + } + + /** + * @notice pagination query all validators' operator address and credit contract address + * + * @param offset the offset of the query + * @param limit the limit of the query + * + * @return operatorAddrs operator addresses + * @return creditAddrs credit contract addresses + * @return totalLength total number of validators + */ + function getValidators( + uint256 offset, + uint256 limit + ) external view returns (address[] memory operatorAddrs, address[] memory creditAddrs, uint256 totalLength) { + totalLength = _validatorSet.length(); + if (offset >= totalLength) { + return (operatorAddrs, creditAddrs, totalLength); + } + + limit = limit == 0 ? totalLength : limit; + uint256 count = (totalLength - offset) > limit ? limit : (totalLength - offset); + operatorAddrs = new address[](count); + creditAddrs = new address[](count); + for (uint256 i; i < count; ++i) { + operatorAddrs[i] = _validatorSet.at(offset + i); + creditAddrs[i] = _validators[operatorAddrs[i]].creditContract; + } + } + + /** + * @notice get the consensus address of a validator + * + * @param operatorAddress the operator address of the validator + * + * @return consensusAddress the consensus address of the validator + */ + function getValidatorConsensusAddress(address operatorAddress) external view returns (address consensusAddress) { + Validator memory valInfo = _validators[operatorAddress]; + consensusAddress = valInfo.consensusAddress; + } + + /** + * @notice get the credit contract address of a validator + * + * @param operatorAddress the operator address of the validator + * + * @return creditContract the credit contract address of the validator + */ + function getValidatorCreditContract(address operatorAddress) external view returns (address creditContract) { + Validator memory valInfo = _validators[operatorAddress]; + creditContract = valInfo.creditContract; + } + + /** + * @notice get the vote address of a validator + * + * @param operatorAddress the operator address of the validator + * + * @return voteAddress the vote address of the validator + */ + function getValidatorVoteAddress(address operatorAddress) external view returns (bytes memory voteAddress) { + Validator memory valInfo = _validators[operatorAddress]; + voteAddress = valInfo.voteAddress; + } + + /** + * @notice get the basic info of a validator + * + * @param operatorAddress the operator address of the validator + * + * @return createdTime the creation time of the validator + * @return jailed whether the validator is jailed + * @return jailUntil the jail time of the validator + */ + function getValidatorBasicInfo(address operatorAddress) + external + view + returns (uint256 createdTime, bool jailed, uint256 jailUntil) + { + Validator memory valInfo = _validators[operatorAddress]; + createdTime = valInfo.createdTime; + jailed = valInfo.jailed; + jailUntil = valInfo.jailUntil; + } + + /** + * @param operatorAddress the operator address of the validator + * + * @return the description of a validator + */ + function getValidatorDescription(address operatorAddress) + external + view + validatorExist(operatorAddress) + returns (Description memory) + { + return _validators[operatorAddress].description; + } + + /** + * @param operatorAddress the operator address of the validator + * + * @return the commission of a validator + */ + function getValidatorCommission(address operatorAddress) + external + view + validatorExist(operatorAddress) + returns (Commission memory) + { + return _validators[operatorAddress].commission; + } + + /** + * @dev this function will be used by Parlia consensus engine. + * + * @notice get the election info of a validator + * + * @param offset the offset of the query + * @param limit the limit of the query + * + * @return consensusAddrs the consensus addresses of the validators + * @return votingPowers the voting powers of the validators. The voting power will be 0 if the validator is jailed. + * @return voteAddrs the vote addresses of the validators + * @return totalLength the total number of validators + */ + function getValidatorElectionInfo( + uint256 offset, + uint256 limit + ) + external + view + returns ( + address[] memory consensusAddrs, + uint256[] memory votingPowers, + bytes[] memory voteAddrs, + uint256 totalLength + ) + { + totalLength = _validatorSet.length(); + if (offset >= totalLength) { + return (consensusAddrs, votingPowers, voteAddrs, totalLength); + } + + limit = limit == 0 ? totalLength : limit; + uint256 count = (totalLength - offset) > limit ? limit : (totalLength - offset); + consensusAddrs = new address[](count); + votingPowers = new uint256[](count); + voteAddrs = new bytes[](count); + for (uint256 i; i < count; ++i) { + address operatorAddress = _validatorSet.at(offset + i); + Validator memory valInfo = _validators[operatorAddress]; + consensusAddrs[i] = valInfo.consensusAddress; + votingPowers[i] = valInfo.jailed ? 0 : IStakeCredit(valInfo.creditContract).totalPooledBNB(); + voteAddrs[i] = valInfo.voteAddress; + } + } + + /*----------------- internal functions -----------------*/ + function _decodeMigrationSynPackage(bytes memory msgBytes) + internal + pure + returns (StakeMigrationPackage memory, bool) + { + StakeMigrationPackage memory migrationPackage; + + RLPDecode.Iterator memory iter = msgBytes.toRLPItem().iterator(); + bool success = false; + uint256 idx = 0; + while (iter.hasNext()) { + if (idx == 0) { + migrationPackage.operatorAddress = address(uint160(iter.next().toAddress())); + } else if (idx == 1) { + migrationPackage.delegator = address(uint160(iter.next().toAddress())); + } else if (idx == 2) { + migrationPackage.refundAddress = address(uint160(iter.next().toAddress())); + } else if (idx == 3) { + migrationPackage.amount = iter.next().toUint(); + success = true; + } else { + break; + } + ++idx; + } + + return (migrationPackage, success); + } + + function _doMigration(StakeMigrationPackage memory migrationPkg) + internal + whenNotPaused + returns (StakeMigrationRespCode) + { + if (blackList[migrationPkg.delegator] || migrationPkg.delegator == address(0)) { + revert InBlackList(); + } + + if (!_validatorSet.contains(migrationPkg.operatorAddress)) { + return StakeMigrationRespCode.VALIDATOR_NOT_EXISTED; + } + + Validator memory valInfo = _validators[migrationPkg.operatorAddress]; + if (valInfo.jailed && migrationPkg.delegator != migrationPkg.operatorAddress) { + return StakeMigrationRespCode.VALIDATOR_JAILED; + } + + uint256 shares = + IStakeCredit(valInfo.creditContract).delegate{ value: migrationPkg.amount }(migrationPkg.delegator); + emit Delegated(migrationPkg.operatorAddress, migrationPkg.delegator, shares, migrationPkg.amount); + emit MigrateSuccess(migrationPkg.operatorAddress, migrationPkg.delegator, shares, migrationPkg.amount); + + IGovToken(GOV_TOKEN_ADDR).sync(valInfo.creditContract, migrationPkg.delegator); + + return StakeMigrationRespCode.MIGRATE_SUCCESS; + } + + function _checkMoniker(string memory moniker) internal pure returns (bool) { + bytes memory bz = bytes(moniker); + + // 1. moniker length should be between 3 and 9 + if (bz.length < 3 || bz.length > 9) { + return false; + } + + // 2. first character should be uppercase + if (uint8(bz[0]) < 65 || uint8(bz[0]) > 90) { + return false; + } + + // 3. only alphanumeric characters are allowed + for (uint256 i = 1; i < bz.length; ++i) { + // Check if the ASCII value of the character falls outside the range of alphanumeric characters + if ( + (uint8(bz[i]) < 48 || uint8(bz[i]) > 57) && (uint8(bz[i]) < 65 || uint8(bz[i]) > 90) + && (uint8(bz[i]) < 97 || uint8(bz[i]) > 122) + ) { + // Character is a special character + return false; + } + } + + // No special characters found + return true; + } + + function _checkVoteAddress( + address operatorAddress, + bytes calldata voteAddress, + bytes calldata blsProof + ) internal view returns (bool) { + if (voteAddress.length != BLS_PUBKEY_LENGTH || blsProof.length != BLS_SIG_LENGTH) { + return false; + } + + // get msg hash + bytes32 msgHash = keccak256(abi.encodePacked(operatorAddress, voteAddress, block.chainid)); + bytes memory msgBz = new bytes(32); + assembly { + mstore(add(msgBz, 32), msgHash) + } + + // call the precompiled contract to verify the BLS signature + // the precompiled contract's address is 0x66 + bytes memory input = bytes.concat(msgBz, blsProof, voteAddress); // length: 32 + 96 + 48 = 176 + bytes memory output = new bytes(1); + assembly { + let len := mload(input) + if iszero(staticcall(not(0), 0x66, add(input, 0x20), len, add(output, 0x20), 0x01)) { revert(0, 0) } + } + uint8 result = uint8(output[0]); + if (result != uint8(1)) { + return false; + } + return true; + } + + function _deployStakeCredit(address operatorAddress, string memory moniker) internal returns (address) { + address creditProxy = address(new TransparentUpgradeableProxy(STAKE_CREDIT_ADDR, DEAD_ADDRESS, "")); + IStakeCredit(creditProxy).initialize{ value: msg.value }(operatorAddress, moniker); + emit StakeCreditInitialized(operatorAddress, creditProxy); + + return creditProxy; + } + + function _checkValidatorSelfDelegation(address operatorAddress) internal { + Validator storage valInfo = _validators[operatorAddress]; + if (valInfo.jailed) { + return; + } + if (IStakeCredit(valInfo.creditContract).getPooledBNB(operatorAddress) < minSelfDelegationBNB) { + _jailValidator(valInfo, block.timestamp + downtimeJailTime); + IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).felony(valInfo.consensusAddress); + } + } + + function _checkFelonyRecord(address operatorAddress, SlashType slashType) internal returns (bool, uint256) { + bytes32 slashKey = keccak256(abi.encodePacked(operatorAddress, slashType)); + uint256 jailUntil = _felonyRecords[slashKey]; + // for double sign and malicious vote slash + // if the validator is already jailed, no need to slash again + if (jailUntil > block.timestamp) { + return (false, 0); + } + jailUntil = block.timestamp + felonyJailTime; + _felonyRecords[slashKey] = jailUntil; + return (true, jailUntil); + } + + function _jailValidator(Validator storage valInfo, uint256 jailUntil) internal { + IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).removeTmpMigratedValidator(valInfo.consensusAddress); + + // keep the last eligible validator + bool isLast = (numOfJailed >= _validatorSet.length() - 1); + if (isLast) { + // If staking channel is closed, then BC-fusion is finished and we should keep the last eligible validator here + if ( + !ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).registeredContractChannelMap( + VALIDATOR_CONTRACT_ADDR, STAKING_CHANNELID + ) + ) { + emit ValidatorEmptyJailed(valInfo.operatorAddress); + return; + } + } + + if (jailUntil > valInfo.jailUntil) { + valInfo.jailUntil = jailUntil; + } + + if (!valInfo.jailed) { + valInfo.jailed = true; + numOfJailed += 1; + + emit ValidatorJailed(valInfo.operatorAddress); + } + } + + function _claim(address operatorAddress, uint256 requestNumber) internal validatorExist(operatorAddress) { + uint256 bnbAmount = IStakeCredit(_validators[operatorAddress].creditContract).claim(msg.sender, requestNumber); + emit Claimed(operatorAddress, msg.sender, bnbAmount); + } +} diff --git a/contracts/BC_fusion/System.sol b/contracts/BC_fusion/System.sol new file mode 100644 index 00000000..b08e2c81 --- /dev/null +++ b/contracts/BC_fusion/System.sol @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +contract System { + /*----------------- constants -----------------*/ + uint8 public constant STAKING_CHANNELID = 0x08; + uint8 public constant BC_FUSION_CHANNELID = 0x11; // new channel id for cross-chain redelegate from Beacon Chain to Smart Chain after Feynman upgrade + + address internal constant VALIDATOR_CONTRACT_ADDR = 0x0000000000000000000000000000000000001000; + address internal constant SLASH_CONTRACT_ADDR = 0x0000000000000000000000000000000000001001; + address internal constant SYSTEM_REWARD_ADDR = 0x0000000000000000000000000000000000001002; + address internal constant LIGHT_CLIENT_ADDR = 0x0000000000000000000000000000000000001003; + address internal constant TOKEN_HUB_ADDR = 0x0000000000000000000000000000000000001004; + address internal constant INCENTIVIZE_ADDR = 0x0000000000000000000000000000000000001005; + address internal constant RELAYERHUB_CONTRACT_ADDR = 0x0000000000000000000000000000000000001006; + address internal constant GOV_HUB_ADDR = 0x0000000000000000000000000000000000001007; + address internal constant TOKEN_MANAGER_ADDR = 0x0000000000000000000000000000000000001008; + address internal constant CROSS_CHAIN_CONTRACT_ADDR = 0x0000000000000000000000000000000000002000; + address internal constant STAKING_CONTRACT_ADDR = 0x0000000000000000000000000000000000002001; + address internal constant STAKE_HUB_ADDR = 0x0000000000000000000000000000000000002002; + address internal constant STAKE_CREDIT_ADDR = 0x0000000000000000000000000000000000002003; + address internal constant GOVERNOR_ADDR = 0x0000000000000000000000000000000000002004; + address internal constant GOV_TOKEN_ADDR = 0x0000000000000000000000000000000000002005; + address internal constant TIMELOCK_ADDR = 0x0000000000000000000000000000000000002006; + address internal constant TOKEN_RECOVER_PORTAL_ADDR = 0x0000000000000000000000000000000000003000; + + /*----------------- errors -----------------*/ + // @notice signature: 0x97b88354 + error UnknownParam(string key, bytes value); + // @notice signature: 0x0a5a6041 + error InvalidValue(string key, bytes value); + // @notice signature: 0x116c64a8 + error OnlyCoinbase(); + // @notice signature: 0x83f1b1d3 + error OnlyZeroGasPrice(); + // @notice signature: 0xf22c4390 + error OnlySystemContract(address systemContract); + + /*----------------- events -----------------*/ + event ParamChange(string key, bytes value); + + /*----------------- modifiers -----------------*/ + modifier onlyCoinbase() { + if (msg.sender != block.coinbase) revert OnlyCoinbase(); + _; + } + + modifier onlyZeroGasPrice() { + if (tx.gasprice != 0) revert OnlyZeroGasPrice(); + _; + } + + modifier onlyCrossChainContract() { + if (msg.sender != CROSS_CHAIN_CONTRACT_ADDR) revert OnlySystemContract(CROSS_CHAIN_CONTRACT_ADDR); + _; + } + + modifier onlyValidatorContract() { + if (msg.sender != VALIDATOR_CONTRACT_ADDR) revert OnlySystemContract(VALIDATOR_CONTRACT_ADDR); + _; + } + + modifier onlySlash() { + if (msg.sender != SLASH_CONTRACT_ADDR) revert OnlySystemContract(SLASH_CONTRACT_ADDR); + _; + } + + modifier onlyGov() { + if (msg.sender != GOV_HUB_ADDR) revert OnlySystemContract(GOV_HUB_ADDR); + _; + } + + modifier onlyGovernor() { + if (msg.sender != GOVERNOR_ADDR) revert OnlySystemContract(GOVERNOR_ADDR); + _; + } + + modifier onlyStakeHub() { + if (msg.sender != STAKE_HUB_ADDR) revert OnlySystemContract(STAKE_HUB_ADDR); + _; + } + + modifier onlyTokenRecoverPortal() { + require(msg.sender == TOKEN_RECOVER_PORTAL_ADDR, "the msg sender must be token recover portal"); + _; + } +} diff --git a/contracts/BC_fusion/TokenRecoverPortal.sol b/contracts/BC_fusion/TokenRecoverPortal.sol new file mode 100644 index 00000000..e4f93a95 --- /dev/null +++ b/contracts/BC_fusion/TokenRecoverPortal.sol @@ -0,0 +1,275 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts-upgradeable/security/ReentrancyGuardUpgradeable.sol"; +import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol"; +import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; + +import "./System.sol"; +import "./extension/Protectable.sol"; +import "./interface/ITokenHub.sol"; +import "./interface/ITokenRecoverPortal.sol"; +import "./lib/Utils.sol"; + +/** + * @title TokenRecoverPortal is used to recover the token from BC users. + * @dev This is designed for the BC users to recover the token from TokenHub. + * The BC chain will stop and generate a merkle tree root after BC-fusion plan was started. + * The BC users can recover the token from TokenHub after the merkle tree root is generated. + * For more details, please refer to the BEP-299(https://github.com/bnb-chain/BEPs/pull/299). + */ +contract TokenRecoverPortal is System, Initializable, ReentrancyGuardUpgradeable, Protectable { + using Utils for string; + using Utils for bytes; + + /*----------------- constants -----------------*/ + // SOURCE_CHAIN_ID is the original chain ID of BC + // This will be replaced based on the deployment network + // Mainnet: "Binance-Chain-Tigris" + // Testnet: "Binance-Chain-Ganges" + // Rendering script: scripts/generate.py:238 + string public constant SOURCE_CHAIN_ID = "Binance-Chain-Ganges"; + + /*----------------- storage -----------------*/ + address public approvalAddress; + bytes32 public merkleRoot; + bool public merkleRootAlreadyInit; + + // recoveredMap is used to record the recovered token. + mapping(bytes32 => bool) private recoveredMap; + + modifier merkelRootReady() { + if (!merkleRootAlreadyInit) revert MerkleRootNotInitialized(); + if (merkleRoot == bytes32(0)) revert MerkleRootNotInitialized(); + _; + } + + modifier approvalAddressInit() { + if (approvalAddress == address(0)) revert ApprovalAddressNotInitialized(); + _; + } + + /*----------------- errors -----------------*/ + // @notice signature: 0x3e493100 + error AlreadyRecovered(); + // @notice signature: 0x09bde339 + error InvalidProof(); + // @notice signature: 0xad60149e + error InvalidApprovalSignature(); + // @notice signature: 0x8152ea1b + error InvalidOwnerPubKeyLength(); + // @notice signature: 0xbc97af2e + error InvalidOwnerSignatureLength(); + // @notice signature: 0xf36660de + error MerkleRootAlreadyInitiated(); + // @notice signature: 0xcf1ec32e + error MerkleRootNotInitialized(); + // @notice signature: 0xc629ac81 + error TokenRecoverPortalPaused(); + // @notice signature: 0xd0dcbbd8 + error ApprovalAddressNotInitialized(); + + /*----------------- events -----------------*/ + // This event is triggered whenever a call to #recover succeeds. + event TokenRecoverRequested(bytes ownerAddress, bytes32 tokenSymbol, address account, uint256 amount); + + /*----------------- init -----------------*/ + function initialize() external initializer onlyCoinbase onlyZeroGasPrice { + __ReentrancyGuard_init_unchained(); + + // TODO + // Different address will be set depending on the environment + __Protectable_init_unchained(address(0xdEaD)); + } + + /** + * isRecovered check if the token is recovered. + * @param node the leaf node of merkle tree. + * @return the result of check. + */ + function isRecovered(bytes32 node) public view returns (bool) { + return recoveredMap[node]; + } + + /** + * For the Beacon Chain account whose funds are not transferred to BSC before BC fusion, + * can still invoke this function to recover funds on the BSC network. + * @dev The token will be locked in TokenHub after the signature and the merkel proof is verified. + * @notice The token will be unlocked after 7 days. + * @param tokenSymbol is the symbol of token. + * @param amount is the amount of token. + * @param ownerPubKey is the secp256k1 public key of the token owner on BC. + * @param ownerSignature is the secp256k1 signature of the token owner on BC. + * @param approvalSignature is the eth_secp256k1 signature of the approval. + * @param merkleProof is the merkle proof of the token owner on BC. + */ + function recover( + bytes32 tokenSymbol, + uint256 amount, + bytes calldata ownerPubKey, + bytes calldata ownerSignature, + bytes calldata approvalSignature, + bytes32[] calldata merkleProof + ) external merkelRootReady approvalAddressInit whenNotPaused nonReentrant { + // Recover the owner address and check signature. + bytes memory ownerAddr = + _verifySecp256k1Sig(ownerPubKey, ownerSignature, _tmSignatureHash(tokenSymbol, amount, msg.sender)); + // Generate the leaf node of merkle tree. + bytes32 node = keccak256(abi.encodePacked(ownerAddr, tokenSymbol, amount)); + + // Check if the token is recovered. + if (isRecovered(node)) revert AlreadyRecovered(); + + // Verify the approval signature. + _verifyApprovalSig(msg.sender, ownerSignature, approvalSignature, node, merkleProof); + + // Verify the merkle proof. + if (!MerkleProof.verify(merkleProof, merkleRoot, node)) revert InvalidProof(); + + // Mark it recovered. + recoveredMap[node] = true; + + // recover the token from TokenHub contract. it will be unlocked after 7 days. + ITokenHub(TOKEN_HUB_ADDR).recoverBCAsset(tokenSymbol, msg.sender, amount); + + emit TokenRecoverRequested(ownerAddr, tokenSymbol, msg.sender, amount); + } + + /** + * verifyApprovalSig is used to verify the approval signature. + * @dev The signature is generated by the approval address(need to call a token recovery backend service). + */ + function _verifyApprovalSig( + address account, + bytes memory ownerSignature, + bytes memory approvalSignature, + bytes32 leafHash, + bytes32[] memory merkleProof + ) internal view { + bytes memory buffer; + for (uint256 i = 0; i < merkleProof.length; i++) { + buffer = abi.encodePacked(buffer, merkleProof[i]); + } + // Perform the approvalSignature recovery and ensure the recovered signer is the approval account + bytes32 hash = + keccak256(abi.encodePacked(SOURCE_CHAIN_ID, account, ownerSignature, leafHash, merkleRoot, buffer)); + + if (recover(approvalSignature, hash) != approvalAddress) revert InvalidApprovalSignature(); + } + + function recover(bytes memory sig, bytes32 hash) internal pure returns (address) { + // Ensure the signature length is correct + if (sig.length != 65) revert InvalidApprovalSignature(); + bytes32 r; + bytes32 s; + uint8 v; + assembly { + r := mload(add(sig, 32)) + s := mload(add(sig, 64)) + v := byte(0, mload(add(sig, 96))) + } + if (v < 27) v += 27; + if (v < 27 || v > 28) revert InvalidApprovalSignature(); + (address signer,) = ECDSA.tryRecover(hash, v, r, s); + return signer; + } + + /** + * verifySecp256k1Sig is used to verify the secp256k1 signature from BC token owner. + * @dev The signature is generated by the token owner by BC tool. + */ + function _verifySecp256k1Sig( + bytes memory pubKey, + bytes memory signature, + bytes32 messageHash + ) internal view returns (bytes memory) { + // Ensure the public key is valid + if (pubKey.length != 33) revert InvalidOwnerPubKeyLength(); + // Ensure the signature length is correct + if (signature.length != 64) revert InvalidOwnerSignatureLength(); + + // assemble input data + bytes memory msgBz = new bytes(32); + assembly { + mstore(add(msgBz, 32), messageHash) + } + bytes memory input = bytes.concat(pubKey, signature, msgBz); + bytes memory output = new bytes(20); + /* solium-disable-next-line */ + assembly { + // call Secp256k1SignatureRecover precompile contract + // Contract address: 0x69 + // input: + // | PubKey | Signature | SignatureMsgHash | + // | 33 bytes | 64 bytes | 32 bytes | + // output: + // | recovered address | + // | 20 bytes | + let len := mload(input) + if iszero(staticcall(not(0), 0x69, add(input, 0x20), len, add(output, 0x20), 20)) { revert(0, 0) } + } + + // return the recovered address + return output; + } + + /** + * tmSignatureHash is used to generate the hash of the owner signature. + * @dev The hash is used to verify the signature from BC token owner. + */ + function _tmSignatureHash(bytes32 tokenSymbol, uint256 amount, address recipient) internal pure returns (bytes32) { + return sha256( + abi.encodePacked( + '{"account_number":"0","chain_id":"', + SOURCE_CHAIN_ID, + '","data":null,"memo":"","msgs":[{"amount":"', + Utils.bytesToHex(abi.encodePacked(amount), false), + '","recipient":"', + Utils.bytesToHex(abi.encodePacked(recipient), true), + '","token_symbol":"', + Utils.bytesToHex(abi.encodePacked(tokenSymbol), false), + '"}],"sequence":"0","source":"0"}' + ) + ); + } + + /** + * updateParam is used to update the parameters of TokenRecoverPortal. + * @dev The parameters can only be updated by the governor. + * @param key is the key of the parameter. + * @param value is the value of the parameter. + */ + function updateParam(string calldata key, bytes calldata value) external onlyGov { + if (key.compareStrings("approvalAddress")) { + if (value.length != 20) revert InvalidValue(key, value); + address newApprovalAddress = value.bytesToAddress(20); + if (newApprovalAddress == address(0)) revert InvalidValue(key, value); + approvalAddress = newApprovalAddress; + } else if (key.compareStrings("merkleRoot")) { + if (merkleRootAlreadyInit) revert MerkleRootAlreadyInitiated(); + if (value.length != 32) revert InvalidValue(key, value); + bytes32 newMerkleRoot = value.bytesToBytes32(32); + if (newMerkleRoot == bytes32(0)) revert InvalidValue(key, value); + merkleRoot = newMerkleRoot; + merkleRootAlreadyInit = true; + } else if (key.compareStrings("tokenRecoverPortalProtector")) { + if (value.length != 20) revert InvalidValue(key, value); + address newTokenRecoverPortalProtector = value.bytesToAddress(20); + if (newTokenRecoverPortalProtector == address(0)) revert InvalidValue(key, value); + _setProtector(newTokenRecoverPortalProtector); + } else { + revert UnknownParam(key, value); + } + emit ParamChange(key, value); + } + + /** + * cancelTokenRecover is used to cancel the recovery request. + * @dev The token recover request can only be canceled by the assetProtector. + * @param tokenSymbol is the symbol of token. + * @param attacker is the address of the attacker. + */ + function cancelTokenRecover(bytes32 tokenSymbol, address attacker) external onlyProtector { + ITokenHub(TOKEN_HUB_ADDR).cancelTokenRecoverLock(tokenSymbol, attacker); + } +} diff --git a/contracts/BC_fusion/extension/Protectable.sol b/contracts/BC_fusion/extension/Protectable.sol new file mode 100644 index 00000000..b7272803 --- /dev/null +++ b/contracts/BC_fusion/extension/Protectable.sol @@ -0,0 +1,105 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; + +abstract contract Protectable is Initializable { + /*----------------- storage -----------------*/ + bool private _paused; + address private _protector; + mapping(address => bool) public blackList; + + /*----------------- errors -----------------*/ + // @notice signature: 0x1785c681 + error AlreadyPaused(); + error NotPaused(); + // @notice signature: 0xb1d02c3d + error InBlackList(); + // @notice signature: 0x06fbb1e3 + error OnlyProtector(); + + /*----------------- events -----------------*/ + event Paused(); + event Resumed(); + event ProtectorChanged(address indexed oldProtector, address indexed newProtector); + event BlackListed(address indexed target); + event UnBlackListed(address indexed target); + + /*----------------- modifier -----------------*/ + modifier whenNotPaused() { + if (_paused) revert AlreadyPaused(); + _; + } + + modifier whenPaused() { + if (!_paused) revert NotPaused(); + _; + } + + modifier onlyProtector() { + if (msg.sender != _protector) revert OnlyProtector(); + _; + } + + modifier notInBlackList() { + if (blackList[msg.sender]) revert InBlackList(); + _; + } + + /*----------------- initializer -----------------*/ + function __Protectable_init(address protector) internal onlyInitializing { + __Protectable_init_unchained(protector); + } + + function __Protectable_init_unchained(address protector) internal onlyInitializing { + _protector = protector; + } + + /*----------------- external functions -----------------*/ + /** + * @return whether the system is paused + */ + function isPaused() external view returns (bool) { + return _paused; + } + + /** + * @dev Pause the whole system in emergency + */ + function pause() external virtual onlyProtector whenNotPaused { + _paused = true; + emit Paused(); + } + + /** + * @dev Resume the whole system + */ + function resume() external virtual onlyProtector whenPaused { + _paused = false; + emit Resumed(); + } + + /** + * @dev Add an address to the black list + */ + function addToBlackList(address account) external virtual onlyProtector { + blackList[account] = true; + emit BlackListed(account); + } + + /** + * @dev Remove an address from the black list + */ + function removeFromBlackList(address account) external virtual onlyProtector { + delete blackList[account]; + emit UnBlackListed(account); + } + + /*----------------- internal functions -----------------*/ + function _setProtector(address protector) internal { + emit ProtectorChanged(_protector, protector); + _protector = protector; + } + + uint256[50] private __reservedSlot; +} diff --git a/contracts/BC_fusion/interface/IBSCValidatorSet.sol b/contracts/BC_fusion/interface/IBSCValidatorSet.sol new file mode 100644 index 00000000..a66287f0 --- /dev/null +++ b/contracts/BC_fusion/interface/IBSCValidatorSet.sol @@ -0,0 +1,7 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +interface IBSCValidatorSet { + function felony(address consensusAddress) external; + function removeTmpMigratedValidator(address consensusAddress) external; +} diff --git a/contracts/BC_fusion/interface/ICrossChain.sol b/contracts/BC_fusion/interface/ICrossChain.sol new file mode 100644 index 00000000..8b4767e6 --- /dev/null +++ b/contracts/BC_fusion/interface/ICrossChain.sol @@ -0,0 +1,6 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +interface ICrossChain { + function registeredContractChannelMap(address, uint8) external view returns (bool); +} diff --git a/contracts/BC_fusion/interface/IGovToken.sol b/contracts/BC_fusion/interface/IGovToken.sol new file mode 100644 index 00000000..ce1f4c7e --- /dev/null +++ b/contracts/BC_fusion/interface/IGovToken.sol @@ -0,0 +1,9 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +interface IGovToken { + function totalSupply() external view returns (uint256); + function delegateVote(address delegator, address delegatee) external; + function sync(address stakeCredit, address account) external; + function syncBatch(address[] calldata stakeCredits, address account) external; +} diff --git a/contracts/BC_fusion/interface/IStakeCredit.sol b/contracts/BC_fusion/interface/IStakeCredit.sol new file mode 100644 index 00000000..b22f49e2 --- /dev/null +++ b/contracts/BC_fusion/interface/IStakeCredit.sol @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +interface IStakeCredit { + function initialize(address operatorAddress, string memory moniker) external payable; + function claim(address delegator, uint256 requestNumber) external returns (uint256); + function totalPooledBNB() external view returns (uint256); + function getPooledBNBByShares(uint256 shares) external view returns (uint256); + function getSharesByPooledBNB(uint256 bnbAmount) external view returns (uint256); + function delegate(address delegator) external payable returns (uint256); + function undelegate(address delegator, uint256 shares) external returns (uint256); + function unbond(address delegator, uint256 shares) external returns (uint256); + function distributeReward(uint64 commissionRate) external payable; + function slash(uint256 slashBnbAmount) external returns (uint256); + function balanceOf(address delegator) external view returns (uint256); + function totalSupply() external view returns (uint256); + function getPooledBNB(address account) external view returns (uint256); + function rewardRecord(uint256 dayIndex) external view returns (uint256); + function totalPooledBNBRecord(uint256 dayIndex) external view returns (uint256); +} diff --git a/contracts/BC_fusion/interface/IStakeHub.sol b/contracts/BC_fusion/interface/IStakeHub.sol new file mode 100644 index 00000000..27b03a97 --- /dev/null +++ b/contracts/BC_fusion/interface/IStakeHub.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +interface IStakeHub { + function DEAD_ADDRESS() external view returns (address); + function LOCK_AMOUNT() external view returns (uint256); + function BREATHE_BLOCK_INTERVAL() external view returns (uint256); + function unbondPeriod() external view returns (uint256); + function transferGasLimit() external view returns (uint256); +} diff --git a/contracts/BC_fusion/interface/ITokenHub.sol b/contracts/BC_fusion/interface/ITokenHub.sol new file mode 100644 index 00000000..8d5d42b0 --- /dev/null +++ b/contracts/BC_fusion/interface/ITokenHub.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +interface ITokenHub { + function recoverBCAsset(bytes32 tokenSymbol, address recipient, uint256 amount) external; + function cancelTokenRecoverLock(bytes32 tokenSymbol, address attacker) external; + function claimMigrationFund(uint256 amount) external returns (bool); +} diff --git a/contracts/BC_fusion/interface/ITokenRecoverPortal.sol b/contracts/BC_fusion/interface/ITokenRecoverPortal.sol new file mode 100644 index 00000000..1b9c4f93 --- /dev/null +++ b/contracts/BC_fusion/interface/ITokenRecoverPortal.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +// TokenRecoverPortal anyone to recover a token if they exist in a Beacon Chain. +interface ITokenRecoverPortal { + // Returns the merkle root of the merkle tree containing account balances available to recover. + function merkleRoot() external view returns (bytes32); + // Returns the address of the contract that is allowed to confirm the recover. + function approvalAddress() external view returns (address); + // Returns the address of the contract that is allowed to pause the recover. + function assetProtector() external view returns (address); + // Returns true if the index has been marked recovered. + function isRecovered(bytes32 index) external view returns (bool); + // recover the given amount of the token to the given address. Reverts if the inputs are invalid. + function recover( + bytes32 tokenSymbol, + uint256 amount, + bytes calldata ownerPubKey, + bytes calldata ownerSignature, + bytes calldata approvalSignature, + bytes32[] calldata merkleProof + ) external; + // Cancel the user token recover request by the assetProtector. + function cancelTokenRecover(bytes32 tokenSymbol, address recipient) external; +} diff --git a/contracts/BC_fusion/lib/RLPDecode.sol b/contracts/BC_fusion/lib/RLPDecode.sol new file mode 100644 index 00000000..6b250f63 --- /dev/null +++ b/contracts/BC_fusion/lib/RLPDecode.sol @@ -0,0 +1,283 @@ +// SPDX-License-Identifier: GPL-3.0-or-later + +/** + * @dev This library provides a RLP decoder. + * This lib is copied from `contracts/lib/RLPDecode.sol`. Some necessary modifications are made to make it compatible with solidity 0.8.17. + * And we also applied this lib in greenfield(https://github.com/bnb-chain/greenfield) project. + * This is unnecessary to be audited again. + */ +pragma solidity 0.8.17; + +library RLPDecode { + uint8 constant STRING_SHORT_START = 0x80; + uint8 constant STRING_LONG_START = 0xb8; + uint8 constant LIST_SHORT_START = 0xc0; + uint8 constant LIST_LONG_START = 0xf8; + + uint8 constant WORD_SIZE = 32; + + struct RLPItem { + uint256 len; + uint256 memPtr; + } + + struct Iterator { + RLPItem item; // Item that's being iterated over. + uint256 nextPtr; // Position of the next item in the list. + } + + function next(Iterator memory self) internal pure returns (RLPItem memory) { + require(hasNext(self)); + + uint256 ptr = self.nextPtr; + uint256 itemLength = _itemLength(ptr); + self.nextPtr = ptr + itemLength; + + return RLPItem(itemLength, ptr); + } + + function hasNext(Iterator memory self) internal pure returns (bool) { + RLPItem memory item = self.item; + return self.nextPtr < item.memPtr + item.len; + } + + function toRLPItem(bytes memory self) internal pure returns (RLPItem memory) { + uint256 memPtr; + assembly { + memPtr := add(self, 0x20) + } + + return RLPItem(self.length, memPtr); + } + + function iterator(RLPItem memory self) internal pure returns (Iterator memory) { + require(isList(self)); + + uint256 ptr = self.memPtr + _payloadOffset(self.memPtr); + return Iterator(self, ptr); + } + + function rlpLen(RLPItem memory item) internal pure returns (uint256) { + return item.len; + } + + function payloadLen(RLPItem memory item) internal pure returns (uint256) { + return item.len - _payloadOffset(item.memPtr); + } + + function toList(RLPItem memory item) internal pure returns (RLPItem[] memory) { + require(isList(item)); + + uint256 items = numItems(item); + RLPItem[] memory result = new RLPItem[](items); + + uint256 memPtr = item.memPtr + _payloadOffset(item.memPtr); + uint256 dataLen; + for (uint256 i = 0; i < items; ++i) { + dataLen = _itemLength(memPtr); + result[i] = RLPItem(dataLen, memPtr); + memPtr = memPtr + dataLen; + } + + return result; + } + + function isList(RLPItem memory item) internal pure returns (bool) { + if (item.len == 0) return false; + + uint8 byte0; + uint256 memPtr = item.memPtr; + assembly { + byte0 := byte(0, mload(memPtr)) + } + + if (byte0 < LIST_SHORT_START) { + return false; + } + return true; + } + + function toRlpBytes(RLPItem memory item) internal pure returns (bytes memory) { + bytes memory result = new bytes(item.len); + if (result.length == 0) return result; + + uint256 ptr; + assembly { + ptr := add(0x20, result) + } + + copy(item.memPtr, ptr, item.len); + return result; + } + + function toBoolean(RLPItem memory item) internal pure returns (bool) { + require(item.len == 1); + uint256 result; + uint256 memPtr = item.memPtr; + assembly { + result := byte(0, mload(memPtr)) + } + + if (result == 0 || result == STRING_SHORT_START) { + return false; + } else { + return true; + } + } + + function toAddress(RLPItem memory item) internal pure returns (address) { + // 1 byte for the length prefix + require(item.len == 21); + + return address(uint160(toUint(item))); + } + + function toUint(RLPItem memory item) internal pure returns (uint256) { + require(item.len > 0 && item.len <= 33); + + uint256 offset = _payloadOffset(item.memPtr); + require(item.len >= offset, "length is less than offset"); + uint256 len = item.len - offset; + + uint256 result; + uint256 memPtr = item.memPtr + offset; + assembly { + result := mload(memPtr) + + // shfit to the correct location if neccesary + if lt(len, 32) { result := div(result, exp(256, sub(32, len))) } + } + + return result; + } + + // enforces 32 byte length + function toUintStrict(RLPItem memory item) internal pure returns (uint256) { + // one byte prefix + require(item.len == 33); + + uint256 result; + uint256 memPtr = item.memPtr + 1; + assembly { + result := mload(memPtr) + } + + return result; + } + + function toBytes(RLPItem memory item) internal pure returns (bytes memory) { + require(item.len > 0); + + uint256 offset = _payloadOffset(item.memPtr); + uint256 len = item.len - offset; // data length + bytes memory result = new bytes(len); + + uint256 destPtr; + assembly { + destPtr := add(0x20, result) + } + + copy(item.memPtr + offset, destPtr, len); + return result; + } + + function numItems(RLPItem memory item) private pure returns (uint256) { + if (item.len == 0) return 0; + + uint256 count = 0; + uint256 currPtr = item.memPtr + _payloadOffset(item.memPtr); + uint256 endPtr = item.memPtr + item.len; + while (currPtr < endPtr) { + currPtr = currPtr + _itemLength(currPtr); // skip over an item + ++count; + } + + return count; + } + + function _itemLength(uint256 memPtr) private pure returns (uint256) { + uint256 itemLen; + uint256 byte0; + assembly { + byte0 := byte(0, mload(memPtr)) + } + + if (byte0 < STRING_SHORT_START) { + itemLen = 1; + } else if (byte0 < STRING_LONG_START) { + itemLen = byte0 - STRING_SHORT_START + 1; + } else if (byte0 < LIST_SHORT_START) { + uint256 dataLen; + assembly { + let byteLen := sub(byte0, 0xb7) // # of bytes the actual length is + memPtr := add(memPtr, 1) // skip over the first byte + + /* 32 byte word size */ + dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to get the len + itemLen := add(dataLen, add(byteLen, 1)) + } + require(itemLen >= dataLen, "addition overflow"); + } else if (byte0 < LIST_LONG_START) { + itemLen = byte0 - LIST_SHORT_START + 1; + } else { + uint256 dataLen; + assembly { + let byteLen := sub(byte0, 0xf7) + memPtr := add(memPtr, 1) + + dataLen := div(mload(memPtr), exp(256, sub(32, byteLen))) // right shifting to the correct length + itemLen := add(dataLen, add(byteLen, 1)) + } + require(itemLen >= dataLen, "addition overflow"); + } + + return itemLen; + } + + // @return number of bytes until the data + function _payloadOffset(uint256 memPtr) private pure returns (uint256) { + uint256 byte0; + assembly { + byte0 := byte(0, mload(memPtr)) + } + + if (byte0 < STRING_SHORT_START) { + return 0; + } else if (byte0 < STRING_LONG_START || (byte0 >= LIST_SHORT_START && byte0 < LIST_LONG_START)) { + return 1; + } else if ( + byte0 < LIST_SHORT_START // being explicit + ) { + return byte0 - (STRING_LONG_START - 1) + 1; + } else { + return byte0 - (LIST_LONG_START - 1) + 1; + } + } + + /* + * @param src Pointer to source + * @param dest Pointer to destination + * @param len Amount of memory to copy from the source + */ + function copy(uint256 src, uint256 dest, uint256 len) private pure { + if (len == 0) return; + + // copy as many word sizes as possible + for (; len >= WORD_SIZE; len -= WORD_SIZE) { + assembly { + mstore(dest, mload(src)) + } + + src += WORD_SIZE; + dest += WORD_SIZE; + } + + // left over bytes. Mask is used to remove unwanted bytes from the word + uint256 mask = 256 ** (WORD_SIZE - len) - 1; + assembly { + let srcpart := and(mload(src), not(mask)) // zero out src + let destpart := and(mload(dest), mask) // retrieve the bytes + mstore(dest, or(destpart, srcpart)) + } + } +} diff --git a/contracts/BC_fusion/lib/Utils.sol b/contracts/BC_fusion/lib/Utils.sol new file mode 100644 index 00000000..75820c8d --- /dev/null +++ b/contracts/BC_fusion/lib/Utils.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.17; + +library Utils { + function compareStrings(string memory a, string memory b) internal pure returns (bool) { + return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b)))); + } + + function bytesToAddress(bytes memory _input, uint256 _offset) internal pure returns (address _output) { + assembly { + _output := mload(add(_input, _offset)) + } + } + + function bytesToUint256(bytes memory _input, uint256 _offset) internal pure returns (uint256 _output) { + assembly { + _output := mload(add(_input, _offset)) + } + } + + function bytesToUint64(bytes memory _input, uint256 _offset) internal pure returns (uint64 _output) { + assembly { + _output := mload(add(_input, _offset)) + } + } + + function bytesToBytes32(bytes memory _input, uint256 _offset) internal pure returns (bytes32 _output) { + assembly { + _output := mload(add(_input, _offset)) + } + } + + function bytesConcat(bytes memory data, bytes memory _bytes, uint256 index, uint256 len) internal pure { + for (uint256 i; i < len; ++i) { + data[index++] = _bytes[i]; + } + } + + function bytesToHex(bytes memory buffer, bool prefix) internal pure returns (string memory) { + // Fixed buffer size for hexadecimal conversion + bytes memory converted = new bytes(buffer.length * 2); + + bytes memory _base = "0123456789abcdef"; + + for (uint256 i = 0; i < buffer.length; i++) { + converted[i * 2] = _base[uint8(buffer[i]) / _base.length]; + converted[i * 2 + 1] = _base[uint8(buffer[i]) % _base.length]; + } + + if (prefix) { + return string(abi.encodePacked("0x", converted)); + } + return string(converted); + } +} diff --git a/contracts/BSCValidatorSet.sol b/contracts/BSCValidatorSet.sol index c3482ec6..4c184831 100644 --- a/contracts/BSCValidatorSet.sol +++ b/contracts/BSCValidatorSet.sol @@ -12,10 +12,14 @@ import "./interface/IRelayerHub.sol"; import "./interface/IParamSubscriber.sol"; import "./interface/IBSCValidatorSet.sol"; import "./interface/IApplication.sol"; +import "./interface/IStakeHub.sol"; import "./lib/SafeMath.sol"; import "./lib/RLPDecode.sol"; import "./lib/CmnPkg.sol"; +interface ICrossChain { + function registeredContractChannelMap(address, uint8) external view returns (bool); +} contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplication { @@ -34,7 +38,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica uint256 public constant EXPIRE_TIME_SECOND_GAP = 1000; uint256 public constant MAX_NUM_OF_VALIDATORS = 100; - bytes public constant INIT_VALIDATORSET_BYTES = hex"f87680f873f871949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d791949fb29aac15b9a4b7f17c3385939b007540f4d79164b085e6972fc98cd3c81d64d40e325acfed44365b97a7567a27939c14dbc7512ddcf54cb1284eb637cfa308ae4e00cb5588"; + bytes public constant INIT_VALIDATORSET_BYTES = hex"f905ec80f905e8f846942a7cdd959bfe8d9487b2a43b33565295a698f7e294b6a7edd747c0554875d3fc531d19ba1497992c5e941ff80f3f7f110ffd8920a3ac38fdef318fe94a3f86048c27395000f846946488aa4d1955ee33403f8ccb1d4de5fb97c7ade294220f003d8bdfaadf52aa1e55ae4cc485e6794875941a87e90e440a39c99aa9cb5cea0ad6a3f0b2407b86048c27395000f846949ef9f4360c606c7ab4db26b016007d3ad0ab86a0946103af86a874b705854033438383c82575f25bc29418e2db06cbff3e3c5f856410a1838649e760175786048c27395000f84694ee01c3b1283aa067c58eab4709f85e99d46de5fe94ee4b9bfb1871c64e2bcabb1dc382dc8b7c4218a29415904ab26ab0e99d70b51c220ccdcccabee6e29786048c27395000f84694685b1ded8013785d6623cc18d214320b6bb6475994a20ef4e5e4e7e36258dbf51f4d905114cb1b34bc9413e39085dc88704f4394d35209a02b1a9520320c86048c27395000f8469478f3adfc719c99674c072166708589033e2d9afe9448a30d5eaa7b64492a160f139e2da2800ec3834e94055838358c29edf4dcc1ba1985ad58aedbb6be2b86048c27395000f84694c2be4ec20253b8642161bc3f444f53679c1f3d479466f50c616d737e60d7ca6311ff0d9c434197898a94d1d678a2506eeaa365056fe565df8bc8659f28b086048c27395000f846942f7be8361c80a4c1e7e9aaf001d0877f1cfde218945f93992ac37f3e61db2ef8a587a436a161fd210b94ecbc4fb1a97861344dad0867ca3cba2b860411f086048c27395000f84694ce2fd7544e0b2cc94692d4a704debef7bcb613289444abc67b4b2fba283c582387f54c9cba7c34bafa948acc2ab395ded08bb75ce85bf0f95ad2abc51ad586048c27395000f84694b8f7166496996a7da21cf1f1b04d9b3e26a3d077946770572763289aac606e4f327c2f6cc1aa3b3e3b94882d745ed97d4422ca8da1c22ec49d880c4c097286048c27395000f846942d4c407bbe49438ed859fe965b140dcf1aab71a9943ad0939e120f33518fbba04631afe7a3ed6327b194b2bbb170ca4e499a2b0f3cc85ebfa6e8c4dfcbea86048c27395000f846946bbad7cf34b5fa511d8e963dbba288b1960e75d694853b0f6c324d1f4e76c8266942337ac1b0af1a229442498946a51ca5924552ead6fc2af08b94fcba648601d1a94a2000f846944430b3230294d12c6ab2aac5c2cd68e80b16b581947b107f4976a252a6939b771202c28e64e03f52d694795811a7f214084116949fc4f53cedbf189eeab28601d1a94a2000f84694ea0a6e3c511bbd10f4519ece37dc24887e11b55d946811ca77acfb221a49393c193f3a22db829fcc8e9464feb7c04830dd9ace164fc5c52b3f5a29e5018a8601d1a94a2000f846947ae2f5b9e386cd1b50a4550696d957cb4900f03a94e83bcc5077e6b873995c24bac871b5ad856047e19464e48d4057a90b233e026c1041e6012ada897fe88601d1a94a2000f8469482012708dafc9e1b880fd083b32182b869be8e09948e5adc73a2d233a1b496ed3115464dd6c7b887509428b383d324bc9a37f4e276190796ba5a8947f5ed8601d1a94a2000f8469422b81f8e175ffde54d797fe11eb03f9e3bf75f1d94a1c3ef7ca38d8ba80cce3bfc53ebd2903ed21658942767f7447f7b9b70313d4147b795414aecea54718601d1a94a2000f8469468bf0b8b6fb4e317a0f9d6f03eaf8ce6675bc60d94675cfe570b7902623f47e7f59c9664b5f5065dcf94d84f0d2e50bcf00f2fc476e1c57f5ca2d57f625b8601d1a94a2000f846948c4d90829ce8f72d0163c1d5cf348a862d5506309485c42a7b34309bee2ed6a235f86d16f059deec5894cc2cedc53f0fa6d376336efb67e43d167169f3b78601d1a94a2000f8469435e7a025f4da968de7e4d7e4004197917f4070f194b1182abaeeb3b4d8eba7e6a4162eac7ace23d57394c4fd0d870da52e73de2dd8ded19fe3d26f43a1138601d1a94a2000f84694d6caa02bbebaebb5d7e581e4b66559e635f805ff94c07335cf083c1c46a487f0325769d88e163b653694efaff03b42e41f953a925fc43720e45fb61a19938601d1a94a2000"; uint32 public constant ERROR_UNKNOWN_PACKAGE_TYPE = 101; uint32 public constant ERROR_FAIL_CHECK_VALIDATORS = 102; @@ -54,7 +58,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica mapping(address =>uint256) public currentValidatorSetMap; uint256 public numOfJailed; - uint256 public constant BURN_RATIO_SCALE = 10000; + uint256 public constant BLOCK_FEES_RATIO_SCALE = 10000; address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD; uint256 public constant INIT_BURN_RATIO = 1000; uint256 public burnRatio; @@ -78,7 +82,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica // BEP-126 Fast Finality uint256 public constant INIT_SYSTEM_REWARD_RATIO = 625; // 625/10000 is 1/16 - uint256 public constant SYSTEM_REWARD_RATIO_SCALE = 10000; uint256 public constant MAX_SYSTEM_REWARD_BALANCE = 100 ether; uint256 public systemRewardRatio; @@ -88,6 +91,10 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica bytes[] public currentVoteAddrFullSet; bool public isSystemRewardIncluded; + // BEP-294 BC-fusion + Validator[] private _tmpMigratedValidatorSet; + bytes[] private _tmpMigratedVoteAddrs; + struct Validator { address consensusAddress; address payable feeAddress; @@ -165,6 +172,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica event validatorExitMaintenance(address indexed validator); event finalityRewardDeposit(address indexed validator, uint256 amount); event deprecatedFinalityRewardDeposit(address indexed validator, uint256 amount); + event tmpValidatorSetUpdated(uint256 validatorsNum); /*********************** init **************************/ function init() external onlyNotInit{ @@ -194,7 +202,18 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica emit failReasonWithStr("length of jail validators must be one"); resCode = ERROR_LEN_OF_VAL_MISMATCH; } else { - resCode = jailValidator(validatorSetPackage.validatorSet[0]); + address validator = validatorSetPackage.validatorSet[0].consensusAddress; + uint256 index = currentValidatorSetMap[validator]; + if (index == 0 || currentValidatorSet[index-1].jailed) { + emit validatorEmptyJailed(validator); + } else { + // felony will failed if the validator is the only one in the validator set + bool success = _felony(validator, index-1); + if (!success) { + emit validatorEmptyJailed(validator); + } + } + resCode = CODE_OK; } } else { resCode = ERROR_UNKNOWN_PACKAGE_TYPE; @@ -217,6 +236,84 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } /*********************** External Functions **************************/ + /** + * @dev Update validator set method after fusion fork. + */ + function updateValidatorSetV2( + address[] memory _consensusAddrs, + uint64[] memory _votingPowers, + bytes[] memory _voteAddrs + ) public onlyCoinbase onlyZeroGasPrice { + uint256 _length = _consensusAddrs.length; + Validator[] memory _validatorSet = new Validator[](_length); + for (uint256 i; i < _length; ++i) { + _validatorSet[i] = Validator({ + consensusAddress: _consensusAddrs[i], + feeAddress: payable(address(0)), + BBCFeeAddress: address(0), + votingPower: _votingPowers[i], + jailed: false, + incoming: 0 + }); + } + + // if staking channel is not closed, store the migrated validator set and return + if (ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).registeredContractChannelMap(VALIDATOR_CONTRACT_ADDR, STAKING_CHANNELID)) { + uint256 newLength = _validatorSet.length; + uint256 oldLength = _tmpMigratedValidatorSet.length; + if (oldLength > newLength) { + for (uint256 i = newLength; i < oldLength; ++i) { + _tmpMigratedValidatorSet.pop(); + _tmpMigratedVoteAddrs.pop(); + } + } + + for (uint256 i; i < newLength; ++i) { + if (i >= oldLength) { + _tmpMigratedValidatorSet.push(_validatorSet[i]); + _tmpMigratedVoteAddrs.push(_voteAddrs[i]); + } else { + _tmpMigratedValidatorSet[i] = _validatorSet[i]; + _tmpMigratedVoteAddrs[i] = _voteAddrs[i]; + } + } + + emit tmpValidatorSetUpdated(newLength); + return; + } + + // step 0: force all maintaining validators to exit `Temporary Maintenance` + // - 1. validators exit maintenance + // - 2. clear all maintainInfo + // - 3. get unjailed validators from validatorSet + (Validator[] memory validatorSetTemp, bytes[] memory voteAddrsTemp) = _forceMaintainingValidatorsExit(_validatorSet, _voteAddrs); + + // step 1: distribute incoming + for (uint i; i < currentValidatorSet.length; ++i) { + uint256 incoming = currentValidatorSet[i].incoming; + if (incoming != 0) { + currentValidatorSet[i].incoming = 0; + IStakeHub(STAKE_HUB_ADDR).distributeReward{value : incoming}(currentValidatorSet[i].consensusAddress); + } + } + + // step 2: do dusk transfer + if (address(this).balance>0) { + emit systemTransfer(address(this).balance); + address(uint160(SYSTEM_REWARD_ADDR)).transfer(address(this).balance); + } + + // step 3: do update validator set state + totalInComing = 0; + numOfJailed = 0; + if (validatorSetTemp.length != 0) { + doUpdateState(validatorSetTemp, voteAddrsTemp); + } + + // step 3: clean slash contract + ISlashIndicator(SLASH_CONTRACT_ADDR).clean(); + emit validatorSetUpdated(); + } /** * @dev Collect all fee of transactions from the current block and deposit it to the contract @@ -233,14 +330,18 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica isSystemRewardIncluded = true; } - uint256 toSystemReward = value.mul(systemRewardRatio).div(SYSTEM_REWARD_RATIO_SCALE); - if (toSystemReward > 0) { - address(uint160(SYSTEM_REWARD_ADDR)).transfer(toSystemReward); - emit systemTransfer(toSystemReward); + if (value > 0 && systemRewardRatio > 0) { + uint256 toSystemReward = msg.value.mul(systemRewardRatio).div(BLOCK_FEES_RATIO_SCALE); + if (toSystemReward > 0) { + address(uint160(SYSTEM_REWARD_ADDR)).transfer(toSystemReward); + emit systemTransfer(toSystemReward); + + value = value.sub(toSystemReward); + } } if (value > 0 && burnRatio > 0) { - uint256 toBurn = value.mul(burnRatio).div(BURN_RATIO_SCALE); + uint256 toBurn = msg.value.mul(burnRatio).div(BLOCK_FEES_RATIO_SCALE); if (toBurn > 0) { address(uint160(BURN_ADDRESS)).transfer(toBurn); emit feeBurned(toBurn); @@ -249,7 +350,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } } - value = value.sub(toSystemReward); if (index>0) { Validator storage validator = currentValidatorSet[index-1]; if (validator.jailed) { @@ -265,25 +365,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } } - function jailValidator(Validator memory v) internal returns (uint32) { - uint256 index = currentValidatorSetMap[v.consensusAddress]; - if (index==0 || currentValidatorSet[index-1].jailed) { - emit validatorEmptyJailed(v.consensusAddress); - return CODE_OK; - } - uint n = currentValidatorSet.length; - bool shouldKeep = (numOfJailed >= n-1); - // will not jail if it is the last valid validator - if (shouldKeep) { - emit validatorEmptyJailed(v.consensusAddress); - return CODE_OK; - } - ++numOfJailed; - currentValidatorSet[index-1].jailed = true; - emit validatorJailed(v.consensusAddress); - return CODE_OK; - } - function updateValidatorSet(Validator[] memory validatorSet, bytes[] memory voteAddrs) internal returns (uint32) { { // do verify. @@ -305,18 +386,36 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica // - 1. validators exit maintenance // - 2. clear all maintainInfo // - 3. get unjailed validators from validatorSet - (Validator[] memory validatorSetTemp, bytes[] memory voteAddrsTemp) = _forceMaintainingValidatorsExit(validatorSet, voteAddrs); + Validator[] memory validatorSetTemp; + bytes[] memory voteAddrsTemp; + { + // get migrated validators + Validator[] memory bscValidatorSet = _tmpMigratedValidatorSet; + bytes[] memory bscVoteAddrs = _tmpMigratedVoteAddrs; + for (uint256 i; i < bscValidatorSet.length; ++i) { + bscValidatorSet[i].votingPower = bscValidatorSet[i].votingPower * 3; // amplify the voting power for BSC validators + } + (Validator[] memory mergedValidators, bytes[] memory mergedVoteAddrs) = _mergeValidatorSet(validatorSet, voteAddrs, bscValidatorSet, bscVoteAddrs); + + (validatorSetTemp, voteAddrsTemp) = _forceMaintainingValidatorsExit(mergedValidators, mergedVoteAddrs); + } { //step 1: do calculate distribution, do not make it as an internal function for saving gas. uint crossSize; uint directSize; uint validatorsNum = currentValidatorSet.length; + uint8[] memory isMigrated = new uint8[](validatorsNum); for (uint i; i= DUSTY_INCOMING) { - ++crossSize; - } else if (currentValidatorSet[i].incoming > 0) { - ++directSize; + if (IStakeHub(STAKE_HUB_ADDR).consensusToOperator(currentValidatorSet[i].consensusAddress) != address(0)) { + isMigrated[i] = 1; + if (currentValidatorSet[i].incoming != 0) { + ++ directSize; + } + } else if (currentValidatorSet[i].incoming >= DUSTY_INCOMING) { + ++ crossSize; + } else if (currentValidatorSet[i].incoming != 0) { + ++ directSize; } } @@ -336,8 +435,15 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica emit failReasonWithStr("fee is larger than DUSTY_INCOMING"); return ERROR_RELAYFEE_TOO_LARGE; } - for (uint i; i= DUSTY_INCOMING) { + for (uint i; i < validatorsNum; ++i) { + if (isMigrated[i] == 1) { + if (currentValidatorSet[i].incoming != 0) { + directAddrs[directSize] = payable(currentValidatorSet[i].consensusAddress); + directAmounts[directSize] = currentValidatorSet[i].incoming; + isMigrated[directSize] = 1; // directSize must be less than i. so we can use directSize as index + ++directSize; + } + } else if (currentValidatorSet[i].incoming >= DUSTY_INCOMING) { crossAddrs[crossSize] = currentValidatorSet[i].BBCFeeAddress; uint256 value = currentValidatorSet[i].incoming - currentValidatorSet[i].incoming % PRECISION; crossAmounts[crossSize] = value.sub(relayFee); @@ -345,9 +451,10 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica crossIndexes[crossSize] = i; crossTotal = crossTotal.add(value); ++crossSize; - } else if (currentValidatorSet[i].incoming > 0) { + } else if (currentValidatorSet[i].incoming != 0) { directAddrs[directSize] = currentValidatorSet[i].feeAddress; directAmounts[directSize] = currentValidatorSet[i].incoming; + isMigrated[directSize] = 0; ++directSize; } } @@ -383,27 +490,38 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } // step 3: direct transfer - if (directAddrs.length>0) { - for (uint i; i 0) { + for (uint i; i < directAddrs.length; ++i) { + if (isMigrated[i] == 1) { + IStakeHub(STAKE_HUB_ADDR).distributeReward{value : directAmounts[i]}(directAddrs[i]); } else { - emit directTransferFail(directAddrs[i], directAmounts[i]); + bool success = directAddrs[i].send(directAmounts[i]); + if (success) { + emit directTransfer(directAddrs[i], directAmounts[i]); + } else { + emit directTransferFail(directAddrs[i], directAmounts[i]); + } } } } } + for (uint i; i < currentValidatorSet.length; ++i) { + if (currentValidatorSet[i].incoming != 0) { + currentValidatorSet[i].incoming = 0; + } + } + // step 4: do dusk transfer if (address(this).balance>0) { emit systemTransfer(address(this).balance); address(uint160(SYSTEM_REWARD_ADDR)).transfer(address(this).balance); } + // step 5: do update validator set state totalInComing = 0; numOfJailed = 0; - if (validatorSetTemp.length>0) { + if (validatorSetTemp.length > 0) { doUpdateState(validatorSetTemp, voteAddrsTemp); } @@ -415,7 +533,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica /** * @dev With each epoch, there will be a partial rotation between cabinets and candidates. Rotation is determined by this function - * */ function shuffle(address[] memory validators, bytes[] memory voteAddrs, uint256 epochNumber, uint startIdx, uint offset, uint limit, uint modNumber) internal pure { for (uint i; i 0 ? numOfCabinets : INIT_NUM_OF_CABINETS; address[] memory validators = getValidators(); bytes[] memory voteAddrs = getVoteAddresses(validators); @@ -496,8 +616,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } /** - * @dev Get all validators, including all of the cabinets and all of the candidates - * + * @notice Return the consensus address of the validators in `currentValidatorSet` that are not jailed and not maintaining */ function getValidators() public view returns(address[] memory) { uint n = currentValidatorSet.length; @@ -518,6 +637,11 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica return consensusAddrs; } + /** + * @notice Return whether the validator is a working validator(not jailed or maintaining) by index + * + * @param index The index of the validator in `currentValidatorSet`(from 0 to `currentValidatorSet.length-1`) + */ function isWorkingValidator(uint index) public view returns (bool) { if (index >= currentValidatorSet.length) { return false; @@ -531,6 +655,9 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica return !currentValidatorSet[index].jailed && !validatorExtraSet[index].isMaintaining; } + /** + * @notice Return the current incoming of the validator + */ function getIncoming(address validator)external view returns(uint256) { uint256 index = currentValidatorSetMap[validator]; if (index<=0) { @@ -539,6 +666,10 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica return currentValidatorSet[index-1].incoming; } + /** + * @notice Return whether the validator is a working validator(not jailed or maintaining) by consensus address + * Will return false if the validator is not in `currentValidatorSet` + */ function isCurrentValidator(address validator) external view override returns (bool) { uint256 index = currentValidatorSetMap[validator]; if (index <= 0) { @@ -554,14 +685,14 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica uint256 totalValue; uint256 balanceOfSystemReward = address(SYSTEM_REWARD_ADDR).balance; if (balanceOfSystemReward > MAX_SYSTEM_REWARD_BALANCE) { - // when a slash happens, theres will no rewards in some epoches, + // when a slash happens, theres will no rewards in some epochs, // it's tolerated because slash happens rarely totalValue = balanceOfSystemReward.sub(MAX_SYSTEM_REWARD_BALANCE); } else { return; } - totalValue = ISystemReward(SYSTEM_REWARD_ADDR).claimRewardsforFinality(payable(address(this)), totalValue); + totalValue = ISystemReward(SYSTEM_REWARD_ADDR).claimRewards(payable(address(this)), totalValue); if (totalValue == 0) { return; } @@ -609,6 +740,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica workingValidatorCount = 1; } } + /*********************** For slash **************************/ function misdemeanor(address validator) external onlySlash initValidatorExtraSet override { uint256 validatorIndex = _misdemeanor(validator); @@ -617,7 +749,9 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } } - function felony(address validator)external onlySlash initValidatorExtraSet override{ + function felony(address validator) external initValidatorExtraSet override { + require(msg.sender == SLASH_CONTRACT_ADDR || msg.sender == STAKE_HUB_ADDR, "only slash or stakeHub contract"); + uint256 index = currentValidatorSetMap[validator]; if (index <= 0) { return; @@ -631,15 +765,30 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } } + function removeTmpMigratedValidator(address validator) external onlyStakeHub { + for (uint256 i; i < _tmpMigratedValidatorSet.length; ++i) { + if (_tmpMigratedValidatorSet[i].consensusAddress == validator) { + _tmpMigratedValidatorSet[i].jailed = true; + break; + } + } + } + /*********************** For Temporary Maintenance **************************/ - function getCurrentValidatorIndex(address _validator) public view returns (uint256) { - uint256 index = currentValidatorSetMap[_validator]; + /** + * @notice Return the index of the validator in `currentValidatorSet`(from 0 to `currentValidatorSet.length-1`) + */ + function getCurrentValidatorIndex(address validator) public view returns (uint256) { + uint256 index = currentValidatorSetMap[validator]; require(index > 0, "only current validators"); // the actual index return index - 1; } + /** + * @notice Return whether the validator at index could enter maintenance + */ function canEnterMaintenance(uint256 index) public view returns (bool) { if (index >= currentValidatorSet.length) { return false; @@ -660,10 +809,8 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica return true; } - /** * @dev Enter maintenance for current validators. refer to https://github.com/bnb-chain/BEPs/blob/master/BEP127.md - * */ function enterMaintenance() external initValidatorExtraSet { // check maintain config @@ -681,7 +828,6 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica /** * @dev Exit maintenance for current validators. refer to https://github.com/bnb-chain/BEPs/blob/master/BEP127.md - * */ function exitMaintenance() external { uint256 index = getCurrentValidatorIndex(msg.sender); @@ -702,7 +848,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } else if (Memory.compareStrings(key, "burnRatio")) { require(value.length == 32, "length of burnRatio mismatch"); uint256 newBurnRatio = BytesToTypes.bytesToUint256(32, value); - require(newBurnRatio <= BURN_RATIO_SCALE, "the burnRatio must be no greater than 10000"); + require(newBurnRatio.add(systemRewardRatio) <= BLOCK_FEES_RATIO_SCALE, "the burnRatio plus systemRewardRatio must be no greater than 10000"); burnRatio = newBurnRatio; } else if (Memory.compareStrings(key, "maxNumOfMaintaining")) { require(value.length == 32, "length of maxNumOfMaintaining mismatch"); @@ -739,7 +885,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica } else if (Memory.compareStrings(key, "systemRewardRatio")) { require(value.length == 32, "length of systemRewardRatio mismatch"); uint256 newSystemRewardRatio = BytesToTypes.bytesToUint256(32, value); - require(newSystemRewardRatio >= 1 && newSystemRewardRatio <= SYSTEM_REWARD_RATIO_SCALE, "the systemRewardRatio must be no greater than 10000"); + require(newSystemRewardRatio.add(burnRatio) <= BLOCK_FEES_RATIO_SCALE, "the systemRewardRatio plus burnRatio must be no greater than 10000"); systemRewardRatio = newSystemRewardRatio; } else { require(false, "unknown param"); @@ -785,11 +931,11 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica validatorExtraSet[i].isMaintaining = false; validatorExtraSet[i].enterMaintenanceHeight = 0; } else { - // if the validator is the same, update the vote address if it is different + currentValidatorSet[i].votingPower = newValidatorSet[i].votingPower; + // update the vote address if it is different if (!BytesLib.equal(newVoteAddrs[i], validatorExtraSet[i].voteAddress)) { validatorExtraSet[i].voteAddress = newVoteAddrs[i]; } - currentValidatorSet[i].incoming = 0; } } @@ -823,7 +969,7 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica * Vote address is not considered */ function isSameValidator(Validator memory v1, Validator memory v2) private pure returns(bool) { - return v1.consensusAddress == v2.consensusAddress && v1.feeAddress == v2.feeAddress && v1.BBCFeeAddress == v2.BBCFeeAddress && v1.votingPower == v2.votingPower; + return v1.consensusAddress == v2.consensusAddress && v1.feeAddress == v2.feeAddress && v1.BBCFeeAddress == v2.BBCFeeAddress; } function getVoteAddresses(address[] memory validators) internal view returns(bytes[] memory) { @@ -924,22 +1070,23 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica // should not happen, but still protect return index; } + + // averageDistribute*rest may less than income, but it is ok, the dust income will go to system reward eventually. uint256 averageDistribute = income / rest; if (averageDistribute != 0) { for (uint i; i= _validatorSet.length - 1) { + if (!isFelony) { continue; } + // get the latest consensus address + address latestConsensusAddress; + address operatorAddress = IStakeHub(STAKE_HUB_ADDR).consensusToOperator(validator); + if (operatorAddress != address(0)) { + latestConsensusAddress = IStakeHub(STAKE_HUB_ADDR).getValidatorConsensusAddress(operatorAddress); + } + // record the jailed validator in validatorSet - for (uint k; k<_validatorSet.length; ++k) { - if (_validatorSet[k].consensusAddress == validator) { - _validatorSet[k].jailed = true; - ++numOfFelony; + for (uint j; j<_validatorSet.length; ++j) { + if (_validatorSet[j].consensusAddress == validator || _validatorSet[j].consensusAddress == latestConsensusAddress) { + _validatorSet[j].jailed = true; break; } } } + // count the number of felony validators + for (uint k; k<_validatorSet.length; ++k) { + if (_validatorSet[k].jailed || _validatorSet[k].consensusAddress == address(0)) { + ++numOfFelony; + } + } + // 2. get unjailed validators from validatorSet - unjailedValidatorSet = new Validator[](_validatorSet.length - numOfFelony); - unjailedVoteAddrs = new bytes[](_validatorSet.length - numOfFelony); - i = 0; - for (uint index; index<_validatorSet.length; ++index) { - if (!_validatorSet[index].jailed) { - unjailedValidatorSet[i] = _validatorSet[index]; - unjailedVoteAddrs[i] = _voteAddrs[index]; - ++i; + if (numOfFelony >= _validatorSet.length) { + // make sure there is at least one validator + unjailedValidatorSet = new Validator[](1); + unjailedVoteAddrs = new bytes[](1); + unjailedValidatorSet[0] = _validatorSet[0]; + unjailedVoteAddrs[0] = _voteAddrs[0]; + unjailedValidatorSet[0].jailed = false; + } else { + unjailedValidatorSet = new Validator[](_validatorSet.length - numOfFelony); + unjailedVoteAddrs = new bytes[](_validatorSet.length - numOfFelony); + i = 0; + for (uint index; index<_validatorSet.length; ++index) { + if (!_validatorSet[index].jailed && _validatorSet[index].consensusAddress != address(0)) { + unjailedValidatorSet[i] = _validatorSet[index]; + unjailedVoteAddrs[i] = _voteAddrs[index]; + ++i; + } } } @@ -1054,7 +1223,11 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica isFelony = false; if (slashCount >= felonyThreshold) { _felony(validator, index); - ISlashIndicator(SLASH_CONTRACT_ADDR).sendFelonyPackage(validator); + if (IStakeHub(STAKE_HUB_ADDR).consensusToOperator(validator) != address(0)) { + ISlashIndicator(SLASH_CONTRACT_ADDR).downtimeSlash(validator, slashCount); + } else { + ISlashIndicator(SLASH_CONTRACT_ADDR).sendFelonyPackage(validator); + } isFelony = true; } else if (slashCount >= misdemeanorThreshold) { _misdemeanor(validator); @@ -1063,6 +1236,59 @@ contract BSCValidatorSet is IBSCValidatorSet, System, IParamSubscriber, IApplica emit validatorExitMaintenance(validator); } + function _mergeValidatorSet(Validator[] memory validatorSet1, bytes[] memory voteAddrSet1, Validator[] memory validatorSet2, bytes[] memory voteAddrSet2) internal view returns (Validator[] memory, bytes[] memory) { + uint256 _length = IStakeHub(STAKE_HUB_ADDR).maxElectedValidators(); + if (validatorSet1.length + validatorSet2.length < _length) { + _length = validatorSet1.length + validatorSet2.length; + } + Validator[] memory mergedValidatorSet = new Validator[](_length); + bytes[] memory mergedVoteAddrSet = new bytes[](_length); + + uint256 i; + uint256 j; + uint256 k; + while ((i < validatorSet1.length || j < validatorSet2.length) && k < _length) { + if (i == validatorSet1.length) { + mergedValidatorSet[k] = validatorSet2[j]; + mergedVoteAddrSet[k] = voteAddrSet2[j]; + ++j; + ++k; + continue; + } + + if (j == validatorSet2.length) { + mergedValidatorSet[k] = validatorSet1[i]; + mergedVoteAddrSet[k] = voteAddrSet1[i]; + ++i; + ++k; + continue; + } + + if (validatorSet1[i].votingPower > validatorSet2[j].votingPower) { + mergedValidatorSet[k] = validatorSet1[i]; + mergedVoteAddrSet[k] = voteAddrSet1[i]; + ++i; + } else if (validatorSet1[i].votingPower < validatorSet2[j].votingPower) { + mergedValidatorSet[k] = validatorSet2[j]; + mergedVoteAddrSet[k] = voteAddrSet2[j]; + ++j; + } else { + if (validatorSet1[i].consensusAddress < validatorSet2[j].consensusAddress) { + mergedValidatorSet[k] = validatorSet1[i]; + mergedVoteAddrSet[k] = voteAddrSet1[i]; + ++i; + } else { + mergedValidatorSet[k] = validatorSet2[j]; + mergedVoteAddrSet[k] = voteAddrSet2[j]; + ++j; + } + } + ++k; + } + + return (mergedValidatorSet, mergedVoteAddrSet); + } + //rlp encode & decode function function decodeValidatorSetSynPackage(bytes memory msgBytes) internal pure returns(IbcValidatorSetPackage memory, bool) { IbcValidatorSetPackage memory validatorSetPkg; diff --git a/contracts/CrossChain.sol b/contracts/CrossChain.sol index 45ce3d0d..63127701 100644 --- a/contracts/CrossChain.sol +++ b/contracts/CrossChain.sol @@ -17,7 +17,7 @@ contract CrossChain is System, ICrossChain, IParamSubscriber{ // constant variables string constant public STORE_NAME = "ibc"; - uint256 constant public CROSS_CHAIN_KEY_PREFIX = 0x0102ca00; // last 6 bytes + uint256 constant public CROSS_CHAIN_KEY_PREFIX = 0x01003800; // last 6 bytes uint8 constant public SYN_PACKAGE = 0x00; uint8 constant public ACK_PACKAGE = 0x01; uint8 constant public FAIL_ACK_PACKAGE = 0x02; diff --git a/contracts/GovHub.sol b/contracts/GovHub.sol index ddc3abf4..d5781620 100644 --- a/contracts/GovHub.sol +++ b/contracts/GovHub.sol @@ -27,7 +27,7 @@ contract GovHub is System, IApplication{ address target; } - function handleSynPackage(uint8, bytes calldata msgBytes) onlyCrossChainContract external override returns(bytes memory responsePayload) { + function handleSynPackage(uint8, bytes calldata msgBytes) external onlyCrossChainContract override returns(bytes memory responsePayload) { (ParamChangePackage memory proposal, bool success) = decodeSynPackage(msgBytes); if (!success) { return CmnPkg.encodeCommonAckPackage(ERROR_FAIL_DECODE); @@ -50,6 +50,11 @@ contract GovHub is System, IApplication{ require(false, "receive unexpected fail ack package"); } + function updateParam(string calldata key, bytes calldata value, address target) external onlyGovernorTimelock { + ParamChangePackage memory proposal = ParamChangePackage(key, value, target); + notifyUpdates(proposal); + } + function notifyUpdates(ParamChangePackage memory proposal) internal returns(uint32) { if (!isContract(proposal.target)) { @@ -89,4 +94,4 @@ contract GovHub is System, IApplication{ } return (pkg, success); } -} \ No newline at end of file +} diff --git a/contracts/SlashIndicator.sol b/contracts/SlashIndicator.sol index 4d4b78c3..b0943715 100644 --- a/contracts/SlashIndicator.sol +++ b/contracts/SlashIndicator.sol @@ -12,6 +12,7 @@ import "./interface/IBSCValidatorSet.sol"; import "./interface/IParamSubscriber.sol"; import "./interface/ICrossChain.sol"; import "./interface/ISystemReward.sol"; +import "./interface/IStakeHub.sol"; import "./lib/CmnPkg.sol"; import "./lib/RLPEncode.sol"; @@ -20,7 +21,6 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication uint256 public constant MISDEMEANOR_THRESHOLD = 50; uint256 public constant FELONY_THRESHOLD = 150; - uint256 public constant BSC_RELAYER_REWARD = 1e16; uint256 public constant DECREASE_RATE = 4; // State of the contract @@ -34,14 +34,16 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication uint256 public felonyThreshold; // BEP-126 Fast Finality - uint256 public constant INIT_FINALITY_SLASH_REWARD_RATIO = 20; + // @notice change name from `INIT_FINALITY_SLASH_REWARD_RATIO` to `INIT_FELONY_SLASH_REWARD_RATIO` after BC-fusion + uint256 public constant INIT_FELONY_SLASH_REWARD_RATIO = 20; - uint256 public finalitySlashRewardRatio; + // @notice change name from `finalitySlashRewardRatio` to `felonySlashRewardRatio` after BC-fusion + uint256 public felonySlashRewardRatio; bool public enableMaliciousVoteSlash; - uint256 public constant INIT_MALICIOUS_VOTE_SLASH_SCOPE = 86400; // 3 days - - uint256 public maliciousVoteSlashScope; + uint256 public constant INIT_FELONY_SLASH_SCOPE = 28800; // 1 days(block number) + + uint256 public felonySlashScope; event validatorSlashed(address indexed validator); event maliciousVoteSlashed(bytes32 indexed voteAddrSlice); @@ -53,7 +55,6 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication event crashResponse(); event failedFelony(address indexed validator, uint256 slashCount, bytes failReason); - event failedMaliciousVoteSlash(bytes32 indexed voteAddrSlice, bytes failReason); struct Indicator { uint256 height; @@ -81,7 +82,7 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication _; previousHeight = block.number; } - + function init() external onlyNotInit{ misdemeanorThreshold = MISDEMEANOR_THRESHOLD; felonyThreshold = FELONY_THRESHOLD; @@ -130,8 +131,13 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication if (indicator.count % felonyThreshold == 0) { indicator.count = 0; IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).felony(validator); - try ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(SLASH_CHANNELID, encodeSlashPackage(validator), 0) {} catch (bytes memory reason) { - emit failedFelony(validator, indicator.count, reason); + if (IStakeHub(STAKE_HUB_ADDR).consensusToOperator(validator) != address(0)) { + _downtimeSlash(validator, indicator.count); + } else { + // send slash msg to bc if validator is not migrated + try ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(SLASH_CHANNELID, encodeSlashPackage(validator), 0) {} catch (bytes memory reason) { + emit failedFelony(validator, indicator.count, reason); + } } } else if (indicator.count % misdemeanorThreshold == 0) { IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).misdemeanor(validator); @@ -194,18 +200,31 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication emit indicatorCleaned(); } - function submitFinalityViolationEvidence(FinalityEvidence memory _evidence) public onlyInit onlyRelayer { + function downtimeSlash(address validator, uint256 count) external override onlyValidatorContract { + _downtimeSlash(validator, count); + } + + function _downtimeSlash(address validator, uint256 count) internal { + try IStakeHub(STAKE_HUB_ADDR).downtimeSlash(validator) { + } catch Error(string memory reason) { + emit failedFelony(validator, count, bytes(reason)); + } catch (bytes memory lowLevelData) { + emit failedFelony(validator, count, lowLevelData); + } + } + + function submitFinalityViolationEvidence(FinalityEvidence memory _evidence) public onlyInit { require(enableMaliciousVoteSlash, "malicious vote slash not enabled"); - if (finalitySlashRewardRatio == 0) { - finalitySlashRewardRatio = INIT_FINALITY_SLASH_REWARD_RATIO; + if (felonySlashRewardRatio == 0) { + felonySlashRewardRatio = INIT_FELONY_SLASH_REWARD_RATIO; } - if (maliciousVoteSlashScope == 0) { - maliciousVoteSlashScope = INIT_MALICIOUS_VOTE_SLASH_SCOPE; + if (felonySlashScope == 0) { + felonySlashScope = INIT_FELONY_SLASH_SCOPE; } // Basic check - require(_evidence.voteA.tarNum+maliciousVoteSlashScope > block.number && - _evidence.voteB.tarNum+maliciousVoteSlashScope > block.number, "target block too old"); + require(_evidence.voteA.tarNum+felonySlashScope > block.number && + _evidence.voteB.tarNum+felonySlashScope > block.number, "target block too old"); require(!(_evidence.voteA.srcHash == _evidence.voteB.srcHash && _evidence.voteA.tarHash == _evidence.voteB.tarHash), "two identical votes"); require(_evidence.voteA.srcNum < _evidence.voteA.tarNum && @@ -220,39 +239,87 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication require(IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).isMonitoredForMaliciousVote(_evidence.voteAddr),"voteAddr is not found"); // BLS verification - require(verifyBLSSignature(_evidence.voteA, _evidence.voteAddr) && - verifyBLSSignature(_evidence.voteB, _evidence.voteAddr), "verify signature failed"); + require(_verifyBLSSignature(_evidence.voteA, _evidence.voteAddr) && + _verifyBLSSignature(_evidence.voteB, _evidence.voteAddr), "verify signature failed"); // reward sender and felony validator if validator found + // TODO: after BC-fusion, we don't need to check if validator is living (address[] memory vals, bytes[] memory voteAddrs) = IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).getLivingValidators(); for (uint i; i < voteAddrs.length; ++i) { if (BytesLib.equal(voteAddrs[i], _evidence.voteAddr)) { - uint256 amount = (address(SYSTEM_REWARD_ADDR).balance * finalitySlashRewardRatio) / 100; - ISystemReward(SYSTEM_REWARD_ADDR).claimRewardsforFinality(msg.sender, amount); - IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).felony( vals[i]); + uint256 amount = (address(SYSTEM_REWARD_ADDR).balance * felonySlashRewardRatio) / 100; + ISystemReward(SYSTEM_REWARD_ADDR).claimRewards(msg.sender, amount); + IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).felony(vals[i]); break; } } - // send slash msg to bc - bytes32 voteAddrSlice = BytesLib.toBytes32(_evidence.voteAddr,0); - try ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(SLASH_CHANNELID, encodeVoteSlashPackage(_evidence.voteAddr), 0) { + if (IStakeHub(STAKE_HUB_ADDR).voteToOperator(_evidence.voteAddr) != address(0)) { + IStakeHub(STAKE_HUB_ADDR).maliciousVoteSlash(_evidence.voteAddr); + } else { + // send slash msg to bc if the validator not migrated + ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(SLASH_CHANNELID, encodeVoteSlashPackage(_evidence.voteAddr), 0); + + bytes32 voteAddrSlice = BytesLib.toBytes32(_evidence.voteAddr, 0); emit maliciousVoteSlashed(voteAddrSlice); - } catch (bytes memory reason) { - emit failedMaliciousVoteSlash(voteAddrSlice, reason); } } + function submitDoubleSignEvidence(bytes memory header1, bytes memory header2) public onlyInit { + if (felonySlashRewardRatio == 0) { + felonySlashRewardRatio = INIT_FELONY_SLASH_REWARD_RATIO; + } + if (felonySlashScope == 0) { + felonySlashScope = INIT_FELONY_SLASH_SCOPE; + } + + require(header1.length != 0 && header2.length != 0, "empty header"); + + bytes[] memory elements = new bytes[](3); + elements[0] = bscChainID.encodeUint(); + elements[1] = header1.encodeBytes(); + elements[2] = header2.encodeBytes(); + + // call precompile contract to verify evidence + bytes memory input = elements.encodeList(); + bytes memory output = new bytes(52); + assembly { + let len := mload(input) + if iszero(staticcall(not(0), 0x68, add(input, 0x20), len, add(output, 0x20), 0x34)) { + revert(0, 0) + } + } + + address signer; + uint256 evidenceHeight; + assembly { + signer := mload(add(output, 0x14)) + evidenceHeight := mload(add(output, 0x34)) + } + require(IStakeHub(STAKE_HUB_ADDR).consensusToOperator(signer) != address(0), "validator not migrated"); + require(evidenceHeight + felonySlashScope >= block.number, "evidence too old"); + + // reward sender and felony validator + IStakeHub(STAKE_HUB_ADDR).doubleSignSlash(signer); + IBSCValidatorSet(VALIDATOR_CONTRACT_ADDR).felony(signer); + + uint256 amount = (address(SYSTEM_REWARD_ADDR).balance * felonySlashRewardRatio) / 100; + ISystemReward(SYSTEM_REWARD_ADDR).claimRewards(msg.sender, amount); + } + /** * @dev Send a felony cross-chain package to jail a validator * * @param validator Who will be jailed */ function sendFelonyPackage(address validator) external override(ISlashIndicator) onlyValidatorContract onlyInit { - ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(SLASH_CHANNELID, encodeSlashPackage(validator), 0); + try ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(SLASH_CHANNELID, encodeSlashPackage(validator), 0) {} + catch (bytes memory reason) { + emit failedFelony(validator, 0, reason); + } } - function verifyBLSSignature(VoteData memory vote, bytes memory voteAddr) internal view returns(bool) { + function _verifyBLSSignature(VoteData memory vote, bytes memory voteAddr) internal view returns(bool) { bytes[] memory elements = new bytes[](4); bytes memory _bytes = new bytes(32); elements[0] = vote.srcNum.encodeUint(); @@ -266,9 +333,9 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication // assemble input data bytes memory input = new bytes(176); - bytesConcat(input, _bytes, 0, 32); - bytesConcat(input, vote.sig, 32, 96); - bytesConcat(input, voteAddr, 128, 48); + _bytesConcat(input, _bytes, 0, 32); + _bytesConcat(input, vote.sig, 32, 96); + _bytesConcat(input, voteAddr, 128, 48); // call the precompiled contract to verify the BLS signature // the precompiled contract's address is 0x66 @@ -285,7 +352,7 @@ contract SlashIndicator is ISlashIndicator,System,IParamSubscriber, IApplication return true; } - function bytesConcat(bytes memory data, bytes memory _bytes, uint256 index, uint256 len) internal pure { + function _bytesConcat(bytes memory data, bytes memory _bytes, uint256 index, uint256 len) internal pure { for (uint i; i misdemeanorThreshold, "the felonyThreshold out of range"); felonyThreshold = newFelonyThreshold; - } else if (Memory.compareStrings(key, "finalitySlashRewardRatio")) { - require(value.length == 32, "length of finalitySlashRewardRatio mismatch"); - uint256 newFinalitySlashRewardRatio = BytesToTypes.bytesToUint256(32, value); - require(newFinalitySlashRewardRatio >= 10 && newFinalitySlashRewardRatio < 100, "the finality slash reward ratio out of range"); - finalitySlashRewardRatio = newFinalitySlashRewardRatio; + } else if (Memory.compareStrings(key, "felonySlashRewardRatio")) { + require(value.length == 32, "length of felonySlashRewardRatio mismatch"); + uint256 newFelonySlashRewardRatio = BytesToTypes.bytesToUint256(32, value); + require(newFelonySlashRewardRatio >= 10 && newFelonySlashRewardRatio < 100, "the felony slash reward ratio out of range"); + felonySlashRewardRatio = newFelonySlashRewardRatio; } else if (Memory.compareStrings(key, "enableMaliciousVoteSlash")) { require(value.length == 32, "length of enableMaliciousVoteSlash mismatch"); enableMaliciousVoteSlash = BytesToTypes.bytesToBool(32, value); - } else if (Memory.compareStrings(key, "maliciousVoteSlashScope")) { - require(value.length == 32, "length of maliciousVoteSlashScope mismatch"); + } else if (Memory.compareStrings(key, "felonySlashScope")) { + require(value.length == 32, "length of felonySlashScope mismatch"); uint256 newMaliciousVoteSlashScope = BytesToTypes.bytesToUint256(32, value); require(newMaliciousVoteSlashScope >= 28800*1 && newMaliciousVoteSlashScope < 28800*30, "the malicious vote slash scope out of range"); - maliciousVoteSlashScope = newMaliciousVoteSlashScope; + felonySlashScope = newMaliciousVoteSlashScope; } else { require(false, "unknown param"); } diff --git a/contracts/Staking.sol b/contracts/Staking.sol index dff2c910..43077a10 100644 --- a/contracts/Staking.sol +++ b/contracts/Staking.sol @@ -194,35 +194,10 @@ contract Staking is IStaking, System, IParamSubscriber, IApplication { /***************************** External functions *****************************/ /** - * @dev Delegate BNB from BSC to BC - * - * @param validator BC validator address encoded to evm address - * @param amount Amount user delegate to BC validator + * @dev Deprecated after fusion */ - function delegate(address validator, uint256 amount) override external payable noReentrant tenDecimalPrecision(amount) initParams { - require(amount >= minDelegation, "invalid delegate amount"); - require(msg.value >= amount.add(relayerFee), "not enough msg value"); - (bool success,) = msg.sender.call{gas: transferGas}(""); - require(success, "invalid delegator"); // the msg sender must be payable - - uint256 convertedAmount = amount.div(TEN_DECIMALS); // native bnb decimals is 8 on BBC, while the native bnb decimals on BSC is 18 - uint256 _relayerFee = (msg.value).sub(amount); - uint256 oracleRelayerFee = _relayerFee.sub(bSCRelayerFee); - - bytes[] memory elements = new bytes[](3); - elements[0] = msg.sender.encodeAddress(); - elements[1] = validator.encodeAddress(); - elements[2] = convertedAmount.encodeUint(); - bytes memory msgBytes = _RLPEncode(EVENT_DELEGATE, elements.encodeList()); - packageQueue[rightIndex] = keccak256(msgBytes); - ++rightIndex; - delegateInFly[msg.sender] += 1; - - ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(CROSS_STAKE_CHANNELID, msgBytes, oracleRelayerFee.div(TEN_DECIMALS)); - payable(TOKEN_HUB_ADDR).transfer(amount.add(oracleRelayerFee)); - payable(SYSTEM_REWARD_ADDR).transfer(bSCRelayerFee); - - emit delegateSubmitted(msg.sender, validator, amount, oracleRelayerFee); + function delegate(address, uint256) override external payable { + revert("not supported"); } /** @@ -266,43 +241,10 @@ contract Staking is IStaking, System, IParamSubscriber, IApplication { } /** - * @dev Redelegate from validatorSrc to validatorDst on BC - * - * @param amount Amount that the user redelegates + * @dev Deprecated after fusion */ - function redelegate(address validatorSrc, address validatorDst, uint256 amount) override external noReentrant payable tenDecimalPrecision(amount) initParams { - require(validatorSrc != validatorDst, "invalid redelegation"); - require(msg.value >= relayerFee, "not enough relay fee"); - require(amount >= minDelegation, "invalid amount"); - require(block.timestamp >= pendingRedelegateTime[msg.sender][validatorSrc][validatorDst] && - block.timestamp >= pendingRedelegateTime[msg.sender][validatorDst][validatorSrc], "pending redelegation exist"); - uint256 remainBalance = delegatedOfValidator[msg.sender][validatorSrc].sub(amount, "not enough funds"); - if (remainBalance != 0) { - require(remainBalance > bSCRelayerFee, "insufficient balance after redelegate"); - } - - uint256 convertedAmount = amount.div(TEN_DECIMALS);// native bnb decimals is 8 on BBC, while the native bnb decimals on BSC is 18 - uint256 _relayerFee = msg.value; - uint256 oracleRelayerFee = _relayerFee.sub(bSCRelayerFee); - - bytes[] memory elements = new bytes[](4); - elements[0] = msg.sender.encodeAddress(); - elements[1] = validatorSrc.encodeAddress(); - elements[2] = validatorDst.encodeAddress(); - elements[3] = convertedAmount.encodeUint(); - bytes memory msgBytes = _RLPEncode(EVENT_REDELEGATE, elements.encodeList()); - packageQueue[rightIndex] = keccak256(msgBytes); - ++rightIndex; - redelegateInFly[msg.sender] += 1; - - pendingRedelegateTime[msg.sender][validatorDst][validatorSrc] = block.timestamp.add(LOCK_TIME); - pendingRedelegateTime[msg.sender][validatorSrc][validatorDst] = block.timestamp.add(LOCK_TIME); - - ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(CROSS_STAKE_CHANNELID, msgBytes, oracleRelayerFee.div(TEN_DECIMALS)); - payable(TOKEN_HUB_ADDR).transfer(oracleRelayerFee); - payable(SYSTEM_REWARD_ADDR).transfer(bSCRelayerFee); - - emit redelegateSubmitted(msg.sender, validatorSrc, validatorDst, amount, oracleRelayerFee); + function redelegate(address, address, uint256) override external payable { + revert("not supported"); } /** @@ -678,6 +620,7 @@ contract Staking is IStaking, System, IParamSubscriber, IApplication { address recipient; address validator; uint256 amount; + bool isAutoUndelegate; while (iter.hasNext()) { if (idx == 0) { recipient = address(uint160(iter.next().toAddress())); @@ -686,6 +629,8 @@ contract Staking is IStaking, System, IParamSubscriber, IApplication { } else if (idx == 2) { amount = uint256(iter.next().toUint()); success = true; + } else if (idx == 3) { + isAutoUndelegate = iter.next().toBoolean(); } else { break; } @@ -701,6 +646,14 @@ contract Staking is IStaking, System, IParamSubscriber, IApplication { pendingUndelegateTime[recipient][validator] = 0; undelegated[recipient] = undelegated[recipient].add(amount); + // this is to address the issue that the contract state will not being updated + // when the Beacon Chain system undelegate all the funds after second sunset upgrade + if (isAutoUndelegate) { + delegated[recipient] = delegated[recipient].sub(amount); + delegatedOfValidator[recipient][validator] = delegatedOfValidator[recipient][validator].sub(amount); + emit undelegateSuccess(recipient, validator, amount); + } + emit undelegatedReceived(recipient, validator, amount); return (CODE_OK, new bytes(0)); } diff --git a/contracts/System.sol b/contracts/System.sol index ad6d285d..cabdf0ab 100644 --- a/contracts/System.sol +++ b/contracts/System.sol @@ -18,7 +18,8 @@ contract System { uint8 constant public GOV_CHANNELID = 0x09; uint8 constant public SLASH_CHANNELID = 0x0b; uint8 constant public CROSS_STAKE_CHANNELID = 0x10; - uint16 constant public bscChainID = 0x02ca; + uint8 constant public BC_FUSION_CHANNELID = 0x11; // new channel id for cross-chain redelegate from Beacon Chain to Smart Chain after Feynman upgrade + uint16 constant public bscChainID = 0x0038; address public constant VALIDATOR_CONTRACT_ADDR = 0x0000000000000000000000000000000000001000; address public constant SLASH_CONTRACT_ADDR = 0x0000000000000000000000000000000000001001; @@ -31,6 +32,12 @@ contract System { address public constant TOKEN_MANAGER_ADDR = 0x0000000000000000000000000000000000001008; address public constant CROSS_CHAIN_CONTRACT_ADDR = 0x0000000000000000000000000000000000002000; address public constant STAKING_CONTRACT_ADDR = 0x0000000000000000000000000000000000002001; + address public constant STAKE_HUB_ADDR = 0x0000000000000000000000000000000000002002; + address public constant STAKE_CREDIT_ADDR = 0x0000000000000000000000000000000000002003; + address public constant GOVERNOR_ADDR = 0x0000000000000000000000000000000000002004; + address public constant GOV_TOKEN_ADDR = 0x0000000000000000000000000000000000002005; + address public constant TIMELOCK_ADDR = 0x0000000000000000000000000000000000002006; + address public constant TOKEN_RECOVER_PORTAL_ADDR = 0x0000000000000000000000000000000000003000; modifier onlyCoinbase() { require(msg.sender == block.coinbase, "the message sender must be the block producer"); @@ -92,6 +99,21 @@ contract System { _; } + modifier onlyStakeHub() { + require(msg.sender == STAKE_HUB_ADDR, "the msg sender must be stakeHub"); + _; + } + + modifier onlyGovernorTimelock() { + require(msg.sender == TIMELOCK_ADDR, "the msg sender must be governor timelock contract"); + _; + } + + modifier onlyTokenRecoverPortal() { + require(msg.sender == TOKEN_RECOVER_PORTAL_ADDR, "the msg sender must be token recover portal"); + _; + } + // Not reliable, do not use when need strong verify function isContract(address addr) internal view returns (bool) { uint size; diff --git a/contracts/SystemReward.sol b/contracts/SystemReward.sol index 26f29eca..a9591bfd 100644 --- a/contracts/SystemReward.sol +++ b/contracts/SystemReward.sol @@ -6,8 +6,7 @@ import "./interface/IParamSubscriber.sol"; import "./interface/ISystemReward.sol"; contract SystemReward is System, IParamSubscriber, ISystemReward { - uint256 public constant MAX_REWARDS/*_FOR_RELAYER*/ = 1e18; - uint256 public constant MAX_REWARDS_FOR_FINALITY = 5e18; + uint256 public constant MAX_REWARDS = 5e18; uint public numOperator; mapping(address => bool) operators; @@ -54,20 +53,6 @@ contract SystemReward is System, IParamSubscriber, ISystemReward { return actualAmount; } - function claimRewardsforFinality(address payable to, uint256 amount) external override(ISystemReward) doInit onlyOperator returns (uint256) { - uint256 actualAmount = amount < address(this).balance ? amount : address(this).balance; - if (actualAmount > MAX_REWARDS_FOR_FINALITY) { - actualAmount = MAX_REWARDS_FOR_FINALITY; - } - if (actualAmount != 0) { - to.transfer(actualAmount); - emit rewardTo(to, actualAmount); - } else { - emit rewardEmpty(); - } - return actualAmount; - } - function isOperator(address addr) external view returns (bool) { return operators[addr]; } diff --git a/contracts/TendermintLightClient.sol b/contracts/TendermintLightClient.sol index 386f0b15..ef5bd3db 100644 --- a/contracts/TendermintLightClient.sol +++ b/contracts/TendermintLightClient.sol @@ -22,17 +22,14 @@ contract TendermintLightClient is ILightClient, System, IParamSubscriber{ uint64 public latestHeight; bytes32 public chainID; - bytes constant public INIT_CONSENSUS_STATE_BYTES = hex"42696e616e63652d436861696e2d4e696c650000000000000000000000000000000000000000000229eca254b3859bffefaf85f4c95da9fbd26527766b784272789c30ec56b380b6eb96442aaab207bc59978ba3dd477690f5c5872334fc39e627723daa97e441e88ba4515150ec3182bc82593df36f8abb25a619187fcfab7e552b94e64ed2deed000000e8d4a51000"; - uint256 constant public INIT_REWARD_FOR_VALIDATOR_SER_CHANGE = 1e16; + bytes constant public INIT_CONSENSUS_STATE_BYTES = hex"42696e616e63652d436861696e2d5469677269730000000000000000000000000000000006915167cedaf7bbf7df47d932fdda630527ee648562cf3e52c5e5f46156a3a971a4ceb443c53a50d8653ef8cf1e5716da68120fb51b636dc6d111ec3277b098ecd42d49d3769d8a1f78b4c17a965f7a30d4181fabbd1f969f46d3c8e83b5ad4845421d8000000e8d4a510002ba4e81542f437b7ae1f8a35ddb233c789a8dc22734377d9b6d63af1ca403b61000000e8d4a51000df8da8c5abfdb38595391308bb71e5a1e0aabdc1d0cf38315d50d6be939b2606000000e8d4a51000b6619edca4143484800281d698b70c935e9152ad57b31d85c05f2f79f64b39f3000000e8d4a510009446d14ad86c8d2d74780b0847110001a1c2e252eedfea4753ebbbfce3a22f52000000e8d4a510000353c639f80cc8015944436dab1032245d44f912edc31ef668ff9f4a45cd0599000000e8d4a51000e81d3797e0544c3a718e1f05f0fb782212e248e784c1a851be87e77ae0db230e000000e8d4a510005e3fcda30bd19d45c4b73688da35e7da1fce7c6859b2c1f20ed5202d24144e3e000000e8d4a51000b06a59a2d75bf5d014fce7c999b5e71e7a960870f725847d4ba3235baeaa08ef000000e8d4a510000c910e2fe650e4e01406b3310b489fb60a84bc3ff5c5bee3a56d5898b6a8af32000000e8d4a5100071f2d7b8ec1c8b99a653429b0118cd201f794f409d0fea4d65b1b662f2b00063000000e8d4a51000"; + uint256 constant public INIT_REWARD_FOR_VALIDATOR_SER_CHANGE = 1e16; uint256 public rewardForValidatorSetChange; event initConsensusState(uint64 initHeight, bytes32 appHash); event syncConsensusState(uint64 height, uint64 preValidatorSetChangeHeight, bytes32 appHash, bool validatorChanged); event paramChange(string key, bytes value); - /* solium-disable-next-line */ - constructor() public {} - function init() external onlyNotInit { uint256 pointer; uint256 length; @@ -265,4 +262,4 @@ contract TendermintLightClient is ILightClient, System, IParamSubscriber{ } emit paramChange(key, value); } -} \ No newline at end of file +} diff --git a/contracts/TokenHub.sol b/contracts/TokenHub.sol index 0bb22eb2..c792c61b 100644 --- a/contracts/TokenHub.sol +++ b/contracts/TokenHub.sol @@ -78,11 +78,11 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR uint8 constant public MAXIMUM_BEP20_SYMBOL_LEN = 8; uint8 constant public BEP2_TOKEN_DECIMALS = 8; bytes32 constant public BEP2_TOKEN_SYMBOL_FOR_BNB = 0x424E420000000000000000000000000000000000000000000000000000000000; // "BNB" - uint256 constant public MAX_GAS_FOR_CALLING_BEP20=50000; - uint256 constant public MAX_GAS_FOR_TRANSFER_BNB=10000; + uint256 constant public MAX_GAS_FOR_CALLING_BEP20 = 50000; + uint256 constant public MAX_GAS_FOR_TRANSFER_BNB = 10000; - uint256 constant public INIT_MINIMUM_RELAY_FEE =2e15; - uint256 constant public REWARD_UPPER_LIMIT =1e18; + uint256 constant public INIT_MINIMUM_RELAY_FEE = 2e15; + uint256 constant public REWARD_UPPER_LIMIT = 1e18; uint256 constant public TEN_DECIMALS = 1e10; uint256 public relayFee; @@ -96,6 +96,8 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR uint256 constant public INIT_LOCK_PERIOD = 12 hours; // the lock period for large cross-chain transfer uint256 public lockPeriod; + // the lock Period for token recover + uint256 constant public LOCK_PERIOD_FOR_TOKEN_RECOVER = 7 days; // token address => largeTransferLimit amount, address(0) means BNB mapping(address => uint256) public largeTransferLimitMap; // token address => recipient address => lockedAmount + unlockAt, address(0) means BNB @@ -117,6 +119,11 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR event CancelTransfer(address indexed tokenAddr, address indexed attacker, uint256 amount); event LargeTransferLimitSet(address indexed tokenAddr, address indexed owner, uint256 largeTransferLimit); + // BEP-299: Token Migration after BC Fusion + event TokenRecoverLocked(bytes32 indexed tokenSymbol, address indexed tokenAddr, address indexed recipient, uint256 amount, uint256 unlockAt); + event CancelTokenRecoverLock(bytes32 indexed tokenSymbol, address indexed tokenAddr, address indexed attacker, uint256 amount); + event NotBoundToken(bytes32 indexed tokenSymbol, address indexed recipient, uint256 amount); + // BEP-171: Security Enhancement for Cross-Chain Module modifier onlyTokenOwner(address bep20Token) { require(msg.sender == IBEP20(bep20Token).getOwner(), "not owner of BEP20 token"); @@ -161,8 +168,12 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR return actualAmount; } - function claimRewardsforFinality(address payable, uint256) onlyInit onlyRelayerIncentivize external override returns(uint256) { - revert("CLAIM_REWARDS_FOR_FINALITY_NOT_ALLOWED"); + function claimMigrationFund(uint256 amount) onlyStakeHub external returns(bool) { + if (address(this).balance >= amount) { + payable(STAKE_HUB_ADDR).transfer(amount); + return true; + } + return false; } function getMiniRelayFee() external view override returns(uint256) { @@ -526,8 +537,70 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR return elements.encodeList(); } + /** + * @dev request a BC token recover from BSC + * + * @param tokenSymbol The token symbol on BSC. + * @param recipient The destination address of the transfer on BSC. + * @param amount The amount to transfer + */ + function recoverBCAsset(bytes32 tokenSymbol, address recipient, uint256 amount) external override onlyInit onlyTokenRecoverPortal { + require(amount<=MAX_BEP2_TOTAL_SUPPLY, "amount is too large, exceed maximum bep2 token amount"); + uint256 convertedAmount; + if (tokenSymbol != BEP2_TOKEN_SYMBOL_FOR_BNB) { + address contractAddr = bep2SymbolToContractAddr[tokenSymbol]; + if (contractAddr == address(0x00)) { + // if the token is not bound, just emit an event + // please notify the token owner to handle the token recovery + emit NotBoundToken(tokenSymbol, recipient, amount); + return; + } + + uint256 bep20TokenDecimals=bep20ContractDecimals[contractAddr]; + convertedAmount = convertFromBep2Amount(amount, bep20TokenDecimals);// convert to bep20 amount + require(IBEP20(contractAddr).balanceOf(address(this)) >= convertedAmount, "insufficient balance"); + _lockRecoverToken(tokenSymbol, contractAddr, convertedAmount, recipient); + }else{ + convertedAmount = amount.mul(TEN_DECIMALS); // native bnb decimals is 8 on BC, while the native bnb decimals on BSC is 18 + require(address(this).balance >= convertedAmount, "insufficient balance"); + address contractAddr = address(0x00); + _lockRecoverToken(tokenSymbol, contractAddr, convertedAmount, recipient); + } + } + + // lock the token for 7 days to the recipient address + function _lockRecoverToken(bytes32 tokenSymbol, address contractAddr, uint256 amount, address recipient) internal { + LockInfo storage lockInfo = lockInfoMap[contractAddr][recipient]; + lockInfo.amount = lockInfo.amount.add(amount); + lockInfo.unlockAt = block.timestamp + LOCK_PERIOD_FOR_TOKEN_RECOVER; + + emit TokenRecoverLocked( + tokenSymbol, + contractAddr, + recipient, + amount, + lockInfo.unlockAt + ); + } + + function cancelTokenRecoverLock(bytes32 tokenSymbol, address attacker) override external onlyTokenRecoverPortal { + address tokenAddress = address(0x00); + if (tokenSymbol != BEP2_TOKEN_SYMBOL_FOR_BNB) { + tokenAddress = bep2SymbolToContractAddr[tokenSymbol]; + require(tokenAddress != address(0x00), "invalid symbol"); + } + LockInfo storage lockInfo = lockInfoMap[tokenAddress][attacker]; + require(lockInfo.amount > 0, "no locked amount"); + + uint256 _amount = lockInfo.amount; + lockInfo.amount = 0; + + emit CancelTokenRecoverLock(tokenSymbol, tokenAddress, attacker, _amount); + } + /** * @dev request a cross-chain transfer from BSC to BC + * @notice this function is deprecated after Feynman upgrade * * @param contractAddr The token contract which is transferred * @param recipient The destination address of the cross-chain transfer on BC. @@ -535,46 +608,7 @@ contract TokenHub is ITokenHub, System, IParamSubscriber, IApplication, ISystemR * @param expireTime The expire time for the cross-chain transfer */ function transferOut(address contractAddr, address recipient, uint256 amount, uint64 expireTime) external override onlyInit payable returns (bool) { - require(expireTime>=block.timestamp + 120, "expireTime must be two minutes later"); - require(msg.value%TEN_DECIMALS==0, "invalid received BNB amount: precision loss in amount conversion"); - bytes32 bep2TokenSymbol; - uint256 convertedAmount; - uint256 rewardForRelayer; - if (contractAddr==address(0x0)) { - require(msg.value>=amount.add(relayFee), "received BNB amount should be no less than the sum of transferOut BNB amount and minimum relayFee"); - require(amount%TEN_DECIMALS==0, "invalid transfer amount: precision loss in amount conversion"); - rewardForRelayer=msg.value.sub(amount); - convertedAmount = amount.div(TEN_DECIMALS); // native bnb decimals is 8 on BBC, while the native bnb decimals on BSC is 18 - bep2TokenSymbol=BEP2_TOKEN_SYMBOL_FOR_BNB; - } else { - bep2TokenSymbol = contractAddrToBEP2Symbol[contractAddr]; - require(bep2TokenSymbol!=bytes32(0x00), "the contract has not been bound to any bep2 token"); - require(msg.value>=relayFee, "received BNB amount should be no less than the minimum relayFee"); - rewardForRelayer=msg.value; - uint256 bep20TokenDecimals=bep20ContractDecimals[contractAddr]; - require(bep20TokenDecimals<=BEP2_TOKEN_DECIMALS || (bep20TokenDecimals>BEP2_TOKEN_DECIMALS && amount.mod(10**(bep20TokenDecimals-BEP2_TOKEN_DECIMALS))==0), "invalid transfer amount: precision loss in amount conversion"); - convertedAmount = convertToBep2Amount(amount, bep20TokenDecimals);// convert to bep2 amount - if (isMiniBEP2Token(bep2TokenSymbol)) { - require(convertedAmount >= 1e8 , "For miniToken, the transfer amount must not be less than 1"); - } - require(bep20TokenDecimals>=BEP2_TOKEN_DECIMALS || (bep20TokenDecimalsamount), "amount is too large, uint256 overflow"); - require(convertedAmount<=MAX_BEP2_TOTAL_SUPPLY, "amount is too large, exceed maximum bep2 token amount"); - require(IBEP20(contractAddr).transferFrom(msg.sender, address(this), amount)); - } - TransferOutSynPackage memory transOutSynPkg = TransferOutSynPackage({ - bep2TokenSymbol: bep2TokenSymbol, - contractAddr: contractAddr, - amounts: new uint256[](1), - recipients: new address[](1), - refundAddrs: new address[](1), - expireTime: expireTime - }); - transOutSynPkg.amounts[0]=convertedAmount; - transOutSynPkg.recipients[0]=recipient; - transOutSynPkg.refundAddrs[0]=msg.sender; - ICrossChain(CROSS_CHAIN_CONTRACT_ADDR).sendSynPackage(TRANSFER_OUT_CHANNELID, encodeTransferOutSynPackage(transOutSynPkg), rewardForRelayer.div(TEN_DECIMALS)); - emit transferOutSuccess(contractAddr, msg.sender, amount, rewardForRelayer); - return true; + revert("deprecated"); } /** diff --git a/contracts/TokenManager.sol b/contracts/TokenManager.sol index f491d277..fd521244 100644 --- a/contracts/TokenManager.sol +++ b/contracts/TokenManager.sol @@ -124,8 +124,6 @@ contract TokenManager is System, IApplication, IParamSubscriber { event syncSuccess(address indexed bep20Addr); event syncFailure(address indexed bep20Addr, uint8 errCode); - constructor() public {} - function handleSynPackage(uint8 channelId, bytes calldata msgBytes) onlyCrossChainContract external override returns(bytes memory) { if (channelId == BIND_CHANNELID) { return handleBindSynPackage(msgBytes); diff --git a/contracts/interface/IBSCValidatorSet.sol b/contracts/interface/IBSCValidatorSet.sol index b9b59552..b3a060b9 100644 --- a/contracts/interface/IBSCValidatorSet.sol +++ b/contracts/interface/IBSCValidatorSet.sol @@ -3,7 +3,7 @@ pragma experimental ABIEncoderV2; interface IBSCValidatorSet { function misdemeanor(address validator) external; - function felony(address validator)external; + function felony(address validator) external; function isCurrentValidator(address validator) external view returns (bool); function getLivingValidators() external view returns(address[] memory, bytes[] memory); function getMiningValidators() external view returns(address[] memory, bytes[] memory); diff --git a/contracts/interface/ISlashIndicator.sol b/contracts/interface/ISlashIndicator.sol index 04f12b7d..879ad287 100644 --- a/contracts/interface/ISlashIndicator.sol +++ b/contracts/interface/ISlashIndicator.sol @@ -2,6 +2,7 @@ pragma solidity 0.6.4; interface ISlashIndicator { function clean() external; + function downtimeSlash(address validator, uint256 count) external; function sendFelonyPackage(address validator) external; function getSlashThresholds() external view returns (uint256, uint256); } diff --git a/contracts/interface/IStakeHub.sol b/contracts/interface/IStakeHub.sol new file mode 100644 index 00000000..2a08b9d6 --- /dev/null +++ b/contracts/interface/IStakeHub.sol @@ -0,0 +1,14 @@ +pragma solidity 0.6.4; + +interface IStakeHub { + function downtimeSlash(address validator) external; + function maliciousVoteSlash(bytes calldata voteAddress) external; + function doubleSignSlash(address validator) external; + function voteToOperator(bytes calldata voteAddress) external view returns (address); + function consensusToOperator(address validator) external view returns (address); + function getValidatorConsensusAddress(address validator) external view returns (address); + function getValidatorCreditContract(address validator) external view returns (address); + function getValidatorVoteAddress(address validator) external view returns (bytes memory); + function maxElectedValidators() external view returns (uint256); + function distributeReward(address validator) external payable; +} diff --git a/contracts/interface/ISystemReward.sol b/contracts/interface/ISystemReward.sol index 4e127df6..67a71f58 100644 --- a/contracts/interface/ISystemReward.sol +++ b/contracts/interface/ISystemReward.sol @@ -2,5 +2,4 @@ pragma solidity 0.6.4; interface ISystemReward { function claimRewards(address payable to, uint256 amount) external returns(uint256 actualAmount); - function claimRewardsforFinality(address payable to, uint256 amount) external returns(uint256 actualAmount); } \ No newline at end of file diff --git a/contracts/interface/ITokenHub.sol b/contracts/interface/ITokenHub.sol index 67405c34..89373f04 100644 --- a/contracts/interface/ITokenHub.sol +++ b/contracts/interface/ITokenHub.sol @@ -14,6 +14,10 @@ interface ITokenHub { function transferOut(address contractAddr, address recipient, uint256 amount, uint64 expireTime) external payable returns (bool); + + function recoverBCAsset(bytes32 tokenSymbol, address recipient, uint256 amount) + external; + function cancelTokenRecoverLock(bytes32 tokenSymbol, address attacker) external; /* solium-disable-next-line */ function batchTransferOutBNB(address[] calldata recipientAddrs, uint256[] calldata amounts, address[] calldata refundAddrs, diff --git a/contracts/mock/MockTokenHub.sol b/contracts/mock/MockTokenHub.sol index b79d5b24..c751baf5 100644 --- a/contracts/mock/MockTokenHub.sol +++ b/contracts/mock/MockTokenHub.sol @@ -6,6 +6,8 @@ contract MockTokenHub is ITokenHub { bool panicBatchTransferOut; + bytes32 constant public BEP2_TOKEN_SYMBOL_FOR_BNB = 0x424E420000000000000000000000000000000000000000000000000000000000; // "BNB" + function getMiniRelayFee() external view override(ITokenHub) returns (uint256) { return (1e16); } @@ -22,6 +24,15 @@ contract MockTokenHub is ITokenHub { function unbindToken(bytes32 bep2Symbol, address contractAddr) external override(ITokenHub) {} + function recoverBCAsset(bytes32, address, uint256) + external override(ITokenHub) { + } + + function cancelTokenRecoverLock(bytes32, address) external override { + address TOKEN_RECOVER_PORTAL_ADDR = address(0x0000000000000000000000000000000000003000); + require(msg.sender == TOKEN_RECOVER_PORTAL_ADDR, "only token reover portal contract can call this function"); + } + function transferOut(address, address, uint256, uint64) external override(ITokenHub) payable returns (bool) { return true; diff --git a/contracts/test/ABCToken.sol b/contracts/test/ABCToken.sol deleted file mode 100644 index 0e676b93..00000000 --- a/contracts/test/ABCToken.sol +++ /dev/null @@ -1,248 +0,0 @@ -pragma solidity 0.6.4; - -import "../interface/IBEP20.sol"; -import "openzeppelin-solidity/contracts/GSN/Context.sol"; -import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "openzeppelin-solidity/contracts/access/Ownable.sol"; - -contract ABCToken is Context, IBEP20, Ownable { - using SafeMath for uint256; - - mapping (address => uint256) private _balances; - - mapping (address => mapping (address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 public _decimals; - string public _symbol; - string public _name; - - constructor() public { - _name = "ABC token"; - _symbol = "ABC"; - _decimals = 18; - _totalSupply = 100000000000000000000000000; - _balances[msg.sender] = _totalSupply; - - emit Transfer(address(0), msg.sender, _totalSupply); - } - - /** - * @dev Returns the bep token owner. - */ - function getOwner() external override view returns (address) { - return owner(); - } - - /** - * @dev Returns the token decimals. - */ - function decimals() external override view returns (uint8) { - return _decimals; - } - - /** - * @dev Returns the token symbol. - */ - function symbol() external override view returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the token name. - */ - function name() external override view returns (string memory) { - return _name; - } - - /** - * @dev See {BEP20-totalSupply}. - */ - function totalSupply() external override view returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {BEP20-balanceOf}. - */ - function balanceOf(address account) external override view returns (uint256) { - return _balances[account]; - } - - /** - * @dev See {BEP20-transfer}. - * - * Requirements: - * - * - `recipient` cannot be the zero address. - * - the caller must have a balance of at least `amount`. - */ - function transfer(address recipient, uint256 amount) external override returns (bool) { - _transfer(_msgSender(), recipient, amount); - return true; - } - - /** - * @dev See {BEP20-allowance}. - */ - function allowance(address owner, address spender) external override view returns (uint256) { - return _allowances[owner][spender]; - } - - /** - * @dev See {BEP20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) external override returns (bool) { - _approve(_msgSender(), spender, amount); - return true; - } - - /** - * @dev See {BEP20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {BEP20}; - * - * Requirements: - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for `sender`'s tokens of at least - * `amount`. - */ - function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { - _transfer(sender, recipient, amount); - _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); - return true; - } - - /** - * @dev Moves tokens `amount` from `sender` to `recipient`. - * - * This is internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `sender` cannot be the zero address. - * - `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - */ - function _transfer(address sender, address recipient, uint256 amount) internal { - require(sender != address(0), "BEP20: transfer from the zero address"); - require(recipient != address(0), "BEP20: transfer to the zero address"); - - _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); - _balances[recipient] = _balances[recipient].add(amount); - emit Transfer(sender, recipient, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements - * - * - `to` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal { - require(account != address(0), "BEP20: mint to the zero address"); - - _totalSupply = _totalSupply.add(amount); - _balances[account] = _balances[account].add(amount); - emit Transfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal { - require(account != address(0), "BEP20: burn from the zero address"); - - _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); - _totalSupply = _totalSupply.sub(amount); - emit Transfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. - * - * This is internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "BEP20: approve from the zero address"); - require(spender != address(0), "BEP20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`.`amount` is then deducted - * from the caller's allowance. - * - * See {_burn} and {_approve}. - */ - function _burnFrom(address account, uint256 amount) internal { - _burn(account, amount); - _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); - } -} \ No newline at end of file diff --git a/contracts/test/DEFToken.sol b/contracts/test/DEFToken.sol deleted file mode 100644 index 25a71945..00000000 --- a/contracts/test/DEFToken.sol +++ /dev/null @@ -1,248 +0,0 @@ -pragma solidity 0.6.4; - -import "../interface/IBEP20.sol"; -import "openzeppelin-solidity/contracts/GSN/Context.sol"; -import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "openzeppelin-solidity/contracts/access/Ownable.sol"; - -contract DEFToken is Context, IBEP20, Ownable { - using SafeMath for uint256; - - mapping (address => uint256) private _balances; - - mapping (address => mapping (address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 public _decimals; - string public _symbol; - string public _name; - - constructor() public { - _name = "DEF token"; - _symbol = "DEF"; - _decimals = 18; - _totalSupply = 100000000000000000000000000; - _balances[msg.sender] = _totalSupply; - - emit Transfer(address(0), msg.sender, _totalSupply); - } - - /** - * @dev Returns the bep token owner. - */ - function getOwner() external override view returns (address) { - return owner(); - } - - /** - * @dev Returns the token decimals. - */ - function decimals() external override view returns (uint8) { - return _decimals; - } - - /** - * @dev Returns the token symbol. - */ - function symbol() external override view returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the token name. - */ - function name() external override view returns (string memory) { - return _name; - } - - /** - * @dev See {BEP20-totalSupply}. - */ - function totalSupply() external override view returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {BEP20-balanceOf}. - */ - function balanceOf(address account) external override view returns (uint256) { - return _balances[account]; - } - - /** - * @dev See {BEP20-transfer}. - * - * Requirements: - * - * - `recipient` cannot be the zero address. - * - the caller must have a balance of at least `amount`. - */ - function transfer(address recipient, uint256 amount) external override returns (bool) { - _transfer(_msgSender(), recipient, amount); - return true; - } - - /** - * @dev See {BEP20-allowance}. - */ - function allowance(address owner, address spender) external override view returns (uint256) { - return _allowances[owner][spender]; - } - - /** - * @dev See {BEP20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) external override returns (bool) { - _approve(_msgSender(), spender, amount); - return true; - } - - /** - * @dev See {BEP20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {BEP20}; - * - * Requirements: - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for `sender`'s tokens of at least - * `amount`. - */ - function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { - _transfer(sender, recipient, amount); - _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); - return true; - } - - /** - * @dev Moves tokens `amount` from `sender` to `recipient`. - * - * This is internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `sender` cannot be the zero address. - * - `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - */ - function _transfer(address sender, address recipient, uint256 amount) internal { - require(sender != address(0), "BEP20: transfer from the zero address"); - require(recipient != address(0), "BEP20: transfer to the zero address"); - - _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); - _balances[recipient] = _balances[recipient].add(amount); - emit Transfer(sender, recipient, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements - * - * - `to` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal { - require(account != address(0), "BEP20: mint to the zero address"); - - _totalSupply = _totalSupply.add(amount); - _balances[account] = _balances[account].add(amount); - emit Transfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal { - require(account != address(0), "BEP20: burn from the zero address"); - - _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); - _totalSupply = _totalSupply.sub(amount); - emit Transfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. - * - * This is internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "BEP20: approve from the zero address"); - require(spender != address(0), "BEP20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`.`amount` is then deducted - * from the caller's allowance. - * - * See {_burn} and {_approve}. - */ - function _burnFrom(address account, uint256 amount) internal { - _burn(account, amount); - _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); - } -} \ No newline at end of file diff --git a/contracts/test/MaliciousToken.sol b/contracts/test/MaliciousToken.sol deleted file mode 100644 index e4e09984..00000000 --- a/contracts/test/MaliciousToken.sol +++ /dev/null @@ -1,242 +0,0 @@ -pragma solidity 0.6.4; - -import "../interface/IBEP20.sol"; -import "openzeppelin-solidity/contracts/GSN/Context.sol"; -import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "openzeppelin-solidity/contracts/access/Ownable.sol"; - -contract MaliciousToken is Context, IBEP20, Ownable { - using SafeMath for uint256; - - mapping (address => uint256) private _balances; - - mapping (address => mapping (address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 public _decimals; - string public _symbol; - string public _name; - - constructor() public { - _name = "Malicious token"; - _symbol = "MALICIOU"; - _decimals = 18; - _totalSupply = 100000000000000000000000000; - _balances[msg.sender] = _totalSupply; - - emit Transfer(address(0), msg.sender, _totalSupply); - } - - /** - * @dev Returns the bep token owner. - */ - function getOwner() external override view returns (address) { - return owner(); - } - - /** - * @dev Returns the token decimals. - */ - function decimals() external override view returns (uint8) { - return _decimals; - } - - /** - * @dev Returns the token symbol. - */ - function symbol() external override view returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the token name. - */ - function name() external override view returns (string memory) { - return _name; - } - - /** - * @dev See {BEP20-totalSupply}. - */ - function totalSupply() external override view returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {BEP20-balanceOf}. - */ - function balanceOf(address account) external override view returns (uint256) { - return _balances[account]; - } - - /** - * @dev This is a malicious method. It is intended to stuck the transferIn channel - */ - function transfer(address, uint256) external override returns (bool) { - revert("malicious method"); - } - - /** - * @dev See {BEP20-allowance}. - */ - function allowance(address owner, address spender) external override view returns (uint256) { - return _allowances[owner][spender]; - } - - /** - * @dev See {BEP20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) external override returns (bool) { - _approve(_msgSender(), spender, amount); - return true; - } - - /** - * @dev See {BEP20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {BEP20}; - * - * Requirements: - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for `sender`'s tokens of at least - * `amount`. - */ - function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { - _transfer(sender, recipient, amount); - _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); - return true; - } - - /** - * @dev Moves tokens `amount` from `sender` to `recipient`. - * - * This is internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `sender` cannot be the zero address. - * - `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - */ - function _transfer(address sender, address recipient, uint256 amount) internal { - require(sender != address(0), "BEP20: transfer from the zero address"); - require(recipient != address(0), "BEP20: transfer to the zero address"); - - _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); - _balances[recipient] = _balances[recipient].add(amount); - emit Transfer(sender, recipient, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements - * - * - `to` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal { - require(account != address(0), "BEP20: mint to the zero address"); - - _totalSupply = _totalSupply.add(amount); - _balances[account] = _balances[account].add(amount); - emit Transfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal { - require(account != address(0), "BEP20: burn from the zero address"); - - _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); - _totalSupply = _totalSupply.sub(amount); - emit Transfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. - * - * This is internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "BEP20: approve from the zero address"); - require(spender != address(0), "BEP20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`.`amount` is then deducted - * from the caller's allowance. - * - * See {_burn} and {_approve}. - */ - function _burnFrom(address account, uint256 amount) internal { - _burn(account, amount); - _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); - } -} \ No newline at end of file diff --git a/contracts/test/MiniToken.sol b/contracts/test/MiniToken.sol deleted file mode 100644 index 5b71daa3..00000000 --- a/contracts/test/MiniToken.sol +++ /dev/null @@ -1,248 +0,0 @@ -pragma solidity 0.6.4; - -import "../interface/IBEP20.sol"; -import "openzeppelin-solidity/contracts/GSN/Context.sol"; -import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "openzeppelin-solidity/contracts/access/Ownable.sol"; - -contract MiniToken is Context, IBEP20, Ownable { - using SafeMath for uint256; - - mapping (address => uint256) private _balances; - - mapping (address => mapping (address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 public _decimals; - string public _symbol; - string public _name; - - constructor() public { - _name = "XYZ token"; - _symbol = "XYZ"; - _decimals = 18; - _totalSupply = 10000000000000000000000; - _balances[msg.sender] = _totalSupply; - - emit Transfer(address(0), msg.sender, _totalSupply); - } - - /** - * @dev Returns the bep token owner. - */ - function getOwner() external override view returns (address) { - return owner(); - } - - /** - * @dev Returns the token decimals. - */ - function decimals() external override view returns (uint8) { - return _decimals; - } - - /** - * @dev Returns the token symbol. - */ - function symbol() external override view returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the token name. - */ - function name() external override view returns (string memory) { - return _name; - } - - /** - * @dev See {BEP20-totalSupply}. - */ - function totalSupply() external override view returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {BEP20-balanceOf}. - */ - function balanceOf(address account) external override view returns (uint256) { - return _balances[account]; - } - - /** - * @dev See {BEP20-transfer}. - * - * Requirements: - * - * - `recipient` cannot be the zero address. - * - the caller must have a balance of at least `amount`. - */ - function transfer(address recipient, uint256 amount) external override returns (bool) { - _transfer(_msgSender(), recipient, amount); - return true; - } - - /** - * @dev See {BEP20-allowance}. - */ - function allowance(address owner, address spender) external override view returns (uint256) { - return _allowances[owner][spender]; - } - - /** - * @dev See {BEP20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) external override returns (bool) { - _approve(_msgSender(), spender, amount); - return true; - } - - /** - * @dev See {BEP20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {BEP20}; - * - * Requirements: - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for `sender`'s tokens of at least - * `amount`. - */ - function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { - _transfer(sender, recipient, amount); - _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); - return true; - } - - /** - * @dev Moves tokens `amount` from `sender` to `recipient`. - * - * This is internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `sender` cannot be the zero address. - * - `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - */ - function _transfer(address sender, address recipient, uint256 amount) internal { - require(sender != address(0), "BEP20: transfer from the zero address"); - require(recipient != address(0), "BEP20: transfer to the zero address"); - - _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); - _balances[recipient] = _balances[recipient].add(amount); - emit Transfer(sender, recipient, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements - * - * - `to` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal { - require(account != address(0), "BEP20: mint to the zero address"); - - _totalSupply = _totalSupply.add(amount); - _balances[account] = _balances[account].add(amount); - emit Transfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal { - require(account != address(0), "BEP20: burn from the zero address"); - - _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); - _totalSupply = _totalSupply.sub(amount); - emit Transfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. - * - * This is internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "BEP20: approve from the zero address"); - require(spender != address(0), "BEP20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`.`amount` is then deducted - * from the caller's allowance. - * - * See {_burn} and {_approve}. - */ - function _burnFrom(address account, uint256 amount) internal { - _burn(account, amount); - _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); - } -} \ No newline at end of file diff --git a/contracts/test/XYZToken.sol b/contracts/test/XYZToken.sol deleted file mode 100644 index 47c16900..00000000 --- a/contracts/test/XYZToken.sol +++ /dev/null @@ -1,298 +0,0 @@ -pragma solidity 0.6.4; - -import "../interface/IBEP20.sol"; -import "openzeppelin-solidity/contracts/GSN/Context.sol"; -import "openzeppelin-solidity/contracts/math/SafeMath.sol"; -import "openzeppelin-solidity/contracts/access/Ownable.sol"; - -contract XYZToken is Context, IBEP20, Ownable { - using SafeMath for uint256; - - mapping (address => uint256) private _balances; - - mapping (address => mapping (address => uint256)) private _allowances; - - uint256 private _totalSupply; - uint8 private _decimals; - string private _symbol; - string private _name; - - constructor() public { - _name = "XYZ token"; - _symbol = "XYZ"; - _decimals = 18; - _totalSupply = 100000000000000000000000000; - _balances[msg.sender] = _totalSupply; - - emit Transfer(address(0), msg.sender, _totalSupply); - } - - /** - * @dev Just for test - * - * - `newName` new name - */ - function setName(string calldata newName) external { - _name = newName; - } - - /** - * @dev Just for test - * - * - `newDecimals` new decimals - */ - function setDecimals(uint8 newDecimals) external { - _decimals = newDecimals; - } - - /** - * @dev Just for test - * - * - `newTotalSupply` new totalSupply - */ - function setTotalSupply(uint256 newTotalSupply) external { - _totalSupply = newTotalSupply; - } - - - /** - * @dev Just for test - * - * - `newSymbol` new symbol - */ - function setSymbol(string calldata newSymbol) external { - _symbol = newSymbol; - } - - /** - * @dev Returns the bep token owner. - */ - function getOwner() external override view returns (address) { - return owner(); - } - - /** - * @dev Returns the token decimals. - */ - function decimals() external override view returns (uint8) { - return _decimals; - } - - /** - * @dev Returns the token symbol. - */ - function symbol() external override view returns (string memory) { - return _symbol; - } - - /** - * @dev Returns the token name. - */ - function name() external override view returns (string memory) { - return _name; - } - - /** - * @dev See {BEP20-totalSupply}. - */ - function totalSupply() external override view returns (uint256) { - return _totalSupply; - } - - /** - * @dev See {BEP20-balanceOf}. - */ - function balanceOf(address account) external override view returns (uint256) { - return _balances[account]; - } - - /** - * @dev See {BEP20-transfer}. - * - * Requirements: - * - * - `recipient` cannot be the zero address. - * - the caller must have a balance of at least `amount`. - */ - function transfer(address recipient, uint256 amount) external override returns (bool) { - _transfer(_msgSender(), recipient, amount); - return true; - } - - /** - * @dev See {BEP20-allowance}. - */ - function allowance(address owner, address spender) external override view returns (uint256) { - return _allowances[owner][spender]; - } - - /** - * @dev See {BEP20-approve}. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function approve(address spender, uint256 amount) external override returns (bool) { - _approve(_msgSender(), spender, amount); - return true; - } - - /** - * @dev See {BEP20-transferFrom}. - * - * Emits an {Approval} event indicating the updated allowance. This is not - * required by the EIP. See the note at the beginning of {BEP20}; - * - * Requirements: - * - `sender` and `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - * - the caller must have allowance for `sender`'s tokens of at least - * `amount`. - */ - function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { - _transfer(sender, recipient, amount); - _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "BEP20: transfer amount exceeds allowance")); - return true; - } - - /** - * @dev Atomically increases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - */ - function increaseAllowance(address spender, uint256 addedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); - return true; - } - - /** - * @dev Atomically decreases the allowance granted to `spender` by the caller. - * - * This is an alternative to {approve} that can be used as a mitigation for - * problems described in {BEP20-approve}. - * - * Emits an {Approval} event indicating the updated allowance. - * - * Requirements: - * - * - `spender` cannot be the zero address. - * - `spender` must have allowance for the caller of at least - * `subtractedValue`. - */ - function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) { - _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "BEP20: decreased allowance below zero")); - return true; - } - - /** - * @dev Creates `amount` tokens and assigns them to `msg.sender`, increasing - * the total supply. - * - * Requirements - * - * - `msg.sender` must be the token owner - */ - function mint(uint256 amount) public onlyOwner returns (bool) { - _mint(_msgSender(), amount); - return true; - } - - /** - * @dev Moves tokens `amount` from `sender` to `recipient`. - * - * This is internal function is equivalent to {transfer}, and can be used to - * e.g. implement automatic token fees, slashing mechanisms, etc. - * - * Emits a {Transfer} event. - * - * Requirements: - * - * - `sender` cannot be the zero address. - * - `recipient` cannot be the zero address. - * - `sender` must have a balance of at least `amount`. - */ - function _transfer(address sender, address recipient, uint256 amount) internal { - require(sender != address(0), "BEP20: transfer from the zero address"); - require(recipient != address(0), "BEP20: transfer to the zero address"); - - _balances[sender] = _balances[sender].sub(amount, "BEP20: transfer amount exceeds balance"); - _balances[recipient] = _balances[recipient].add(amount); - emit Transfer(sender, recipient, amount); - } - - /** @dev Creates `amount` tokens and assigns them to `account`, increasing - * the total supply. - * - * Emits a {Transfer} event with `from` set to the zero address. - * - * Requirements - * - * - `to` cannot be the zero address. - */ - function _mint(address account, uint256 amount) internal { - require(account != address(0), "BEP20: mint to the zero address"); - - _totalSupply = _totalSupply.add(amount); - _balances[account] = _balances[account].add(amount); - emit Transfer(address(0), account, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`, reducing the - * total supply. - * - * Emits a {Transfer} event with `to` set to the zero address. - * - * Requirements - * - * - `account` cannot be the zero address. - * - `account` must have at least `amount` tokens. - */ - function _burn(address account, uint256 amount) internal { - require(account != address(0), "BEP20: burn from the zero address"); - - _balances[account] = _balances[account].sub(amount, "BEP20: burn amount exceeds balance"); - _totalSupply = _totalSupply.sub(amount); - emit Transfer(account, address(0), amount); - } - - /** - * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. - * - * This is internal function is equivalent to `approve`, and can be used to - * e.g. set automatic allowances for certain subsystems, etc. - * - * Emits an {Approval} event. - * - * Requirements: - * - * - `owner` cannot be the zero address. - * - `spender` cannot be the zero address. - */ - function _approve(address owner, address spender, uint256 amount) internal { - require(owner != address(0), "BEP20: approve from the zero address"); - require(spender != address(0), "BEP20: approve to the zero address"); - - _allowances[owner][spender] = amount; - emit Approval(owner, spender, amount); - } - - /** - * @dev Destroys `amount` tokens from `account`.`amount` is then deducted - * from the caller's allowance. - * - * See {_burn} and {_approve}. - */ - function _burnFrom(address account, uint256 amount) internal { - _burn(account, amount); - _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "BEP20: burn amount exceeds allowance")); - } -} \ No newline at end of file diff --git a/flatten.sh b/flatten.sh deleted file mode 100644 index c1bbebcd..00000000 --- a/flatten.sh +++ /dev/null @@ -1,11 +0,0 @@ -forge flatten contracts/BSCValidatorSet.sol > contracts/flattened/BSCValidatorSet.sol -forge flatten contracts/GovHub.sol > contracts/flattened/GovHub.sol -forge flatten contracts/RelayerHub.sol > contracts/flattened/RelayerHub.sol -forge flatten contracts/RelayerIncentivize.sol > contracts/flattened/RelayerIncentivize.sol -forge flatten contracts/SlashIndicator.sol > contracts/flattened/SlashIndicator.sol -forge flatten contracts/SystemReward.sol > contracts/flattened/SystemReward.sol -forge flatten contracts/TendermintLightClient.sol > contracts/flattened/TendermintLightClient.sol -forge flatten contracts/TokenHub.sol > contracts/flattened/TokenHub.sol -forge flatten contracts/CrossChain.sol > contracts/flattened/CrossChain.sol -forge flatten contracts/TokenManager.sol > contracts/flattened/TokenManager.sol -forge flatten contracts/Staking.sol > contracts/flattened/Staking.sol \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index c088dcf3..61c52666 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,14 +1,13 @@ [profile.default] src = 'contracts' test = 'test' -script = 'script' +script = 'foundry-script' out = 'out' fs_permissions = [{ access = "read-write", path = "./out" }] libs = ['lib', 'node_modules'] remappings = [ 'ds-test/=lib/forge-std/lib/ds-test/src/', 'forge-std/=lib/forge-std/src/', - 'openzeppelin-solidity/=node_modules/openzeppelin-solidity/', ] cache = true cache_path = 'cache' @@ -16,7 +15,7 @@ auto_detect_solc = true optimizer = true optimizer_runs = 200 verbosity = 3 -ignored_error_codes = [1878, 5574, 5667] +ignored_error_codes = [1878, 5574] ffi = true initial_balance = '0xffffffffffffffffffffffff' bytecode_hash = 'none' @@ -26,16 +25,17 @@ chains = 'all' endpoints = 'all' [fuzz] -runs = 1024 +runs = 512 [fmt] line_length = 120 tab_width = 4 -bracket_spacing = false +bracket_spacing = true int_types = 'long' func_attrs_with_params_multiline = true quote_style = 'double' number_underscore = 'preserve' +multiline_func_header = 'params_first' [rpc_endpoints] bsc = "${RPC_BSC}" # set by .env diff --git a/genesis-template.json b/genesis-template.json index 5eaae30e..b24cf4da 100644 --- a/genesis-template.json +++ b/genesis-template.json @@ -27,6 +27,7 @@ "hertzfixBlock": 8, "shanghaiTime": 0, "keplerTime": 0, + "feynmanTime": 0, "parlia": { "period": 3, "epoch": 200 @@ -87,6 +88,30 @@ "balance": "0x0", "code": "{{staking}}" }, + "0x0000000000000000000000000000000000002002": { + "balance": "0x0", + "code": "{{stakeHub}}" + }, + "0x0000000000000000000000000000000000002003": { + "balance": "0x0", + "code": "{{stakeCredit}}" + }, + "0x0000000000000000000000000000000000002004": { + "balance": "0x0", + "code": "{{governor}}" + }, + "0x0000000000000000000000000000000000002005": { + "balance": "0x0", + "code": "{{govToken}}" + }, + "0x0000000000000000000000000000000000002006": { + "balance": "0x0", + "code": "{{timelock}}" + }, + "0x0000000000000000000000000000000000003000": { + "balance": "0x0", + "code": "{{tokenRecoverPortal}}" + }, "0x88cb4D8F77742c24d647BEf8049D3f3C56067cDD": { "balance": "0x100000000000000000000" }, diff --git a/genesis.json b/genesis.json index 5abe34da..dd78e570 100644 --- a/genesis.json +++ b/genesis.json @@ -1,6 +1,6 @@ { "config": { - "chainId": 714, + "chainId": 56, "homesteadBlock": 0, "eip150Block": 0, "eip155Block": 0, @@ -27,6 +27,7 @@ "hertzfixBlock": 8, "shanghaiTime": 0, "keplerTime": 0, + "feynmanTime": 0, "parlia": { "period": 3, "epoch": 200 @@ -87,6 +88,26 @@ "balance": "0x0", "code": "0x6080604052600436106103855760003560e01c806370fd5bad116101d1578063b88a802f11610102578063d7ecfcb6116100a0578063f9a2bbc71161006f578063f9a2bbc714610c40578063fa03f79714610c55578063fc3e590814610671578063fd6a687914610c6a5761038c565b8063d7ecfcb614610819578063dc927faf14610bd1578063edc1a5b014610be6578063f45fd80b14610bfb5761038c565b8063c2117d82116100dc578063c2117d8214610ae7578063c81b166214610afc578063c8509d8114610b11578063d61b9b9314610b965761038c565b8063b88a802f14610a82578063baaafd3b14610a97578063bf8546ca14610aac5761038c565b806396713da91161016f578063a78abc1611610149578063a78abc1614610964578063ab51bb961461098d578063ac431751146109a2578063b14315df14610a6d5761038c565b806396713da9146109255780639dc092621461093a578063a1a11bf51461094f5761038c565b806375d47a0a116101ab57806375d47a0a146108765780637942fd051461088b578063831d65d1146108a057806392b888a41461061d5761038c565b806370fd5bad14610819578063718a8aa81461082e57806375aca593146108435761038c565b80633fdfa7e4116102b6578063552aaf931161025457806369b635b61161022357806369b635b6146107865780636bd8f8041461079b5780636e47b482146107d15780636fb7f7eb146107e65761038c565b8063552aaf93146107325780635d17c8bd146107475780635d499b1b1461075c57806362b171d2146107715761038c565b8063493279b111610290578063493279b1146106b05780634bf6c882146106dc5780634d99dd16146106f157806351e806721461071d5761038c565b80633fdfa7e414610671578063413d9c3a1461068657806343756e5c1461069b5761038c565b806311fe9ec6116103235780632fdeb111116102fd5780632fdeb11114610632578063333ad3e71461064757806334c433541461065c5780633dffc3871461061d5761038c565b806311fe9ec6146105bf578063151817e3146105f257806317c9efb01461061d5761038c565b80630bee7a671161035f5780630bee7a67146104515780630c7957151461047f5780630e2374a5146104945780631182b875146104c55761038c565b8063026e402b1461039157806302985992146103bf578063047636d1146103e65761038c565b3661038c57005b600080fd5b6103bd600480360360408110156103a757600080fd5b506001600160a01b038135169060200135610c7f565b005b3480156103cb57600080fd5b506103d46111bc565b60408051918252519081900360200190f35b3480156103f257600080fd5b506104196004803603602081101561040957600080fd5b50356001600160a01b03166111c2565b6040518082606080838360005b8381101561043e578181015183820152602001610426565b5050505090500191505060405180910390f35b34801561045d57600080fd5b50610466611216565b6040805163ffffffff9092168252519081900360200190f35b34801561048b57600080fd5b506103d461121b565b3480156104a057600080fd5b506104a9611221565b604080516001600160a01b039092168252519081900360200190f35b3480156104d157600080fd5b5061054a600480360360408110156104e857600080fd5b60ff8235169190810190604081016020820135600160201b81111561050c57600080fd5b82018360208201111561051e57600080fd5b803590602001918460018302840111600160201b8311171561053f57600080fd5b509092509050611227565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561058457818101518382015260200161056c565b50505050905090810190601f1680156105b15780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156105cb57600080fd5b506103d4600480360360208110156105e257600080fd5b50356001600160a01b03166113e3565b3480156105fe57600080fd5b506106076113fe565b6040805160ff9092168252519081900360200190f35b34801561062957600080fd5b50610607611403565b34801561063e57600080fd5b506103d4611408565b34801561065357600080fd5b5061046661140e565b34801561066857600080fd5b506103d4611413565b34801561067d57600080fd5b5061060761141e565b34801561069257600080fd5b506103d4611423565b3480156106a757600080fd5b506104a961142a565b3480156106bc57600080fd5b506106c5611430565b6040805161ffff9092168252519081900360200190f35b3480156106e857600080fd5b50610607611436565b6103bd6004803603604081101561070757600080fd5b506001600160a01b03813516906020013561143b565b34801561072957600080fd5b506104a9611a63565b34801561073e57600080fd5b50610607611a69565b34801561075357600080fd5b506103d4611a6e565b34801561076857600080fd5b506103d4611a74565b34801561077d57600080fd5b506103d4611a7d565b34801561079257600080fd5b506103d4611c1d565b6103bd600480360360608110156107b157600080fd5b506001600160a01b03813581169160208101359091169060400135611c23565b3480156107dd57600080fd5b506104a961230c565b3480156107f257600080fd5b506103d46004803603602081101561080957600080fd5b50356001600160a01b0316612312565b34801561082557600080fd5b5061060761232d565b34801561083a57600080fd5b50610607612332565b34801561084f57600080fd5b506103d46004803603602081101561086657600080fd5b50356001600160a01b0316612337565b34801561088257600080fd5b506104a9612352565b34801561089757600080fd5b50610607612358565b3480156108ac57600080fd5b506103bd600480360360408110156108c357600080fd5b60ff8235169190810190604081016020820135600160201b8111156108e757600080fd5b8201836020820111156108f957600080fd5b803590602001918460018302840111600160201b8311171561091a57600080fd5b50909250905061235d565b34801561093157600080fd5b50610607612625565b34801561094657600080fd5b506104a961262a565b34801561095b57600080fd5b506104a9612630565b34801561097057600080fd5b50610979612636565b604080519115158252519081900360200190f35b34801561099957600080fd5b50610466611a69565b3480156109ae57600080fd5b506103bd600480360360408110156109c557600080fd5b810190602081018135600160201b8111156109df57600080fd5b8201836020820111156109f157600080fd5b803590602001918460018302840111600160201b83111715610a1257600080fd5b919390929091602081019035600160201b811115610a2f57600080fd5b820183602082011115610a4157600080fd5b803590602001918460018302840111600160201b83111715610a6257600080fd5b50909250905061263f565b348015610a7957600080fd5b50610607612dd1565b348015610a8e57600080fd5b506103d4612dd6565b348015610aa357600080fd5b506103d4612f73565b348015610ab857600080fd5b506103d460048036036040811015610acf57600080fd5b506001600160a01b0381358116916020013516612f7e565b348015610af357600080fd5b506103d4612fab565b348015610b0857600080fd5b506104a9612fb1565b348015610b1d57600080fd5b506103bd60048036036040811015610b3457600080fd5b60ff8235169190810190604081016020820135600160201b811115610b5857600080fd5b820183602082011115610b6a57600080fd5b803590602001918460018302840111600160201b83111715610b8b57600080fd5b509092509050612fb7565b348015610ba257600080fd5b506103d460048036036040811015610bb957600080fd5b506001600160a01b03813581169160200135166131da565b348015610bdd57600080fd5b506104a9613205565b348015610bf257600080fd5b506103d461320b565b348015610c0757600080fd5b506103d460048036036060811015610c1e57600080fd5b506001600160a01b038135811691602081013582169160409091013516613218565b348015610c4c57600080fd5b506104a961324d565b348015610c6157600080fd5b506103d4613253565b348015610c7657600080fd5b506104a9613259565b60105460ff1660021415610ccb576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6010805460ff19166002179055806402540be4003406158015610cf357506402540be4008106155b610d44576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16610d87576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b600354821015610dde576040805162461bcd60e51b815260206004820152601760248201527f696e76616c69642064656c656761746520616d6f756e74000000000000000000604482015290519081900360640190fd5b600154610df290839063ffffffff61325f16565b341015610e3d576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f756768206d73672076616c756560601b604482015290519081900360640190fd5b601154604051600091339183818181818787f1925050503d8060008114610e80576040519150601f19603f3d011682016040523d82523d6000602084013e610e85565b606091505b5050905080610ecf576040805162461bcd60e51b815260206004820152601160248201527034b73b30b634b2103232b632b3b0ba37b960791b604482015290519081900360640190fd5b6000610ee6846402540be40063ffffffff6132c016565b90506000610efa348663ffffffff61330216565b90506000610f136002548361330290919063ffffffff16565b6040805160038082526080820190925291925060609190816020015b6060815260200190600190039081610f2f579050509050610f4f33613344565b81600081518110610f5c57fe5b6020026020010181905250610f79886001600160a01b0316613344565b81600181518110610f8657fe5b6020026020010181905250610f9a84613367565b81600281518110610fa757fe5b60200260200101819052506060610fc76001610fc28461337a565b613404565b8051602080830191909120600f80546000908152600a845260408082209390935581546001908101909255338152600b909352912080549091019055905061200063f7a251d7601083611025876402540be40063ffffffff6132c016565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561108357818101518382015260200161106b565b50505050905090810190601f1680156110b05780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156110d157600080fd5b505af11580156110e5573d6000803e3d6000fd5b5061100492506108fc915061110290508a8663ffffffff61325f16565b6040518115909202916000818181858888f1935050505015801561112a573d6000803e3d6000fd5b506002546040516110029180156108fc02916000818181858888f1935050505015801561115b573d6000803e3d6000fd5b50604080518981526020810185905281516001600160a01b038c169233927f5f32ed2794e2e72d19e3cb2320e8820a499c4204887372beba51f5e61c040867929081900390910190a350506010805460ff1916600117905550505050505050565b60035481565b6111ca615194565b6111d2615194565b6001600160a01b0383166000818152600b60209081526040808320548552838352600c82528083205485830152928252600d9052819020549082015290505b919050565b606481565b6108fc81565b61200181565b606033612000146112695760405162461bcd60e51b815260040180806020018281038252602f81526020018061539c602f913960400191505060405180910390fd5b60005460ff166112ac576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b6112b46151b2565b6112fb6112f685858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348a92505050565b6134af565b9050600061131061130b836134f9565b613547565b90506000606060ff8316600414156113355761132b846135fe565b909250905061138c565b60ff83166005141561134a5761132b846137de565b6040805162461bcd60e51b8152602060048201526012602482015271756e6b6e6f776e206576656e74207479706560701b604482015290519081900360640190fd5b63ffffffff8216156113d8576040805163ffffffff84168152905160ff8516917f391d6e5ea6ab6c49b9a0abb1782cae5def8d711f973b00c729658c0b2a80b31b919081900360200190a25b979650505050505050565b6001600160a01b031660009081526006602052604090205490565b600581565b600181565b60015481565b606581565b662386f26fc1000081565b600381565b620a8c0081565b61100181565b6102ca81565b600881565b60105460ff1660021415611487576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6010805460ff19166002179055806402540be40034061580156114af57506402540be4008106155b611500576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16611543576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b600154341015611591576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b60035482101561164c573360009081526005602090815260408083206001600160a01b03871684529091529020548214611603576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b600254821161164c576040805162461bcd60e51b815260206004820152601060248201526f6e6f7420656e6f7567682066756e647360801b604482015290519081900360640190fd5b3360009081526007602090815260408083206001600160a01b03871684529091529020544210156116c4576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720756e64656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600582528381206001600160a01b03881682529091529182205461171f91859063ffffffff6139fa16565b905080156117675760025481116117675760405162461bcd60e51b81526004018080602001828103825260258152602001806153776025913960400191505060405180910390fd5b600061177e846402540be40063ffffffff6132c016565b600254909150349060009061179a90839063ffffffff61330216565b6040805160038082526080820190925291925060609190816020015b60608152602001906001900390816117b65790505090506117d633613344565b816000815181106117e357fe5b6020026020010181905250611800886001600160a01b0316613344565b8160018151811061180d57fe5b602002602001018190525061182184613367565b8160028151811061182e57fe5b602002602001018190525060606118496002610fc28461337a565b8051602080830191909120600f80546000908152600a845260408082209390935581546001908101909255338152600c909352912080549091019055905061189a42620a8c0063ffffffff61325f16565b3360009081526007602090815260408083206001600160a01b038e16845290915290205561200063f7a251d76010836118de876402540be40063ffffffff6132c016565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b8381101561193c578181015183820152602001611924565b50505050905090810190601f1680156119695780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561198a57600080fd5b505af115801561199e573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f193505050501580156119d1573d6000803e3d6000fd5b506002546040516110029180156108fc02916000818181858888f19350505050158015611a02573d6000803e3d6000fd5b50604080518981526020810185905281516001600160a01b038c169233927fdf0b6ac27f3f3bb31cee3dab0f4fe40cc19c6a3f8daaec52e06b261e58a12519929081900390910190a350506010805460ff1916600117905550505050505050565b61200081565b600081565b60025481565b6402540be40081565b60105460009060ff1660021415611acc576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b506010805460ff191660021790553360009081526008602052604090205480611b33576040805162461bcd60e51b81526020600482015260146024820152736e6f20756e64656c6567617465642066756e647360601b604482015290519081900360640190fd5b336000818152600860205260408082208290556011549051919291849084818181858888f193505050503d8060008114611b89576040519150601f19603f3d011682016040523d82523d6000602084013e611b8e565b606091505b5050905080611bd6576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60408051838152905133917fc712d133b8d448221aaed2198ed1f0db6dfc860fb01bc3a630916fe6cbef946f919081900360200190a2506010805460ff1916600117905590565b60035490565b60105460ff1660021415611c6f576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b6010805460ff19166002179055806402540be4003406158015611c9757506402540be4008106155b611ce8576040805162461bcd60e51b815260206004820152601c60248201527f707265636973696f6e206c6f737320696e20636f6e76657273696f6e00000000604482015290519081900360640190fd5b60005460ff16611d2b576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b826001600160a01b0316846001600160a01b03161415611d89576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b2103932b232b632b3b0ba34b7b760611b604482015290519081900360640190fd5b600154341015611dd7576040805162461bcd60e51b81526020600482015260146024820152736e6f7420656e6f7567682072656c61792066656560601b604482015290519081900360640190fd5b600354821015611e1f576040805162461bcd60e51b815260206004820152600e60248201526d1a5b9d985b1a5908185b5bdd5b9d60921b604482015290519081900360640190fd5b3360009081526009602090815260408083206001600160a01b03888116855290835281842090871684529091529020544210801590611e8d57503360009081526009602090815260408083206001600160a01b03878116855290835281842090881684529091529020544210155b611ede576040805162461bcd60e51b815260206004820152601a60248201527f70656e64696e6720726564656c65676174696f6e206578697374000000000000604482015290519081900360640190fd5b604080518082018252601081526f6e6f7420656e6f7567682066756e647360801b602080830191909152336000908152600582528381206001600160a01b038916825290915291822054611f3991859063ffffffff6139fa16565b90508015611f81576002548111611f815760405162461bcd60e51b815260040180806020018281038252602581526020018061527b6025913960400191505060405180910390fd5b6000611f98846402540be40063ffffffff6132c016565b6002549091503490600090611fb490839063ffffffff61330216565b60408051600480825260a0820190925291925060609190816020015b6060815260200190600190039081611fd0579050509050611ff033613344565b81600081518110611ffd57fe5b602002602001018190525061201a896001600160a01b0316613344565b8160018151811061202757fe5b6020026020010181905250612044886001600160a01b0316613344565b8160028151811061205157fe5b602002602001018190525061206584613367565b8160038151811061207257fe5b6020026020010181905250606061208d6003610fc28461337a565b8051602080830191909120600f80546000908152600a845260408082209390935581546001908101909255338152600d90935291208054909101905590506120de42620a8c0063ffffffff61325f16565b3360009081526009602090815260408083206001600160a01b038e81168552908352818420908f16845290915290205561212142620a8c0063ffffffff61325f16565b3360009081526009602090815260408083206001600160a01b038f81168552908352818420908e16845290915290205561200063f7a251d7601083612171876402540be40063ffffffff6132c016565b6040518463ffffffff1660e01b8152600401808460ff1660ff16815260200180602001838152602001828103825284818151815260200191508051906020019080838360005b838110156121cf5781810151838201526020016121b7565b50505050905090810190601f1680156121fc5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561221d57600080fd5b505af1158015612231573d6000803e3d6000fd5b5050604051611004925085156108fc02915085906000818181858888f19350505050158015612264573d6000803e3d6000fd5b506002546040516110029180156108fc02916000818181858888f19350505050158015612295573d6000803e3d6000fd5b50886001600160a01b03168a6001600160a01b0316336001600160a01b03167fdb0d03fdfcb145c486c442659e6a341a8828985505097cb5190afcf541e840158b87604051808381526020018281526020019250505060405180910390a450506010805460ff191660011790555050505050505050565b61100581565b6001600160a01b031660009081526004602052604090205490565b600281565b601081565b6001600160a01b031660009081526008602052604090205490565b61100881565b600b81565b336120001461239d5760405162461bcd60e51b815260040180806020018281038252602f81526020018061539c602f913960400191505060405180910390fd5b60005460ff166123e0576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b6123e86151b2565b61242a6112f684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348a92505050565b905060008060606000805b61243e86613a91565b156124a9578061245b5761245461130b876134f9565b94506124a1565b80600114156124775761247061130b876134f9565b93506124a1565b806002141561249c5761249161248c876134f9565b613ab2565b9250600191506124a1565b6124a9565b600101612435565b816124ef576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6124f883613b22565b61253b576040805162461bcd60e51b815260206004820152600f60248201526e0eee4dedcce40e0c2c6d640d0c2e6d608b1b604482015290519081900360640190fd5b6125476112f68461348a565b9550600061255761130b886134f9565b90506125616151b2565b61256a88613a91565b1561258d576125866112f661258161248c8b6134f9565b61348a565b90506125ce565b6040805162461bcd60e51b8152602060048201526011602482015270656d7074792061636b207061636b61676560781b604482015290519081900360640190fd5b60ff8216600114156125ea576125e5818888613b76565b612618565b60ff821660021415612601576125e5818888613f2d565b60ff82166003141561134a576125e58188886141fa565b5050505050505050505050565b600981565b61100781565b61100681565b60005460ff1681565b60005460ff16612696576040805162461bcd60e51b815260206004820152601960248201527f74686520636f6e7472616374206e6f7420696e69742079657400000000000000604482015290519081900360640190fd5b33611007146126d65760405162461bcd60e51b815260040180806020018281038252602e8152602001806152ed602e913960400191505060405180910390fd5b61273784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600a81526972656c6179657246656560b01b6020820152915061455f9050565b1561289d5760208114612791576040805162461bcd60e51b815260206004820152601d60248201527f6c656e677468206f662072656c61796572466565206d69736d61746368000000604482015290519081900360640190fd5b604080516020601f84018190048102820181019092528281526000916127cf9185858083850183828082843760009201919091525061464692505050565b905060035481106128115760405162461bcd60e51b815260040180806020018281038252602e81526020018061531b602e913960400191505060405180910390fd5b60025481116128515760405162461bcd60e51b815260040180806020018281038252602e815260200180615349602e913960400191505060405180910390fd5b6402540be4008106156128955760405162461bcd60e51b815260040180806020018281038252602c8152602001806152c1602c913960400191505060405180910390fd5b600155612d3f565b61290184848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c62534352656c6179657246656560981b6020820152915061455f9050565b15612a63576020811461295b576040805162461bcd60e51b815260206004820181905260248201527f6c656e677468206f662062534352656c61796572466565206d69736d61746368604482015290519081900360640190fd5b604080516020601f84018190048102820181019092528281526000916129999185858083850183828082843760009201919091525061464692505050565b9050806129d75760405162461bcd60e51b81526004018080602001828103825260228152602001806153cb6022913960400191505060405180910390fd5b6001548110612a175760405162461bcd60e51b815260040180806020018281038252602e81526020018061521c602e913960400191505060405180910390fd5b6402540be400810615612a5b5760405162461bcd60e51b815260040180806020018281038252602f8152602001806151ed602f913960400191505060405180910390fd5b600255612d3f565b612ac784848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600d81526c36b4b72232b632b3b0ba34b7b760991b6020820152915061455f9050565b15612ba95760208114612b21576040805162461bcd60e51b815260206004820181905260248201527f6c656e677468206f66206d696e44656c65676174696f6e206d69736d61746368604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091612b5f9185858083850183828082843760009201919091525061464692505050565b90506001548111612ba15760405162461bcd60e51b815260040180806020018281038252603181526020018061524a6031913960400191505060405180910390fd5b600355612d3f565b612c0b84848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600b81526a7472616e7366657247617360a81b6020820152915061455f9050565b15612d025760208114612c65576040805162461bcd60e51b815260206004820152601e60248201527f6c656e677468206f66207472616e73666572476173206d69736d617463680000604482015290519081900360640190fd5b604080516020601f8401819004810282018101909252828152600091612ca39185858083850183828082843760009201919091525061464692505050565b905060008111612cfa576040805162461bcd60e51b815260206004820152601e60248201527f746865207472616e736665724761732063616e6e6f74206265207a65726f0000604482015290519081900360640190fd5b601155612d3f565b6040805162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015290519081900360640190fd5b7f6cdb0ac70ab7f2e2d035cca5be60d89906f2dede7648ddbd7402189c1eeed17a848484846040518080602001806020018381038352878782818152602001925080828437600083820152601f01601f191690910184810383528581526020019050858580828437600083820152604051601f909101601f19169092018290039850909650505050505050a150505050565b600481565b60105460009060ff1660021415612e25576040805162461bcd60e51b815260206004820152600e60248201526d4e6f2072652d656e7472616e637960901b604482015290519081900360640190fd5b506010805460ff191660021790553360009081526006602052604090205480612e89576040805162461bcd60e51b81526020600482015260116024820152701b9bc81c195b991a5b99c81c995dd85c99607a1b604482015290519081900360640190fd5b336000818152600660205260408082208290556011549051919291849084818181858888f193505050503d8060008114612edf576040519150601f19603f3d011682016040523d82523d6000602084013e612ee4565b606091505b5050905080612f2c576040805162461bcd60e51b815260206004820152600f60248201526e1d1c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60408051838152905133917f83b78188b13346b2ffb484da70d42ee27de7fbf9f2bd8045269e10ed643ccd76919081900360200190a2506010805460ff1916600117905590565b6638d7ea4c68000081565b6001600160a01b038083166000908152600760209081526040808320938516835292905220545b92915050565b60015490565b61100281565b3361200014612ff75760405162461bcd60e51b815260040180806020018281038252602f81526020018061539c602f913960400191505060405180910390fd5b60005460ff1661303a576638d7ea4c6800006001908155662386f26fc1000060025568056bc75e2d631000006003556108fc6011556000805460ff191690911790555b61307982828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613b2292505050565b6130bc576040805162461bcd60e51b815260206004820152600f60248201526e0eee4dedcce40e0c2c6d640d0c2e6d608b1b604482015290519081900360640190fd5b6130c46151b2565b6131066112f684848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348a92505050565b9050600061311661130b836134f9565b90506131206151b2565b61312983613a91565b15613147576131406112f661258161248c866134f9565b905061318d565b6040805162461bcd60e51b8152602060048201526016602482015275656d707479206661696c2061636b207061636b61676560501b604482015290519081900360640190fd5b60ff8216600114156131a7576131a28161464b565b6131d1565b60ff8216600214156131bc576131a281614865565b60ff82166003141561134a576131a28161498f565b5050505b505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b61100381565b68056bc75e2d6310000081565b6001600160a01b0392831660009081526009602090815260408083209486168352938152838220929094168152925290205490565b61100081565b60115481565b61100481565b6000828201838110156132b9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60006132b983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614af4565b60006132b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506139fa565b60408051600560a21b83186014820152603481019091526060906132b981614b59565b6060612fa561337583614baf565b614b59565b606081516000141561339b5750604080516000815260208101909152611211565b6060826000815181106133aa57fe5b602002602001015190506000600190505b83518110156133eb576133e1828583815181106133d457fe5b6020026020010151614c95565b91506001016133bb565b506132b96133fe825160c060ff16614d12565b82614c95565b6040805160028082526060828101909352829190816020015b606081526020019060019003908161341d5790505090506134408460ff16613367565b8160008151811061344d57fe5b602002602001018190525061346183614b59565b8160018151811061346e57fe5b60200260200101819052506134828161337a565b949350505050565b6134926151d2565b506040805180820190915281518152602082810190820152919050565b6134b76151b2565b6134c082614e0a565b6134c957600080fd5b60006134d88360200151614e44565b60208085015160408051808201909152868152920190820152915050919050565b6135016151d2565b61350a82613a91565b61351357600080fd5b6020820151600061352382614ea7565b80830160209586015260408051808201909152908152938401919091525090919050565b80516000901580159061355c57508151602110155b61356557600080fd5b60006135748360200151614e44565b905080836000015110156135cf576040805162461bcd60e51b815260206004820152601a60248201527f6c656e677468206973206c657373207468616e206f6666736574000000000000604482015290519081900360640190fd5b8251602080850151830180519284900392918310156135f557826020036101000a820491505b50949350505050565b600060606000806000805b61361287613a91565b1561366457826136345761362d613628886134f9565b614fda565b9150613659565b82600114156136545761364961130b886134f9565b905060019350613659565b613664565b826001019250613609565b836136aa576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b60006110046001600160a01b031663727be1f8836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156136f457600080fd5b505af1158015613708573d6000803e3d6000fd5b505050506040513d602081101561371e57600080fd5b505190508061374357613735600484846065614ff4565b9650965050505050506137d9565b6001600160a01b03831660009081526006602052604090205461376c908363ffffffff61325f16565b6001600160a01b038416600081815260066020908152604091829020939093558051858152905191927f7cc266c7b444f808013fa187f7b904d470a051a6564e78f482aa496581ba4bf892918290030190a260408051600080825260208201909252909750955050505050505b915091565b6000606060008060008060005b6137f488613a91565b1561385d57836138115761380a613628896134f9565b9250613852565b836001141561382d57613826613628896134f9565b9150613852565b836002141561384d5761384261130b896134f9565b905060019450613852565b61385d565b8360010193506137eb565b846138a3576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b60006110046001600160a01b031663727be1f8836040518263ffffffff1660e01b815260040180828152602001915050602060405180830381600087803b1580156138ed57600080fd5b505af1158015613901573d6000803e3d6000fd5b505050506040513d602081101561391757600080fd5b505190508061393d5761392e600585846065614ff4565b975097505050505050506137d9565b6001600160a01b038085166000818152600760209081526040808320948816835293815283822082905591815260089091522054613981908363ffffffff61325f16565b6001600160a01b0380861660008181526008602090815260409182902094909455805186815290519287169391927f35a799836f74fac7eccf5c73902823b970543d2274d3b93d8da3d37a255772a2929181900390910190a3604080516000808252602082019092529098509650505050505050915091565b60008184841115613a895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a4e578181015183820152602001613a36565b50505050905090810190601f168015613a7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000613a9b6151d2565b505080518051602091820151919092015191011190565b8051606090613ac057600080fd5b6000613acf8360200151614e44565b83516040805191839003808352601f19601f8201168301602001909152919250606090828015613b06576020820181803683370190505b50905060008160200190506135f58487602001510182856150f0565b8051602080830191909120600e546000908152600a9092526040822054808214613b5157600092505050611211565b5050600e80546000908152600a60205260408120558054600190810190915592915050565b60008060008060005b613b8888613a91565b15613bf15783613ba557613b9e613628896134f9565b9250613be6565b8360011415613bc157613bba613628896134f9565b9150613be6565b8360021415613be157613bd661130b896134f9565b905060019450613be6565b613bf1565b836001019350613b7f565b84613c37576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6000613c4e826402540be40063ffffffff61513b16565b6001600160a01b0385166000908152600b602052604090208054600019019055905060ff881660011415613d945760ff871615613cc1576040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b6001600160a01b038416600090815260046020526040902054613cea908263ffffffff61325f16565b6001600160a01b03808616600090815260046020908152604080832094909455600581528382209287168252919091522054613d2c908263ffffffff61325f16565b6001600160a01b038086166000818152600560209081526040808320948916808452948252918290209490945580518581529051929391927f9a57c81564ab02642f34fd87e41baa9b074c18342cec3b7268b62bf752018fd1929181900390910190a3613f22565b60ff8816613ee6576001600160a01b038416600090815260086020526040902054613dc5908263ffffffff61325f16565b6001600160a01b0385166000908152600860209081526040808320939093558251630e4f7c3f60e31b81526004810185905292516110049363727be1f89360248083019493928390030190829087803b158015613e2157600080fd5b505af1158015613e35573d6000803e3d6000fd5b505050506040513d6020811015613e4b57600080fd5b5051613e94576040805162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc8189b988819985a5b1959606a1b604482015290519081900360640190fd5b6040805182815260ff8916602082015281516001600160a01b0380871693908816927fcbd481ae600289fad8c0484d07ce0ffe4f010d7c844ecfdeaf2a13fead52886e929081900390910190a3613f22565b6040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b505050505050505050565b60008060008060005b613f3f88613a91565b15613fa85783613f5c57613f55613628896134f9565b9250613f9d565b8360011415613f7857613f71613628896134f9565b9150613f9d565b8360021415613f9857613f8d61130b896134f9565b905060019450613f9d565b613fa8565b836001019350613f36565b84613fee576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6000614005826402540be40063ffffffff61513b16565b6001600160a01b0385166000908152600c602052604090208054600019019055905060ff8816600114156141845760ff871615614078576040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b6001600160a01b0384166000908152600460205260409020546140a1908263ffffffff61330216565b6001600160a01b038086166000908152600460209081526040808320949094556005815283822092871682529190915220546140e3908263ffffffff61330216565b6001600160a01b0380861660009081526005602090815260408083209388168352929052205561411c42620a8c0063ffffffff61325f16565b6001600160a01b038086166000818152600760209081526040808320948916808452948252918290209490945580518581529051929391927fd6f878a5bcbbe79a64e6418bb0d56aaa20b9a60587d45749819df88dfc7c3c44929181900390910190a3613f22565b60ff8816613ee6576001600160a01b03808516600081815260076020908152604080832094881680845294825280832092909255815185815260ff8c169181019190915281517f4417d10c1e33efa83a770b8d4f47176e78c08c1298d534901ad3b16bb585fa2e929181900390910190a3613f22565b6000806000806000805b61420d89613a91565b15614292578461422a576142236136288a6134f9565b9350614287565b84600114156142465761423f6136288a6134f9565b9250614287565b84600214156142625761425b6136288a6134f9565b9150614287565b84600314156142825761427761130b8a6134f9565b905060019550614287565b614292565b846001019450614204565b856142d8576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b60006142ef826402540be40063ffffffff61513b16565b6001600160a01b0386166000908152600d602052604090208054600019019055905060ff8916600114156144c25760ff881615614362576040805162461bcd60e51b815260206004820152600c60248201526b77726f6e672073746174757360a01b604482015290519081900360640190fd5b6001600160a01b03808616600090815260056020908152604080832093881683529290522054614398908263ffffffff61330216565b6001600160a01b038681166000908152600560209081526040808320898516845290915280822093909355908516815220546143d4908261325f565b6001600160a01b0380871660009081526005602090815260408083209388168352929052205561440d42620a8c0063ffffffff61325f16565b6001600160a01b038087166000908152600960209081526040808320898516845282528083209388168352929052205561445042620a8c0063ffffffff61325f16565b6001600160a01b038087166000818152600960209081526040808320898616808552908352818420958b1680855295835292819020959095558451868152945191947f78bffae3f8c6691ac7fc1a3bff800cb2d612f5ad9ae5b0444cfe2eb15c189e18929081900390910190a4614553565b60ff8916613ee6576001600160a01b038581166000818152600960209081526040808320898616808552818452828520968a16808652968452828520859055908352818420818552835281842093909355805186815260ff8e169281019290925280519293927fb93bee5c59f85ede6b074a99f4ffcd3e3fc0d5c3d8156de331de89a49e0ce77c9281900390910190a45b50505050505050505050565b6000816040516020018082805190602001908083835b602083106145945780518252601f199092019160209182019101614575565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120836040516020018082805190602001908083835b602083106146025780518252601f1990920191602091820191016145e3565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012014905092915050565b015190565b60008060008060005b61465d86613a91565b156146c6578361467a57614673613628876134f9565b92506146bb565b83600114156146965761468f613628876134f9565b91506146bb565b83600214156146b6576146ab61130b876134f9565b9050600194506146bb565b6146c6565b836001019350614654565b8461470c576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6000614723826402540be40063ffffffff61513b16565b6001600160a01b0385166000908152600b6020908152604080832080546000190190556008909152902054909150614761908263ffffffff61325f16565b6001600160a01b0385166000908152600860209081526040808320939093558251630e4f7c3f60e31b81526004810185905292516110049363727be1f89360248083019493928390030190829087803b1580156147bd57600080fd5b505af11580156147d1573d6000803e3d6000fd5b505050506040513d60208110156147e757600080fd5b5051614830576040805162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc8189b988819985a5b1959606a1b604482015290519081900360640190fd5b6040516001907ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b90600090a250505050505050565b60008060008060005b61487786613a91565b156148e057836148945761488d613628876134f9565b92506148d5565b83600114156148b0576148a9613628876134f9565b91506148d5565b83600214156148d0576148c561130b876134f9565b9050600194506148d5565b6148e0565b83600101935061486e565b84614926576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6001600160a01b038084166000908152600c60209081526040808320805460001901905560078252808320938616835292905281812081905590516002917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a2505050505050565b6000806000806000805b6149a287613a91565b15614a2757846149bf576149b8613628886134f9565b9350614a1c565b84600114156149db576149d4613628886134f9565b9250614a1c565b84600214156149f7576149f0613628886134f9565b9150614a1c565b8460031415614a1757614a0c61130b886134f9565b905060019550614a1c565b614a27565b846001019450614999565b85614a6d576040805162461bcd60e51b81526020600482015260116024820152701c9b1c08191958dbd9194819985a5b1959607a1b604482015290519081900360640190fd5b6001600160a01b038481166000908152600d602090815260408083208054600019019055600982528083208785168085528184528285209588168552948352818420849055825280832093835292905281812081905590516003917ff83de021914a4585482db5ca47d520a5657165b443fa2c7ef8ed4635f054da9b91a250505050505050565b60008183614b435760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613a4e578181015183820152602001613a36565b506000838581614b4f57fe5b0495945050505050565b606081516001148015614b8b5750607f60f81b82600081518110614b7957fe5b01602001516001600160f81b03191611155b15614b97575080611211565b612fa5614ba98351608060ff16614d12565b83614c95565b604080516020808252818301909252606091829190602082018180368337505050602081018490529050600067ffffffffffffffff198416614bf357506018614c17565b6fffffffffffffffffffffffffffffffff198416614c1357506010614c17565b5060005b6020811015614c4d57818181518110614c2c57fe5b01602001516001600160f81b03191615614c4557614c4d565b600101614c17565b60008160200390506060816040519080825280601f01601f191660200182016040528015614c82576020820181803683370190505b5080830196909652508452509192915050565b6060806040519050835180825260208201818101602087015b81831015614cc6578051835260209283019201614cae565b50855184518101855292509050808201602086015b81831015614cf3578051835260209283019201614cdb565b508651929092011591909101601f01601f191660405250905092915050565b6060680100000000000000008310614d62576040805162461bcd60e51b815260206004820152600e60248201526d696e70757420746f6f206c6f6e6760901b604482015290519081900360640190fd5b60408051600180825281830190925260609160208201818036833701905050905060378411614dbc5782840160f81b81600081518110614d9e57fe5b60200101906001600160f81b031916908160001a9053509050612fa5565b6060614dc785614baf565b90508381510160370160f81b82600081518110614de057fe5b60200101906001600160f81b031916908160001a905350614e018282614c95565b95945050505050565b8051600090614e1b57506000611211565b6020820151805160001a9060c0821015614e3a57600092505050611211565b5060019392505050565b8051600090811a6080811015614e5e576000915050611211565b60b8811080614e79575060c08110801590614e79575060f881105b15614e88576001915050611211565b60c0811015614e9c5760b519019050611211565b60f519019050611211565b80516000908190811a6080811015614ec25760019150614fd3565b60b8811015614ed757607e1981019150614fd3565b60c0811015614f5157600060b78203600186019550806020036101000a865104915060018101820193505080831015614f4b576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b50614fd3565b60f8811015614f665760be1981019150614fd3565b600060f78203600186019550806020036101000a865104915060018101820193505080831015614fd1576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b505b5092915050565b8051600090601514614feb57600080fd5b612fa582613547565b6000606061500d846402540be40063ffffffff6132c016565b60408051600480825260a0820190925291955060609190816020015b606081526020019060019003908161502957905050905061504c8760ff16613367565b8160008151811061505957fe5b6020026020010181905250615076866001600160a01b0316613344565b8160018151811061508357fe5b602002602001018190525061509785613367565b816002815181106150a457fe5b60200260200101819052506150be8463ffffffff16613367565b816003815181106150cb57fe5b602002602001018190525060606150e18261337a565b94989497509395505050505050565b806150fa576131d5565b5b6020811061511a578251825260209283019290910190601f19016150fb565b915181516020939093036101000a6000190180199091169216919091179052565b60008261514a57506000612fa5565b8282028284828161515757fe5b04146132b95760405162461bcd60e51b81526004018080602001828103825260218152602001806152a06021913960400191505060405180910390fd5b60405180606001604052806003906020820280368337509192915050565b60405180604001604052806151c56151d2565b8152602001600081525090565b60405180604001604052806000815260200160008152509056fe7468652042534352656c61796572466565206d6f642074656e20646563696d616c73206d757374206265207a65726f7468652042534352656c61796572466565206d757374206265206c657373207468616e2072656c61796572466565746865206d696e44656c65676174696f6e206d7573742062652067726561746572207468616e2072656c61796572466565696e73756666696369656e742062616c616e636520616674657220726564656c6567617465536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f777468652072656c61796572466565206d6f642074656e20646563696d616c73206d757374206265207a65726f746865206d6573736167652073656e646572206d75737420626520676f7665726e616e636520636f6e74726163747468652072656c61796572466565206d757374206265206c657373207468616e206d696e44656c65676174696f6e7468652072656c61796572466565206d757374206265206d6f7265207468616e2042534352656c61796572466565696e73756666696369656e742062616c616e636520616674657220756e64656c6567617465746865206d6573736167652073656e646572206d7573742062652063726f737320636861696e20636f6e74726163747468652042534352656c61796572466565206d757374206e6f74206265207a65726fa164736f6c6343000604000a" }, + "0x0000000000000000000000000000000000002002": { + "balance": "0x0", + "code": "0x608060405260043610620003db5760003560e01c806376e7d6d61162000203578063c9c048ba1162000117578063dc927faf11620000ad578063f9a2bbc71162000078578063f9a2bbc71462000b5e578063fb50b31f1462000b76578063fc0c5ff11462000b9b578063fd6a68791462000bb357600080fd5b8063dc927faf1462000afe578063df8079e91462000b16578063e8f67c3b1462000b2e578063f999c5061462000b4657600080fd5b8063d6ca429d11620000ee578063d6ca429d1462000a92578063d89e001b1462000ab7578063d8ca511f1462000ace578063daacdb661462000ae657600080fd5b8063c9c048ba14620009e7578063cbb04d9d1462000a1d578063cf06248c1462000a5557600080fd5b8063a43569b31162000199578063b187bd261162000164578063b187bd261462000968578063b801860d1462000992578063c473318f14620009b7578063c81b166214620009cf57600080fd5b8063a43569b314620008d2578063aa82dce11462000906578063aad3ec96146200091e578063ac431751146200094357600080fd5b80638129fc1c11620001da5780638129fc1c14620008725780639dc09262146200088a5780639e8bf70714620008a2578063a1a11bf514620008ba57600080fd5b806376e7d6d6146200081d5780637adcf7e814620008355780637e434d54146200085a57600080fd5b80634e6fd6c411620002fb578063675a00ae116200029157806372672ae4116200025c57806372672ae414620007a05780637475f91314620007c857806375cc7d8914620007e057806375d47a0a146200080557600080fd5b8063675a00ae14620006815780636bd8f80414620006a65780636e47b48214620006cb5780636ec01b2714620006e357600080fd5b80635c19a95c11620002d25780635c19a95c14620006095780635e7cc1c9146200062057806364028fbd1462000645578063663b81c7146200065c57600080fd5b80634e6fd6c414620005c157806351b4dce314620005d957806351e8067214620005f157600080fd5b806338409988116200037157806343756e5c116200034857806343756e5c146200053a578063449ecfe6146200055257806345211bfd14620005775780634d99dd16146200059c57600080fd5b80633840998814620004e55780633a71f2f214620004fd5780633db6f47e146200052257600080fd5b80630e2374a511620003b25780630e2374a514620004435780631fa035ab14620004745780632808702814620004b557806336d1619014620004cd57600080fd5b80630661806e14620003e8578063092193ab14620004135780630c20fe41146200042c57600080fd5b36620003e357005b600080fd5b348015620003f557600080fd5b506200040060025481565b6040519081526020015b60405180910390f35b6200042a6200042436600462007141565b62000bcb565b005b3480156200043957600080fd5b5062000400603081565b3480156200045057600080fd5b506200045b61200181565b6040516001600160a01b0390911681526020016200040a565b3480156200048157600080fd5b5062000499620004933660046200715f565b62001273565b604080519384526020840192909252908201526060016200040a565b348015620004c257600080fd5b506200045b61200581565b348015620004da57600080fd5b506200040060095481565b348015620004f257600080fd5b506200040060035481565b3480156200050a57600080fd5b506200042a6200051c366004620071f5565b6200132d565b3480156200052f57600080fd5b5062000400600a5481565b3480156200054757600080fd5b506200045b61100181565b3480156200055f57600080fd5b506200042a6200057136600462007141565b620014ee565b3480156200058457600080fd5b506200042a6200059636600462007141565b62001729565b348015620005a957600080fd5b506200042a620005bb3660046200724e565b620018d5565b348015620005ce57600080fd5b506200045b61dead81565b348015620005e657600080fd5b506200045b61200681565b348015620005fe57600080fd5b506200045b61200081565b6200042a6200061a36600462007141565b62001ea0565b3480156200062d57600080fd5b506200042a6200063f36600462007291565b620024a6565b6200042a620006563660046200730e565b6200268d565b3480156200066957600080fd5b506200042a6200067b366004620073de565b62002b96565b3480156200068e57600080fd5b506200042a620006a036600462007450565b6200302c565b348015620006b357600080fd5b506200042a620006c536600462007486565b62003254565b348015620006d857600080fd5b506200045b61100581565b348015620006f057600080fd5b506200076d6200070236600462007141565b6040805160608082018352600080835260208084018290529284018190526001600160a01b03949094168452600d82529282902082519384018352600801546001600160401b038082168552600160401b8204811692850192909252600160801b9004169082015290565b6040805182516001600160401b03908116825260208085015182169083015292820151909216908201526060016200040a565b348015620007ad57600080fd5b50620007b862003f4d565b6040516200040a92919062007574565b348015620007d557600080fd5b506200042a620040ec565b348015620007ed57600080fd5b506200042a620007ff36600462007141565b62004144565b3480156200081257600080fd5b506200045b61100881565b3480156200082a57600080fd5b506200040060085481565b3480156200084257600080fd5b506200045b620008543660046200761b565b620042fd565b3480156200086757600080fd5b506200045b61200381565b3480156200087f57600080fd5b506200042a62004335565b3480156200089757600080fd5b506200045b61100781565b348015620008af57600080fd5b506200040060075481565b348015620008c757600080fd5b506200045b61100681565b348015620008df57600080fd5b50620008f7620008f136600462007141565b62004456565b6040516200040a919062007660565b3480156200091357600080fd5b506200045b61200281565b3480156200092b57600080fd5b506200042a6200093d3660046200724e565b62004716565b3480156200095057600080fd5b506200042a62000962366004620076e6565b62004860565b3480156200097557600080fd5b50600054610100900460ff1660405190151581526020016200040a565b3480156200099f57600080fd5b506200042a620009b13660046200774c565b62005878565b348015620009c457600080fd5b506200040060045481565b348015620009dc57600080fd5b506200045b61100281565b348015620009f457600080fd5b5062000a0c62000a063660046200779b565b62005a38565b6040516200040a9392919062007804565b34801562000a2a57600080fd5b5062000a4262000a3c36600462007141565b62006044565b6040516200040a95949392919062007868565b34801562000a6257600080fd5b506200045b62000a7436600462007141565b6001600160a01b039081166000908152600f60205260409020541690565b34801562000a9f57600080fd5b506200042a62000ab1366004620078aa565b62006478565b34801562000ac457600080fd5b5062000400606081565b34801562000adb57600080fd5b506200040060065481565b34801562000af357600080fd5b506200040060115481565b34801562000b0b57600080fd5b506200045b61100381565b34801562000b2357600080fd5b506200045b61200481565b34801562000b3b57600080fd5b506200040060015481565b34801562000b5357600080fd5b506200042a620065c7565b34801562000b6b57600080fd5b506200045b61100081565b34801562000b8357600080fd5b506200042a62000b95366004620076e6565b62006623565b34801562000ba857600080fd5b506200040060055481565b34801562000bc057600080fd5b506200045b61100481565b336110001462000c3b5760405162461bcd60e51b815260206004820152603060248201527f746865206d6573736167652073656e646572206d7573742062652076616c696460448201526f185d1bdc94d95d0818dbdb9d1c9858dd60821b60648201526084015b60405180910390fd5b6001600160a01b038082166000908152600f60209081526040808320548416808452600d8352818420825161014081018452815487168152600182015487169481019490945260028101549095169183019190915260038401805491949160608401919062000caa90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462000cd890620078e2565b801562000d295780601f1062000cfd5761010080835404028352916020019162000d29565b820191906000526020600020905b81548152906001019060200180831162000d0b57829003601f168201915b505050505081526020016004820160405180608001604052908160008201805462000d5490620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462000d8290620078e2565b801562000dd35780601f1062000da75761010080835404028352916020019162000dd3565b820191906000526020600020905b81548152906001019060200180831162000db557829003601f168201915b5050505050815260200160018201805462000dee90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462000e1c90620078e2565b801562000e6d5780601f1062000e415761010080835404028352916020019162000e6d565b820191906000526020600020905b81548152906001019060200180831162000e4f57829003601f168201915b5050505050815260200160028201805462000e8890620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462000eb690620078e2565b801562000f075780601f1062000edb5761010080835404028352916020019162000f07565b820191906000526020600020905b81548152906001019060200180831162000ee957829003601f168201915b5050505050815260200160038201805462000f2290620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462000f5090620078e2565b801562000fa15780601f1062000f755761010080835404028352916020019162000fa1565b820191906000526020600020905b81548152906001019060200180831162000f8357829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b8154815260200190600101908083116200102d575050509190925250505060408101519091506001600160a01b031615806200106a57508060c001515b15620010db57816001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d604051620010ce9060208082526011908201527024a72b20a624a22fab20a624a220aa27a960791b604082015260600190565b60405180910390a2505050565b60408181015160a0830151519151632f303ebb60e11b81526001600160401b0390921660048301526001600160a01b031690635e607d769034906024016000604051808303818588803b1580156200113257600080fd5b505af19350505050801562001145575060015b62001231576200115462007918565b806308c379a003620011c257506200116b6200797a565b80620011785750620011c4565b826001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d82604051620011b3919062007a09565b60405180910390a2506200126d565b505b3d808015620011f0576040519150601f19603f3d011682016040523d82523d6000602084013e620011f5565b606091505b50826001600160a01b03167ffc8bff675087dd2da069cc3fb517b9ed001e19750c0865241a5542dba1ba170d82604051620011b3919062007a09565b816001600160a01b03167fe34918ff1c7084970068b53fd71ad6d8b04e9f15d3886cbf006443e6cdc52ea634604051620010ce91815260200190565b50505b50565b600080600080620012868787876200681c565b60008181526010602090815260408083208151608081018352815481526001820154938101939093526002808201546001600160f81b0381169385019390935294955092939192916060840191600160f81b900460ff1690811115620012f057620012f062007a1e565b600281111562001304576200130462007a1e565b905250602081015160408201519151909a6001600160f81b039092169950975095505050505050565b600054610100900460ff1615620013585760405162461bcd60e51b815260040162000c329062007a34565b816000816001600160401b0381111562001376576200137662007935565b604051908082528060200260200182016040528015620013a0578160200160208202803683370190505b5090506000805b838110156200148857600d6000888884818110620013c957620013c962007a5b565b9050602002016020810190620013e0919062007141565b6001600160a01b03908116825260208201929092526040016000206002015416915081620014475760405162461bcd60e51b81526020600482015260136024820152721d985b1a59185d1bdc881b9bdd08195e1a5cdd606a1b604482015260640162000c32565b818382815181106200145d576200145d62007a5b565b6001600160a01b0390921660209283029190910190910152620014808162007a87565b9050620013a7565b50604051631d38f97960e11b815261200590633a71f2f290620014b2908590889060040162007aa3565b600060405180830381600087803b158015620014cd57600080fd5b505af1158015620014e2573d6000803e3d6000fd5b50505050505050505050565b600054610100900460ff1615620015195760405162461bcd60e51b815260040162000c329062007a34565b6001600160a01b038082166000908152600d6020526040902060020154829116620015585760405162461bcd60e51b815260040162000c329062007acf565b6001600160a01b0382166000908152600d60205260409020600981015460ff16620015b35760405162461bcd60e51b815260206004820152600a6024820152691393d517d2905253115160b21b604482015260640162000c32565b6002548160020160009054906101000a90046001600160a01b03166001600160a01b031663169864896040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200160c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001632919062007afc565b1015620016825760405162461bcd60e51b815260206004820152601a60248201527f4e4f545f454e4f5547485f53454c465f44454c45474154494f4e000000000000604482015260640162000c32565b4281600a01541115620016c75760405162461bcd60e51b815260206004820152600c60248201526b14d512531317d2905253115160a21b604482015260640162000c32565b60098101805460ff191690556011805460019190600090620016eb90849062007b16565b90915550506040516001600160a01b038416907f9390b453426557da5ebdc31f19a37753ca04addf656d32f35232211bb2af3f1990600090a2505050565b600054610100900460ff1615620017545760405162461bcd60e51b815260040162000c329062007a34565b336000818152600d60205260409020600201546001600160a01b03166200178f5760405162461bcd60e51b815260040162000c329062007acf565b6001600160a01b038216620017b85760405162461bcd60e51b815260040162000c329062007b2c565b6001600160a01b038281166000908152600f60205260409020541615620018225760405162461bcd60e51b815260206004820152601b60248201527f4455504c49434154455f434f4e53454e5355535f414444524553530000000000604482015260640162000c32565b336000818152600d60205260409020600b810154429062001847906201518062007b63565b1115620018685760405162461bcd60e51b815260040162000c329062007b79565b80546001600160a01b038086166001600160a01b03199283168117845542600b8501556000818152600f60205260408082208054948816949095168417909455925190927f6e4e747ca35203f16401c69805c7dd52fff67ef60b0ebc5c7fe16890530f223591a350505050565b600054610100900460ff1615620019005760405162461bcd60e51b815260040162000c329062007a34565b6001600160a01b038083166000908152600d60205260409020600201548391166200193f5760405162461bcd60e51b815260040162000c329062007acf565b60008211620019895760405162461bcd60e51b81526020600482015260156024820152741253959053125117d4d210549154d7d05353d55395605a1b604482015260640162000c32565b6001600160a01b038084166000908152600d6020908152604080832081516101408101835281548616815260018201548616938101939093526002810154909416908201526003830180543394916060840191620019e790620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462001a1590620078e2565b801562001a665780601f1062001a3a5761010080835404028352916020019162001a66565b820191906000526020600020905b81548152906001019060200180831162001a4857829003601f168201915b505050505081526020016004820160405180608001604052908160008201805462001a9190620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462001abf90620078e2565b801562001b105780601f1062001ae45761010080835404028352916020019162001b10565b820191906000526020600020905b81548152906001019060200180831162001af257829003601f168201915b5050505050815260200160018201805462001b2b90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462001b5990620078e2565b801562001baa5780601f1062001b7e5761010080835404028352916020019162001baa565b820191906000526020600020905b81548152906001019060200180831162001b8c57829003601f168201915b5050505050815260200160028201805462001bc590620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462001bf390620078e2565b801562001c445780601f1062001c185761010080835404028352916020019162001c44565b820191906000526020600020905b81548152906001019060200180831162001c2657829003601f168201915b5050505050815260200160038201805462001c5f90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462001c8d90620078e2565b801562001cde5780601f1062001cb25761010080835404028352916020019162001cde565b820191906000526020600020905b81548152906001019060200180831162001cc057829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b81548152602001906001019080831162001d6a575050509190925250505060408082015190516326ccee8b60e11b81526001600160a01b0385811660048301526024820188905292935060009290911690634d99dd16906044016020604051808303816000875af115801562001de4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001e0a919062007afc565b9050826001600160a01b0316866001600160a01b03167f3aace7340547de7b9156593a7652dc07ee900cea3fd8f82cb6c9d38b40829802878460405162001e5b929190918252602082015260400190565b60405180910390a3856001600160a01b0316836001600160a01b03160362001e885762001e888662006854565b62001e988260400151846200696f565b505050505050565b600054610100900460ff161562001ecb5760405162461bcd60e51b815260040162000c329062007a34565b6001600160a01b038082166000908152600d602052604090206002015482911662001f0a5760405162461bcd60e51b815260040162000c329062007acf565b600354349081101562001f605760405162461bcd60e51b815260206004820152601960248201527f494e56414c49445f44454c45474154494f4e5f414d4f554e5400000000000000604482015260640162000c32565b6001600160a01b038084166000908152600d602090815260408083208151610140810183528154861681526001820154861693810193909352600281015490941690820152600383018054339491606084019162001fbe90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462001fec90620078e2565b80156200203d5780601f1062002011576101008083540402835291602001916200203d565b820191906000526020600020905b8154815290600101906020018083116200201f57829003601f168201915b50505050508152602001600482016040518060800160405290816000820180546200206890620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200209690620078e2565b8015620020e75780601f10620020bb57610100808354040283529160200191620020e7565b820191906000526020600020905b815481529060010190602001808311620020c957829003601f168201915b505050505081526020016001820180546200210290620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200213090620078e2565b8015620021815780601f10620021555761010080835404028352916020019162002181565b820191906000526020600020905b8154815290600101906020018083116200216357829003601f168201915b505050505081526020016002820180546200219c90620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620021ca90620078e2565b80156200221b5780601f10620021ef576101008083540402835291602001916200221b565b820191906000526020600020905b815481529060010190602001808311620021fd57829003601f168201915b505050505081526020016003820180546200223690620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200226490620078e2565b8015620022b55780601f106200228957610100808354040283529160200191620022b5565b820191906000526020600020905b8154815290600101906020018083116200229757829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b815481526020019060010190808311620023415750505050508152505090508060c0015115620023c557846001600160a01b0316826001600160a01b031614620023c55760405162461bcd60e51b815260206004820152601460248201527327a7262cafa9a2a6232fa222a622a3a0aa24a7a760611b604482015260640162000c32565b60408082015190516317066a5760e21b81526001600160a01b0384811660048301526000921690635c19a95c90869060240160206040518083038185885af115801562002416573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906200243d919062007afc565b9050826001600160a01b0316866001600160a01b03167f24d7bda8602b916d64417f0dbfe2e2e88ec9b1157bd9f596dfdb91ba26624e0483876040516200248e929190918252602082015260400190565b60405180910390a362001e988260400151846200696f565b600054610100900460ff1615620024d15760405162461bcd60e51b815260040162000c329062007a34565b336000818152600d60205260409020600201546001600160a01b03166200250c5760405162461bcd60e51b815260040162000c329062007acf565b336000818152600d60205260409020600b810154429062002531906201518062007b63565b1115620025525760405162461bcd60e51b815260040162000c329062007b79565b60088101546001600160401b03600160401b909104811690851611156200258d5760405162461bcd60e51b815260040162000c329062007ba8565b60088101546000906001600160401b039081169086161015620025cb576008820154620025c59086906001600160401b031662007bdf565b620025e5565b6008820154620025e5906001600160401b03168662007bdf565b60088301546001600160401b039182169250600160801b900416811115620026215760405162461bcd60e51b815260040162000c329062007ba8565b60088201805467ffffffffffffffff19166001600160401b03871690811790915542600b8401556040519081526001600160a01b038416907f78cdd96edf59e09cfd4d26ef6ef6c92d166effe6a40970c54821206d541932cb9060200160405180910390a25050505050565b600054610100900460ff1615620026b85760405162461bcd60e51b815260040162000c329062007a34565b336000818152600d60205260409020600201546001600160a01b031615620027175760405162461bcd60e51b81526020600482015260116024820152701590531251105513d497d1561254d51151607a1b604482015260640162000c32565b6001600160a01b038881166000908152600f60205260409020541615620027815760405162461bcd60e51b815260206004820152601b60248201527f4455504c49434154455f434f4e53454e5355535f414444524553530000000000604482015260640162000c32565b60006001600160a01b0316600e8888604051620027a092919062007c09565b908152604051908190036020019020546001600160a01b031614620028015760405162461bcd60e51b81526020600482015260166024820152754455504c49434154455f564f54455f4144445245535360501b604482015260640162000c32565b6002543490811015620028575760405162461bcd60e51b815260206004820152601a60248201527f4e4f545f454e4f5547485f53454c465f44454c45474154494f4e000000000000604482015260640162000c32565b62002869604085016020860162007291565b6001600160401b031662002881602086018662007291565b6001600160401b03161115620028ab5760405162461bcd60e51b815260040162000c329062007ba8565b620028bd604085016020860162007291565b6001600160401b0316620028d8606086016040870162007291565b6001600160401b03161115620029315760405162461bcd60e51b815260206004820152601760248201527f494e56414c49445f4d41585f4348414e47455f52415445000000000000000000604482015260640162000c32565b6200297c62002941848062007c19565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062006a1992505050565b620029bc5760405162461bcd60e51b815260206004820152600f60248201526e24a72b20a624a22fa6a7a724a5a2a960891b604482015260640162000c32565b620029ca8888888862006bbb565b620029e95760405162461bcd60e51b815260040162000c329062007c62565b600062002a3783620029fc868062007c19565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525062006d3092505050565b905062002a46600b8462006dfa565b506001600160a01b038381166000818152600d6020526040902080546001600160a01b03199081168e851617825560018201805482169093179092556002810180549092169284169290921790556003810162002aa58a8c8362007cef565b50846004820162002ab7828262007db7565b508690506008820162002acb828262007eea565b505042600b8201556001600160a01b038b81166000908152600f60205260409081902080546001600160a01b03191692871692909217909155518490600e9062002b19908d908d9062007c09565b90815260405190819003602001812080546001600160a01b039384166001600160a01b03199091161790558382169186811691908e16907faecd9fb95e79c75a3a1de93362c6be5fe6ab65770d8614be583884161cd8228d9062002b81908f908f9062007fba565b60405180910390a45050505050505050505050565b33411462002bb85760405162461bcd60e51b815260040162000c329062007fd0565b3a1562002bff5760405162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b604482015260640162000c32565b82600081900362002c11575062003026565b6012548181111562002ccd57815b8181101562002ccb57601280548062002c3c5762002c3c6200801d565b60008281526020812060046000199093019283020180546001600160a01b0319908116825560018201805490911690556002810180546001600160e81b0319169055600301559055601380548062002c985762002c986200801d565b60019003818190600052602060002001600062002cb69190620070bc565b905562002cc38162007a87565b905062002c1f565b505b6000805b8381101562002fc257600088888381811062002cf15762002cf162007a5b565b905060200201602081019062002d08919062007141565b6001600160a01b038082166000908152600f6020526040902054919250168062002d3457505062002faf565b84841062002eb25760126040518060c00160405280846001600160a01b0316815260200160006001600160a01b0316815260200160006001600160a01b031681526020018a8a8781811062002d8d5762002d8d62007a5b565b905060200201602081019062002da4919062007291565b6001600160401b039081168252600060208084018290526040938401829052855460018181018855968352818320865160049092020180546001600160a01b039283166001600160a01b031991821617825587840151828a018054918516919092161790558686015160028201805460608a015160808b01511515600160e01b0260ff60e01b1991909916600160a01b026001600160e01b03199092169386169390931717919091169590951790945560a0909501516003938401559386168152600d9093529082206013805494850181559092527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0909092019162002eab91018262008033565b5062002f9f565b60006012858154811062002eca5762002eca62007a5b565b6000918252602090912060049091020180546001600160a01b0319166001600160a01b038516178155905088888581811062002f0a5762002f0a62007a5b565b905060200201602081019062002f21919062007291565b6002820180546001600160401b0392909216600160a01b0267ffffffffffffffff60a01b199092169190911790556001600160a01b0382166000908152600d60205260409020601380546003909201918790811062002f845762002f8462007a5b565b90600052602060002001908162002f9c919062008033565b50505b62002faa8462007a87565b935050505b62002fba8162007a87565b905062002cd1565b5060405163126da76b60e11b8152611000906324db4ed69062002fee90601290601390600401620081e6565b600060405180830381600087803b1580156200300957600080fd5b505af11580156200301e573d6000803e3d6000fd5b505050505050505b50505050565b3361100114620030505760405162461bcd60e51b815260040162000c329062008299565b6001600160a01b038084166000908152600f602052604090205416806200308b5760405162461bcd60e51b815260040162000c329062007b2c565b6001600160a01b038082166000908152600d602052604090206002810154909116620030cb5760405162461bcd60e51b815260040162000c329062007acf565b42600a5484620030dc919062007b63565b10156200311f5760405162461bcd60e51b815260206004820152601060248201526f11559251115390d157d513d3d7d3d31160821b604482015260640162000c32565b600281015460075460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562003172573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003198919062007afc565b9050620031a58262006e18565b6000620031b6848388600062006ef6565b9050806000015483600a01541015620031d1578054600a8401555b8054600182015460028301546040516001600160a01b038816937fc0929f76bd4b0cbd3d2e68001c17b2b7ef24e7cb5b6e67c2b32453f2d51683b6936200322993919290916001600160f81b031690600090620082e2565b60405180910390a260028301546200324b906001600160a01b0316856200696f565b50505050505050565b600054610100900460ff16156200327f5760405162461bcd60e51b815260040162000c329062007a34565b6001600160a01b038084166000908152600d6020526040902060020154849116620032be5760405162461bcd60e51b815260040162000c329062007acf565b6001600160a01b038084166000908152600d6020526040902060020154849116620032fd5760405162461bcd60e51b815260040162000c329062007acf565b6001600160a01b0384166000908152600d6020526040902060090154849060ff1615620033605760405162461bcd60e51b815260206004820152601060248201526f1590531251105513d497d2905253115160821b604482015260640162000c32565b60008411620033aa5760405162461bcd60e51b81526020600482015260156024820152741253959053125117d4d210549154d7d05353d55395605a1b604482015260640162000c32565b6001600160a01b038087166000908152600d60209081526040808320815161014081018352815486168152600182015486169381019390935260028101549094169082015260038301805433949160608401916200340890620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200343690620078e2565b8015620034875780601f106200345b5761010080835404028352916020019162003487565b820191906000526020600020905b8154815290600101906020018083116200346957829003601f168201915b5050505050815260200160048201604051806080016040529081600082018054620034b290620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620034e090620078e2565b8015620035315780601f10620035055761010080835404028352916020019162003531565b820191906000526020600020905b8154815290600101906020018083116200351357829003601f168201915b505050505081526020016001820180546200354c90620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200357a90620078e2565b8015620035cb5780601f106200359f57610100808354040283529160200191620035cb565b820191906000526020600020905b815481529060010190602001808311620035ad57829003601f168201915b50505050508152602001600282018054620035e690620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200361490620078e2565b8015620036655780601f10620036395761010080835404028352916020019162003665565b820191906000526020600020905b8154815290600101906020018083116200364757829003601f168201915b505050505081526020016003820180546200368090620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620036ae90620078e2565b8015620036ff5780601f10620036d357610100808354040283529160200191620036ff565b820191906000526020600020905b815481529060010190602001808311620036e157829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b8154815260200190600101908083116200378b57505050919092525050506001600160a01b038089166000908152600d602090815260408083208151610140810183528154861681526001820154861693810193909352600281015490941690820152600383018054949550919390929160608401916200380c90620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200383a90620078e2565b80156200388b5780601f106200385f576101008083540402835291602001916200388b565b820191906000526020600020905b8154815290600101906020018083116200386d57829003601f168201915b5050505050815260200160048201604051806080016040529081600082018054620038b690620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620038e490620078e2565b8015620039355780601f10620039095761010080835404028352916020019162003935565b820191906000526020600020905b8154815290600101906020018083116200391757829003601f168201915b505050505081526020016001820180546200395090620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200397e90620078e2565b8015620039cf5780601f10620039a357610100808354040283529160200191620039cf565b820191906000526020600020905b815481529060010190602001808311620039b157829003601f168201915b50505050508152602001600282018054620039ea90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462003a1890620078e2565b801562003a695780601f1062003a3d5761010080835404028352916020019162003a69565b820191906000526020600020905b81548152906001019060200180831162003a4b57829003601f168201915b5050505050815260200160038201805462003a8490620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462003ab290620078e2565b801562003b035780601f1062003ad75761010080835404028352916020019162003b03565b820191906000526020600020905b81548152906001019060200180831162003ae557829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b81548152602001906001019080831162003b8f57505050505081525050905060035482604001516001600160a01b03166391faf0b4896040518263ffffffff1660e01b815260040162003be491815260200190565b602060405180830381865afa15801562003c02573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003c28919062007afc565b101562003c785760405162461bcd60e51b815260206004820152601b60248201527f494e56414c49445f524544454c45474154494f4e5f414d4f554e540000000000604482015260640162000c32565b8060c001511562003cdd57876001600160a01b0316836001600160a01b03161462003cdd5760405162461bcd60e51b815260206004820152601460248201527327a7262cafa9a2a6232fa222a622a3a0aa24a7a760611b604482015260640162000c32565b60408083015190516352e82ce560e11b81526001600160a01b038581166004830152602482018a9052600092169063a5d059ca906044016020604051808303816000875af115801562003d34573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003d5a919062007afc565b60408084015190516317066a5760e21b81526001600160a01b03878116600483015292935060009290911690635c19a95c90849060240160206040518083038185885af115801562003db0573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019062003dd7919062007afc565b604080518b8152602081018390529081018490529091506001600160a01b03808716918c8216918e16907ffdac6e81913996d95abcc289e90f2d8bd235487ce6fe6f821e7d21002a1915b49060600160405180910390a48a6001600160a01b0316856001600160a01b03160362003e535762003e538b62006854565b60408051600280825260608201835260009260208301908036833701905050905084604001518160008151811062003e8f5762003e8f62007a5b565b60200260200101906001600160a01b031690816001600160a01b03168152505083604001518160018151811062003eca5762003eca62007a5b565b6001600160a01b0390921660209283029190910190910152604051631d38f97960e11b815261200590633a71f2f29062003f0b9084908a9060040162007aa3565b600060405180830381600087803b15801562003f2657600080fd5b505af115801562003f3b573d6000803e3d6000fd5b50505050505050505050505050505050565b6060806012601381805480602002602001604051908101604052809291908181526020016000905b82821015620040015760008481526020908190206040805160c0810182526004860290920180546001600160a01b039081168452600180830154821685870152600283015491821693850193909352600160a01b81046001600160401b03166060850152600160e01b900460ff16151560808401526003015460a0830152908352909201910162003f75565b50505050915080805480602002602001604051908101604052809291908181526020016000905b82821015620040de5783829060005260206000200180546200404a90620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200407890620078e2565b8015620040c95780601f106200409d57610100808354040283529160200191620040c9565b820191906000526020600020905b815481529060010190602001808311620040ab57829003601f168201915b50505050508152602001906001019062004028565b505050509050915091509091565b3361100714620041105760405162461bcd60e51b815260040162000c32906200832d565b6000805461ff00191681556040517fedaeeae9aed70c4545d3ab0065713261c9cee8d6cf5c8b07f52f0a65fd91efda9190a1565b3361100114620041685760405162461bcd60e51b815260040162000c329062008299565b6001600160a01b038082166000908152600f60205260409020541680620041a35760405162461bcd60e51b815260040162000c329062007b2c565b6001600160a01b038082166000908152600d602052604090206002810154909116620041e35760405162461bcd60e51b815260040162000c329062007acf565b600281015460065460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562004236573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200425c919062007afc565b9050620042698262006e18565b6000600854426200427b919062007b63565b90508083600a015410156200429257600a83018190555b836001600160a01b03167fc0929f76bd4b0cbd3d2e68001c17b2b7ef24e7cb5b6e67c2b32453f2d51683b68284436001604051620042d49493929190620082e2565b60405180910390a26002830154620042f6906001600160a01b0316856200696f565b5050505050565b6000600e83836040516200431392919062007c09565b908152604051908190036020019020546001600160a01b031690505b92915050565b334114620043575760405162461bcd60e51b815260040162000c329062007fd0565b3a156200439e5760405162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b604482015260640162000c32565b60005460ff1615620043e95760405162461bcd60e51b81526020600482015260136024820152721053149150511657d253925512505312569151606a1b604482015260640162000c32565b6108fc6001908155686c6b935b8bbd400000600255670de0b6b3a7640000600355601d60045562093a806005556802b5e3af16b188000060065569021e19e0c9bab24000006007556202a3006008556303c26700600955621baf80600a556000805460ff19169091179055565b620044826040518060800160405280606081526020016060815260200160608152602001606081525090565b6001600160a01b0382166000908152600d602052604090819020815160808101909252600401805482908290620044b990620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620044e790620078e2565b8015620045385780601f106200450c5761010080835404028352916020019162004538565b820191906000526020600020905b8154815290600101906020018083116200451a57829003601f168201915b505050505081526020016001820180546200455390620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200458190620078e2565b8015620045d25780601f10620045a657610100808354040283529160200191620045d2565b820191906000526020600020905b815481529060010190602001808311620045b457829003601f168201915b50505050508152602001600282018054620045ed90620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200461b90620078e2565b80156200466c5780601f1062004640576101008083540402835291602001916200466c565b820191906000526020600020905b8154815290600101906020018083116200464e57829003601f168201915b505050505081526020016003820180546200468790620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620046b590620078e2565b8015620047065780601f10620046da5761010080835404028352916020019162004706565b820191906000526020600020905b815481529060010190602001808311620046e857829003601f168201915b5050505050815250509050919050565b600054610100900460ff1615620047415760405162461bcd60e51b815260040162000c329062007a34565b6001600160a01b038083166000908152600d6020526040902060020154839116620047805760405162461bcd60e51b815260040162000c329062007acf565b6001600160a01b038381166000908152600d6020526040808220600201549051635569f64b60e11b8152336004820152602481018690529192169063aad3ec96906044016020604051808303816000875af1158015620047e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200480a919062007afc565b9050336001600160a01b0316846001600160a01b03167ff7a40077ff7a04c7e61f6f26fb13774259ddf1b6bce9ecf26a8276cdd3992683836040516200485291815260200190565b60405180910390a350505050565b3361100714620048845760405162461bcd60e51b815260040162000c32906200832d565b620048f16040518060400160405280601081526020016f1d1c985b9cd9995c91d85cd31a5b5a5d60821b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b1562004a035760208114620049555760405162461bcd60e51b815260206004820152602360248201527f6c656e677468206f66207472616e736665724761734c696d6974206d69736d616044820152620e8c6d60eb1b606482015260840162000c32565b604080516020601f8401819004810282018101909252828152600091620049989185858083850183828082843760009201919091525092939250506200701f9050565b90506108fc811015620049fa5760405162461bcd60e51b8152602060048201526024808201527f746865207472616e736665724761734c696d6974206973206f7574206f662072604482015263616e676560e01b606482015260840162000c32565b60015562005833565b62004a746040518060400160405280601481526020017336b4b729b2b6332232b632b3b0ba34b7b721272160611b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b1562004b94576020811462004adc5760405162461bcd60e51b815260206004820152602760248201527f6c656e677468206f66206d696e53656c6644656c65676174696f6e424e42206d6044820152660d2e6dac2e8c6d60cb1b606482015260840162000c32565b604080516020601f840181900481028201810190925282815260009162004b1f9185858083850183828082843760009201919091525092939250506200701f9050565b9050683635c9adc5dea0000081101562004b8d5760405162461bcd60e51b815260206004820152602860248201527f746865206d696e53656c6644656c65676174696f6e424e42206973206f7574206044820152676f662072616e676560c01b606482015260840162000c32565b5062005833565b62004c07604051806040016040528060168152602001756d696e44656c65676174696f6e424e424368616e676560501b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b1562004d2c576020811462004c715760405162461bcd60e51b815260206004820152602960248201527f6c656e677468206f66206d696e44656c65676174696f6e424e424368616e6765604482015268040dad2e6dac2e8c6d60bb1b606482015260840162000c32565b604080516020601f840181900481028201810190925282815260009162004cb49185858083850183828082843760009201919091525092939250506200701f9050565b9050670de0b6b3a764000081101562004d235760405162461bcd60e51b815260206004820152602a60248201527f746865206d696e44656c65676174696f6e424e424368616e6765206973206f7560448201526974206f662072616e676560b01b606482015260840162000c32565b60035562005833565b62004d9d604051806040016040528060148152602001736d6178456c656374656456616c696461746f727360601b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b1562004eb7576020811462004e055760405162461bcd60e51b815260206004820152602760248201527f6c656e677468206f66206d6178456c656374656456616c696461746f7273206d6044820152660d2e6dac2e8c6d60cb1b606482015260840162000c32565b604080516020601f840181900481028201810190925282815260009162004e489185858083850183828082843760009201919091525092939250506200701f9050565b9050600181101562004eae5760405162461bcd60e51b815260206004820152602860248201527f746865206d6178456c656374656456616c696461746f7273206973206f7574206044820152676f662072616e676560c01b606482015260840162000c32565b60045562005833565b62004f206040518060400160405280600c81526020016b1d5b989bdb9914195c9a5bd960a21b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b156200501b576020811462004f785760405162461bcd60e51b815260206004820152601f60248201527f6c656e677468206f6620756e626f6e64506572696f64206d69736d6174636800604482015260640162000c32565b604080516020601f840181900481028201810190925282815260009162004fbb9185858083850183828082843760009201919091525092939250506200701f9050565b90506203f480811015620050125760405162461bcd60e51b815260206004820181905260248201527f74686520756e626f6e64506572696f64206973206f7574206f662072616e6765604482015260640162000c32565b60055562005833565b6200508b60405180604001604052806013815260200172191bdddb9d1a5b5954db185cda105b5bdd5b9d606a1b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b15620051b85760208114620050f25760405162461bcd60e51b815260206004820152602660248201527f6c656e677468206f6620646f776e74696d65536c617368416d6f756e74206d696044820152650e6dac2e8c6d60d31b606482015260840162000c32565b604080516020601f8401819004810282018101909252828152600091620051359185858083850183828082843760009201919091525092939250506200701f9050565b9050674563918244f40000811015801562005151575060075481105b620051af5760405162461bcd60e51b815260206004820152602760248201527f74686520646f776e74696d65536c617368416d6f756e74206973206f7574206f604482015266662072616e676560c81b606482015260840162000c32565b60065562005833565b6200522a60405180604001604052806015815260200174191bdd589b1954da59db94db185cda105b5bdd5b9d605a1b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b156200535c5760208114620052935760405162461bcd60e51b815260206004820152602860248201527f6c656e677468206f6620646f75626c655369676e536c617368416d6f756e74206044820152670dad2e6dac2e8c6d60c31b606482015260840162000c32565b604080516020601f8401819004810282018101909252828152600091620052d69185858083850183828082843760009201919091525092939250506200701f9050565b9050683635c9adc5dea000008110158015620052f3575060065481115b620053535760405162461bcd60e51b815260206004820152602960248201527f74686520646f75626c655369676e536c617368416d6f756e74206973206f7574604482015268206f662072616e676560b81b606482015260840162000c32565b60075562005833565b620053c96040518060400160405280601081526020016f646f776e74696d654a61696c54696d6560801b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b15620054ea57602081146200542d5760405162461bcd60e51b815260206004820152602360248201527f6c656e677468206f6620646f776e74696d654a61696c54696d65206d69736d616044820152620e8c6d60eb1b606482015260840162000c32565b604080516020601f8401819004810282018101909252828152600091620054709185858083850183828082843760009201919091525092939250506200701f9050565b90506202a300811015801562005487575060095481105b620054e15760405162461bcd60e51b8152602060048201526024808201527f74686520646f776e74696d654a61696c54696d65206973206f7574206f662072604482015263616e676560e01b606482015260840162000c32565b60085562005833565b6200555960405180604001604052806012815260200171646f75626c655369676e4a61696c54696d6560701b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b156200567f5760208114620055bf5760405162461bcd60e51b815260206004820152602560248201527f6c656e677468206f6620646f75626c655369676e4a61696c54696d65206d69736044820152640dac2e8c6d60db1b606482015260840162000c32565b604080516020601f8401819004810282018101909252828152600091620056029185858083850183828082843760009201919091525092939250506200701f9050565b90506283d600811015801562005619575060085481115b620056765760405162461bcd60e51b815260206004820152602660248201527f74686520646f75626c655369676e4a61696c54696d65206973206f7574206f666044820152652072616e676560d01b606482015260840162000c32565b60095562005833565b620056ea6040518060400160405280600e81526020016d6d617845766964656e636541676560901b81525085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929392505062006fc29050565b15620057fa57602081146200574c5760405162461bcd60e51b815260206004820152602160248201527f6c656e677468206f66206d617845766964656e6365416765206d69736d6174636044820152600d60fb1b606482015260840162000c32565b604080516020601f84018190048102820181019092528281526000916200578f9185858083850183828082843760009201919091525092939250506200701f9050565b905062093a80811015620057f15760405162461bcd60e51b815260206004820152602260248201527f746865206d617845766964656e6365416765206973206f7574206f662072616e604482015261676560f01b606482015260840162000c32565b600a5562005833565b60405162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b604482015260640162000c32565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e633848484846040516200586a94939291906200837b565b60405180910390a150505050565b33611001146200589c5760405162461bcd60e51b815260040162000c329062008299565b6000600e8484604051620058b292919062007c09565b908152604051908190036020019020546001600160a01b0316905080620058ed5760405162461bcd60e51b815260040162000c329062007b2c565b6001600160a01b038082166000908152600d6020526040902060028101549091166200592d5760405162461bcd60e51b815260040162000c329062007acf565b600281015460075460405163045bc4d160e41b815260048101919091526000916001600160a01b0316906345bc4d10906024016020604051808303816000875af115801562005980573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620059a6919062007afc565b9050620059b38262006e18565b6000620059c4848387600262006ef6565b9050806000015483600a01541015620059df578054600a8401555b805460018201546002808401546040516001600160a01b038916947fc0929f76bd4b0cbd3d2e68001c17b2b7ef24e7cb5b6e67c2b32453f2d51683b6946200322994919390926001600160f81b039091169190620082e2565b606080600062005a49600b62007024565b9050808510156200603d57831562005a62578362005a64565b805b935060008462005a75878462007b16565b1162005a8d5762005a87868362007b16565b62005a8f565b845b9050806001600160401b0381111562005aac5762005aac62007935565b60405190808252806020026020018201604052801562005ad6578160200160208202803683370190505b509350806001600160401b0381111562005af45762005af462007935565b60405190808252806020026020018201604052801562005b1e578160200160208202803683370190505b50925060005b818110156200603a57600062005b4862005b3f838a62007b63565b600b906200702f565b6001600160a01b038082166000908152600d6020908152604080832081516101408101835281548616815260018201548616938101939093526002810154909416908201526003830180549495509193909291606084019162005bab90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462005bd990620078e2565b801562005c2a5780601f1062005bfe5761010080835404028352916020019162005c2a565b820191906000526020600020905b81548152906001019060200180831162005c0c57829003601f168201915b505050505081526020016004820160405180608001604052908160008201805462005c5590620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462005c8390620078e2565b801562005cd45780601f1062005ca85761010080835404028352916020019162005cd4565b820191906000526020600020905b81548152906001019060200180831162005cb657829003601f168201915b5050505050815260200160018201805462005cef90620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462005d1d90620078e2565b801562005d6e5780601f1062005d425761010080835404028352916020019162005d6e565b820191906000526020600020905b81548152906001019060200180831162005d5057829003601f168201915b5050505050815260200160028201805462005d8990620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462005db790620078e2565b801562005e085780601f1062005ddc5761010080835404028352916020019162005e08565b820191906000526020600020905b81548152906001019060200180831162005dea57829003601f168201915b5050505050815260200160038201805462005e2390620078e2565b80601f016020809104026020016040519081016040528092919081815260200182805462005e5190620078e2565b801562005ea25780601f1062005e765761010080835404028352916020019162005ea2565b820191906000526020600020905b81548152906001019060200180831162005e8457829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b81548152602001906001019080831162005f2e575050505050815250509050806000015187848151811062005f675762005f6762007a5b565b60200260200101906001600160a01b031690816001600160a01b0316815250508060c00151620060005780604001516001600160a01b03166315d1f8986040518163ffffffff1660e01b8152600401602060405180830381865afa15801562005fd4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062005ffa919062007afc565b62006003565b60005b86848151811062006018576200601862007a5b565b602002602001018181525050505080620060329062007a87565b905062005b24565b50505b9250925092565b6001600160a01b038082166000908152600d60209081526040808320815161014081018352815486168152600182015486169381019390935260028101549094169082015260038301805492938493606093859384938493909183880191620060ad90620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620060db90620078e2565b80156200612c5780601f1062006100576101008083540402835291602001916200612c565b820191906000526020600020905b8154815290600101906020018083116200610e57829003601f168201915b50505050508152602001600482016040518060800160405290816000820180546200615790620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200618590620078e2565b8015620061d65780601f10620061aa57610100808354040283529160200191620061d6565b820191906000526020600020905b815481529060010190602001808311620061b857829003601f168201915b50505050508152602001600182018054620061f190620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200621f90620078e2565b8015620062705780601f10620062445761010080835404028352916020019162006270565b820191906000526020600020905b8154815290600101906020018083116200625257829003601f168201915b505050505081526020016002820180546200628b90620078e2565b80601f0160208091040260200160405190810160405280929190818152602001828054620062b990620078e2565b80156200630a5780601f10620062de576101008083540402835291602001916200630a565b820191906000526020600020905b815481529060010190602001808311620062ec57829003601f168201915b505050505081526020016003820180546200632590620078e2565b80601f01602080910402602001604051908101604052809291908181526020018280546200635390620078e2565b8015620063a45780601f106200637857610100808354040283529160200191620063a4565b820191906000526020600020905b8154815290600101906020018083116200638657829003601f168201915b505050919092525050508152604080516060808201835260088501546001600160401b038082168452600160401b82048116602080860191909152600160801b9092041683850152840191909152600984015460ff16151582840152600a84015490830152600b8301546080830152805161028081019182905260a09092019190600c84019060149082845b815481526020019060010190808311620064305750505091909252505081516040830151606084015160c085015160e090950151929c919b5099509297509550909350505050565b600054610100900460ff1615620064a35760405162461bcd60e51b815260040162000c329062007a34565b336000818152600d60205260409020600201546001600160a01b0316620064de5760405162461bcd60e51b815260040162000c329062007acf565b620064ee62002941838062007c19565b6200652e5760405162461bcd60e51b815260206004820152600f60248201526e24a72b20a624a22fa6a7a724a5a2a960891b604482015260640162000c32565b336000818152600d60205260409020600b810154429062006553906201518062007b63565b1115620065745760405162461bcd60e51b815260040162000c329062007b79565b836004820162006585828262007db7565b505042600b8201556040516001600160a01b038316907f85d6366b336ade7f106987ec7a8eac1e8799e508aeab045a39d2f63e0dc969d990600090a250505050565b3361100714620065eb5760405162461bcd60e51b815260040162000c32906200832d565b6000805461ff0019166101001781556040517f26d1807b479eaba249c1214b82e4b65bbb0cc73ee8a17901324b1ef1b5904e499190a1565b600054610100900460ff16156200664e5760405162461bcd60e51b815260040162000c329062007a34565b336000818152600d60205260409020600201546001600160a01b0316620066895760405162461bcd60e51b815260040162000c329062007acf565b620066978585858562006bbb565b620066b65760405162461bcd60e51b815260040162000c329062007c62565b60006001600160a01b0316600e8686604051620066d592919062007c09565b908152604051908190036020019020546001600160a01b031614620067365760405162461bcd60e51b81526020600482015260166024820152754455504c49434154455f564f54455f4144445245535360501b604482015260640162000c32565b336000818152600d60205260409020600b81015442906200675b906201518062007b63565b11156200677c5760405162461bcd60e51b815260040162000c329062007b79565b600381016200678d87898362007cef565b5042600b8201556040518290600e90620067ab908a908a9062007c09565b90815260405190819003602001812080546001600160a01b039384166001600160a01b0319909116179055908316907f783156582145bd0ff7924fae6953ba054cf1233eb60739a200ddb10de068ff0d906200680b908a908a9062007fba565b60405180910390a250505050505050565b60008383836040516020016200683593929190620083a6565b6040516020818303038152906040528051906020012090509392505050565b6001600160a01b0381166000908152600d60205260409020600981015460ff16156200687e575050565b6002548160020160009054906101000a90046001600160a01b03166001600160a01b031663169864896040518163ffffffff1660e01b8152600401602060405180830381865afa158015620068d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620068fd919062007afc565b10156200696b576200690f8162006e18565b80546040516372c4db0f60e11b81526001600160a01b0390911660048201526110009063e589b61e90602401600060405180830381600087803b1580156200695657600080fd5b505af115801562001e98573d6000803e3d6000fd5b5050565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110620069a857620069a862007a5b565b6001600160a01b0390921660209283029190910190910152604051631d38f97960e11b815261200590633a71f2f290620069e9908490869060040162007aa3565b600060405180830381600087803b15801562006a0457600080fd5b505af11580156200324b573d6000803e3d6000fd5b60008082905060038151108062006a31575060098151115b1562006a405750600092915050565b60418160008151811062006a585762006a5862007a5b565b016020015160f81c108062006a8a5750605a8160008151811062006a805762006a8062007a5b565b016020015160f81c115b1562006a995750600092915050565b60015b815181101562006bb157603082828151811062006abd5762006abd62007a5b565b016020015160f81c108062006aee5750603982828151811062006ae45762006ae462007a5b565b016020015160f81c115b801562006b3e5750604182828151811062006b0d5762006b0d62007a5b565b016020015160f81c108062006b3e5750605a82828151811062006b345762006b3462007a5b565b016020015160f81c115b801562006b8e5750606182828151811062006b5d5762006b5d62007a5b565b016020015160f81c108062006b8e5750607a82828151811062006b845762006b8462007a5b565b016020015160f81c115b1562006b9e575060009392505050565b62006ba98162007a87565b905062006a9c565b5060019392505050565b60006030841462006be05760405162461bcd60e51b815260040162000c329062007c62565b6060821462006c265760405162461bcd60e51b815260206004820152601160248201527024a72b20a624a22fa12629afa82927a7a360791b604482015260640162000c32565b600085854660405160200162006c3f93929190620083f7565b60408051808303601f1901815282825280516020918201208184528383019092529092506000919060208201818036833701905050905081602082015260008186868a8a60405160200162006c9995949392919062008409565b60408051808303601f190181526001808452838301909252925060009190602082018180368337019050509050815160016020830182602086016066600019fa62006ce357600080fd5b5060008160008151811062006cfc5762006cfc62007a5b565b016020015160f81c90506001811462006d1e5760009550505050505062006d28565b6001955050505050505b949350505050565b60008061200361dead60405162006d4790620070fb565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f08015801562006d8a573d6000803e3d6000fd5b509050806001600160a01b031663f399e22e3486866040518463ffffffff1660e01b815260040162006dbe92919062008441565b6000604051808303818588803b15801562006dd857600080fd5b505af115801562006ded573d6000803e3d6000fd5b5093979650505050505050565b600062006e11836001600160a01b0384166200703d565b9392505050565b6000600162006e28600b62007024565b62006e34919062007b16565b601154108015915062006e7f5760018201546040516001600160a01b03909116907f2afdc18061ac21cff7d9f11527ab9c8dec6fabd4edf6f894ed634bebd6a20d4590600090a25050565b600982015460ff1662006eb85760098201805460ff191660019081179091556011805460009062006eb290849062007b63565b90915550505b60018201546040516001600160a01b03909116907f4905ac32602da3fb8b4b7b00c285e5fc4c6c2308cc908b4a1e4e9625a29c90a390600090a25050565b60008062006f068685856200681c565b60008181526010602052604090206002810154919250906001600160f81b03161562006f5f5760405162461bcd60e51b815260206004820152600760248201526614d31054d2115160ca1b604482015260640162000c32565b60095462006f6e904262007b63565b815560018101869055600280820180546001600160f81b0319166001600160f81b03881690811782558692600160f81b90849081111562006fb35762006fb362007a1e565b02179055509695505050505050565b60008160405160200162006fd7919062008467565b604051602081830303815290604052805190602001208360405160200162007000919062008467565b6040516020818303038152906040528051906020012014905092915050565b015190565b60006200432f825490565b600062006e1183836200708f565b600081815260018301602052604081205462007086575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200432f565b5060006200432f565b6000826000018281548110620070a957620070a962007a5b565b9060005260206000200154905092915050565b508054620070ca90620078e2565b6000825580601f10620070db575050565b601f01602090049060005260206000209081019062001270919062007109565b610e96806200848683390190565b5b808211156200712057600081556001016200710a565b5090565b80356001600160a01b03811681146200713c57600080fd5b919050565b6000602082840312156200715457600080fd5b62006e118262007124565b6000806000606084860312156200717557600080fd5b620071808462007124565b9250602084013591506040840135600381106200719c57600080fd5b809150509250925092565b60008083601f840112620071ba57600080fd5b5081356001600160401b03811115620071d257600080fd5b6020830191508360208260051b8501011115620071ee57600080fd5b9250929050565b6000806000604084860312156200720b57600080fd5b83356001600160401b038111156200722257600080fd5b6200723086828701620071a7565b90945092506200724590506020850162007124565b90509250925092565b600080604083850312156200726257600080fd5b6200726d8362007124565b946020939093013593505050565b6001600160401b03811681146200127057600080fd5b600060208284031215620072a457600080fd5b813562006e11816200727b565b60008083601f840112620072c457600080fd5b5081356001600160401b03811115620072dc57600080fd5b602083019150836020828501011115620071ee57600080fd5b6000608082840312156200730857600080fd5b50919050565b600080600080600080600087890360e08112156200732b57600080fd5b620073368962007124565b975060208901356001600160401b03808211156200735357600080fd5b620073618c838d01620072b1565b909950975060408b01359150808211156200737b57600080fd5b620073898c838d01620072b1565b90975095508591506060605f1984011215620073a457600080fd5b60608b01945060c08b0135925080831115620073bf57600080fd5b5050620073cf8a828b01620072f5565b91505092959891949750929550565b60008060008060408587031215620073f557600080fd5b84356001600160401b03808211156200740d57600080fd5b6200741b88838901620071a7565b909650945060208701359150808211156200743557600080fd5b506200744487828801620071a7565b95989497509550505050565b6000806000606084860312156200746657600080fd5b620074718462007124565b95602085013595506040909401359392505050565b6000806000606084860312156200749c57600080fd5b620074a78462007124565b9250620074b76020850162007124565b9150604084013590509250925092565b60005b83811015620074e4578181015183820152602001620074ca565b50506000910152565b6000815180845262007507816020860160208601620074c7565b601f01601f19169290920160200192915050565b600081518084526020808501808196508360051b8101915082860160005b858110156200756757828403895262007554848351620074ed565b9885019893509084019060010162007539565b5091979650505050505050565b6040808252835182820181905260009190606090818501906020808901865b83811015620075fa57815180516001600160a01b03908116875284820151811685880152888201511688870152868101516001600160401b03168787015260808082015115159087015260a0908101519086015260c0909401939082019060010162007593565b505086830390870152506200761081876200751b565b979650505050505050565b600080602083850312156200762f57600080fd5b82356001600160401b038111156200764657600080fd5b6200765485828601620072b1565b90969095509350505050565b6020815260008251608060208401526200767e60a0840182620074ed565b90506020840151601f19808584030160408601526200769e8383620074ed565b92506040860151915080858403016060860152620076bd8383620074ed565b9250606086015191508085840301608086015250620076dd8282620074ed565b95945050505050565b60008060008060408587031215620076fd57600080fd5b84356001600160401b03808211156200771557600080fd5b6200772388838901620072b1565b909650945060208701359150808211156200773d57600080fd5b506200744487828801620072b1565b6000806000604084860312156200776257600080fd5b83356001600160401b038111156200777957600080fd5b6200778786828701620072b1565b909790965060209590950135949350505050565b60008060408385031215620077af57600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015620077f95781516001600160a01b031687529582019590820190600101620077d2565b509495945050505050565b606081526000620078196060830186620077be565b82810360208481019190915285518083528682019282019060005b81811015620078525784518352938301939183019160010162007834565b5050809350505050826040830152949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906200789690830186620074ed565b931515606083015250608001529392505050565b600060208284031215620078bd57600080fd5b81356001600160401b03811115620078d457600080fd5b62006d2884828501620072f5565b600181811c90821680620078f757607f821691505b6020821081036200730857634e487b7160e01b600052602260045260246000fd5b600060033d1115620079325760046000803e5060005160e01c5b90565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171562007973576200797362007935565b6040525050565b600060443d1015620079895790565b6040516003193d81016004833e81513d6001600160401b038160248401118184111715620079b957505050505090565b8285019150815181811115620079d25750505050505090565b843d8701016020828501011115620079ed5750505050505090565b620079fe602082860101876200794b565b509095945050505050565b60208152600062006e116020830184620074ed565b634e487b7160e01b600052602160045260246000fd5b6020808252600d908201526c14d51052d157d4d513d4141151609a1b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820162007a9c5762007a9c62007a71565b5060010190565b60408152600062007ab86040830185620077be565b905060018060a01b03831660208301529392505050565b6020808252601390820152721590531251105513d497d393d517d1561254d5606a1b604082015260600190565b60006020828403121562007b0f57600080fd5b5051919050565b818103818111156200432f576200432f62007a71565b60208082526019908201527f494e56414c49445f434f4e53454e5355535f4144445245535300000000000000604082015260600190565b808201808211156200432f576200432f62007a71565b6020808252601590820152745550444154455f544f4f5f4652455155454e544c5960581b604082015260600190565b60208082526017908201527f494e56414c49445f434f4d4d495353494f4e5f52415445000000000000000000604082015260600190565b6001600160401b0382811682821603908082111562007c025762007c0262007a71565b5092915050565b8183823760009101908152919050565b6000808335601e1984360301811262007c3157600080fd5b8301803591506001600160401b0382111562007c4c57600080fd5b602001915036819003821315620071ee57600080fd5b602080825260149082015273494e56414c49445f564f54455f4144445245535360601b604082015260600190565b601f8211156200126d57600081815260208120601f850160051c8101602086101562007cb95750805b601f850160051c820191505b8181101562001e985782815560010162007cc5565b600019600383901b1c191660019190911b1790565b6001600160401b0383111562007d095762007d0962007935565b62007d218362007d1a8354620078e2565b8362007c90565b6000601f84116001811462007d54576000851562007d3f5750838201355b62007d4b868262007cda565b845550620042f6565b600083815260209020601f19861690835b8281101562007d87578685013582556020948501946001909201910162007d65565b508682101562007da55760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b62007dc3828362007c19565b6001600160401b0381111562007ddd5762007ddd62007935565b62007df58162007dee8554620078e2565b8562007c90565b6000601f82116001811462007e28576000831562007e135750838201355b62007e1f848262007cda565b86555062007e85565b600085815260209020601f19841690835b8281101562007e5b578685013582556020948501946001909201910162007e39565b508482101562007e795760001960f88660031b161c19848701351681555b505060018360011b0185555b5050505062007e98602083018362007c19565b62007ea881836001860162007cef565b505062007eb9604083018362007c19565b62007ec981836002860162007cef565b505062007eda606083018362007c19565b6200302681836003860162007cef565b813562007ef7816200727b565b6001600160401b03811690508154816001600160401b03198216178355602084013562007f24816200727b565b6fffffffffffffffff0000000000000000604091821b166fffffffffffffffffffffffffffffffff1983168417811785559085013562007f64816200727b565b6001600160c01b0319929092169092179190911760809190911b67ffffffffffffffff60801b1617905550565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60208152600062006d2860208301848662007f91565b6020808252602d908201527f746865206d6573736167652073656e646572206d75737420626520746865206260408201526c3637b1b590383937b23ab1b2b960991b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b8181036200803f575050565b6200804b8254620078e2565b6001600160401b0381111562008065576200806562007935565b6200807d81620080768454620078e2565b8462007c90565b6000601f821160018114620080b057600083156200809b5750848201545b620080a7848262007cda565b855550620042f6565b600085815260209020601f19841690600086815260209020845b83811015620080ec5782860154825560019586019590910190602001620080ca565b50858310156200810b5781850154600019600388901b60f8161c191681555b5050505050600190811b01905550565b600081548084526020808501808196506005915083821b81016000878152848120815b87811015620081d7578484038b528282546200815a81620078e2565b808752600182811680156200817857600181146200819257620081bf565b60ff198416898d01528215158b1b89018c019450620081bf565b8688528b8820885b84811015620081b75781548b82018f0152908301908d016200819a565b8a018d019550505b509d8a019d929650505091909101906001016200813e565b50919998505050505050505050565b600060408083018184528086548083526060925082860191508760005260208060002060005b83811015620082835781546001600160a01b039081168652600183015481168487015260028301548082168988015260a081811c6001600160401b0316888a01529150620082646080880160ff8360e01c1615159052565b5060038301549086015260c0909401936004909101906001016200820c565b505086830390870152506200761081876200811b565b60208082526029908201527f746865206d6573736167652073656e646572206d75737420626520736c6173686040820152680818dbdb9d1c9858dd60ba1b606082015260800190565b848152602081018490526001600160f81b038316604082015260808101600383106200831e57634e487b7160e01b600052602160045260246000fd5b82606083015295945050505050565b6020808252602e908201527f746865206d6573736167652073656e646572206d75737420626520676f76657260408201526d1b985b98d94818dbdb9d1c9858dd60921b606082015260800190565b6040815260006200839160408301868862007f91565b82810360208401526200761081858762007f91565b6bffffffffffffffffffffffff198460601b168152826014820152600060038310620083e257634e487b7160e01b600052602160045260246000fd5b5060f89190911b603482015260350192915050565b82848237909101908152602001919050565b600086516200841d818460208b01620074c7565b82018587823760009086019081528385823760009301928352509095945050505050565b6001600160a01b038316815260406020820181905260009062006d2890830184620074ed565b600082516200847b818460208701620074c7565b919091019291505056fe608060405260405162000e9638038062000e96833981016040819052620000269162000497565b828162000036828260006200004d565b50620000449050826200008a565b505050620005ca565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620001691760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e6f60279139620002f8565b9392505050565b60006200018060008051602062000e4f83398151915260001b6200037760201b620001951760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e4f83398151915260001b6200037760201b620001951760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b620001981760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620001951760201c565b6060600080856001600160a01b03168560405162000317919062000577565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fd578251600003620003f5576001600160a01b0385163b620003f55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000409565b62000409838362000411565b949350505050565b815115620004225781518083602001fd5b8060405162461bcd60e51b8152600401620001f1919062000595565b80516001600160a01b03811681146200045657600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048e57818101518382015260200162000474565b50506000910152565b600080600060608486031215620004ad57600080fd5b620004b8846200043e565b9250620004c8602085016200043e565b60408501519092506001600160401b0380821115620004e657600080fd5b818601915086601f830112620004fb57600080fd5b8151818111156200051057620005106200045b565b604051601f8201601f19908116603f011681019083821181831017156200053b576200053b6200045b565b816040528281528960208487010111156200055557600080fd5b6200056883602083016020880162000471565b80955050505050509250925092565b600082516200058b81846020870162000471565b9190910192915050565b6020815260008251806020840152620005b681604085016020870162000471565b601f01601f19169190910160400192915050565b61087580620005da6000396000f3fe60806040523661001357610011610017565b005b6100115b61001f6101a7565b6001600160a01b0316330361015f5760606001600160e01b0319600035166364d3180d60e11b810161005a576100536101da565b9150610157565b63587086bd60e11b6001600160e01b031982160161007a57610053610231565b63070d7c6960e41b6001600160e01b031982160161009a57610053610277565b621eb96f60e61b6001600160e01b03198216016100b9576100536102a8565b63a39f25e560e01b6001600160e01b03198216016100d9576100536102e8565b60405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b815160208301f35b6101676102fc565b565b606061018e83836040518060600160405280602781526020016108426027913961030c565b9392505050565b90565b6001600160a01b03163b151590565b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b60606101e4610384565b60006101f33660048184610695565b81019061020091906106db565b905061021d8160405180602001604052806000815250600061038f565b505060408051602081019091526000815290565b60606000806102433660048184610695565b810190610250919061070c565b915091506102608282600161038f565b604051806020016040528060008152509250505090565b6060610281610384565b60006102903660048184610695565b81019061029d91906106db565b905061021d816103bb565b60606102b2610384565b60006102bc6101a7565b604080516001600160a01b03831660208201529192500160405160208183030381529060405291505090565b60606102f2610384565b60006102bc610412565b610167610307610412565b610421565b6060600080856001600160a01b03168560405161032991906107f2565b600060405180830381855af49150503d8060008114610364576040519150601f19603f3d011682016040523d82523d6000602084013e610369565b606091505b509150915061037a86838387610445565b9695505050505050565b341561016757600080fd5b610398836104c6565b6000825111806103a55750805b156103b6576103b48383610169565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103e46101a7565b604080516001600160a01b03928316815291841660208301520160405180910390a161040f81610506565b50565b600061041c6105af565b905090565b3660008037600080366000845af43d6000803e808015610440573d6000f35b3d6000fd5b606083156104b45782516000036104ad576001600160a01b0385163b6104ad5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161014e565b50816104be565b6104be83836105d7565b949350505050565b6104cf81610601565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661056b5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b606482015260840161014e565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc6101cb565b8151156105e75781518083602001fd5b8060405162461bcd60e51b815260040161014e919061080e565b6001600160a01b0381163b61066e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b606482015260840161014e565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61058e565b600080858511156106a557600080fd5b838611156106b257600080fd5b5050820193919092039150565b80356001600160a01b03811681146106d657600080fd5b919050565b6000602082840312156106ed57600080fd5b61018e826106bf565b634e487b7160e01b600052604160045260246000fd5b6000806040838503121561071f57600080fd5b610728836106bf565b9150602083013567ffffffffffffffff8082111561074557600080fd5b818501915085601f83011261075957600080fd5b81358181111561076b5761076b6106f6565b604051601f8201601f19908116603f01168101908382118183101715610793576107936106f6565b816040528281528860208487010111156107ac57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b838110156107e95781810151838201526020016107d1565b50506000910152565b600082516108048184602087016107ce565b9190910192915050565b602081526000825180602084015261082d8160408501602087016107ce565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a" + }, + "0x0000000000000000000000000000000000002003": { + "balance": "0x0", + "code": "0x6080604052600436106102675760003560e01c806375d47a0a11610144578063bee8380e116100b6578063dd62ed3e1161007a578063dd62ed3e146106d7578063df8079e9146106f7578063e336ac441461070d578063f399e22e14610743578063f9a2bbc714610756578063fd6a68791461076c57600080fd5b8063bee8380e1461062e578063c2cde2b214610644578063c81b166214610664578063d241c1ea1461067a578063dc927faf146106c157600080fd5b8063a1a11bf511610108578063a1a11bf514610582578063a457c2d714610598578063a5d059ca146105b8578063a9059cbb146105d8578063aa82dce1146105f8578063aad3ec961461060e57600080fd5b806375d47a0a1461050b5780637e434d541461052157806391faf0b41461053757806395d89b41146105575780639dc092621461056c57600080fd5b80633a5381b5116101dd57806351e80672116101a157806351e80672146104615780635c19a95c146104775780635e607d761461048a578063647df7591461049f5780636e47b482146104bf57806370a08231146104d557600080fd5b80633a5381b5146103d557806343756e5c146103f557806345bc4d101461040b5780634d99dd161461042b57806351b4dce31461044b57600080fd5b8063169864891161022f578063169864891461033957806318160ddd1461034e57806323b872dd146103635780632808702814610383578063313ce5671461039957806339509351146103b557600080fd5b806306fdde031461026c5780630913db4714610297578063095ea7b3146102c55780630e2374a5146102f557806315d1f89814610323575b600080fd5b34801561027857600080fd5b50610281610782565b60405161028e9190611f2d565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004611f78565b610814565b60405190815260200161028e565b3480156102d157600080fd5b506102e56102e0366004611f9c565b61083c565b604051901515815260200161028e565b34801561030157600080fd5b5061030b61200181565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506102b760985481565b34801561034557600080fd5b506102b7610854565b34801561035a57600080fd5b506067546102b7565b34801561036f57600080fd5b506102e561037e366004611fc8565b61087d565b34801561038f57600080fd5b5061030b61200581565b3480156103a557600080fd5b506040516012815260200161028e565b3480156103c157600080fd5b506102e56103d0366004611f9c565b6108a1565b3480156103e157600080fd5b5060975461030b906001600160a01b031681565b34801561040157600080fd5b5061030b61100181565b34801561041757600080fd5b506102b7610426366004612009565b6108c3565b34801561043757600080fd5b506102b7610446366004611f9c565b610a8a565b34801561045757600080fd5b5061030b61200681565b34801561046d57600080fd5b5061030b61200081565b6102b7610485366004611f78565b610d2f565b61049d610498366004612022565b610d9b565b005b3480156104ab57600080fd5b506102b76104ba366004612009565b610e5d565b3480156104cb57600080fd5b5061030b61100581565b3480156104e157600080fd5b506102b76104f0366004611f78565b6001600160a01b031660009081526065602052604090205490565b34801561051757600080fd5b5061030b61100881565b34801561052d57600080fd5b5061030b61200381565b34801561054357600080fd5b506102b7610552366004612009565b610e8b565b34801561056357600080fd5b50610281610eb5565b34801561057857600080fd5b5061030b61100781565b34801561058e57600080fd5b5061030b61100681565b3480156105a457600080fd5b506102e56105b3366004611f9c565b610ec4565b3480156105c457600080fd5b506102b76105d3366004611f9c565b610f3f565b3480156105e457600080fd5b506102e56105f3366004611f9c565b61115c565b34801561060457600080fd5b5061030b61200281565b34801561061a57600080fd5b506102b7610629366004611f9c565b61116a565b34801561063a57600080fd5b506102b761271081565b34801561065057600080fd5b506102b761065f366004611f78565b61151a565b34801561067057600080fd5b5061030b61100281565b34801561068657600080fd5b5061069a610695366004611f9c565b611538565b6040805183518152602080850151908201529281015190830152606082015260800161028e565b3480156106cd57600080fd5b5061030b61100381565b3480156106e357600080fd5b506102b76106f236600461204c565b6115e8565b34801561070357600080fd5b5061030b61200481565b34801561071957600080fd5b506102b7610728366004611f78565b6001600160a01b03166000908152609b602052604090205490565b61049d61075136600461209b565b611613565b34801561076257600080fd5b5061030b61100081565b34801561077857600080fd5b5061030b61100481565b6060606880546107919061215f565b80601f01602080910402602001604051908101604052809291908181526020018280546107bd9061215f565b801561080a5780601f106107df5761010080835404028352916020019161080a565b820191906000526020600020905b8154815290600101906020018083116107ed57829003601f168201915b5050505050905090565b6001600160a01b03811660009081526065602052604081205461083690610e8b565b92915050565b60003361084a8185856117c7565b5060019392505050565b6097546001600160a01b031660009081526065602052604081205461087890610e8b565b905090565b60003361088b85828561180f565b610896858585611889565b506001949350505050565b60003361084a8185856108b483836115e8565b6108be91906121a9565b6117c7565b600033612002146108ef5760405162461bcd60e51b81526004016108e6906121bc565b60405180910390fd5b6097546001600160a01b03166000908152606560205260408120549061091484610e5d565b90508181116109235780610925565b815b609754909150600090610941906001600160a01b0316836118d1565b90507f0a6331e5cfe25333c065863fddcbcd3c103d07a3aaa549b327736ccb1e7b3cab8160405161097491815260200190565b60405180910390a160006120026001600160a01b031663e8f67c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e291906121f3565b905060006110026001600160a01b03168284604051600060405180830381858888f193505050503d8060008114610a35576040519150601f19603f3d011682016040523d82523d6000602084013e610a3a565b606091505b5050905080610a7d5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016108e6565b509093505050505b919050565b60003361200214610aad5760405162461bcd60e51b81526004016108e6906121bc565b81600003610aeb5760405162461bcd60e51b815260206004820152600b60248201526a16915493d7d05353d5539560aa1b60448201526064016108e6565b6001600160a01b038316600090815260656020526040902054821115610b4a5760405162461bcd60e51b8152602060048201526014602482015273494e53554646494349454e545f42414c414e434560601b60448201526064016108e6565b6001600160a01b0383166000908152609b602052604081208054849290610b729084906121a9565b9091555060009050610b8484846118d1565b905060006120026001600160a01b031663fc0c5ff16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bec91906121f3565b610bf690426121a9565b6040805160608101825286815260208101859052908101829052909150600086610c1f81611906565b60405160609290921b6bffffffffffffffffffffffff19166020830152603482015260540160408051601f19818403018152918152815160209283012060008181526099845282812086518155868501516001820155868401516002909101556001600160a01b038b168152609a9093529120909150610cd690828154600160801b90819004600f0b6000818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b604080830151815188815260208101879052918201526001600160a01b038816907fa189391ea8e7d76922feb7ee566a77c6f09c171b6eced3054282dec6f0993c189060600160405180910390a2509195945050505050565b60003361200214610d525760405162461bcd60e51b81526004016108e6906121bc565b34600003610d915760405162461bcd60e51b815260206004820152600c60248201526b16915493d7d1115413d4d25560a21b60448201526064016108e6565b610836823461192e565b3361200214610dbc5760405162461bcd60e51b81526004016108e6906121bc565b346000612710610dd667ffffffffffffffff85168461220c565b610de09190612223565b90506000610dee8284612245565b90508060986000828254610e0291906121a9565b9091555050609754610e1d906001600160a01b031683611987565b5060408051828152602081018490527ffb0e1482d62102ab9594f69d4c6d693749e3e2bf1c21af272f5456b2d5a4f6b5910160405180910390a150505050565b6000609854600003610e7157506000919050565b609854606754610e81908461220c565b6108369190612223565b6000610e9660675490565b600003610ea557506000919050565b606754609854610e81908461220c565b6060606980546107919061215f565b60003381610ed282866115e8565b905083811015610f325760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108e6565b61089682868684036117c7565b60003361200214610f625760405162461bcd60e51b81526004016108e6906121bc565b81600003610fa05760405162461bcd60e51b815260206004820152600b60248201526a16915493d7d05353d5539560aa1b60448201526064016108e6565b6001600160a01b038316600090815260656020526040902054821115610fff5760405162461bcd60e51b8152602060048201526014602482015273494e53554646494349454e545f42414c414e434560601b60448201526064016108e6565b600061100b84846118d1565b905060006120026001600160a01b031663e8f67c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561104f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061107391906121f3565b905060006120026001600160a01b03168284604051600060405180830381858888f193505050503d80600081146110c6576040519150601f19603f3d011682016040523d82523d6000602084013e6110cb565b606091505b505090508061110e5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b60448201526064016108e6565b60408051868152602081018590526001600160a01b038816917f6377e6852c3c3eb914806be9085171e0f4e00da79573f3f740695326ba92a612910160405180910390a25090949350505050565b60003361084a818585611889565b6000336120021461118d5760405162461bcd60e51b81526004016108e6906121bc565b6111956119b0565b6001600160a01b0383166000908152609a6020526040902054600f81810b600160801b909204900b036000036112015760405162461bcd60e51b81526020600482015260116024820152701393d7d5539093d39117d49154555154d5607a1b60448201526064016108e6565b81158061123557506001600160a01b0383166000908152609a6020526040902054600f81810b600160801b909204900b0382115b61123f5781611269565b6001600160a01b0383166000908152609a6020526040902054600f81810b600160801b909204900b035b91506000805b831561134c576001600160a01b0385166000908152609a6020526040812061129690611a09565b600081815260996020908152604091829020825160608101845281548152600182015492810192909252600201549181018290529192504210156112db57505061134c565b80516112e790856121a9565b93508060200151836112f991906121a9565b6001600160a01b0388166000908152609a6020526040902090935061131d90611a5d565b506000828152609960205260408120818155600181018290556002015561134386612258565b9550505061126f565b8160000361139c5760405162461bcd60e51b815260206004820152601b60248201527f4e4f5f434c41494d41424c455f554e424f4e445f52455155455354000000000060448201526064016108e6565b6001600160a01b0385166000908152609b6020526040812080548492906113c4908490612245565b9250508190555060006120026001600160a01b031663e8f67c3b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561140d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143191906121f3565b90506000866001600160a01b03168284604051600060405180830381858888f193505050503d8060008114611482576040519150601f19603f3d011682016040523d82523d6000602084013e611487565b606091505b50509050806114c75760405162461bcd60e51b815260206004820152600c60248201526b10d310525357d1905253115160a21b60448201526064016108e6565b60408051858152602081018590526001600160a01b038916917f130fffc7b37a23444102b7eecbea1b84036ad5d0e91896470aba6ac3d01a064b910160405180910390a250909250505061083660018055565b6001600160a01b0381166000908152609c6020526040812054610836565b61155c60405180606001604052806000815260200160008152602001600081525090565b6001600160a01b0383166000908152609a6020526040812081906115809085611adc565b60008181526099602090815260408083206001600160a01b038a168452609a9092529091205491925090600f81810b600160801b909204900b036040805160608101825283548152600184015460208201526002909301549083015290969095509350505050565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b600054610100900460ff16158080156116335750600054600160ff909116105b8061164d5750303b15801561164d575060005460ff166001145b6116b05760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016108e6565b6000805460ff1916600117905580156116d3576000805461ff0019166101001790555b33612002146116f45760405162461bcd60e51b81526004016108e6906121bc565b600082604051602001611707919061226f565b604051602081830303815290604052905060008360405160200161172b91906122ae565b60405160208183030381529060405290506117468282611b4d565b609780546001600160a01b0319166001600160a01b03871617905534600003611771576117716122d8565b61177a34611b8d565b505080156117c2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b60405162461bcd60e51b815260206004820152601e60248201527f7374424e4220617070726f7665206973206e6f7420737570706f72746564000060448201526064016108e6565b600061181b84846115e8565b9050600019811461188357818110156118765760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016108e6565b61188384848484036117c7565b50505050565b60405162461bcd60e51b815260206004820152601f60248201527f7374424e42207472616e73666572206973206e6f7420737570706f727465640060448201526064016108e6565b60006118dc82610e8b565b90506118e88383611c42565b80609860008282546118fa9190612245565b90915550909392505050565b6001600160a01b0381166000908152609c602052604090208054600181018255905b50919050565b600061193a8383611987565b60408051828152602081018590529192506001600160a01b038516917f9a8f44850296624dadfd9c246d17e47171d35727a181bd090aa14bbbe00238bb910160405180910390a292915050565b600061199282610e5d565b905061199e8382611d76565b81609860008282546118fa91906121a9565b600260015403611a025760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108e6565b6002600155565b6000611a248254600f81810b600160801b909204900b131590565b15611a4257604051631ed9509560e11b815260040160405180910390fd5b508054600f0b60009081526001909101602052604090205490565b6000611a788254600f81810b600160801b909204900b131590565b15611a9657604051631ed9509560e11b815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b600080611aff611aeb84611e37565b8554611afa9190600f0b6122ee565b611ea5565b8454909150600160801b9004600f90810b9082900b12611b3257604051632d0483c560e21b815260040160405180910390fd5b600f0b60009081526001939093016020525050604090205490565b600054610100900460ff16611b745760405162461bcd60e51b81526004016108e690612316565b6068611b8083826123af565b5060696117c282826123af565b600054610100900460ff16611bb45760405162461bcd60e51b81526004016108e690612316565b6097546001600160a01b0316611bcc57611bcc6122d8565b60675415611bdc57611bdc6122d8565b609754611bf2906001600160a01b031682611d76565b609881905560975460408051838152602081018490526001600160a01b03909216917f9a8f44850296624dadfd9c246d17e47171d35727a181bd090aa14bbbe00238bb910160405180910390a250565b6001600160a01b038216611ca25760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016108e6565b6001600160a01b03821660009081526065602052604090205481811015611d165760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108e6565b6001600160a01b03831660008181526065602090815260408083208686039055606780548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b6001600160a01b038216611dcc5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016108e6565b8060676000828254611dde91906121a9565b90915550506001600160a01b0382166000818152606560209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b60006001600160ff1b03821115611ea15760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b60648201526084016108e6565b5090565b80600f81900b8114610a855760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016108e6565b60005b83811015611f24578181015183820152602001611f0c565b50506000910152565b6020815260008251806020840152611f4c816040850160208701611f09565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611f7557600080fd5b50565b600060208284031215611f8a57600080fd5b8135611f9581611f60565b9392505050565b60008060408385031215611faf57600080fd5b8235611fba81611f60565b946020939093013593505050565b600080600060608486031215611fdd57600080fd5b8335611fe881611f60565b92506020840135611ff881611f60565b929592945050506040919091013590565b60006020828403121561201b57600080fd5b5035919050565b60006020828403121561203457600080fd5b813567ffffffffffffffff81168114611f9557600080fd5b6000806040838503121561205f57600080fd5b823561206a81611f60565b9150602083013561207a81611f60565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600080604083850312156120ae57600080fd5b82356120b981611f60565b9150602083013567ffffffffffffffff808211156120d657600080fd5b818501915085601f8301126120ea57600080fd5b8135818111156120fc576120fc612085565b604051601f8201601f19908116603f0116810190838211818310171561212457612124612085565b8160405282815288602084870101111561213d57600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b600181811c9082168061217357607f821691505b60208210810361192857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b8082018082111561083657610836612193565b6020808252601f908201527f746865206d73672073656e646572206d757374206265207374616b6548756200604082015260600190565b60006020828403121561220557600080fd5b5051919050565b808202811582820484141761083657610836612193565b60008261224057634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561083657610836612193565b60008161226757612267612193565b506000190190565b65039ba30b5b2960d51b815260008251612290816006850160208701611f09565b660818dc99591a5d60ca1b6006939091019283015250600d01919050565b611cdd60f21b8152600082516122cb816002850160208701611f09565b9190910160020192915050565b634e487b7160e01b600052600160045260246000fd5b808201828112600083128015821682158216171561230e5761230e612193565b505092915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b601f8211156117c257600081815260208120601f850160051c810160208610156123885750805b601f850160051c820191505b818110156123a757828155600101612394565b505050505050565b815167ffffffffffffffff8111156123c9576123c9612085565b6123dd816123d7845461215f565b84612361565b602080601f83116001811461241257600084156123fa5750858301515b600019600386901b1c1916600185901b1785556123a7565b600085815260208120601f198616915b8281101561244157888601518255948401946001909101908401612422565b508582101561245f5787850151600019600388901b60f8161c191681555b5050505050600190811b0190555056fea164736f6c6343000812000a" + }, + "0x0000000000000000000000000000000000002004": { + "balance": "0x0", + "code": "0x60806040526004361061046c5760003560e01c80637d5e81e21161024a578063c59057e411610139578063e23a9a52116100b6578063f8ce560a1161007a578063f8ce560a14610f77578063f9a2bbc714610f97578063fc0c546a14610fad578063fd6a687914610fce578063fe0d94c114610fe457600080fd5b8063e23a9a5214610e20578063ea0217cf14610eeb578063eb9019d414610f0b578063ece40cc114610f2b578063f23a6e6114610f4b57600080fd5b8063dc927faf116100fd578063dc927faf14610d5a578063dd4e2ba514610d70578063ddf0b00914610db6578063deaaa7cc14610dd6578063df8079e914610e0a57600080fd5b8063c59057e414610cc5578063c81b166214610ce5578063d07f91e914610cfb578063d33219b414610d1b578063da95691a14610d3a57600080fd5b8063a890c910116101c7578063b33e987b1161018b578063b33e987b14610c3c578063b58131b014610c51578063bc197c8114610c66578063c01f9e3714610c92578063c28bc2fa14610cb257600080fd5b8063a890c91014610ba9578063aa82dce114610bc9578063ab58fb8e14610bdf578063ac43175114610bff578063b2b04db514610c1f57600080fd5b806397c3d3341161020e57806397c3d33414610b345780639a802a6d14610b485780639dc0926214610b68578063a1a11bf514610b7e578063a7713a7014610b9457600080fd5b80637d5e81e214610a955780637e434d5414610ab55780638129fc1c14610acb57806384b0196e14610ae057806391ddadf414610b0857600080fd5b80633e4f49e61161036657806354fd4d50116102e35780636e47b482116102a75780636e47b48214610a1257806370b0f66014610a2857806375d47a0a14610a4857806375da247514610a5e5780637b3c71d314610a7557600080fd5b806354fd4d5014610972578063567813881461099c5780635d0bf632146109bc5780635f398a14146109d257806360c4247f146109f257600080fd5b80634bf5d7e91161032a5780634bf5d7e9146108e957806351b4dce3146108fe57806351e8067214610914578063533ddd141461092a5780635410108d1461095b57600080fd5b80633e4f49e61461081b57806340e58ee51461084857806343756e5c14610868578063438596321461087e578063452115d6146108c957600080fd5b8063160cbed7116103f45780632fe3e261116103b85780632fe3e2611461074e578063328dd9821461078257806332b8113e146107b25780633932abb1146107e55780633bccf4fd146107fb57600080fd5b8063160cbed7146106b957806324bc1a64146106d95780632656227d146106ee57806328087028146107015780632d63f6931461071757600080fd5b806306f3f9e61161043b57806306f3f9e6146105c757806306fdde03146105e75780630e2374a514610609578063143489d014610637578063150b7a021461067557600080fd5b8063013cf08b146104dc57806301ffc9a71461055757806302a251a31461058757806303420181146105a757600080fd5b366104d7573061047a610ff7565b6001600160a01b0316146104d55760405162461bcd60e51b815260206004820152601f60248201527f476f7665726e6f723a206d7573742073656e6420746f206578656375746f720060448201526064015b60405180910390fd5b005b600080fd5b3480156104e857600080fd5b506104fc6104f7366004615b67565b611011565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b34801561056357600080fd5b50610577610572366004615b80565b6110cc565b604051901515815260200161054e565b34801561059357600080fd5b50610162545b60405190815260200161054e565b3480156105b357600080fd5b506105996105c2366004615cc6565b6110dd565b3480156105d357600080fd5b506104d56105e2366004615b67565b6111d5565b3480156105f357600080fd5b506105fc611260565b60405161054e9190615dbc565b34801561061557600080fd5b5061061f61200181565b6040516001600160a01b03909116815260200161054e565b34801561064357600080fd5b5061061f610652366004615b67565b60009081526101306020526040902054600160401b90046001600160a01b031690565b34801561068157600080fd5b506106a0610690366004615de4565b630a85bd0160e11b949350505050565b6040516001600160e01b0319909116815260200161054e565b3480156106c557600080fd5b506105996106d4366004615fbb565b6112f3565b3480156106e557600080fd5b506105996114f8565b6105996106fc366004615fbb565b61151e565b34801561070d57600080fd5b5061061f61200581565b34801561072357600080fd5b50610599610732366004615b67565b600090815261013060205260409020546001600160401b031690565b34801561075a57600080fd5b506105997fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af8881565b34801561078e57600080fd5b506107a261079d366004615b67565b611611565b60405161054e9493929190616113565b3480156107be57600080fd5b5061025c546001600160401b03165b6040516001600160401b03909116815260200161054e565b3480156107f157600080fd5b5061016154610599565b34801561080757600080fd5b50610599610816366004616160565b6118a3565b34801561082757600080fd5b5061083b610836366004615b67565b611919565b60405161054e91906161c4565b34801561085457600080fd5b506104d5610863366004615b67565b611924565b34801561087457600080fd5b5061061f61100181565b34801561088a57600080fd5b506105776108993660046161ec565b6000828152610193602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b3480156108d557600080fd5b506105996108e4366004615fbb565b61194f565b3480156108f557600080fd5b506105fc611966565b34801561090a57600080fd5b5061061f61200681565b34801561092057600080fd5b5061061f61200081565b34801561093657600080fd5b5061057761094536600461621c565b61028e6020526000908152604090205460ff1681565b34801561096757600080fd5b506107cd6201518081565b34801561097e57600080fd5b506040805180820190915260018152603160f81b60208201526105fc565b3480156109a857600080fd5b506105996109b7366004616239565b611a13565b3480156109c857600080fd5b5061059961546081565b3480156109de57600080fd5b506105996109ed366004616265565b611a3c565b3480156109fe57600080fd5b50610599610a0d366004615b67565b611a86565b348015610a1e57600080fd5b5061061f61100581565b348015610a3457600080fd5b506104d5610a43366004615b67565b611b3b565b348015610a5457600080fd5b5061061f61100881565b348015610a6a57600080fd5b5061059962093a8081565b348015610a8157600080fd5b50610599610a903660046162e8565b611bc3565b348015610aa157600080fd5b50610599610ab0366004616341565b611c15565b348015610ac157600080fd5b5061061f61200381565b348015610ad757600080fd5b506104d5611cbc565b348015610aec57600080fd5b50610af561218c565b60405161054e97969594939291906163e1565b348015610b1457600080fd5b50610b1d61222a565b60405165ffffffffffff909116815260200161054e565b348015610b4057600080fd5b506064610599565b348015610b5457600080fd5b50610599610b63366004616443565b61229e565b348015610b7457600080fd5b5061061f61100781565b348015610b8a57600080fd5b5061061f61100681565b348015610ba057600080fd5b506105996122b5565b348015610bb557600080fd5b506104d5610bc436600461621c565b6122e2565b348015610bd557600080fd5b5061061f61200281565b348015610beb57600080fd5b50610599610bfa366004615b67565b61236a565b348015610c0b57600080fd5b506104d5610c1a36600461649b565b612406565b348015610c2b57600080fd5b5061059968056bc75e2d6310000081565b348015610c4857600080fd5b50610599600a81565b348015610c5d57600080fd5b50610599612be2565b348015610c7257600080fd5b506106a0610c813660046164fa565b63bc197c8160e01b95945050505050565b348015610c9e57600080fd5b50610599610cad366004615b67565b612bee565b6104d5610cc036600461658d565b612bf9565b348015610cd157600080fd5b50610599610ce0366004615fbb565b612d09565b348015610cf157600080fd5b5061061f61100281565b348015610d0757600080fd5b506104d5610d163660046165d0565b612d43565b348015610d2757600080fd5b506101f8546001600160a01b031661061f565b348015610d4657600080fd5b50610599610d55366004616678565b612dcb565b348015610d6657600080fd5b5061061f61100381565b348015610d7c57600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f00000000000060208201526105fc565b348015610dc257600080fd5b506104d5610dd1366004615b67565b612e52565b348015610de257600080fd5b506105997f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b348015610e1657600080fd5b5061061f61200481565b348015610e2c57600080fd5b50610ebb610e3b3660046161ec565b6040805160608101825260008082526020820181905291810191909152506000918252610193602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b03169082015260600161054e565b348015610ef757600080fd5b506104d5610f06366004615b67565b612e75565b348015610f1757600080fd5b50610599610f26366004616719565b612efd565b348015610f3757600080fd5b506104d5610f46366004615b67565b612f1e565b348015610f5757600080fd5b506106a0610f66366004616745565b63f23a6e6160e01b95945050505050565b348015610f8357600080fd5b50610599610f92366004615b67565b612fa6565b348015610fa357600080fd5b5061061f61100081565b348015610fb957600080fd5b506101c55461061f906001600160a01b031681565b348015610fda57600080fd5b5061061f61100481565b6104d5610ff2366004615b67565b613035565b600061100c6101f8546001600160a01b031690565b905090565b80600080808080808080806110258a61236a565b60008c815261013060205260409020549098506001600160401b0316965061104c8b612bee565b60008c81526101936020526040812080546005820154600683015460078401546001600160a01b039093169e50949a50985092965091945061108d8d611919565b905060028160078111156110a3576110a36161ae565b14935060078160078111156110ba576110ba6161ae565b14925050509193959799509193959799565b60006110d782613058565b92915050565b6000806111816111797fb3b3f3b703cd84ce352197dcff232b1b5d3cfb2025ce47cf04742d0651f1af888c8c8c8c6040516111199291906167ad565b60405180910390208b8051906020012060405160200161115e959493929190948552602085019390935260ff9190911660408401526060830152608082015260a00190565b6040516020818303038152906040528051906020012061307d565b8686866130aa565b90506111c78a828b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92506130c8915050565b9a9950505050505050505050565b6111dd610ff7565b6001600160a01b0316336001600160a01b03161461120d5760405162461bcd60e51b81526004016104cc906167bd565b30611216610ff7565b6001600160a01b03161461125457600080366040516112369291906167ad565b604051809103902090505b8061124d6101316130d7565b0361124157505b61125d81613156565b50565b606061012f8054611270906167f4565b80601f016020809104026020016040519081016040528092919081815260200182805461129c906167f4565b80156112e95780601f106112be576101008083540402835291602001916112e9565b820191906000526020600020905b8154815290600101906020018083116112cc57829003601f168201915b5050505050905090565b60008061130286868686612d09565b9050600461130f82611919565b6007811115611320576113206161ae565b1461133d5760405162461bcd60e51b81526004016104cc9061682e565b6101f8546040805163793d064960e11b815290516000926001600160a01b03169163f27a0c929160048083019260209291908290030181865afa158015611388573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ac919061686f565b6101f85460405163b1c5f42760e01b81529192506001600160a01b03169063b1c5f427906113e7908a908a908a906000908b90600401616888565b602060405180830381865afa158015611404573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611428919061686f565b60008381526101f96020526040808220929092556101f85491516308f2a0bb60e41b81526001600160a01b0390921691638f2a0bb091611475918b918b918b91908b9089906004016168d6565b600060405180830381600087803b15801561148f57600080fd5b505af11580156114a3573d6000803e3d6000fd5b505050507f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda28928282426114d59190616944565b604080519283526020830191909152015b60405180910390a15095945050505050565b600061100c600161150761222a565b6115119190616957565b65ffffffffffff16612fa6565b60008061152d86868686612d09565b9050600061153a82611919565b90506004816007811115611550576115506161ae565b148061156d5750600581600781111561156b5761156b6161ae565b145b6115895760405162461bcd60e51b81526004016104cc9061682e565b6000828152610130602052604090819020600201805460ff19166001179055517f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f906115d89084815260200190565b60405180910390a16115ed82888888886132c7565b6115fa8288888888613368565b611607828888888861340f565b5095945050505050565b606080606080600061019360008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561169457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611676575b50505050509350828054806020026020016040519081016040528092919081815260200182805480156116e657602002820191906000526020600020905b8154815260200190600101908083116116d2575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b828210156117ba57838290600052602060002001805461172d906167f4565b80601f0160208091040260200160405190810160405280929190818152602001828054611759906167f4565b80156117a65780601f1061177b576101008083540402835291602001916117a6565b820191906000526020600020905b81548152906001019060200180831161178957829003601f168201915b50505050508152602001906001019061170e565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561188d578382906000526020600020018054611800906167f4565b80601f016020809104026020016040519081016040528092919081815260200182805461182c906167f4565b80156118795780601f1061184e57610100808354040283529160200191611879565b820191906000526020600020905b81548152906001019060200180831161185c57829003601f168201915b5050505050815260200190600101906117e1565b5050505090509450945094509450509193509193565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906118f1906111799060800161115e565b905061190e8782886040518060200160405280600081525061344a565b979650505050505050565b60006110d78261346d565b600080600080611933856135ba565b93509350935093506119478484848461194f565b505050505050565b600061195d8585858561384b565b95945050505050565b6101c55460408051634bf5d7e960e01b815290516060926001600160a01b031691634bf5d7e99160048083019260009291908290030181865afa9250505080156119d257506040513d6000823e601f3d908101601f191682016040526119cf919081019061697d565b60015b611a0e575060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b919050565b600080339050611a348482856040518060200160405280600081525061344a565b949350505050565b60008033905061190e87828888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a92506130c8915050565b61022b54600090808203611a9f57505061022a54919050565b600061022b611aaf6001846169ea565b81548110611abf57611abf6169fd565b60009182526020918290206040805180820190915291015463ffffffff8116808352600160201b9091046001600160e01b03169282019290925291508410611b1557602001516001600160e01b03169392505050565b611b2a611b2185613916565b61022b9061397f565b6001600160e01b0316949350505050565b611b43610ff7565b6001600160a01b0316336001600160a01b031614611b735760405162461bcd60e51b81526004016104cc906167bd565b30611b7c610ff7565b6001600160a01b031614611bba5760008036604051611b9c9291906167ad565b604051809103902090505b80611bb36101316130d7565b03611ba757505b61125d81613a32565b600080339050611c0b86828787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061344a92505050565b9695505050505050565b6000805b8551811015611caf5761028e6000878381518110611c3957611c396169fd565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff16611c9d5760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b60448201526064016104cc565b80611ca781616a13565b915050611c19565b5061195d85858585613a75565b600054610100900460ff1615808015611cdc5750600054600160ff909116105b80611cf65750303b158015611cf6575060005460ff166001145b611d595760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104cc565b6000805460ff191660011790558015611d7c576000805461ff0019166101001790555b334114611de15760405162461bcd60e51b815260206004820152602d60248201527f746865206d6573736167652073656e646572206d75737420626520746865206260448201526c3637b1b590383937b23ab1b2b960991b60648201526084016104cc565b3a15611e265760405162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b60448201526064016104cc565b611e526040518060400160405280600b81526020016a2129a1a3b7bb32b93737b960a91b815250613add565b611e6b61546062093a8068056bc75e2d63100000613b34565b611e73613b6b565b611e7e612005613b94565b611e89612006613bc4565b611e93600a613bf4565b611e9f62015180613c24565b61028e6020527ff0f52cefb444f33092ac77280e2ff9c808a9c078a96d3cd7513137548137ed8f8054600160ff1991821681179092557fb2c9e894c6f17bfc84a6708e0ea85c2729271d7cae0a8d875cd1080fb415e7a080548216831790557fd8ceb939a734f5a4e0a6fede9e31504e16ac856b555e8bac20ad743b9ff2976a80548216831790557f2a7b967fc66f4b36023165170b23a76f880d3dbbf244a856aeee9e670cef725980548216831790557fdb1a1113bac2e4f0e6f8c2f2bc4f6dbecf1fccb033d5df1b55b5c5ad6c20ac7980548216831790557f8b1888b379fb3b749668d86c5bf8aaada8e2276c6ced3a4efcc1e877827ce0b380548216831790557feeeea8d485053a64711f2c5802d2cc63251dd394956c140a2e30db7cef242ec580548216831790557f4cdb1a6c4b56f62f27f7202d75e865c2405f138cb32ec45019c0f2ca8f91e47280548216831790557f49d6c403a3197b15e024f109c83eb730d7af1a8b49fc6f820e09bad2597c14c980548216831790557f7a41b38ceb33f296c1ff3db5ffcc6542acb091d5fb27586f3c551dd2ebac063880548216831790557f701fe333ee20fad5d5a6a9930dddd3fb815af1d976d5250e394e39d6e4123e3880548216831790557fee7ba9842df249188adc0fc380980c3099f608b602924e083dd61e8e70845b4a80548216831790557f3d402ebd72e644bcd92f3ee2ba09a8ae7105989d2e5863b3b8ac14e1397bc64480548216831790557f29973aeebf3c17f2c3a9cf7ace17f2798aa544e1ea7427938024cde6df46bac180548216831790557f74c0d6e29c82d6628d5f083f86fc15f0c6acef97321252a1eee0bd893dae276580548216831790556120066000527f1bdfc01e60036e5be56ae85d8394ddf727e1021b3d74de5b554fedea2de4376780549091169091179055801561125d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000606080600080600060606065546000801b1480156121ac5750606654155b6121f05760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064016104cc565b6121f8613c54565b612200613c63565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6101c554604080516324776b7d60e21b815290516000926001600160a01b0316916391ddadf49160048083019260209291908290030181865afa925050508015612291575060408051601f3d908101601f1916820190925261228e91810190616a2c565b60015b611a0e5761100c43613c72565b60006122ab848484613cd9565b90505b9392505050565b61022b54600090156122da576122cc61022b613d50565b6001600160e01b0316905090565b5061022a5490565b6122ea610ff7565b6001600160a01b0316336001600160a01b03161461231a5760405162461bcd60e51b81526004016104cc906167bd565b30612323610ff7565b6001600160a01b03161461236157600080366040516123439291906167ad565b604051809103902090505b8061235a6101316130d7565b0361234e57505b61125d81613d80565b6101f85460008281526101f9602052604080822054905163d45c443560e01b81526004810191909152909182916001600160a01b039091169063d45c443590602401602060405180830381865afa1580156123c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ed919061686f565b9050806001146123fd57806122ae565b60009392505050565b336110071461246e5760405162461bcd60e51b815260206004820152602e60248201527f746865206d6573736167652073656e646572206d75737420626520676f76657260448201526d1b985b98d94818dbdb9d1c9858dd60921b60648201526084016104cc565b604080516020601f860181900481028201810190925284815282916124d1919087908790819084018382808284376000920191909152505060408051808201909152600b81526a766f74696e6744656c617960a81b60208201529150613deb9050565b156125c057806020146125265760405162461bcd60e51b815260206004820181905260248201527f696e76616c696420766f74696e6744656c61792076616c7565206c656e67746860448201526064016104cc565b600061256984848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250613e44915050565b9050600081116125b15760405162461bcd60e51b8152602060048201526013602482015272696e76616c696420766f74696e6744656c617960681b60448201526064016104cc565b6125ba81613a32565b50612b9e565b61262385858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152600c81526b1d9bdd1a5b99d4195c9a5bd960a21b60208201529150613deb9050565b1561271757806020146126825760405162461bcd60e51b815260206004820152602160248201527f696e76616c696420766f74696e67506572696f642076616c7565206c656e67746044820152600d60fb1b60648201526084016104cc565b60006126c584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250613e44915050565b90506000811161270e5760405162461bcd60e51b81526020600482015260146024820152731a5b9d985b1a59081d9bdd1a5b99d4195c9a5bd960621b60448201526064016104cc565b6125ba81613e49565b61277f85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260118152701c1c9bdc1bdcd85b151a1c995cda1bdb19607a1b60208201529150613deb9050565b1561288157806020146127e35760405162461bcd60e51b815260206004820152602660248201527f696e76616c69642070726f706f73616c5468726573686f6c642076616c7565206044820152650d8cadccee8d60d31b60648201526084016104cc565b600061282684848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250613e44915050565b9050600081116128785760405162461bcd60e51b815260206004820152601960248201527f696e76616c69642070726f706f73616c5468726573686f6c640000000000000060448201526064016104cc565b6125ba81613eec565b6128e985858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505060408051808201909152601181527038bab7b93ab6a232b737b6b4b730ba37b960791b60208201529150613deb9050565b156129ec578060201461294d5760405162461bcd60e51b815260206004820152602660248201527f696e76616c69642071756f72756d44656e6f6d696e61746f722076616c7565206044820152650d8cadccee8d60d31b60648201526084016104cc565b600061299084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250613e44915050565b905060018110156129e35760405162461bcd60e51b815260206004820152601960248201527f696e76616c69642071756f72756d44656e6f6d696e61746f720000000000000060448201526064016104cc565b6125ba81613156565b612a5785858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260148152736d696e506572696f64416674657251756f72756d60601b60208201529150613deb9050565b15612b665780600814612abe5760405162461bcd60e51b815260206004820152602960248201527f696e76616c6964206d696e506572696f64416674657251756f72756d2076616c6044820152680eaca40d8cadccee8d60bb1b60648201526084016104cc565b6000612b0184848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250613e44915050565b90506001816001600160401b03161015612b5d5760405162461bcd60e51b815260206004820152601c60248201527f696e76616c6964206d696e506572696f64416674657251756f72756d0000000060448201526064016104cc565b6125ba81613f2f565b60405162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b60448201526064016104cc565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e63385858585604051612bd39493929190616a7d565b60405180910390a15050505050565b600061100c6101635490565b60006110d782613f9b565b612c01610ff7565b6001600160a01b0316336001600160a01b031614612c315760405162461bcd60e51b81526004016104cc906167bd565b30612c3a610ff7565b6001600160a01b031614612c785760008036604051612c5a9291906167ad565b604051809103902090505b80612c716101316130d7565b03612c6557505b600080856001600160a01b0316858585604051612c969291906167ad565b60006040518083038185875af1925050503d8060008114612cd3576040519150601f19603f3d011682016040523d82523d6000602084013e612cd8565b606091505b5091509150612d008282604051806060016040528060288152602001616e6560289139613fd9565b50505050505050565b600084848484604051602001612d229493929190616aa4565b60408051601f19818403018152919052805160209091012095945050505050565b612d4b610ff7565b6001600160a01b0316336001600160a01b031614612d7b5760405162461bcd60e51b81526004016104cc906167bd565b30612d84610ff7565b6001600160a01b031614612dc25760008036604051612da49291906167ad565b604051809103902090505b80612dbb6101316130d7565b03612daf57505b61125d81613f2f565b60008251845114612e2f5760405162461bcd60e51b815260206004820152602860248201527f476f7665726e6f72427261766f3a20696e76616c6964207369676e61747572656044820152670e640d8cadccee8d60c31b60648201526084016104cc565b612e3d338787878787613ff2565b611c0b8686612e4c87876140b0565b85611c15565b600080600080612e61856135ba565b9350935093509350611947848484846112f3565b612e7d610ff7565b6001600160a01b0316336001600160a01b031614612ead5760405162461bcd60e51b81526004016104cc906167bd565b30612eb6610ff7565b6001600160a01b031614612ef45760008036604051612ed69291906167ad565b604051809103902090505b80612eed6101316130d7565b03612ee157505b61125d81613e49565b60006122ae8383612f1960408051602081019091526000815290565b613cd9565b612f26610ff7565b6001600160a01b0316336001600160a01b031614612f565760405162461bcd60e51b81526004016104cc906167bd565b30612f5f610ff7565b6001600160a01b031614612f9d5760008036604051612f7f9291906167ad565b604051809103902090505b80612f966101316130d7565b03612f8a57505b61125d81613eec565b60006064612fb383611a86565b6101c554604051632394e7a360e21b8152600481018690526001600160a01b0390911690638e539e8c90602401602060405180830381865afa158015612ffd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613021919061686f565b61302b9190616aef565b6110d79190616b1c565b600080600080613044856135ba565b93509350935093506119478484848461151e565b60006001600160e01b03198216636e665ced60e01b14806110d757506110d7826141e2565b60006110d761308a61427e565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006130bb87878787614288565b915091506116078161434c565b6000611c0b8686868686614496565b60006130f28254600f81810b600160801b909204900b131590565b1561311057604051631ed9509560e11b815260040160405180910390fd5b508054600f0b6000818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b60648111156131d95760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72566f74657351756f72756d4672616374696f6e3a2071756f60448201527f72756d4e756d657261746f72206f7665722071756f72756d44656e6f6d696e616064820152623a37b960e91b608482015260a4016104cc565b60006131e36122b5565b905080158015906131f5575061022b54155b1561325a57604080518082019091526000815261022b906020810161321984614599565b6001600160e01b039081169091528254600181018455600093845260209384902083519490930151909116600160201b0263ffffffff909316929092179101555b61328861327561326861222a565b65ffffffffffff16613916565b61327e84614599565b61022b9190614602565b505060408051828152602081018490527f0553476bf02ef2726e8ce5ced78d63e26e602e4a2257b1f559418e24b4633997910160405180910390a15050565b306132d0610ff7565b6001600160a01b0316146133615760005b845181101561194757306001600160a01b0316858281518110613306576133066169fd565b60200260200101516001600160a01b03160361335157613351838281518110613331576133316169fd565b60200260200101518051906020012061013161461d90919063ffffffff16565b61335a81616a13565b90506132e1565b5050505050565b60005b84518110156134015761028e600086838151811061338b5761338b6169fd565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff166133ef5760405162461bcd60e51b815260206004820152600e60248201526d1bdb9b1e481dda1a5d195b1a5cdd60921b60448201526064016104cc565b806133f981616a13565b91505061336b565b506133618585858585614659565b30613418610ff7565b6001600160a01b0316146133615761013154600f81810b600160801b909204900b131561336157600061013155613361565b600061195d8585858561346860408051602081019091526000815290565b6130c8565b600080613479836146ce565b9050600481600781111561348f5761348f6161ae565b1461349a5792915050565b60008381526101f96020526040902054806134b6575092915050565b6101f854604051632ab0f52960e01b8152600481018390526001600160a01b0390911690632ab0f52990602401602060405180830381865afa158015613500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135249190616b3e565b15613533575060079392505050565b6101f854604051632c258a9f60e11b8152600481018390526001600160a01b039091169063584b153e90602401602060405180830381865afa15801561357d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135a19190616b3e565b156135b0575060059392505050565b5060029392505050565b606080606060008061019360008781526020019081526020016000209050806001018160020161378c83600301805480602002602001604051908101604052809291908181526020016000905b828210156136b3578382906000526020600020018054613626906167f4565b80601f0160208091040260200160405190810160405280929190818152602001828054613652906167f4565b801561369f5780601f106136745761010080835404028352916020019161369f565b820191906000526020600020905b81548152906001019060200180831161368257829003601f168201915b505050505081526020019060010190613607565b50505060048601805460408051602080840282018101909252828152935060009084015b828210156137835783829060005260206000200180546136f6906167f4565b80601f0160208091040260200160405190810160405280929190818152602001828054613722906167f4565b801561376f5780601f106137445761010080835404028352916020019161376f565b820191906000526020600020905b81548152906001019060200180831161375257829003601f168201915b5050505050815260200190600101906136d7565b505050506140b0565b60098401548354604080516020808402820181019092528281529186918301828280156137e257602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116137c4575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561383457602002820191906000526020600020905b815481526020019060010190808311613820575b505050505092509450945094509450509193509193565b60008061385a86868686612d09565b600081815261019360205260409020549091506001600160a01b0316338114806138ae5750613887612be2565b6138ac82600161389561222a565b61389f9190616957565b65ffffffffffff16612efd565b105b61390a5760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b60648201526084016104cc565b61190e87878787614806565b600063ffffffff82111561397b5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b60648201526084016104cc565b5090565b8154600090818160058111156139dc57600061399a84614814565b6139a490856169ea565b60008881526020902090915081015463ffffffff90811690871610156139cc578091506139da565b6139d7816001616944565b92505b505b60006139ea878785856148fc565b90508015613a2557613a0f87613a016001846169ea565b600091825260209091200190565b54600160201b90046001600160e01b031661190e565b6000979650505050505050565b6101615460408051918252602082018390527fc565b045403dc03c2eea82b81a0465edad9e2e7fc4d97e11421c209da93d7a93910160405180910390a161016155565b6000613ad133868686516001600160401b03811115613a9657613a96615c03565b604051908082528060200260200182016040528015613ac957816020015b6060815260200190600190039081613ab45790505b508787613ff2565b61195d85858585614952565b600054610100900460ff16613b045760405162461bcd60e51b81526004016104cc90616b60565b613b2b81613b266040805180820190915260018152603160f81b602082015290565b614d31565b61125d81614d80565b600054610100900460ff16613b5b5760405162461bcd60e51b81526004016104cc90616b60565b613b66838383614db8565b505050565b600054610100900460ff16613b925760405162461bcd60e51b81526004016104cc90616b60565b565b600054610100900460ff16613bbb5760405162461bcd60e51b81526004016104cc90616b60565b61125d81614dfa565b600054610100900460ff16613beb5760405162461bcd60e51b81526004016104cc90616b60565b61125d81614e44565b600054610100900460ff16613c1b5760405162461bcd60e51b81526004016104cc90616b60565b61125d81614e6b565b600054610100900460ff16613c4b5760405162461bcd60e51b81526004016104cc90616b60565b61125d81614e92565b606060678054611270906167f4565b606060688054611270906167f4565b600065ffffffffffff82111561397b5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b60648201526084016104cc565b6101c554604051630748d63560e31b81526001600160a01b038581166004830152602482018590526000921690633a46b1a890604401602060405180830381865afa158015613d2c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ab919061686f565b805460009080156123fd57613d6a83613a016001846169ea565b54600160201b90046001600160e01b03166122ae565b6101f854604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a16101f880546001600160a01b0319166001600160a01b0392909216919091179055565b600081604051602001613dfe9190616bab565b6040516020818303038152906040528051906020012083604051602001613e259190616bab565b6040516020818303038152906040528051906020012014905092915050565b015190565b60008111613ea95760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f7253657474696e67733a20766f74696e6720706572696f6420604482015266746f6f206c6f7760c81b60648201526084016104cc565b6101625460408051918252602082018390527f7e3f7f0708a84de9203036abaa450dccc85ad5ff52f78c170f3edb55cf5e8828910160405180910390a161016255565b6101635460408051918252602082018390527fccb45da8d5717e6c4544694297c4ba5cf151d455c9bb0ed4fc7a38411bc05461910160405180910390a161016355565b61025c54604080516001600160401b03928316815291831660208301527f7ca4ac117ed3cdce75c1161d8207c440389b1a15d69d096831664657c07dafc2910160405180910390a161025c805467ffffffffffffffff19166001600160401b0392909216919091179055565b600081815261013060205260408120600101546110d7906001600160401b0316600084815261025d60205260409020546001600160401b0316614eb9565b60608315613fe85750816122ae565b6122ae8383614ecf565b805160208201206000614010878761400a88886140b0565b85612d09565b6000818152610193602052604090206009810154919250906140a55780546001600160a01b0319166001600160a01b038a16178155875161405a90600183019060208b019061599e565b50865161407090600283019060208a01906159ff565b5085516140869060038301906020890190615a3a565b50845161409c9060048301906020880190615a8c565b50600981018390555b505050505050505050565b6060600082516001600160401b038111156140cd576140cd615c03565b60405190808252806020026020018201604052801561410057816020015b60608152602001906001900390816140eb5790505b50905060005b81518110156141da57848181518110614121576141216169fd565b60200260200101515160001461419157848181518110614143576141436169fd565b602002602001015180519060200120848281518110614164576141646169fd565b602002602001015160405160200161417d929190616bc7565b6040516020818303038152906040526141ac565b8381815181106141a3576141a36169fd565b60200260200101515b8282815181106141be576141be6169fd565b6020026020010181905250806141d390616a13565b9050614106565b509392505050565b600063288ace0360e11b6318df743f60e31b63bf26d89760e01b6379dd796f60e01b6001600160e01b0319861682148061422857506001600160e01b0319868116908216145b8061423f57506001600160e01b0319868116908516145b8061425a57506001600160e01b03198616630271189760e51b145b80611c0b57506301ffc9a760e01b6001600160e01b03198716149695505050505050565b600061100c614ef9565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156142bf5750600090506003614343565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614313573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661433c57600060019250925050614343565b9150600090505b94509492505050565b6000816004811115614360576143606161ae565b036143685750565b600181600481111561437c5761437c6161ae565b036143c95760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e6174757265000000000000000060448201526064016104cc565b60028160048111156143dd576143dd6161ae565b0361442a5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e6774680060448201526064016104cc565b600381600481111561443e5761443e6161ae565b0361125d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b60648201526084016104cc565b6000806144a68787878787614f6d565b600088815261025d60205260409020549091506001600160401b03161580156144d357506144d3876150c3565b15611c0b5760006144ed61025c546001600160401b031690565b6144f561222a565b65ffffffffffff166145079190616bf8565b905061451288612bee565b816001600160401b03161115614561576040516001600160401b038216815288907f541f725fb9f7c98a30cc9c0ff32fbb14358cd7159c847a3aa20a2bdc442ba5119060200160405180910390a25b600088815261025d60205260409020805467ffffffffffffffff19166001600160401b03929092169190911790559695505050505050565b60006001600160e01b0382111561397b5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b60648201526084016104cc565b600080614610858585615103565b915091505b935093915050565b8154600160801b90819004600f0b6000818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b6101f85460405163e38335e560e01b81526001600160a01b039091169063e38335e5903490614695908890889088906000908990600401616888565b6000604051808303818588803b1580156146ae57600080fd5b505af11580156146c2573d6000803e3d6000fd5b50505050505050505050565b600081815261013060205260408120600281015460ff16156146f35750600792915050565b6002810154610100900460ff161561470e5750600292915050565b600083815261013060205260408120546001600160401b0316908190036147775760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c20696400000060448201526064016104cc565b600061478161222a565b65ffffffffffff16905080821061479d57506000949350505050565b60006147a886612bee565b90508181106147bd5750600195945050505050565b6147c6866150c3565b80156147e957506000868152610193602052604090206006810154600590910154115b156147fa5750600495945050505050565b50600395945050505050565b600061195d858585856152a2565b60008160000361482657506000919050565b6000600161483384615358565b901c6001901b9050600181848161484c5761484c616b06565b048201901c9050600181848161486457614864616b06565b048201901c9050600181848161487c5761487c616b06565b048201901c9050600181848161489457614894616b06565b048201901c905060018184816148ac576148ac616b06565b048201901c905060018184816148c4576148c4616b06565b048201901c905060018184816148dc576148dc616b06565b048201901c90506122ae818285816148f6576148f6616b06565b046153ec565b60005b818310156141da57600061491384846153fb565b60008781526020902090915063ffffffff86169082015463ffffffff16111561493e5780925061494c565b614949816001616944565b93505b506148ff565b60003361495f8184615416565b6149ab5760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f736572207265737472696374656400000060448201526064016104cc565b60006149b561222a565b65ffffffffffff1690506149c7612be2565b6149d683610f266001856169ea565b1015614a3e5760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f723a2070726f706f73657220766f7465732062656c6f7720706044820152701c9bdc1bdcd85b081d1a1c995cda1bdb19607a1b60648201526084016104cc565b6000614a538888888880519060200120612d09565b90508651885114614a765760405162461bcd60e51b81526004016104cc90616c18565b8551885114614a975760405162461bcd60e51b81526004016104cc90616c18565b6000885111614ae85760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c000000000000000060448201526064016104cc565b600081815261013060205260409020546001600160401b031615614b585760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b60648201526084016104cc565b6000614b646101615490565b614b6e9084616944565b90506000614b7c6101625490565b614b869083616944565b90506040518060e00160405280614b9c84615507565b6001600160401b031681526001600160a01b038716602082015260006040820152606001614bc983615507565b6001600160401b03908116825260006020808401829052604080850183905260609485018390528883526101308252918290208551815492870151878501519186166001600160e01b031990941693909317600160401b6001600160a01b039094168402176001600160e01b0316600160e01b60e09290921c91909102178155938501516080860151908416921c0217600183015560a08301516002909201805460c09094015161ffff1990941692151561ff00191692909217610100931515939093029290921790558a517f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e091859188918e918e91811115614cce57614cce615c03565b604051908082528060200260200182016040528015614d0157816020015b6060815260200190600190039081614cec5790505b508d88888f604051614d1b99989796959493929190616c59565b60405180910390a1509098975050505050505050565b600054610100900460ff16614d585760405162461bcd60e51b81526004016104cc90616b60565b6067614d648382616d37565b506068614d718282616d37565b50506000606581905560665550565b600054610100900460ff16614da75760405162461bcd60e51b81526004016104cc90616b60565b61012f614db48282616d37565b5050565b600054610100900460ff16614ddf5760405162461bcd60e51b81526004016104cc90616b60565b614de883613a32565b614df182613e49565b613b6681613eec565b600054610100900460ff16614e215760405162461bcd60e51b81526004016104cc90616b60565b6101c580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166123615760405162461bcd60e51b81526004016104cc90616b60565b600054610100900460ff166112545760405162461bcd60e51b81526004016104cc90616b60565b600054610100900460ff16612dc25760405162461bcd60e51b81526004016104cc90616b60565b6000818311614ec857816122ae565b5090919050565b815115614edf5781518083602001fd5b8060405162461bcd60e51b81526004016104cc9190615dbc565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f614f2461556f565b614f2c6155c8565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000858152610130602052604081206001614f8788611919565b6007811115614f9857614f986161ae565b14614ff15760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b60648201526084016104cc565b805460009061500b9088906001600160401b031686613cd9565b905061501a88888884886155f9565b835160000361506f57866001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4898884896040516150629493929190616df6565b60405180910390a261190e565b866001600160a01b03167fe2babfbac5889a709b63bb7f598b324e08bc5a4fb9ec647fb3cbc9ec07eb871289888489896040516150b0959493929190616e1e565b60405180910390a2979650505050505050565b60008181526101936020526040812060058101546150fa610f9285600090815261013060205260409020546001600160401b031690565b11159392505050565b82546000908190801561524957600061512187613a016001856169ea565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b0316602084015291925090871610156151a25760405162461bcd60e51b815260206004820152601b60248201527f436865636b706f696e743a2064656372656173696e67206b657973000000000060448201526064016104cc565b805163ffffffff8088169116036151ea57846151c388613a016001866169ea565b80546001600160e01b0392909216600160201b0263ffffffff909216919091179055615239565b6040805180820190915263ffffffff80881682526001600160e01b0380881660208085019182528b54600181018d5560008d81529190912094519151909216600160201b029216919091179101555b6020015192508391506146159050565b50506040805180820190915263ffffffff80851682526001600160e01b0380851660208085019182528854600181018a5560008a815291822095519251909316600160201b029190931617920191909155905081614615565b6000806152b186868686615797565b60008181526101f960205260409020549091501561195d576101f85460008281526101f960205260409081902054905163c4d252f560e01b81526001600160a01b039092169163c4d252f59161530d9160040190815260200190565b600060405180830381600087803b15801561532757600080fd5b505af115801561533b573d6000803e3d6000fd5b50505060008281526101f960205260408120555095945050505050565b600080608083901c1561536d57608092831c92015b604083901c1561537f57604092831c92015b602083901c1561539157602092831c92015b601083901c156153a357601092831c92015b600883901c156153b557600892831c92015b600483901c156153c757600492831c92015b600283901c156153d957600292831c92015b600183901c156110d75760010192915050565b6000818310614ec857816122ae565b600061540a6002848418616b1c565b6122ae90848416616944565b8051600090603481101561542e5760019150506110d7565b82810160131901516001600160a01b031981166b046e0e4dee0dee6cae47a60f60a31b14615461576001925050506110d7565b60008061546f6028856169ea565b90505b838110156154e6576000806154a6888481518110615492576154926169fd565b01602001516001600160f81b0319166158a4565b91509150816154be57600196505050505050506110d7565b8060ff166004856001600160a01b0316901b1793505050806154df90616a13565b9050615472565b50856001600160a01b0316816001600160a01b031614935050505092915050565b60006001600160401b0382111561397b5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b60648201526084016104cc565b60008061557a613c54565b805190915015615591578051602090910120919050565b60655480156155a05792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b6000806155d3613c63565b8051909150156155ea578051602090910120919050565b60665480156155a05792915050565b6000858152610193602090815260408083206001600160a01b038816845260088101909252909120805460ff16156156895760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b60648201526084016104cc565b805460ff86166101000261ffff199091161760011781556156a984615936565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff85166156f957838260060160008282546156ee9190616944565b90915550612d009050565b60001960ff86160161571957838260050160008282546156ee9190616944565b60011960ff86160161573957838260070160008282546156ee9190616944565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b60648201526084016104cc565b6000806157a686868686612d09565b905060006157b382611919565b905060028160078111156157c9576157c96161ae565b141580156157e9575060068160078111156157e6576157e66161ae565b14155b801561580757506007816007811115615804576158046161ae565b14155b6158535760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f742061637469766500000060448201526064016104cc565b6000828152610130602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c906114e69084815260200190565b60008060f883901c602f811180156158bf5750603a8160ff16105b156158d457600194602f199091019350915050565b8060ff1660401080156158ea575060478160ff16105b156158ff576001946036199091019350915050565b8060ff166060108015615915575060678160ff16105b1561592a576001946056199091019350915050565b50600093849350915050565b60006001600160601b0382111561397b5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b60648201526084016104cc565b8280548282559060005260206000209081019282156159f3579160200282015b828111156159f357825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906159be565b5061397b929150615ade565b8280548282559060005260206000209081019282156159f3579160200282015b828111156159f3578251825591602001919060010190615a1f565b828054828255906000526020600020908101928215615a80579160200282015b82811115615a805782518290615a709082616d37565b5091602001919060010190615a5a565b5061397b929150615af3565b828054828255906000526020600020908101928215615ad2579160200282015b82811115615ad25782518290615ac29082616d37565b5091602001919060010190615aac565b5061397b929150615b10565b5b8082111561397b5760008155600101615adf565b8082111561397b576000615b078282615b2d565b50600101615af3565b8082111561397b576000615b248282615b2d565b50600101615b10565b508054615b39906167f4565b6000825580601f10615b49575050565b601f01602090049060005260206000209081019061125d9190615ade565b600060208284031215615b7957600080fd5b5035919050565b600060208284031215615b9257600080fd5b81356001600160e01b0319811681146122ae57600080fd5b803560ff81168114611a0e57600080fd5b60008083601f840112615bcd57600080fd5b5081356001600160401b03811115615be457600080fd5b602083019150836020828501011115615bfc57600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715615c4157615c41615c03565b604052919050565b60006001600160401b03821115615c6257615c62615c03565b50601f01601f191660200190565b600082601f830112615c8157600080fd5b8135615c94615c8f82615c49565b615c19565b818152846020838601011115615ca957600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060008060008060e0898b031215615ce257600080fd5b88359750615cf260208a01615baa565b965060408901356001600160401b0380821115615d0e57600080fd5b615d1a8c838d01615bbb565b909850965060608b0135915080821115615d3357600080fd5b50615d408b828c01615c70565b945050615d4f60808a01615baa565b925060a0890135915060c089013590509295985092959890939650565b60005b83811015615d87578181015183820152602001615d6f565b50506000910152565b60008151808452615da8816020860160208601615d6c565b601f01601f19169290920160200192915050565b6020815260006122ae6020830184615d90565b6001600160a01b038116811461125d57600080fd5b60008060008060808587031215615dfa57600080fd5b8435615e0581615dcf565b93506020850135615e1581615dcf565b92506040850135915060608501356001600160401b03811115615e3757600080fd5b615e4387828801615c70565b91505092959194509250565b60006001600160401b03821115615e6857615e68615c03565b5060051b60200190565b600082601f830112615e8357600080fd5b81356020615e93615c8f83615e4f565b82815260059290921b84018101918181019086841115615eb257600080fd5b8286015b84811015615ed6578035615ec981615dcf565b8352918301918301615eb6565b509695505050505050565b600082601f830112615ef257600080fd5b81356020615f02615c8f83615e4f565b82815260059290921b84018101918181019086841115615f2157600080fd5b8286015b84811015615ed65780358352918301918301615f25565b600082601f830112615f4d57600080fd5b81356020615f5d615c8f83615e4f565b82815260059290921b84018101918181019086841115615f7c57600080fd5b8286015b84811015615ed65780356001600160401b03811115615f9f5760008081fd5b615fad8986838b0101615c70565b845250918301918301615f80565b60008060008060808587031215615fd157600080fd5b84356001600160401b0380821115615fe857600080fd5b615ff488838901615e72565b9550602087013591508082111561600a57600080fd5b61601688838901615ee1565b9450604087013591508082111561602c57600080fd5b5061603987828801615f3c565b949793965093946060013593505050565b600081518084526020808501945080840160005b838110156160835781516001600160a01b03168752958201959082019060010161605e565b509495945050505050565b600081518084526020808501945080840160005b83811015616083578151875295820195908201906001016160a2565b600081518084526020808501808196508360051b8101915082860160005b858110156161065782840389526160f4848351615d90565b988501989350908401906001016160dc565b5091979650505050505050565b608081526000616126608083018761604a565b8281036020840152616138818761608e565b9050828103604084015261614c81866160be565b9050828103606084015261190e81856160be565b600080600080600060a0868803121561617857600080fd5b8535945061618860208701615baa565b935061619660408701615baa565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b60208101600883106161e657634e487b7160e01b600052602160045260246000fd5b91905290565b600080604083850312156161ff57600080fd5b82359150602083013561621181615dcf565b809150509250929050565b60006020828403121561622e57600080fd5b81356122ae81615dcf565b6000806040838503121561624c57600080fd5b8235915061625c60208401615baa565b90509250929050565b60008060008060006080868803121561627d57600080fd5b8535945061628d60208701615baa565b935060408601356001600160401b03808211156162a957600080fd5b6162b589838a01615bbb565b909550935060608801359150808211156162ce57600080fd5b506162db88828901615c70565b9150509295509295909350565b600080600080606085870312156162fe57600080fd5b8435935061630e60208601615baa565b925060408501356001600160401b0381111561632957600080fd5b61633587828801615bbb565b95989497509550505050565b6000806000806080858703121561635757600080fd5b84356001600160401b038082111561636e57600080fd5b61637a88838901615e72565b9550602087013591508082111561639057600080fd5b61639c88838901615ee1565b945060408701359150808211156163b257600080fd5b6163be88838901615f3c565b935060608701359150808211156163d457600080fd5b50615e4387828801615c70565b60ff60f81b8816815260e06020820152600061640060e0830189615d90565b82810360408401526164128189615d90565b606084018890526001600160a01b038716608085015260a0840186905283810360c085015290506111c7818561608e565b60008060006060848603121561645857600080fd5b833561646381615dcf565b92506020840135915060408401356001600160401b0381111561648557600080fd5b61649186828701615c70565b9150509250925092565b600080600080604085870312156164b157600080fd5b84356001600160401b03808211156164c857600080fd5b6164d488838901615bbb565b909650945060208701359150808211156164ed57600080fd5b5061633587828801615bbb565b600080600080600060a0868803121561651257600080fd5b853561651d81615dcf565b9450602086013561652d81615dcf565b935060408601356001600160401b038082111561654957600080fd5b61655589838a01615ee1565b9450606088013591508082111561656b57600080fd5b61657789838a01615ee1565b935060808801359150808211156162ce57600080fd5b600080600080606085870312156165a357600080fd5b84356165ae81615dcf565b93506020850135925060408501356001600160401b0381111561632957600080fd5b6000602082840312156165e257600080fd5b81356001600160401b03811681146122ae57600080fd5b600082601f83011261660a57600080fd5b8135602061661a615c8f83615e4f565b82815260059290921b8401810191818101908684111561663957600080fd5b8286015b84811015615ed65780356001600160401b0381111561665c5760008081fd5b61666a8986838b0101615c70565b84525091830191830161663d565b600080600080600060a0868803121561669057600080fd5b85356001600160401b03808211156166a757600080fd5b6166b389838a01615e72565b965060208801359150808211156166c957600080fd5b6166d589838a01615ee1565b955060408801359150808211156166eb57600080fd5b6166f789838a016165f9565b9450606088013591508082111561670d57600080fd5b61657789838a01615f3c565b6000806040838503121561672c57600080fd5b823561673781615dcf565b946020939093013593505050565b600080600080600060a0868803121561675d57600080fd5b853561676881615dcf565b9450602086013561677881615dcf565b9350604086013592506060860135915060808601356001600160401b038111156167a157600080fd5b6162db88828901615c70565b8183823760009101908152919050565b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b600181811c9082168061680857607f821691505b60208210810361682857634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b60006020828403121561688157600080fd5b5051919050565b60a08152600061689b60a083018861604a565b82810360208401526168ad818861608e565b905082810360408401526168c181876160be565b60608401959095525050608001529392505050565b60c0815260006168e960c083018961604a565b82810360208401526168fb818961608e565b9050828103604084015261690f81886160be565b60608401969096525050608081019290925260a0909101529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156110d7576110d761692e565b65ffffffffffff8281168282160390808211156169765761697661692e565b5092915050565b60006020828403121561698f57600080fd5b81516001600160401b038111156169a557600080fd5b8201601f810184136169b657600080fd5b80516169c4615c8f82615c49565b8181528560208385010111156169d957600080fd5b61195d826020830160208601615d6c565b818103818111156110d7576110d761692e565b634e487b7160e01b600052603260045260246000fd5b600060018201616a2557616a2561692e565b5060010190565b600060208284031215616a3e57600080fd5b815165ffffffffffff811681146122ae57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b604081526000616a91604083018688616a54565b828103602084015261190e818587616a54565b608081526000616ab7608083018761604a565b8281036020840152616ac9818761608e565b90508281036040840152616add81866160be565b91505082606083015295945050505050565b80820281158282048414176110d7576110d761692e565b634e487b7160e01b600052601260045260246000fd5b600082616b3957634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215616b5057600080fd5b815180151581146122ae57600080fd5b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251616bbd818460208701615d6c565b9190910192915050565b6001600160e01b0319831681528151600090616bea816004850160208701615d6c565b919091016004019392505050565b6001600160401b038181168382160190808211156169765761697661692e565b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b8981526001600160a01b038916602082015261012060408201819052600090616c848382018b61604a565b90508281036060840152616c98818a61608e565b90508281036080840152616cac81896160be565b905082810360a0840152616cc081886160be565b90508560c08401528460e0840152828103610100840152616ce18185615d90565b9c9b505050505050505050505050565b601f821115613b6657600081815260208120601f850160051c81016020861015616d185750805b601f850160051c820191505b8181101561194757828155600101616d24565b81516001600160401b03811115616d5057616d50615c03565b616d6481616d5e84546167f4565b84616cf1565b602080601f831160018114616d995760008415616d815750858301515b600019600386901b1c1916600185901b178555611947565b600085815260208120601f198616915b82811015616dc857888601518255948401946001909101908401616da9565b5085821015616de65787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b84815260ff84166020820152826040820152608060608201526000611c0b6080830184615d90565b85815260ff8516602082015283604082015260a060608201526000616e4660a0830185615d90565b8281036080840152616e588185615d90565b9897505050505050505056fe476f7665726e6f723a2072656c617920726576657274656420776974686f7574206d657373616765a164736f6c6343000812000a" + }, + "0x0000000000000000000000000000000000002005": { + "balance": "0x0", + "code": "0x608060405234801561001057600080fd5b50600436106102955760003560e01c806379cc679011610167578063a9059cbb116100ce578063dd62ed3e11610087578063dd62ed3e14610598578063df8079e9146105ab578063e5ed5b1e146105b4578063f1127ed8146105c7578063f9a2bbc714610604578063fd6a68791461060d57600080fd5b8063a9059cbb14610544578063aa82dce114610557578063c3cda52014610560578063c81b166214610573578063d505accf1461057c578063dc927faf1461058f57600080fd5b806391ddadf41161012057806391ddadf4146104e557806395d89b41146105045780639ab24eb01461050c5780639dc092621461051f578063a1a11bf514610528578063a457c2d71461053157600080fd5b806379cc6790146104805780637e434d54146104935780637ecebe001461049c5780638129fc1c146104af57806384b0196e146104b75780638e539e8c146104d257600080fd5b80633a71f2f21161020b578063587cde1e116101c4578063587cde1e146103de5780635c19a95c1461040a5780636e47b4821461041d5780636fcfff451461042657806370a082311461044e57806375d47a0a1461047757600080fd5b80633a71f2f21461039357806342966c68146103a857806343756e5c146103bb5780634bf5d7e9146103c457806351b4dce3146103cc57806351e80672146103d557600080fd5b806323b872dd1161025d57806323b872dd1461033a578063280870281461034d578063313ce567146103565780633644e51514610365578063395093511461036d5780633a46b1a81461038057600080fd5b8063039c91fc1461029a57806306fdde03146102d9578063095ea7b3146102ee5780630e2374a51461031157806318160ddd14610332575b600080fd5b6102c66102a8366004612379565b61013060209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b6102e1610616565b6040516102d091906123f2565b6103016102fc366004612405565b6106a8565b60405190151581526020016102d0565b61031a61200181565b6040516001600160a01b0390911681526020016102d0565b6035546102c6565b61030161034836600461242f565b6106c2565b61031a61200581565b604051601281526020016102d0565b6102c66106e6565b61030161037b366004612405565b6106f5565b6102c661038e366004612405565b610717565b6103a66103a136600461246b565b6107a1565b005b6103a66103b63660046124ef565b610845565b61031a61100181565b6102e1610852565b61031a61200681565b61031a61200081565b61031a6103ec366004612508565b6001600160a01b03908116600090815260fe60205260409020541690565b6103a6610418366004612508565b6108ea565b61031a61100581565b610439610434366004612508565b6108f4565b60405163ffffffff90911681526020016102d0565b6102c661045c366004612508565b6001600160a01b031660009081526033602052604090205490565b61031a61100881565b6103a661048e366004612405565b610916565b61031a61200381565b6102c66104aa366004612508565b61092f565b6103a661094d565b6104bf610b98565b6040516102d09796959493929190612523565b6102c66104e03660046124ef565b610c36565b6104ed610c9e565b60405165ffffffffffff90911681526020016102d0565b6102e1610ca9565b6102c661051a366004612508565b610cb8565b61031a61100781565b61031a61100681565b61030161053f366004612405565b610d3a565b610301610552366004612405565b610db5565b61031a61200281565b6103a661056e3660046125ca565b610dc3565b61031a61100281565b6103a661058a366004612622565b610ef9565b61031a61100381565b6102c66105a6366004612379565b61105d565b61031a61200481565b6103a66105c2366004612379565b611088565b6105da6105d536600461268c565b6110e3565b60408051825163ffffffff1681526020928301516001600160e01b031692810192909252016102d0565b61031a61100081565b61031a61100481565b606060368054610625906126cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610651906126cc565b801561069e5780601f106106735761010080835404028352916020019161069e565b820191906000526020600020905b81548152906001019060200180831161068157829003601f168201915b5050505050905090565b6000336106b6818585611167565b60019150505b92915050565b6000336106d085828561128b565b6106db858585611305565b506001949350505050565b60006106f0611344565b905090565b6000336106b6818585610708838361105d565b6107129190612716565b611167565b6000610721610c9e565b65ffffffffffff1682106107785760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260ff6020526040902061079a908361134e565b9392505050565b33612002146107f25760405162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206d757374206265207374616b6548756200604482015260640161076f565b8160005b8181101561083e5761082e85858381811061081357610813612729565b90506020020160208101906108289190612508565b84611437565b6108378161273f565b90506107f6565b5050505050565b61084f3382611563565b50565b60604361085d610c9e565b65ffffffffffff16146108b25760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a2062726f6b656e20636c6f636b206d6f6465000000604482015260640161076f565b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b61084f338261156d565b6001600160a01b038116600090815260ff60205260408120546106bc906115e7565b61092182338361128b565b61092b8282611563565b5050565b6001600160a01b038116600090815260cb60205260408120546106bc565b600054610100900460ff161580801561096d5750600054600160ff909116105b806109875750303b158015610987575060005460ff166001145b6109ea5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161076f565b6000805460ff191660011790558015610a0d576000805461ff0019166101001790555b334114610a725760405162461bcd60e51b815260206004820152602d60248201527f746865206d6573736167652073656e646572206d75737420626520746865206260448201526c3637b1b590383937b23ab1b2b960991b606482015260840161076f565b3a15610ab75760405162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b604482015260640161076f565b610b0b604051806040016040528060148152602001732129a19023b7bb32b93730b731b2902a37b5b2b760611b8152506040518060400160405280600681526020016533b7bb21272160d11b815250611650565b610b13611681565b610b48604051806040016040528060148152602001732129a19023b7bb32b93730b731b2902a37b5b2b760611b8152506116aa565b610b50611681565b801561084f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150565b6000606080600080600060606097546000801b148015610bb85750609854155b610bfc5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b604482015260640161076f565b610c046116f4565b610c0c611703565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b6000610c40610c9e565b65ffffffffffff168210610c925760405162461bcd60e51b815260206004820152601960248201527804552433230566f7465733a20667574757265206c6f6f6b757603c1b604482015260640161076f565b6106bc6101008361134e565b60006106f043611712565b606060378054610625906126cc565b6001600160a01b038116600090815260ff60205260408120548015610d27576001600160a01b038316600090815260ff6020526040902080546000198301908110610d0557610d05612729565b60009182526020909120015464010000000090046001600160e01b0316610d2a565b60005b6001600160e01b03169392505050565b60003381610d48828661105d565b905083811015610da85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161076f565b6106db8286868403611167565b6000336106b6818585611305565b83421115610e135760405162461bcd60e51b815260206004820152601d60248201527f4552433230566f7465733a207369676e61747572652065787069726564000000604482015260640161076f565b604080517fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf60208201526001600160a01b038816918101919091526060810186905260808101859052600090610e8d90610e859060a00160405160208183030381529060405280519060200120611779565b8585856117a6565b9050610e98816117ce565b8614610ee65760405162461bcd60e51b815260206004820152601960248201527f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000604482015260640161076f565b610ef0818861156d565b50505050505050565b83421115610f495760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161076f565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610f788c6117ce565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090506000610fd382611779565b90506000610fe3828787876117a6565b9050896001600160a01b0316816001600160a01b0316146110465760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161076f565b6110518a8a8a611167565b50505050505050505050565b6001600160a01b03918216600090815260346020908152604080832093909416825291909152205490565b33612002146110d95760405162461bcd60e51b815260206004820152601f60248201527f746865206d73672073656e646572206d757374206265207374616b6548756200604482015260640161076f565b61092b828261156d565b60408051808201909152600080825260208201526001600160a01b038316600090815260ff60205260409020805463ffffffff841690811061112757611127612729565b60009182526020918290206040805180820190915291015463ffffffff8116825264010000000090046001600160e01b0316918101919091529392505050565b6001600160a01b0383166111c95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b03821661122a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526034602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611297848461105d565b905060001981146112ff57818110156112f25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161076f565b6112ff8484848403611167565b50505050565b60405162461bcd60e51b81526020600482015260146024820152731d1c985b9cd9995c881b9bdd08185b1b1bddd95960621b604482015260640161076f565b60006106f06117f6565b8154600090818160058111156113a85760006113698461186a565b611373908561276e565b600088815260209020909150869082015463ffffffff161115611398578091506113a6565b6113a3816001612716565b92505b505b808210156113f55760006113bc8383611952565b600088815260209020909150869082015463ffffffff1611156113e1578091506113ef565b6113ec816001612716565b92505b506113a8565b8015611421576000868152602090208101600019015464010000000090046001600160e01b0316611424565b60005b6001600160e01b03169695505050505050565b604051630913db4760e01b81526001600160a01b03828116600483015260009190841690630913db4790602401602060405180830381865afa158015611481573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a59190612781565b6001600160a01b03808516600090815261013060209081526040808320938716835292905220549091508181101561151e5760006114e3828461276e565b6001600160a01b038087166000908152610130602090815260408083209389168352929052208490559050611518848261196d565b506112ff565b818111156112ff576000611532838361276e565b6001600160a01b03808716600090815261013060209081526040808320938916835292905220849055905061083e84825b61092b8282611977565b6001600160a01b03828116600081815260fe6020818152604080842080546033845282862054949093528787166001600160a01b03198416811790915590519190951694919391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46112ff828483611990565b600063ffffffff82111561164c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203360448201526532206269747360d01b606482015260840161076f565b5090565b600054610100900460ff166116775760405162461bcd60e51b815260040161076f9061279a565b61092b8282611ace565b600054610100900460ff166116a85760405162461bcd60e51b815260040161076f9061279a565b565b600054610100900460ff166116d15760405162461bcd60e51b815260040161076f9061279a565b61084f81604051806040016040528060018152602001603160f81b815250611b0e565b606060998054610625906126cc565b6060609a8054610625906126cc565b600065ffffffffffff82111561164c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203460448201526538206269747360d01b606482015260840161076f565b60006106bc611786611344565b8360405161190160f01b8152600281019290925260228201526042902090565b60008060006117b787878787611b5d565b915091506117c481611c21565b5095945050505050565b6001600160a01b038116600090815260cb602052604090208054600181018255905b50919050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611821611d6b565b611829611dc4565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b60008160000361187c57506000919050565b6000600161188984611df5565b901c6001901b905060018184816118a2576118a26127e5565b048201901c905060018184816118ba576118ba6127e5565b048201901c905060018184816118d2576118d26127e5565b048201901c905060018184816118ea576118ea6127e5565b048201901c90506001818481611902576119026127e5565b048201901c9050600181848161191a5761191a6127e5565b048201901c90506001818481611932576119326127e5565b048201901c905061079a8182858161194c5761194c6127e5565b04611e89565b600061196160028484186127fb565b61079a90848416612716565b61092b8282611e9f565b6119818282611f2a565b6112ff61010061206583612071565b816001600160a01b0316836001600160a01b0316141580156119b25750600081115b15611ac9576001600160a01b03831615611a40576001600160a01b038316600090815260ff6020526040812081906119ed9061206585612071565b91509150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611a35929190918252602082015260400190565b60405180910390a250505b6001600160a01b03821615611ac9576001600160a01b038216600090815260ff602052604081208190611a76906121e685612071565b91509150836001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051611abe929190918252602082015260400190565b60405180910390a250505b505050565b600054610100900460ff16611af55760405162461bcd60e51b815260040161076f9061279a565b6036611b01838261286b565b506037611ac9828261286b565b600054610100900460ff16611b355760405162461bcd60e51b815260040161076f9061279a565b6099611b41838261286b565b50609a611b4e828261286b565b50506000609781905560985550565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115611b945750600090506003611c18565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611be8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116611c1157600060019250925050611c18565b9150600090505b94509492505050565b6000816004811115611c3557611c3561292b565b03611c3d5750565b6001816004811115611c5157611c5161292b565b03611c9e5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161076f565b6002816004811115611cb257611cb261292b565b03611cff5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161076f565b6003816004811115611d1357611d1361292b565b0361084f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161076f565b600080611d766116f4565b805190915015611d8d578051602090910120919050565b6097548015611d9c5792915050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4709250505090565b600080611dcf611703565b805190915015611de6578051602090910120919050565b6098548015611d9c5792915050565b600080608083901c15611e0a57608092831c92015b604083901c15611e1c57604092831c92015b602083901c15611e2e57602092831c92015b601083901c15611e4057601092831c92015b600883901c15611e5257600892831c92015b600483901c15611e6457600492831c92015b600283901c15611e7657600292831c92015b600183901c156106bc5760010192915050565b6000818310611e98578161079a565b5090919050565b611ea982826121f2565b6035546001600160e01b031015611f1b5760405162461bcd60e51b815260206004820152603060248201527f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60448201526f766572666c6f77696e6720766f74657360801b606482015260840161076f565b6112ff6101006121e683612071565b6001600160a01b038216611f8a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b6001600160a01b03821660009081526033602052604090205481811015611ffe5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161076f565b6001600160a01b03831660008181526033602090815260408083208686039055603580548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611ac9836000846122b7565b600061079a828461276e565b825460009081908181156120be5760008781526020902082016000190160408051808201909152905463ffffffff8116825264010000000090046001600160e01b031660208201526120d3565b60408051808201909152600080825260208201525b905080602001516001600160e01b031693506120f384868863ffffffff16565b925060008211801561211d5750612108610c9e565b65ffffffffffff16816000015163ffffffff16145b156121625761212b836122c2565b60008881526020902083016000190180546001600160e01b03929092166401000000000263ffffffff9092169190911790556121dc565b866040518060400160405280612186612179610c9e565b65ffffffffffff166115e7565b63ffffffff16815260200161219a866122c2565b6001600160e01b0390811690915282546001810184556000938452602093849020835194909301519091166401000000000263ffffffff909316929092179101555b5050935093915050565b600061079a8284612716565b6001600160a01b0382166122485760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b806035600082825461225a9190612716565b90915550506001600160a01b0382166000818152603360209081526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a361092b600083835b611ac983838361232b565b60006001600160e01b0382111561164c5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20326044820152663234206269747360c81b606482015260840161076f565b6001600160a01b03838116600090815260fe6020526040808220548584168352912054611ac992918216911683611990565b80356001600160a01b038116811461237457600080fd5b919050565b6000806040838503121561238c57600080fd5b6123958361235d565b91506123a36020840161235d565b90509250929050565b6000815180845260005b818110156123d2576020818501810151868301820152016123b6565b506000602082860101526020601f19601f83011685010191505092915050565b60208152600061079a60208301846123ac565b6000806040838503121561241857600080fd5b6124218361235d565b946020939093013593505050565b60008060006060848603121561244457600080fd5b61244d8461235d565b925061245b6020850161235d565b9150604084013590509250925092565b60008060006040848603121561248057600080fd5b833567ffffffffffffffff8082111561249857600080fd5b818601915086601f8301126124ac57600080fd5b8135818111156124bb57600080fd5b8760208260051b85010111156124d057600080fd5b6020928301955093506124e6918601905061235d565b90509250925092565b60006020828403121561250157600080fd5b5035919050565b60006020828403121561251a57600080fd5b61079a8261235d565b60ff60f81b881681526000602060e08184015261254360e084018a6123ac565b8381036040850152612555818a6123ac565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b818110156125a75783518352928401929184019160010161258b565b50909c9b505050505050505050505050565b803560ff8116811461237457600080fd5b60008060008060008060c087890312156125e357600080fd5b6125ec8761235d565b95506020870135945060408701359350612608606088016125b9565b92506080870135915060a087013590509295509295509295565b600080600080600080600060e0888a03121561263d57600080fd5b6126468861235d565b96506126546020890161235d565b95506040880135945060608801359350612670608089016125b9565b925060a0880135915060c0880135905092959891949750929550565b6000806040838503121561269f57600080fd5b6126a88361235d565b9150602083013563ffffffff811681146126c157600080fd5b809150509250929050565b600181811c908216806126e057607f821691505b6020821081036117f057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156106bc576106bc612700565b634e487b7160e01b600052603260045260246000fd5b60006001820161275157612751612700565b5060010190565b634e487b7160e01b600052604160045260246000fd5b818103818111156106bc576106bc612700565b60006020828403121561279357600080fd5b5051919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052601260045260246000fd5b60008261281857634e487b7160e01b600052601260045260246000fd5b500490565b601f821115611ac957600081815260208120601f850160051c810160208610156128445750805b601f850160051c820191505b8181101561286357828155600101612850565b505050505050565b815167ffffffffffffffff81111561288557612885612758565b6128998161289384546126cc565b8461281d565b602080601f8311600181146128ce57600084156128b65750858301515b600019600386901b1c1916600185901b178555612863565b600085815260208120601f198616915b828110156128fd578886015182559484019460019091019084016128de565b508582101561291b5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052602160045260246000fdfea164736f6c6343000812000a" + }, + "0x0000000000000000000000000000000000002006": { + "balance": "0x0", + "code": "0x60806040526004361061028c5760003560e01c80638065657f1161015a578063bc197c81116100c1578063df8079e91161007a578063df8079e9146107ab578063e38335e5146107c1578063f23a6e61146107d4578063f27a0c9214610800578063f9a2bbc714610815578063fd6a68791461082b57600080fd5b8063bc197c81146106e6578063c4d252f514610712578063c81b166214610732578063d45c443514610748578063d547741f14610775578063dc927faf1461079557600080fd5b8063a1a11bf511610113578063a1a11bf514610643578063a217fddf14610659578063aa82dce11461066e578063ac43175114610684578063b08e51c0146106a4578063b1c5f427146106c657600080fd5b80638065657f146105965780638129fc1c146105b65780638f2a0bb0146105cb5780638f61f4f5146105eb57806391d148541461060d5780639dc092621461062d57600080fd5b80632f2ff15d116101fe578063584b153e116101b7578063584b153e146104fe57806364d623531461051e5780636e47b4821461053e57806375d47a0a146105545780637653d3f31461056a5780637e434d541461058057600080fd5b80632f2ff15d1461045c57806331d507501461047c57806336568abe1461049c57806343756e5c146104bc57806351b4dce3146104d257806351e80672146104e857600080fd5b8063134008d311610250578063134008d31461036f57806313bc9f2014610382578063150b7a02146103a2578063248a9ca3146103e657806328087028146104165780632ab0f5291461042c57600080fd5b806301d5062a1461029857806301ffc9a7146102ba57806307bd0265146102ef5780630d3cf6fc1461031f5780630e2374a51461034157600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102b86102b3366004611d9e565b610841565b005b3480156102c657600080fd5b506102da6102d5366004611e12565b610905565b60405190151581526020015b60405180910390f35b3480156102fb57600080fd5b5061031160008051602061288583398151915281565b6040519081526020016102e6565b34801561032b57600080fd5b5061031160008051602061284583398151915281565b34801561034d57600080fd5b5061035761200181565b6040516001600160a01b0390911681526020016102e6565b6102b861037d366004611e3c565b610930565b34801561038e57600080fd5b506102da61039d366004611ea7565b6109d3565b3480156103ae57600080fd5b506103cd6103bd366004611f75565b630a85bd0160e11b949350505050565b6040516001600160e01b031990911681526020016102e6565b3480156103f257600080fd5b50610311610401366004611ea7565b60009081526065602052604090206001015490565b34801561042257600080fd5b5061035761200581565b34801561043857600080fd5b506102da610447366004611ea7565b60009081526097602052604090205460011490565b34801561046857600080fd5b506102b8610477366004611fdc565b6109f9565b34801561048857600080fd5b506102da610497366004611ea7565b610a23565b3480156104a857600080fd5b506102b86104b7366004611fdc565b610a3c565b3480156104c857600080fd5b5061035761100181565b3480156104de57600080fd5b5061035761200681565b3480156104f457600080fd5b5061035761200081565b34801561050a57600080fd5b506102da610519366004611ea7565b610abf565b34801561052a57600080fd5b506102b8610539366004611ea7565b610ad6565b34801561054a57600080fd5b5061035761100581565b34801561056057600080fd5b5061035761100881565b34801561057657600080fd5b5061031161546081565b34801561058c57600080fd5b5061035761200381565b3480156105a257600080fd5b506103116105b1366004611e3c565b610b7a565b3480156105c257600080fd5b506102b8610bb9565b3480156105d757600080fd5b506102b86105e636600461204c565b610dd5565b3480156105f757600080fd5b5061031160008051602061286583398151915281565b34801561061957600080fd5b506102da610628366004611fdc565b610f56565b34801561063957600080fd5b5061035761100781565b34801561064f57600080fd5b5061035761100681565b34801561066557600080fd5b50610311600081565b34801561067a57600080fd5b5061035761200281565b34801561069057600080fd5b506102b861069f3660046120fd565b610f81565b3480156106b057600080fd5b506103116000805160206128a583398151915281565b3480156106d257600080fd5b506103116106e1366004612168565b6111f9565b3480156106f257600080fd5b506103cd61070136600461228f565b63bc197c8160e01b95945050505050565b34801561071e57600080fd5b506102b861072d366004611ea7565b61123e565b34801561073e57600080fd5b5061035761100281565b34801561075457600080fd5b50610311610763366004611ea7565b60009081526097602052604090205490565b34801561078157600080fd5b506102b8610790366004611fdc565b611301565b3480156107a157600080fd5b5061035761100381565b3480156107b757600080fd5b5061035761200481565b6102b86107cf366004612168565b611326565b3480156107e057600080fd5b506103cd6107ef366004612338565b63f23a6e6160e01b95945050505050565b34801561080c57600080fd5b50609854610311565b34801561082157600080fd5b5061035761100081565b34801561083757600080fd5b5061035761100481565b6000805160206128658339815191526108598161149e565b6000610869898989898989610b7a565b905061087581846114a8565b6000817f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8b8b8b8b8b8a6040516108b1969594939291906123c5565b60405180910390a383156108fa57807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d0387856040516108f191815260200190565b60405180910390a25b505050505050505050565b60006001600160e01b03198216630271189760e51b148061092a575061092a82611597565b92915050565b60008051602061288583398151915261094a816000610f56565b6109585761095881336115cc565b6000610968888888888888610b7a565b90506109748185611625565b610980888888886116c0565b6000817fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588a8a8a8a6040516109b89493929190612402565b60405180910390a36109c981611793565b5050505050505050565b6000818152609760205260408120546001811180156109f25750428111155b9392505050565b600082815260656020526040902060010154610a148161149e565b610a1e83836117cc565b505050565b60008181526097602052604081205481905b1192915050565b6001600160a01b0381163314610ab15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b60648201526084015b60405180910390fd5b610abb8282611852565b5050565b600081815260976020526040812054600190610a35565b333014610b395760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b436f6e74726f6c6c65723a2063616c6c6572206d7573742060448201526a62652074696d656c6f636b60a81b6064820152608401610aa8565b60985460408051918252602082018390527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a1609855565b6000868686868686604051602001610b97969594939291906123c5565b6040516020818303038152906040528051906020012090509695505050505050565b600054610100900460ff1615808015610bd95750600054600160ff909116105b80610bf35750303b158015610bf3575060005460ff166001145b610c565760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610aa8565b6000805460ff191660011790558015610c79576000805461ff0019166101001790555b334114610cde5760405162461bcd60e51b815260206004820152602d60248201527f746865206d6573736167652073656e646572206d75737420626520746865206260448201526c3637b1b590383937b23ab1b2b960991b6064820152608401610aa8565b3a15610d235760405162461bcd60e51b81526020600482015260146024820152736761737072696365206973206e6f74207a65726f60601b6044820152606401610aa8565b6040805160018082528183019092526000916020808301908036833701905050905061200481600081518110610d5b57610d5b612434565b60200260200101906001600160a01b031690816001600160a01b031681525050610d8b61546082836120046118b9565b508015610dd2576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b600080516020612865833981519152610ded8161149e565b888714610e0c5760405162461bcd60e51b8152600401610aa89061244a565b888514610e2b5760405162461bcd60e51b8152600401610aa89061244a565b6000610e3d8b8b8b8b8b8b8b8b6111f9565b9050610e4981846114a8565b60005b8a811015610f075780827f4cf4410cc57040e44862ef0f45f3dd5a5e02db8eb8add648d4b0e236f1d07dca8e8e85818110610e8957610e89612434565b9050602002016020810190610e9e919061248d565b8d8d86818110610eb057610eb0612434565b905060200201358c8c87818110610ec957610ec9612434565b9050602002810190610edb91906124a8565b8c8b604051610eef969594939291906123c5565b60405180910390a3610f0081612504565b9050610e4c565b508315610f4957807f20fda5fd27a1ea7bf5b9567f143ac5470bb059374a27e8f67cb44f946f6d038785604051610f4091815260200190565b60405180910390a25b5050505050505050505050565b60009182526065602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3361100714610fe95760405162461bcd60e51b815260206004820152602e60248201527f746865206d6573736167652073656e646572206d75737420626520676f76657260448201526d1b985b98d94818dbdb9d1c9858dd60921b6064820152608401610aa8565b604080516020601f8601819004810282018101909252848152829161104991908790879081908401838280828437600092019190915250506040805180820190915260088152676d696e44656c617960c01b602082015291506118f29050565b1561117d578060201461109e5760405162461bcd60e51b815260206004820152601d60248201527f696e76616c6964206d696e44656c61792076616c7565206c656e6774680000006044820152606401610aa8565b60006110e184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525086925061194b915050565b9050600081116111265760405162461bcd60e51b815260206004820152601060248201526f696e76616c6964206d696e44656c617960801b6044820152606401610aa8565b6040516364d6235360e01b81526004810182905230906364d6235390602401600060405180830381600087803b15801561115f57600080fd5b505af1158015611173573d6000803e3d6000fd5b50505050506111b5565b60405162461bcd60e51b815260206004820152600d60248201526c756e6b6e6f776e20706172616d60981b6044820152606401610aa8565b7ff1ce9b2cbf50eeb05769a29e2543fd350cab46894a7dd9978a12d534bb20e633858585856040516111ea949392919061251d565b60405180910390a15050505050565b6000888888888888888860405160200161121a9897969594939291906125d5565b60405160208183030381529060405280519060200120905098975050505050505050565b6000805160206128a58339815191526112568161149e565b61125f82610abf565b6112c55760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e2063616044820152701b9b9bdd0818994818d85b98d95b1b1959607a1b6064820152608401610aa8565b6000828152609760205260408082208290555183917fbaa1eb22f2a492ba1a5fea61b8df4d27c6c8b5f3971e63bb58fa14ff72eedb7091a25050565b60008281526065602052604090206001015461131c8161149e565b610a1e8383611852565b600080516020612885833981519152611340816000610f56565b61134e5761134e81336115cc565b87861461136d5760405162461bcd60e51b8152600401610aa89061244a565b87841461138c5760405162461bcd60e51b8152600401610aa89061244a565b600061139e8a8a8a8a8a8a8a8a6111f9565b90506113aa8185611625565b60005b898110156114885760008b8b838181106113c9576113c9612434565b90506020020160208101906113de919061248d565b905060008a8a848181106113f4576113f4612434565b9050602002013590503660008a8a8681811061141257611412612434565b905060200281019061142491906124a8565b91509150611434848484846116c0565b84867fc2617efa69bab66782fa219543714338489c4e9e178271560a91b82c3f612b588686868660405161146b9493929190612402565b60405180910390a3505050508061148190612504565b90506113ad565b5061149281611793565b50505050505050505050565b610dd281336115cc565b6114b182610a23565b156115165760405162461bcd60e51b815260206004820152602f60248201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e20616c60448201526e1c9958591e481cd8da19591d5b1959608a1b6064820152608401610aa8565b6098548110156115775760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a20696e73756666696369656e746044820152652064656c617960d01b6064820152608401610aa8565b6115818142612676565b6000928352609760205260409092209190915550565b60006001600160e01b03198216637965db0b60e01b148061092a57506301ffc9a760e01b6001600160e01b031983161461092a565b6115d68282610f56565b610abb576115e381611950565b6115ee836020611962565b6040516020016115ff9291906126ad565b60408051601f198184030181529082905262461bcd60e51b8252610aa891600401612722565b61162e826109d3565b61164a5760405162461bcd60e51b8152600401610aa890612755565b80158061166557506000818152609760205260409020546001145b610abb5760405162461bcd60e51b815260206004820152602660248201527f54696d656c6f636b436f6e74726f6c6c65723a206d697373696e6720646570656044820152656e64656e637960d01b6064820152608401610aa8565b6000846001600160a01b03168484846040516116dd92919061279f565b60006040518083038185875af1925050503d806000811461171a576040519150601f19603f3d011682016040523d82523d6000602084013e61171f565b606091505b505090508061178c5760405162461bcd60e51b815260206004820152603360248201527f54696d656c6f636b436f6e74726f6c6c65723a20756e6465726c79696e6720746044820152721c985b9cd858dd1a5bdb881c995d995c9d1959606a1b6064820152608401610aa8565b5050505050565b61179c816109d3565b6117b85760405162461bcd60e51b8152600401610aa890612755565b600090815260976020526040902060019055565b6117d68282610f56565b610abb5760008281526065602090815260408083206001600160a01b03851684529091529020805460ff1916600117905561180e3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b61185c8282610f56565b15610abb5760008281526065602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600054610100900460ff166118e05760405162461bcd60e51b8152600401610aa8906127af565b6118ec84848484611afd565b50505050565b60008160405160200161190591906127fa565b604051602081830303815290604052805190602001208360405160200161192c91906127fa565b6040516020818303038152906040528051906020012014905092915050565b015190565b606061092a6001600160a01b03831660145b60606000611971836002612816565b61197c906002612676565b6001600160401b0381111561199357611993611ec0565b6040519080825280601f01601f1916602001820160405280156119bd576020820181803683370190505b509050600360fc1b816000815181106119d8576119d8612434565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611a0757611a07612434565b60200101906001600160f81b031916908160001a9053506000611a2b846002612816565b611a36906001612676565b90505b6001811115611aae576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611a6a57611a6a612434565b1a60f81b828281518110611a8057611a80612434565b60200101906001600160f81b031916908160001a90535060049490941c93611aa78161282d565b9050611a39565b5083156109f25760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610aa8565b600054610100900460ff16611b245760405162461bcd60e51b8152600401610aa8906127af565b611b3c60008051602061284583398151915280611ce5565b611b62600080516020612865833981519152600080516020612845833981519152611ce5565b611b88600080516020612885833981519152600080516020612845833981519152611ce5565b611bae6000805160206128a5833981519152600080516020612845833981519152611ce5565b611bc660008051602061284583398151915230611d30565b6001600160a01b03811615611bed57611bed60008051602061284583398151915282611d30565b60005b8351811015611c5e57611c2a600080516020612865833981519152858381518110611c1d57611c1d612434565b6020026020010151611d30565b611c4e6000805160206128a5833981519152858381518110611c1d57611c1d612434565b611c5781612504565b9050611bf0565b5060005b8251811015611c9f57611c8f600080516020612885833981519152848381518110611c1d57611c1d612434565b611c9881612504565b9050611c62565b5060988490556040805160008152602081018690527f11c24f4ead16507c69ac467fbd5e4eed5fb5c699626d2cc6d66421df253886d5910160405180910390a150505050565b600082815260656020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b610abb82826117cc565b80356001600160a01b0381168114611d5157600080fd5b919050565b60008083601f840112611d6857600080fd5b5081356001600160401b03811115611d7f57600080fd5b602083019150836020828501011115611d9757600080fd5b9250929050565b600080600080600080600060c0888a031215611db957600080fd5b611dc288611d3a565b96506020880135955060408801356001600160401b03811115611de457600080fd5b611df08a828b01611d56565b989b979a50986060810135976080820135975060a09091013595509350505050565b600060208284031215611e2457600080fd5b81356001600160e01b0319811681146109f257600080fd5b60008060008060008060a08789031215611e5557600080fd5b611e5e87611d3a565b95506020870135945060408701356001600160401b03811115611e8057600080fd5b611e8c89828a01611d56565b979a9699509760608101359660809091013595509350505050565b600060208284031215611eb957600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715611efe57611efe611ec0565b604052919050565b600082601f830112611f1757600080fd5b81356001600160401b03811115611f3057611f30611ec0565b611f43601f8201601f1916602001611ed6565b818152846020838601011115611f5857600080fd5b816020850160208301376000918101602001919091529392505050565b60008060008060808587031215611f8b57600080fd5b611f9485611d3a565b9350611fa260208601611d3a565b92506040850135915060608501356001600160401b03811115611fc457600080fd5b611fd087828801611f06565b91505092959194509250565b60008060408385031215611fef57600080fd5b82359150611fff60208401611d3a565b90509250929050565b60008083601f84011261201a57600080fd5b5081356001600160401b0381111561203157600080fd5b6020830191508360208260051b8501011115611d9757600080fd5b600080600080600080600080600060c08a8c03121561206a57600080fd5b89356001600160401b038082111561208157600080fd5b61208d8d838e01612008565b909b50995060208c01359150808211156120a657600080fd5b6120b28d838e01612008565b909950975060408c01359150808211156120cb57600080fd5b506120d88c828d01612008565b9a9d999c50979a969997986060880135976080810135975060a0013595509350505050565b6000806000806040858703121561211357600080fd5b84356001600160401b038082111561212a57600080fd5b61213688838901611d56565b9096509450602087013591508082111561214f57600080fd5b5061215c87828801611d56565b95989497509550505050565b60008060008060008060008060a0898b03121561218457600080fd5b88356001600160401b038082111561219b57600080fd5b6121a78c838d01612008565b909a50985060208b01359150808211156121c057600080fd5b6121cc8c838d01612008565b909850965060408b01359150808211156121e557600080fd5b506121f28b828c01612008565b999c989b509699959896976060870135966080013595509350505050565b600082601f83011261222157600080fd5b813560206001600160401b0382111561223c5761223c611ec0565b8160051b61224b828201611ed6565b928352848101820192828101908785111561226557600080fd5b83870192505b848310156122845782358252918301919083019061226b565b979650505050505050565b600080600080600060a086880312156122a757600080fd5b6122b086611d3a565b94506122be60208701611d3a565b935060408601356001600160401b03808211156122da57600080fd5b6122e689838a01612210565b945060608801359150808211156122fc57600080fd5b61230889838a01612210565b9350608088013591508082111561231e57600080fd5b5061232b88828901611f06565b9150509295509295909350565b600080600080600060a0868803121561235057600080fd5b61235986611d3a565b945061236760208701611d3a565b9350604086013592506060860135915060808601356001600160401b0381111561239057600080fd5b61232b88828901611f06565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b038716815285602082015260a0604082015260006123ed60a08301868861239c565b60608301949094525060800152949350505050565b60018060a01b038516815283602082015260606040820152600061242a60608301848661239c565b9695505050505050565b634e487b7160e01b600052603260045260246000fd5b60208082526023908201527f54696d656c6f636b436f6e74726f6c6c65723a206c656e677468206d69736d616040820152620e8c6d60eb1b606082015260800190565b60006020828403121561249f57600080fd5b6109f282611d3a565b6000808335601e198436030181126124bf57600080fd5b8301803591506001600160401b038211156124d957600080fd5b602001915036819003821315611d9757600080fd5b634e487b7160e01b600052601160045260246000fd5b600060018201612516576125166124ee565b5060010190565b60408152600061253160408301868861239c565b828103602084015261228481858761239c565b81835260006020808501808196508560051b810191508460005b878110156125c85782840389528135601e1988360301811261257f57600080fd5b870185810190356001600160401b0381111561259a57600080fd5b8036038213156125a957600080fd5b6125b486828461239c565b9a87019a955050509084019060010161255e565b5091979650505050505050565b60a0808252810188905260008960c08301825b8b811015612616576001600160a01b0361260184611d3a565b168252602092830192909101906001016125e8565b5083810360208501528881526001600160fb1b0389111561263657600080fd5b8860051b9150818a6020830137018281036020908101604085015261265e9082018789612544565b60608401959095525050608001529695505050505050565b8082018082111561092a5761092a6124ee565b60005b838110156126a457818101518382015260200161268c565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e74200000000000000000008152600083516126e5816017850160208801612689565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612716816028840160208801612689565b01602801949350505050565b6020815260008251806020840152612741816040850160208701612689565b601f01601f19169190910160400192915050565b6020808252602a908201527f54696d656c6f636b436f6e74726f6c6c65723a206f7065726174696f6e206973604082015269206e6f7420726561647960b01b606082015260800190565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6000825161280c818460208701612689565b9190910192915050565b808202811582820484141761092a5761092a6124ee565b60008161283c5761283c6124ee565b50600019019056fe5f58e3a2316349923ce3780f8d587db2d72378aed66a8261c916544fa6846ca5b09aa5aeb3702cfd50b6b62bc4532604938f21248a27a1d5ca736082b6819cc1d8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63fd643c72710c63c0180259aba6b2d05451e3591a24e58b62239378085726f783a164736f6c6343000812000a" + }, "0x88cb4D8F77742c24d647BEf8049D3f3C56067cDD": { "balance": "0x100000000000000000000" }, diff --git a/lib/Deployer.sol b/lib/Deployer.sol deleted file mode 100644 index b9af68d3..00000000 --- a/lib/Deployer.sol +++ /dev/null @@ -1,161 +0,0 @@ -pragma solidity 0.8.16; - -import "forge-std/Test.sol"; -import "./interface/IBSCValidatorSet.sol"; -import "./interface/ICrossChain.sol"; -import "./interface/IGovHub.sol"; -import "./interface/IRelayerHub.sol"; -import "./interface/IRelayerIncentivize.sol"; -import "./interface/ISlashIndicator.sol"; -import "./interface/IStaking.sol"; -import "./interface/ISystemReward.sol"; -import "./interface/ITokenHub.sol"; -import "./interface/ITokenManager.sol"; -import "./interface/ITendermintLightClient.sol"; -import "../lib/RLPEncode.sol"; -import "../lib/RLPDecode.sol"; - -contract Deployer is Test { - using RLPEncode for *; - - // system contract address - address public constant VALIDATOR_CONTRACT_ADDR = 0x0000000000000000000000000000000000001000; - address public constant SLASH_CONTRACT_ADDR = 0x0000000000000000000000000000000000001001; - address public constant SYSTEM_REWARD_ADDR = 0x0000000000000000000000000000000000001002; - address public constant LIGHT_CLIENT_ADDR = 0x0000000000000000000000000000000000001003; - address public constant TOKEN_HUB_ADDR = 0x0000000000000000000000000000000000001004; - address public constant INCENTIVIZE_ADDR = 0x0000000000000000000000000000000000001005; - address public constant RELAYERHUB_CONTRACT_ADDR = 0x0000000000000000000000000000000000001006; - address public constant GOV_HUB_ADDR = 0x0000000000000000000000000000000000001007; - address public constant TOKEN_MANAGER_ADDR = 0x0000000000000000000000000000000000001008; - address public constant CROSS_CHAIN_CONTRACT_ADDR = 0x0000000000000000000000000000000000002000; - address public constant STAKING_CONTRACT_ADDR = 0x0000000000000000000000000000000000002001; - - uint8 public constant BIND_CHANNELID = 0x01; - uint8 public constant TRANSFER_IN_CHANNELID = 0x02; - uint8 public constant TRANSFER_OUT_CHANNELID = 0x03; - uint8 public constant MIRROR_CHANNELID = 0x04; - uint8 public constant SYNC_CHANNELID = 0x05; - uint8 public constant STAKING_CHANNELID = 0x08; - uint8 public constant GOV_CHANNELID = 0x09; - uint8 public constant SLASH_CHANNELID = 0x0b; - uint8 public constant CROSS_STAKE_CHANNELID = 0x10; - - BSCValidatorSet public validator; - SlashIndicator public slash; - SystemReward public systemReward; - TendermintLightClient public lightClient; - TokenHub public tokenHub; - RelayerIncentivize public incentivize; - RelayerHub public relayerHub; - GovHub public govHub; - TokenManager public tokenManager; - CrossChain public crossChain; - Staking public staking; - - address payable public relayer; - address payable[] public addrSet; - uint256 public addrIdx; - - bytes32 internal nextUser = keccak256(abi.encodePacked("user address")); - - constructor() { - // create fork - // you should modify this for your own test, which generally should be the bsc mainnet latest number - vm.createSelectFork("bsc", 23839447); - - validator = BSCValidatorSet(VALIDATOR_CONTRACT_ADDR); - vm.label(address(validator), "Validator"); - slash = SlashIndicator(SLASH_CONTRACT_ADDR); - vm.label(address(slash), "SlashIndicator"); - systemReward = SystemReward(SYSTEM_REWARD_ADDR); - vm.label(address(systemReward), "SystemReward"); - lightClient = TendermintLightClient(LIGHT_CLIENT_ADDR); - vm.label(address(lightClient), "LightClient"); - tokenHub = TokenHub(TOKEN_HUB_ADDR); - vm.label(address(tokenHub), "TokenHub"); - incentivize = RelayerIncentivize(INCENTIVIZE_ADDR); - vm.label(address(incentivize), "RelayerIncentivize"); - relayerHub = RelayerHub(RELAYERHUB_CONTRACT_ADDR); - vm.label(address(relayerHub), "RelayerHub"); - govHub = GovHub(GOV_HUB_ADDR); - vm.label(address(govHub), "GovHub"); - tokenManager = TokenManager(TOKEN_MANAGER_ADDR); - vm.label(address(tokenManager), "TokenManager"); - crossChain = CrossChain(CROSS_CHAIN_CONTRACT_ADDR); - vm.label(address(crossChain), "CrossChain"); - staking = Staking(STAKING_CONTRACT_ADDR); - vm.label(address(staking), "Staking"); - - addrSet = createUsers(100); - - relayer = payable(0xb005741528b86F5952469d80A8614591E3c5B632); // whitelabel relayer - vm.label(relayer, "relayer"); - } - - // create users with 1,000,000 ether balance - function createUsers(uint256 userNum) public returns (address payable[] memory) { - address payable[] memory users = new address payable[](userNum); - for (uint256 i = 0; i < userNum; ++i) { - address payable user = _getNextUserAddress(); - vm.deal(user, 1_000_000 ether); - users[i] = user; - } - return users; - } - - function _getNextUserAddress() internal returns (address payable) { - //bytes32 to address conversion - address payable user = payable(address(uint160(uint256(nextUser)))); - nextUser = keccak256(abi.encodePacked(nextUser)); - return user; - } - - function updateParamByGovHub(bytes memory key, bytes memory value, address addr) public { - bytes[] memory elements = new bytes[](3); - elements[0] = key.encodeBytes(); - elements[1] = value.encodeBytes(); - elements[2] = addr.encodeAddress(); - - vm.startPrank(address(crossChain)); - govHub.handleSynPackage(GOV_CHANNELID, elements.encodeList()); - vm.stopPrank(); - } - - function encodeOldValidatorSetUpdatePack(uint8 code, address[] memory valSet) internal pure returns (bytes memory) { - bytes[] memory elements = new bytes[](2); - elements[0] = code.encodeUint(); - - bytes[] memory vals = new bytes[](valSet.length); - for (uint256 i; i < valSet.length; ++i) { - bytes[] memory tmp = new bytes[](4); - tmp[0] = valSet[i].encodeAddress(); - tmp[1] = valSet[i].encodeAddress(); - tmp[2] = valSet[i].encodeAddress(); - tmp[3] = uint8(0x64).encodeUint(); - vals[i] = tmp.encodeList(); - } - - elements[1] = vals.encodeList(); - return elements.encodeList(); - } - - function encodeNewValidatorSetUpdatePack(uint8 code, address[] memory valSet, bytes[] memory voteAddrs) internal pure returns (bytes memory) { - bytes[] memory elements = new bytes[](2); - elements[0] = code.encodeUint(); - - bytes[] memory vals = new bytes[](valSet.length); - for (uint256 i; i < valSet.length; ++i) { - bytes[] memory tmp = new bytes[](5); - tmp[0] = valSet[i].encodeAddress(); - tmp[1] = valSet[i].encodeAddress(); - tmp[2] = valSet[i].encodeAddress(); - tmp[3] = uint8(0x64).encodeUint(); - tmp[4] = voteAddrs[i].encodeBytes(); - vals[i] = tmp.encodeList(); - } - - elements[1] = vals.encodeList(); - return elements.encodeList(); - } -} diff --git a/lib/interface/IDEFToken.sol b/lib/interface/IDEFToken.sol deleted file mode 100644 index 551707d8..00000000 --- a/lib/interface/IDEFToken.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.8.10; - -interface DEFToken { - event Approval(address indexed owner, address indexed spender, uint256 value); - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - event Transfer(address indexed from, address indexed to, uint256 value); - - function _decimals() external view returns (uint8); - function _name() external view returns (string memory); - function _symbol() external view returns (string memory); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function getOwner() external view returns (address); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function name() external view returns (string memory); - function owner() external view returns (address); - function renounceOwnership() external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; -} diff --git a/lib/interface/IMaliciousToken.sol b/lib/interface/IMaliciousToken.sol deleted file mode 100644 index f3ae3d70..00000000 --- a/lib/interface/IMaliciousToken.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.8.10; - -interface MaliciousToken { - event Approval(address indexed owner, address indexed spender, uint256 value); - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - event Transfer(address indexed from, address indexed to, uint256 value); - - function _decimals() external view returns (uint8); - function _name() external view returns (string memory); - function _symbol() external view returns (string memory); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function getOwner() external view returns (address); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function name() external view returns (string memory); - function owner() external view returns (address); - function renounceOwnership() external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address, uint256) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; -} diff --git a/lib/interface/IMiniToken.sol b/lib/interface/IMiniToken.sol deleted file mode 100644 index 5ef899bb..00000000 --- a/lib/interface/IMiniToken.sol +++ /dev/null @@ -1,26 +0,0 @@ -pragma solidity ^0.8.10; - -interface MiniToken { - event Approval(address indexed owner, address indexed spender, uint256 value); - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - event Transfer(address indexed from, address indexed to, uint256 value); - - function _decimals() external view returns (uint8); - function _name() external view returns (string memory); - function _symbol() external view returns (string memory); - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function getOwner() external view returns (address); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function name() external view returns (string memory); - function owner() external view returns (address); - function renounceOwnership() external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; -} diff --git a/lib/interface/IXYZToken.sol b/lib/interface/IXYZToken.sol deleted file mode 100644 index b12a7d46..00000000 --- a/lib/interface/IXYZToken.sol +++ /dev/null @@ -1,28 +0,0 @@ -pragma solidity ^0.8.10; - -interface XYZToken { - event Approval(address indexed owner, address indexed spender, uint256 value); - event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); - event Transfer(address indexed from, address indexed to, uint256 value); - - function allowance(address owner, address spender) external view returns (uint256); - function approve(address spender, uint256 amount) external returns (bool); - function balanceOf(address account) external view returns (uint256); - function decimals() external view returns (uint8); - function decreaseAllowance(address spender, uint256 subtractedValue) external returns (bool); - function getOwner() external view returns (address); - function increaseAllowance(address spender, uint256 addedValue) external returns (bool); - function mint(uint256 amount) external returns (bool); - function name() external view returns (string memory); - function owner() external view returns (address); - function renounceOwnership() external; - function setDecimals(uint8 newDecimals) external; - function setName(string memory newName) external; - function setSymbol(string memory newSymbol) external; - function setTotalSupply(uint256 newTotalSupply) external; - function symbol() external view returns (string memory); - function totalSupply() external view returns (uint256); - function transfer(address recipient, uint256 amount) external returns (bool); - function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); - function transferOwnership(address newOwner) external; -} diff --git a/package-lock.json b/package-lock.json index 541c7165..767b5500 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,9 +9,10 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts-upgradeable": "^4.9.3", "commander": "^3.0.1", "nunjucks": "^3.2.0", - "openzeppelin-solidity": "v3.0.0-rc.0", "rlp": "^2.2.7", "web3": "^1.7.0" }, @@ -301,6 +302,16 @@ "url": "https://paulmillr.com/funding/" } }, + "node_modules/@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + }, + "node_modules/@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==" + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -2393,11 +2404,6 @@ "wrappy": "1" } }, - "node_modules/openzeppelin-solidity": { - "version": "3.0.0-rc.0", - "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-3.0.0-rc.0.tgz", - "integrity": "sha512-cftpu1YvJgYbYcUVlTAOi+JvMF+hkvwdjLtA3ZLiBjVfEsf5HQGKL293dr/F31PRZSGurH+31Y0RxOPUvExGQQ==" - }, "node_modules/p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", @@ -3996,6 +4002,16 @@ "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", "dev": true }, + "@openzeppelin/contracts": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts/-/contracts-4.9.3.tgz", + "integrity": "sha512-He3LieZ1pP2TNt5JbkPA4PNT9WC3gOTOlDcFGJW4Le4QKqwmiNJCRt44APfxMxvq7OugU/cqYuPcSBzOw38DAg==" + }, + "@openzeppelin/contracts-upgradeable": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-4.9.3.tgz", + "integrity": "sha512-jjaHAVRMrE4UuZNfDwjlLGDxTHWIOwTJS2ldnc278a0gevfXfPr8hxKEVBGFBE96kl2G3VHDZhUimw/+G3TG2A==" + }, "@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -5778,11 +5794,6 @@ "wrappy": "1" } }, - "openzeppelin-solidity": { - "version": "3.0.0-rc.0", - "resolved": "https://registry.npmjs.org/openzeppelin-solidity/-/openzeppelin-solidity-3.0.0-rc.0.tgz", - "integrity": "sha512-cftpu1YvJgYbYcUVlTAOi+JvMF+hkvwdjLtA3ZLiBjVfEsf5HQGKL293dr/F31PRZSGurH+31Y0RxOPUvExGQQ==" - }, "p-cancelable": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", diff --git a/package.json b/package.json index fcaa6f13..a59595f0 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,18 @@ "description": "", "author": "", "license": "MIT", + "scripts": { + "lint:check": "forge fmt ./contracts/BC_fusion --check", + "lint:write": "forge fmt ./contracts/BC_fusion", + "generate:mainnet": "poetry run python -m scripts.generate mainnet", + "generate:testnet": "poetry run python -m scripts.generate testnet", + "generate:dev": "poetry run python -m scripts.generate dev --epoch \"20\" --misdemeanor-threshold \"5\" --felony-threshold \"10\" --init-felony-slash-scope \"60\" --breathe-block-interval \"1 minutes\" --block-interval \"3 seconds\" --init-bc-consensus-addresses 'hex\"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000f39fd6e51aad88f6f4ce6ab8827279cfffb9226600000000000000000000000070997970c51812dc3a010c7d01b50e0d17dc79c80000000000000000000000003c44cdddb6a900fa2b585dd299e03d12fa4293bc\"' --init-bc-vote-addresses 'hex\"00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000000030b86b3146bdd2200b1dbdb1cea5e40d3451c028cbb4fb03b1826f7f2d82bee76bbd5cd68a74a16a7eceea093fd5826b9200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003087ce273bb9b51fd69e50de7a8d9a99cfb3b1a5c6a7b85f6673d137a5a2ce7df3d6ee4e6d579a142d58b0606c4a7a1c27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000030a33ac14980d85c0d154c5909ebf7a11d455f54beb4d5d0dc1d8b3670b9c4a6b6c450ee3d623ecc48026f09ed1f0b5c1200000000000000000000000000000000\"' --stake-hub-protector \"0xdF87F0e2B8519Ea2DD4aBd8B639cdD628497eD25\" --unbond-period \"2 minutes\" --downtime-jail-time \"2 minutes\" --felony-jail-time \"3 minutes\" --init-voting-delay \"1 minutes / BLOCK_INTERVAL\" --init-voting-period \"2 minutes / BLOCK_INTERVAL\" --init-min-period-after-quorum \"uint64(1 minutes / BLOCK_INTERVAL)\" --governor-protector \"0xdF87F0e2B8519Ea2DD4aBd8B639cdD628497eD25\" --init-minimal-delay \"1 minutes\" --lock-period-for-token-recover \"1 minutes\"" + }, "dependencies": { + "@openzeppelin/contracts": "^4.9.3", + "@openzeppelin/contracts-upgradeable": "^4.9.3", "commander": "^3.0.1", "nunjucks": "^3.2.0", - "openzeppelin-solidity": "v3.0.0-rc.0", "rlp": "^2.2.7", "web3": "^1.7.0" }, diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..418cd0f2 --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1787 @@ +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. + +[[package]] +name = "aiohttp" +version = "3.9.1" +description = "Async http client/server framework (asyncio)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e1f80197f8b0b846a8d5cf7b7ec6084493950d0882cc5537fb7b96a69e3c8590"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c72444d17777865734aa1a4d167794c34b63e5883abb90356a0364a28904e6c0"}, + {file = "aiohttp-3.9.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9b05d5cbe9dafcdc733262c3a99ccf63d2f7ce02543620d2bd8db4d4f7a22f83"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c4fa235d534b3547184831c624c0b7c1e262cd1de847d95085ec94c16fddcd5"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:289ba9ae8e88d0ba16062ecf02dd730b34186ea3b1e7489046fc338bdc3361c4"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bff7e2811814fa2271be95ab6e84c9436d027a0e59665de60edf44e529a42c1f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81b77f868814346662c96ab36b875d7814ebf82340d3284a31681085c051320f"}, + {file = "aiohttp-3.9.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b9c7426923bb7bd66d409da46c41e3fb40f5caf679da624439b9eba92043fa6"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8d44e7bf06b0c0a70a20f9100af9fcfd7f6d9d3913e37754c12d424179b4e48f"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:22698f01ff5653fe66d16ffb7658f582a0ac084d7da1323e39fd9eab326a1f26"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ca7ca5abfbfe8d39e653870fbe8d7710be7a857f8a8386fc9de1aae2e02ce7e4"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:8d7f98fde213f74561be1d6d3fa353656197f75d4edfbb3d94c9eb9b0fc47f5d"}, + {file = "aiohttp-3.9.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5216b6082c624b55cfe79af5d538e499cd5f5b976820eac31951fb4325974501"}, + {file = "aiohttp-3.9.1-cp310-cp310-win32.whl", hash = "sha256:0e7ba7ff228c0d9a2cd66194e90f2bca6e0abca810b786901a569c0de082f489"}, + {file = "aiohttp-3.9.1-cp310-cp310-win_amd64.whl", hash = "sha256:c7e939f1ae428a86e4abbb9a7c4732bf4706048818dfd979e5e2839ce0159f23"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:df9cf74b9bc03d586fc53ba470828d7b77ce51b0582d1d0b5b2fb673c0baa32d"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ecca113f19d5e74048c001934045a2b9368d77b0b17691d905af18bd1c21275e"}, + {file = "aiohttp-3.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8cef8710fb849d97c533f259103f09bac167a008d7131d7b2b0e3a33269185c0"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea94403a21eb94c93386d559bce297381609153e418a3ffc7d6bf772f59cc35"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91c742ca59045dce7ba76cab6e223e41d2c70d79e82c284a96411f8645e2afff"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c93b7c2e52061f0925c3382d5cb8980e40f91c989563d3d32ca280069fd6a87"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee2527134f95e106cc1653e9ac78846f3a2ec1004cf20ef4e02038035a74544d"}, + {file = "aiohttp-3.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:11ff168d752cb41e8492817e10fb4f85828f6a0142b9726a30c27c35a1835f01"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b8c3a67eb87394386847d188996920f33b01b32155f0a94f36ca0e0c635bf3e3"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c7b5d5d64e2a14e35a9240b33b89389e0035e6de8dbb7ffa50d10d8b65c57449"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:69985d50a2b6f709412d944ffb2e97d0be154ea90600b7a921f95a87d6f108a2"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:c9110c06eaaac7e1f5562caf481f18ccf8f6fdf4c3323feab28a93d34cc646bd"}, + {file = "aiohttp-3.9.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d737e69d193dac7296365a6dcb73bbbf53bb760ab25a3727716bbd42022e8d7a"}, + {file = "aiohttp-3.9.1-cp311-cp311-win32.whl", hash = "sha256:4ee8caa925aebc1e64e98432d78ea8de67b2272252b0a931d2ac3bd876ad5544"}, + {file = "aiohttp-3.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:a34086c5cc285be878622e0a6ab897a986a6e8bf5b67ecb377015f06ed316587"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f800164276eec54e0af5c99feb9494c295118fc10a11b997bbb1348ba1a52065"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:500f1c59906cd142d452074f3811614be04819a38ae2b3239a48b82649c08821"}, + {file = "aiohttp-3.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0b0a6a36ed7e164c6df1e18ee47afbd1990ce47cb428739d6c99aaabfaf1b3af"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69da0f3ed3496808e8cbc5123a866c41c12c15baaaead96d256477edf168eb57"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:176df045597e674fa950bf5ae536be85699e04cea68fa3a616cf75e413737eb5"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b796b44111f0cab6bbf66214186e44734b5baab949cb5fb56154142a92989aeb"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f27fdaadce22f2ef950fc10dcdf8048407c3b42b73779e48a4e76b3c35bca26c"}, + {file = "aiohttp-3.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bcb6532b9814ea7c5a6a3299747c49de30e84472fa72821b07f5a9818bce0f66"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:54631fb69a6e44b2ba522f7c22a6fb2667a02fd97d636048478db2fd8c4e98fe"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4b4c452d0190c5a820d3f5c0f3cd8a28ace48c54053e24da9d6041bf81113183"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:cae4c0c2ca800c793cae07ef3d40794625471040a87e1ba392039639ad61ab5b"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:565760d6812b8d78d416c3c7cfdf5362fbe0d0d25b82fed75d0d29e18d7fc30f"}, + {file = "aiohttp-3.9.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54311eb54f3a0c45efb9ed0d0a8f43d1bc6060d773f6973efd90037a51cd0a3f"}, + {file = "aiohttp-3.9.1-cp312-cp312-win32.whl", hash = "sha256:85c3e3c9cb1d480e0b9a64c658cd66b3cfb8e721636ab8b0e746e2d79a7a9eed"}, + {file = "aiohttp-3.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:11cb254e397a82efb1805d12561e80124928e04e9c4483587ce7390b3866d213"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8a22a34bc594d9d24621091d1b91511001a7eea91d6652ea495ce06e27381f70"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:598db66eaf2e04aa0c8900a63b0101fdc5e6b8a7ddd805c56d86efb54eb66672"}, + {file = "aiohttp-3.9.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2c9376e2b09895c8ca8b95362283365eb5c03bdc8428ade80a864160605715f1"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41473de252e1797c2d2293804e389a6d6986ef37cbb4a25208de537ae32141dd"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c5857612c9813796960c00767645cb5da815af16dafb32d70c72a8390bbf690"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ffcd828e37dc219a72c9012ec44ad2e7e3066bec6ff3aaa19e7d435dbf4032ca"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:219a16763dc0294842188ac8a12262b5671817042b35d45e44fd0a697d8c8361"}, + {file = "aiohttp-3.9.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f694dc8a6a3112059258a725a4ebe9acac5fe62f11c77ac4dcf896edfa78ca28"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:bcc0ea8d5b74a41b621ad4a13d96c36079c81628ccc0b30cfb1603e3dfa3a014"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:90ec72d231169b4b8d6085be13023ece8fa9b1bb495e4398d847e25218e0f431"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:cf2a0ac0615842b849f40c4d7f304986a242f1e68286dbf3bd7a835e4f83acfd"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:0e49b08eafa4f5707ecfb321ab9592717a319e37938e301d462f79b4e860c32a"}, + {file = "aiohttp-3.9.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2c59e0076ea31c08553e868cec02d22191c086f00b44610f8ab7363a11a5d9d8"}, + {file = "aiohttp-3.9.1-cp38-cp38-win32.whl", hash = "sha256:4831df72b053b1eed31eb00a2e1aff6896fb4485301d4ccb208cac264b648db4"}, + {file = "aiohttp-3.9.1-cp38-cp38-win_amd64.whl", hash = "sha256:3135713c5562731ee18f58d3ad1bf41e1d8883eb68b363f2ffde5b2ea4b84cc7"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfeadf42840c1e870dc2042a232a8748e75a36b52d78968cda6736de55582766"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:70907533db712f7aa791effb38efa96f044ce3d4e850e2d7691abd759f4f0ae0"}, + {file = "aiohttp-3.9.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cdefe289681507187e375a5064c7599f52c40343a8701761c802c1853a504558"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7481f581251bb5558ba9f635db70908819caa221fc79ee52a7f58392778c636"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:49f0c1b3c2842556e5de35f122fc0f0b721334ceb6e78c3719693364d4af8499"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d406b01a9f5a7e232d1b0d161b40c05275ffbcbd772dc18c1d5a570961a1ca4"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d8e4450e7fe24d86e86b23cc209e0023177b6d59502e33807b732d2deb6975f"}, + {file = "aiohttp-3.9.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c0266cd6f005e99f3f51e583012de2778e65af6b73860038b968a0a8888487a"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab221850108a4a063c5b8a70f00dd7a1975e5a1713f87f4ab26a46e5feac5a0e"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c88a15f272a0ad3d7773cf3a37cc7b7d077cbfc8e331675cf1346e849d97a4e5"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:237533179d9747080bcaad4d02083ce295c0d2eab3e9e8ce103411a4312991a0"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:02ab6006ec3c3463b528374c4cdce86434e7b89ad355e7bf29e2f16b46c7dd6f"}, + {file = "aiohttp-3.9.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04fa38875e53eb7e354ece1607b1d2fdee2d175ea4e4d745f6ec9f751fe20c7c"}, + {file = "aiohttp-3.9.1-cp39-cp39-win32.whl", hash = "sha256:82eefaf1a996060602f3cc1112d93ba8b201dbf5d8fd9611227de2003dddb3b7"}, + {file = "aiohttp-3.9.1-cp39-cp39-win_amd64.whl", hash = "sha256:9b05d33ff8e6b269e30a7957bd3244ffbce2a7a35a81b81c382629b80af1a8bf"}, + {file = "aiohttp-3.9.1.tar.gz", hash = "sha256:8fc49a87ac269d4529da45871e2ffb6874e87779c3d0e2ccd813c0899221239d"}, +] + +[package.dependencies] +aiosignal = ">=1.1.2" +async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +attrs = ">=17.3.0" +frozenlist = ">=1.1.1" +multidict = ">=4.5,<7.0" +yarl = ">=1.0,<2.0" + +[package.extras] +speedups = ["Brotli", "aiodns", "brotlicffi"] + +[[package]] +name = "aiosignal" +version = "1.3.1" +description = "aiosignal: a list of registered asynchronous callbacks" +optional = false +python-versions = ">=3.7" +files = [ + {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, + {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, +] + +[package.dependencies] +frozenlist = ">=1.1.0" + +[[package]] +name = "async-timeout" +version = "4.0.3" +description = "Timeout context manager for asyncio programs" +optional = false +python-versions = ">=3.7" +files = [ + {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, + {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, +] + +[[package]] +name = "attrs" +version = "23.1.0" +description = "Classes Without Boilerplate" +optional = false +python-versions = ">=3.7" +files = [ + {file = "attrs-23.1.0-py3-none-any.whl", hash = "sha256:1f28b4522cdc2fb4256ac1a020c78acf9cba2c6b461ccd2c126f3aa8e8335d04"}, + {file = "attrs-23.1.0.tar.gz", hash = "sha256:6279836d581513a26f1bf235f9acd333bc9115683f14f7e8fae46c98fc50e015"}, +] + +[package.extras] +cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]", "pre-commit"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] +tests = ["attrs[tests-no-zope]", "zope-interface"] +tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] + +[[package]] +name = "bitarray" +version = "2.8.4" +description = "efficient arrays of booleans -- C extension" +optional = false +python-versions = "*" +files = [ + {file = "bitarray-2.8.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:69be498a39ac29ea4f8e4dce36e64342d4fe813eeffa7bd9ead4ce18309fb903"}, + {file = "bitarray-2.8.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6acbfa5b85717c91bfa1bc1702c1cc6a3d1500f832f2c3c040f0d4668c75b2b5"}, + {file = "bitarray-2.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:305f1aa2a3aedd033ab2ab1fc930c5f0a987bf993f3ecc83a224db237a95cd18"}, + {file = "bitarray-2.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8f7a1a4793c4dec2dc7c6c1fac5370123a24c6dabc7312fbce8766a0d5c40c8"}, + {file = "bitarray-2.8.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:87acfa228524b8564ba5d5a431ff6c708721ff7755f718992184bb9a81365f0e"}, + {file = "bitarray-2.8.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:45782033c17ea2d1c9967128bc69aee1417210b104fbda35d4da77d907afb3c5"}, + {file = "bitarray-2.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f343ea39f61f899bac145aac260dd456a98df59e4258ad8d395892b6b4759b20"}, + {file = "bitarray-2.8.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:52c8501aa71a353dbe8dd6440bbd3449d8ffcae843bff139f87b9a84149315ce"}, + {file = "bitarray-2.8.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bb23c806f175a88db60b3894bca4956f6d557ed0571b2fcc7818c1c83f000759"}, + {file = "bitarray-2.8.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:efbe1d873f916fa31235b8acec6a686e7b7e47e3e95490cbe8b257dabaa14d3b"}, + {file = "bitarray-2.8.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0690c5483e31d7e4d7f26b045baf7f9d0aa30e91fcf1c5117095652d149b1a96"}, + {file = "bitarray-2.8.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:2cc0c09edd3fa893303513d3fb9a0d335f20b19b3f0276fe752bf88ffd5522c0"}, + {file = "bitarray-2.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:045b813c3567818673f2dcd9c0b41a63214c5f5a9c230ede76ac211fbcf0185a"}, + {file = "bitarray-2.8.4-cp310-cp310-win32.whl", hash = "sha256:ddfd3632e5f04619d780f60e85a5fe082a8eebce33aefb08b6783779ff04d017"}, + {file = "bitarray-2.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:c19c27056cb34b352c064ac0d58ac7f7da29cd225cb3140b8ff69455e6858966"}, + {file = "bitarray-2.8.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6d83fda6e4d83742d60f522ce3bd61ce0d4690c19b73dc79ee8da2a48f2ef065"}, + {file = "bitarray-2.8.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de1f491b329e424f7e7b2874624a604c163ea05341f709cd47c1a46f4930ca97"}, + {file = "bitarray-2.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c8e25c5530bd6bb5a96ad11de2dc16bebbbec8b4e2c1600bf1ce78cbf36c96e6"}, + {file = "bitarray-2.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:602b429cedf3631cb3b36a7e08f484972b2e13bb0fc1e240b71935aef32bb9d9"}, + {file = "bitarray-2.8.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:102b988fdbb0b221bdb71dac7d96475bfa47a767ee0fc1014a9ad5be46ebd20b"}, + {file = "bitarray-2.8.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:665f88d204d4a8fd0fe63fea66c1a420b331887e72a2b10778d97d22182e8474"}, + {file = "bitarray-2.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:965e52d079e8746abe6d15e8b1da7b65d9f1ccb5bceb1aa410072f09a1cdb3fd"}, + {file = "bitarray-2.8.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b619c691c94f2770373a91144bbbe42056a993fa95aba67f87a7625f71384040"}, + {file = "bitarray-2.8.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c27b57205a6946de4dedb169d42f63d8f61e51a70e3096ffce18680c8407616c"}, + {file = "bitarray-2.8.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:2f8484bea6cededfacc2921fd5715e3132467d1df50f941635b91c9920dfd66f"}, + {file = "bitarray-2.8.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e7b705a7c3bb5c7a86a2e4bf5d4607e22194d821e050b5f5605a69ded99dc5c3"}, + {file = "bitarray-2.8.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:afb4e6edfeb6797165a25e5ea221992043c46b3475f7d4d96e2c25271dfea4d8"}, + {file = "bitarray-2.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2bb731fe68c07d5a3aeb9df798008e41999c933ed81786c7688b190f5082e079"}, + {file = "bitarray-2.8.4-cp311-cp311-win32.whl", hash = "sha256:22a0d11bf53553e2de20eb1dbf507bba32a6c28a2b84232ff5f28289ba9ec659"}, + {file = "bitarray-2.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8ace24f1b028dee7168556e0a83c1f608abe63f4b82dc05b26ad43495d8717bf"}, + {file = "bitarray-2.8.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1009f6a4117d50c2e9e4a2d6d5a03d0cb030f649dd410fbbef4d3f3a9aca40c9"}, + {file = "bitarray-2.8.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9a53bf859e4b54ad06dda20aa42a16dd36b03f11626beacc41b570f25cfcb471"}, + {file = "bitarray-2.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4991d8c2b4ccccd1ea9115dae5dc51b60b562bc627784e53c31aae5699a55932"}, + {file = "bitarray-2.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7832ecd8adc5ef9f0af7c376ea4ab8ba66077da45e1d00da9f93366cbfb70dfe"}, + {file = "bitarray-2.8.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:644fc022c5b3973472e39930f43c113865f9ba1b4e918b52f5921d709af0e9e3"}, + {file = "bitarray-2.8.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99cd2f5dd46e886a63bc08dbb44ae63b16eeff94d714be55ce41ff86604bbc97"}, + {file = "bitarray-2.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e938552f8fd83ecdde6f43d7f91854fa2604cc7c7e2929fed78c3779c843ba6"}, + {file = "bitarray-2.8.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6910610f1f54e7b9e5aa5311acff812e5ae2ca5f6c041a40c9201f768c4a6893"}, + {file = "bitarray-2.8.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8becb576748328b2fdf9740a973e62f41de83702a92761e0ff441b65ebe25fce"}, + {file = "bitarray-2.8.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8b1c84803dd57f8b81397dcc24eca73bc44f1c5da36b440f358372b50c7bb7da"}, + {file = "bitarray-2.8.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:2e15d244cb7dab42cb1f31933da3b66d6405b1db969917460c094ba8441ea5a0"}, + {file = "bitarray-2.8.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:55d52dd5af45dfb09e9b107749b4fcad4a3774d5429345faa47ab459ae478de0"}, + {file = "bitarray-2.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ef2dbbb2924c5048bea586ddf204607c8e91fbe70b95a7dce1d5b5403f2ef06f"}, + {file = "bitarray-2.8.4-cp312-cp312-win32.whl", hash = "sha256:7ecd20dfef83d3180d9f851476e5e3d9a76973e24432721f7cc8cac52a646d3a"}, + {file = "bitarray-2.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:e7ac4f3cc1cdbe5b31bce988260ac12ae0e273ec6108bf35de66384599fabc25"}, + {file = "bitarray-2.8.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ebdaea27ada24e53d673c46a8a4bba8e1904fa8589512bd3146382d877ab4be9"}, + {file = "bitarray-2.8.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf6e39e296422588c39eaa8bea17c3d5af9335c7273691615e6aa262f3a1c469"}, + {file = "bitarray-2.8.4-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6bbd70d2a0be93349ee76652992164d89dab54e55cb05d302d4375851b60d173"}, + {file = "bitarray-2.8.4-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ed4e54d4425c9f5eb766ff8ee4b992fe0011575a7da5daa8bf898675c684808c"}, + {file = "bitarray-2.8.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f18e53a47619ef092cb28ac1f1f2b457ad68177369a5c02a1da930f5f0a43d78"}, + {file = "bitarray-2.8.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a1232d989dc37b2b0d760ed3cd040f848a7578417d0bda24e544e73f5d6b02a"}, + {file = "bitarray-2.8.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:3df0ac492e4e795e26710ee20cfd25c7bfd81c3866490078fcc7d97ccc74b01f"}, + {file = "bitarray-2.8.4-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:06d9ad81d56547b2b256e70a819eb4eefa4e7e21595b06b4102666a71eb4b961"}, + {file = "bitarray-2.8.4-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:7bc9808782e3147fb71b44129f3dfabfbe839bc35954f9f7f3dd8dd4c149413c"}, + {file = "bitarray-2.8.4-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:56cc56c382167360a94e36a54a3a14320ecbe9e8ca672574c739703136d0b5e0"}, + {file = "bitarray-2.8.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:de8b30056fe36947d50597680aa016f5a9a59f2621b496ca0fe8ad037ee63f76"}, + {file = "bitarray-2.8.4-cp36-cp36m-win32.whl", hash = "sha256:d80a356e6123b0910171ab7b2ce4d058146170748f11b7ec3c005da54bfbc059"}, + {file = "bitarray-2.8.4-cp36-cp36m-win_amd64.whl", hash = "sha256:00bb1de6d3c68e18fb16c6c7390e68bc656a60dfde4004d5649c792b8871a531"}, + {file = "bitarray-2.8.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6db1bc132b3ee46bb79a1d86bfadce71d581943156004e481045ce903f1979db"}, + {file = "bitarray-2.8.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27b824ae449cd38c8c77349ae7d27dc11662c9c40806729943dd175c91334a4c"}, + {file = "bitarray-2.8.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7947134bc4b28a00c07616e07013680628954bc93daa4cbab99a6d7aea402809"}, + {file = "bitarray-2.8.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c392d44cc072255e88efc4335be67ebdfb88ae4b3757bd573c49fae35e23470"}, + {file = "bitarray-2.8.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c787dbacf218cde121611706e2bb6a64e3fb566a828bab7d608c6c96cfec8a4"}, + {file = "bitarray-2.8.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c59e589f162dffb8bea47fb8108961891df5d54d3a1c59660f211a53084438cd"}, + {file = "bitarray-2.8.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1d1efcf28571909ea4c12184d51bd953370fd28ec227b1ded7cb88563c17d42a"}, + {file = "bitarray-2.8.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:afe8bedc9893a358a29430e98164a902816fd7787f92b476193a0de7aae4b985"}, + {file = "bitarray-2.8.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:64e6e316452d8018d11954698f9898a2ee69fe2f1093333c2650a4b91246c675"}, + {file = "bitarray-2.8.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:02f8002eac8ba7796e05690f317056c6ddd40ac88f73d1dd3405c5d4df15a61d"}, + {file = "bitarray-2.8.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d26fdf9d680eb9738e8b58ab7946cb35ed8b076dac823189f2614d732565e89a"}, + {file = "bitarray-2.8.4-cp37-cp37m-win32.whl", hash = "sha256:9e52a186b68b5995c3756f243e286ea701470273ba938b9f83a0ef055edeb95e"}, + {file = "bitarray-2.8.4-cp37-cp37m-win_amd64.whl", hash = "sha256:3baf866f2674241b02ab9547acaae2f705e7e9ca5a620484e8b09a25fc625def"}, + {file = "bitarray-2.8.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2c9d06891a565bdc572dc8a2d76275fc3d51e63ddff51c3e03a9a95b600ca673"}, + {file = "bitarray-2.8.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:242f9ddfed9e7b70edb2888056af1710dfbf3767342d6ef1c110fe1d3b346ad6"}, + {file = "bitarray-2.8.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9245d3181346f1f608b56cb45fb21c080558426dac566074a2c4145daa411588"}, + {file = "bitarray-2.8.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eacc7d5ad4b120131da4c6cecd8ded5e545dab3654de592cf8901a7acfd58c18"}, + {file = "bitarray-2.8.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:228e20443c841585454e95e17cf66610c9c53c3a1c66f3a9bc90a1ce31218b9d"}, + {file = "bitarray-2.8.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3449769a8f6c6a39d3d8c8760d265ff754107715c8ad3d66e90961ea463e6284"}, + {file = "bitarray-2.8.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25e882da07d5735ee089cec12dc75d55b90434e607aae5522515f23132612091"}, + {file = "bitarray-2.8.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80eca1ef96a3b379026bcf531d7cbfbfad767da37ba4e90bc529e6695f88ba09"}, + {file = "bitarray-2.8.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6c8ebc5b2cf89b4dd2d407312eeec4ed1f999863a6d29d1d1834696f6db08ac8"}, + {file = "bitarray-2.8.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9849d06f254fffd45d35ba2b39694dbc839f6c5cca8990a509b3058588f23d77"}, + {file = "bitarray-2.8.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:2ff712ba8259599135d24fcc555dbca2dc32ff5d18e8efb8d47456d2467e630f"}, + {file = "bitarray-2.8.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e3fc442c3ae66c4f9a0d35f2c2a0e36f6a9c125b94c3db1ee8fa5af4dca51a57"}, + {file = "bitarray-2.8.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:275f4deacd4cee28311cee611cea64bf5ec197da4a95c23b2af00ecc1dee6e97"}, + {file = "bitarray-2.8.4-cp38-cp38-win32.whl", hash = "sha256:b349092caf10b6b0585e0ff0ed17e5fc8a88c3bdacb37b38778de4a1ae568827"}, + {file = "bitarray-2.8.4-cp38-cp38-win_amd64.whl", hash = "sha256:ed37c74e33c67f805e046c0e4d1af2007d4087d01748fa47a56ee3501c1bb597"}, + {file = "bitarray-2.8.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3be310edafc506a4f7c405d7d2d97274ab3ec3f2cbd2793705ccdb692559a009"}, + {file = "bitarray-2.8.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c334ab66657dc0250281d1deaaa0243bb2072da0939fc89cbce4513a79b7ebdc"}, + {file = "bitarray-2.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c6ab07a20fe548f4830bc3d795d4e8193616379abb8715fcf0391ca599cf4f4b"}, + {file = "bitarray-2.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3994b319e6f18040652b769ceb09e28b5546bffa29138019b788bafa8577478f"}, + {file = "bitarray-2.8.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:803dc8ca520db0db6e14bc61c52666a2344b5ff45c9c4524967f1920779ef64f"}, + {file = "bitarray-2.8.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a2f6cd2861922bf951451cd19c0f658d93ac313424ec705c59768626eb4b1f0"}, + {file = "bitarray-2.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98df463206a76ef02d8662490bafc6ca2d6dec10cfff3dda90798c0e4f330151"}, + {file = "bitarray-2.8.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da7086efb3d388078874b2fafd5042a5c6464e08ecb68bf3813c3b9d54d236b4"}, + {file = "bitarray-2.8.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:343876f1a38d9b2857f18f7d606be49b11344dc3b9c46f072760dec364a35a54"}, + {file = "bitarray-2.8.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:0488c1eaf83c993fc672115176cc6c27070d5abd5e673499ed46eeb87de52169"}, + {file = "bitarray-2.8.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:aadc4b8ac31ef4ac31f13ab416d5891ff1886b0c3115e88b4be53d3ce08e235f"}, + {file = "bitarray-2.8.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:bb05962feb649bbb5589eab89b9fa57679ce8285e647195bee76c8c0821fcf22"}, + {file = "bitarray-2.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:67accba68ceb3cb57bae9ed86ddd075043e373c4af6243e20c8f00153c5f374a"}, + {file = "bitarray-2.8.4-cp39-cp39-win32.whl", hash = "sha256:0adf959b63e314ea74c7d67ca6732c2a840769a7bcfe779d52d777ac6877d671"}, + {file = "bitarray-2.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:d0fc43f5f5ae113ad60b502ec1efee42218c21a1e00dd1bd7c82d00b25cf72ad"}, + {file = "bitarray-2.8.4-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:63e1bb1c98d6d3004e44cb1958393c631e79c640877086a7f403c223c18687cb"}, + {file = "bitarray-2.8.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea66a30fb0b9d3109db950b490f6aa211fb15162f097b20141b1aeb5057a670"}, + {file = "bitarray-2.8.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8aaea18c41dacf2bf1a6f81960c196f85e3991c9387c3d9bff97976be2c195a4"}, + {file = "bitarray-2.8.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad2b129e43998292f89f138dfda32ec1b9ba31e68b35a61948bc10bf53e94444"}, + {file = "bitarray-2.8.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6647e03def035371ce0ce073912d6594ed197f799aa34641f0acce343a8f7cca"}, + {file = "bitarray-2.8.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d31416540af1ad2994a33cf7f2e98e1e8f50722e410afc54ae99bdd6039a4f87"}, + {file = "bitarray-2.8.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c936d73deca901b600fb73c9aaf3630dd358f5ce35c5d5e1ea804b33796ecb5"}, + {file = "bitarray-2.8.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc936c0cea105c7773e6b8cc58ed2a3b168a3da9bbdec7466cee9725198607a9"}, + {file = "bitarray-2.8.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9978b0968acbc2d9160758e9f63af0fbda62f121ae596ad56cb06a8afd3d5aea"}, + {file = "bitarray-2.8.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:dcae87cbf2058a33286ce50e627bdd1a4875579103f6b933546ffb1a34ab8c2e"}, + {file = "bitarray-2.8.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b5d1d4300706891d197cf21b39f41b3c8047d081676d82eb8dcfeb8d0073c52b"}, + {file = "bitarray-2.8.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7095d8f486435ffcc42014aebba27c05b2a3b38d5d3630ebe77734db7653b272"}, + {file = "bitarray-2.8.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06bcd5c171ffedb7544ad9e5b77827cd3a3ccb0dd924ef703802743b8abcf303"}, + {file = "bitarray-2.8.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6328f73d4e623d4fff966cbe623f3e2b3378bdbfb6937ec492aba3fd9927862f"}, + {file = "bitarray-2.8.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:2d20ee30ea7640df29013021d130bee932d701f01b2f1cbbc1ba14f3954a6b1f"}, + {file = "bitarray-2.8.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:91a570f291a4d7ea4473f37b5e1ce377d771a8567a7a6b5f7b482023bd81b3ef"}, + {file = "bitarray-2.8.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18561539cf8ca5d1970b2b78a44a1b12ae21a18183664a080525c081a44b3997"}, + {file = "bitarray-2.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1abea439874652c3ad6ca6a6e893cfe4f2e2c149294dbe2a5c1cf7e2e1ef200"}, + {file = "bitarray-2.8.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a0f347672c5a8b67c36937872c75baec81e351f2209dc691608d3f76fa9e44e"}, + {file = "bitarray-2.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:cdd58e73a2e1bff848067a65afb77a7dcd1884050c22d18a0a7af5cf2428a3ee"}, + {file = "bitarray-2.8.4.tar.gz", hash = "sha256:2c0ba71445ee0932e510f1b0248f53b7a52926f1f78c93b868fcbe6536e61a1d"}, +] + +[[package]] +name = "certifi" +version = "2023.11.17" +description = "Python package for providing Mozilla's CA Bundle." +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, +] + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "click" +version = "8.1.7" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, + {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "cytoolz" +version = "0.12.2" +description = "Cython implementation of Toolz: High performance functional utilities" +optional = false +python-versions = ">=3.6" +files = [ + {file = "cytoolz-0.12.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4bff49986c9bae127928a2f9fd6313146a342bfae8292f63e562f872bd01b871"}, + {file = "cytoolz-0.12.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:908c13f305d34322e11b796de358edaeea47dd2d115c33ca22909c5e8fb036fd"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:735147aa41b8eeb104da186864b55e2a6623c758000081d19c93d759cd9523e3"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d352d4de060604e605abdc5c8a5d0429d5f156cb9866609065d3003454d4cea"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:89247ac220031a4f9f689688bcee42b38fd770d4cce294e5d914afc53b630abe"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9070ae35c410d644e6df98a8f69f3ed2807e657d0df2a26b2643127cbf6944a5"}, + {file = "cytoolz-0.12.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:843500cd3e4884b92fd4037912bc42d5f047108d2c986d36352e880196d465b0"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6a93644d7996fd696ab7f1f466cd75d718d0a00d5c8118b9fe8c64231dc1f85e"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:96796594c770bc6587376e74ddc7d9c982d68f47116bb69d90873db5e0ea88b6"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:48425107fbb1af3f0f2410c004f16be10ffc9374358e5600b57fa543f46f8def"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:cde6dbb788a4cbc4a80a72aa96386ba4c2b17bdfff3ace0709799adbe16d6476"}, + {file = "cytoolz-0.12.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:68ae7091cc73a752f0b938f15bb193de80ca5edf5ae2ea6360d93d3e9228357b"}, + {file = "cytoolz-0.12.2-cp310-cp310-win32.whl", hash = "sha256:997b7e0960072f6bb445402da162f964ea67387b9f18bda2361edcc026e13597"}, + {file = "cytoolz-0.12.2-cp310-cp310-win_amd64.whl", hash = "sha256:663911786dcde3e4a5d88215c722c531c7548903dc07d418418c0d1c768072c0"}, + {file = "cytoolz-0.12.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4a7d8b869ded171f6cdf584fc2fc6ae03b30a0e1e37a9daf213a59857a62ed90"}, + {file = "cytoolz-0.12.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9b28787eaf2174e68f0acb3c66f9c6b98bdfeb0930c0d0b08e1941c7aedc8d27"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00547da587f124b32b072ce52dd5e4b37cf199fedcea902e33c67548523e4678"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:275d53fd769df2102d6c9fc98e553bd8a9a38926f54d6b20cf29f0dd00bf3b75"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5556acde785a61d4cf8b8534ae109b023cbd2f9df65ee2afbe070be47c410f8c"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b41a85b9b9a2530b72b0d3d10e383fc3c2647ae88169d557d5e216f881860318"}, + {file = "cytoolz-0.12.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:673d6e9e3aa86949343b46ac2b7be266c36e07ce77fa1d40f349e6987a814d6e"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81e6a9a8fda78a2f4901d2915b25bf620f372997ca1f20a14f7cefef5ad6f6f4"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fa44215bc31675a6380cd896dadb7f2054a7b94cfb87e53e52af844c65406a54"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:a08b4346350660799d81d4016e748bcb134a9083301d41f9618f64a6077f89f2"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2fb740482794a72e2e5fec58e4d9b00dcd5a60a8cef68431ff12f2ba0e0d9a7e"}, + {file = "cytoolz-0.12.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9007bb1290c79402be6b84bcf9e7a622a073859d61fcee146dc7bc47afe328f3"}, + {file = "cytoolz-0.12.2-cp311-cp311-win32.whl", hash = "sha256:a973f5286758f76824ecf19ae1999f6697371a9121c8f163295d181d19a819d7"}, + {file = "cytoolz-0.12.2-cp311-cp311-win_amd64.whl", hash = "sha256:1ce324d1b413636ea5ee929f79637821f13c9e55e9588f38228947294944d2ed"}, + {file = "cytoolz-0.12.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c08094b9e5d1b6dfb0845a0253cc2655ca64ce70d15162dfdb102e28c8993493"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:baf020f4b708f800b353259cd7575e335a79f1ac912d9dda55b2aa0bf3616e42"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4416ee86a87180b6a28e7483102c92debc077bec59c67eda8cc63fc52a218ac0"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c6ee222671eed5c5b16a5ad2aea07f0a715b8b199ee534834bc1dd2798f1ade7"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad92e37be0b106fdbc575a3a669b43b364a5ef334495c9764de4c2d7541f7a99"}, + {file = "cytoolz-0.12.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460c05238fbfe6d848141669d17a751a46c923f9f0c9fd8a3a462ab737623a44"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9e5075e30be626ef0f9bedf7a15f55ed4d7209e832bc314fdc232dbd61dcbf44"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:03b58f843f09e73414e82e57f7e8d88f087eaabf8f276b866a40661161da6c51"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:5e4e612b7ecc9596e7c859cd9e0cd085e6d0c576b4f0d917299595eb56bf9c05"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:08a0e03f287e45eb694998bb55ac1643372199c659affa8319dfbbdec7f7fb3c"}, + {file = "cytoolz-0.12.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b029bdd5a8b6c9a7c0e8fdbe4fc25ffaa2e09b77f6f3462314696e3a20511829"}, + {file = "cytoolz-0.12.2-cp36-cp36m-win32.whl", hash = "sha256:18580d060fa637ff01541640ecde6de832a248df02b8fb57e6dd578f189d62c7"}, + {file = "cytoolz-0.12.2-cp36-cp36m-win_amd64.whl", hash = "sha256:97cf514a9f3426228d8daf880f56488330e4b2948a6d183a106921217850d9eb"}, + {file = "cytoolz-0.12.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18a0f838677f9510aef0330c0096778dd6406d21d4ff9504bf79d85235a18460"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb081b2b02bf4405c804de1ece6f904916838ab0e057f1446e4ac12fac827960"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57233e1600560ceb719bed759dc78393edd541b9a3e7fefc3079abd83c26a6ea"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0295289c4510efa41174850e75bc9188f82b72b1b54d0ea57d1781729c2924d5"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a92aab8dd1d427ac9bc7480cfd3481dbab0ef024558f2f5a47de672d8a5ffaa"}, + {file = "cytoolz-0.12.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:51d3495235af09f21aa92a7cdd51504bda640b108b6be834448b774f52852c09"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:f9c690b359f503f18bf1c46a6456370e4f6f3fc4320b8774ae69c4f85ecc6c94"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:481e3129a76ea01adcc0e7097ccb8dbddab1cfc40b6f0e32c670153512957c0f"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:55e94124af9c8fbb1df54195cc092688fdad0765641b738970b6f1d5ea72e776"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5616d386dfbfba7c39e9418ba668c734f6ceaacc0130877e8a100cad11e6838b"}, + {file = "cytoolz-0.12.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:732d08228fa8d366fec284f7032cc868d28a99fa81fc71e3adf7ecedbcf33a0f"}, + {file = "cytoolz-0.12.2-cp37-cp37m-win32.whl", hash = "sha256:f039c5373f7b314b151432c73219216857b19ab9cb834f0eb5d880f74fc7851c"}, + {file = "cytoolz-0.12.2-cp37-cp37m-win_amd64.whl", hash = "sha256:246368e983eaee9851b15d7755f82030eab4aa82098d2a34f6bef9c689d33fcc"}, + {file = "cytoolz-0.12.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:81074edf3c74bc9bd250d223408a5df0ff745d1f7a462597536cd26b9390e2d6"}, + {file = "cytoolz-0.12.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:960d85ebaa974ecea4e71fa56d098378fa51fd670ee744614cbb95bf95e28fc7"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c8d0dff4865da54ae825d43e1721925721b19f3b9aca8e730c2ce73dee2c630"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a9d12436fd64937bd2c9609605f527af7f1a8db6e6637639b44121c0fe715d6"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd461e402e24929d866f05061d2f8337e3a8456e75e21b72c125abff2477c7f7"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0568d4da0a9ee9f9f5ab318f6501557f1cfe26d18c96c8e0dac7332ae04c6717"}, + {file = "cytoolz-0.12.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:101b5bd32badfc8b1f9c7be04ba3ae04fb47f9c8736590666ce9449bff76e0b1"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8bb624dbaef4661f5e3625c1e39ad98ecceef281d1380e2774d8084ad0810275"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3e993804e6b04113d61fdb9541b6df2f096ec265a506dad7437517470919c90f"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ab911033e5937fc221a2c165acce7f66ae5ac9d3e54bec56f3c9c197a96be574"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e6de6a4bdfaee382c2de2a3580b3ae76fce6105da202bbd835e5efbeae6a9c6e"}, + {file = "cytoolz-0.12.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9480b4b327be83c4d29cb88bcace761b11f5e30198ffe2287889455c6819e934"}, + {file = "cytoolz-0.12.2-cp38-cp38-win32.whl", hash = "sha256:4180b2785d1278e6abb36a72ac97c92432db53fa2df00ee943d2c15a33627d31"}, + {file = "cytoolz-0.12.2-cp38-cp38-win_amd64.whl", hash = "sha256:d0086ba8d41d73647b13087a3ca9c020f6bfec338335037e8f5172b4c7c8dce5"}, + {file = "cytoolz-0.12.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d29988bde28a90a00367edcf92afa1a2f7ecf43ea3ae383291b7da6d380ccc25"}, + {file = "cytoolz-0.12.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:24c0d71e9ac91f4466b1bd280f7de43aa4d94682daaf34d85d867a9b479b87cc"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fa436abd4ac9ca71859baf5794614e6ec8fa27362f0162baedcc059048da55f7"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45c7b4eac7571707269ebc2893facdf87e359cd5c7cfbfa9e6bd8b33fb1079c5"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:294d24edc747ef4e1b28e54365f713becb844e7898113fafbe3e9165dc44aeea"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:478051e5ef8278b2429864c8d148efcebdc2be948a61c9a44757cd8c816c98f5"}, + {file = "cytoolz-0.12.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14108cafb140dd68fdda610c2bbc6a37bf052cd48cfebf487ed44145f7a2b67f"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5fef7b602ccf8a3c77ab483479ccd7a952a8c5bb1c263156671ba7aaa24d1035"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9bf51354e15520715f068853e6ab8190e77139940e8b8b633bdb587956a08fb0"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:388f840fd911d61a96e9e595eaf003f9dc39e847c9060b8e623ab29e556f009b"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:a67f75cc51a2dc7229a8ac84291e4d61dc5abfc8940befcf37a2836d95873340"}, + {file = "cytoolz-0.12.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:63b31345e20afda2ae30dba246955517a4264464d75e071fc2fa641e88c763ec"}, + {file = "cytoolz-0.12.2-cp39-cp39-win32.whl", hash = "sha256:f6e86ac2b45a95f75c6f744147483e0fc9697ce7dfe1726083324c236f873f8b"}, + {file = "cytoolz-0.12.2-cp39-cp39-win_amd64.whl", hash = "sha256:5998f81bf6a2b28a802521efe14d9fc119f74b64e87b62ad1b0e7c3d8366d0c7"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:593e89e2518eaf81e96edcc9ef2c5fca666e8fc922b03d5cb7a7b8964dbee336"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff451d614ca1d4227db0ffa627fb51df71968cf0d9baf0210528dad10fdbc3ab"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad9ea4a50d2948738351790047d45f2b1a023facc01bf0361988109b177e8b2f"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cbe038bb78d599b5a29d09c438905defaa615a522bc7e12f8016823179439497"}, + {file = "cytoolz-0.12.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d494befe648c13c98c0f3d56d05489c839c9228a32f58e9777305deb6c2c1cee"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:c26805b6c8dc8565ed91045c44040bf6c0fe5cb5b390c78cd1d9400d08a6cd39"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4e32badb2ccf1773e1e74020b7e3b8caf9e92f842c6be7d14888ecdefc2c6c"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce7889dc3701826d519ede93cdff11940fb5567dbdc165dce0e78047eece02b7"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c820608e7077416f766b148d75e158e454881961881b657cff808529d261dd24"}, + {file = "cytoolz-0.12.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:698da4fa1f7baeea0607738cb1f9877ed1ba50342b29891b0223221679d6f729"}, + {file = "cytoolz-0.12.2.tar.gz", hash = "sha256:31d4b0455d72d914645f803d917daf4f314d115c70de0578d3820deb8b101f66"}, +] + +[package.dependencies] +toolz = ">=0.8.0" + +[package.extras] +cython = ["cython"] + +[[package]] +name = "eth-abi" +version = "4.2.1" +description = "eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding" +optional = false +python-versions = ">=3.7.2, <4" +files = [ + {file = "eth_abi-4.2.1-py3-none-any.whl", hash = "sha256:abd83410a5326145bf178675c276de0ed154f6dc695dcad1beafaa44d97f44ae"}, + {file = "eth_abi-4.2.1.tar.gz", hash = "sha256:60d88788d53725794cdb07c0f0bb0df2a31a6e1ad19644313fe6117ac24eeeb0"}, +] + +[package.dependencies] +eth-typing = ">=3.0.0" +eth-utils = ">=2.0.0" +parsimonious = ">=0.9.0,<0.10.0" + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "eth-hash[pycryptodome]", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "hypothesis (>=4.18.2,<5.0.0)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-pythonpath (>=0.7.1)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)"] +test = ["eth-hash[pycryptodome]", "hypothesis (>=4.18.2,<5.0.0)", "pytest (>=7.0.0)", "pytest-pythonpath (>=0.7.1)", "pytest-xdist (>=2.4.0)"] +tools = ["hypothesis (>=4.18.2,<5.0.0)"] + +[[package]] +name = "eth-account" +version = "0.10.0" +description = "eth-account: Sign Ethereum transactions and messages with local private keys" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "eth-account-0.10.0.tar.gz", hash = "sha256:474a2fccf7286230cf66502565f03b536921d7e1fdfceba198e42160e5ac4bc1"}, + {file = "eth_account-0.10.0-py3-none-any.whl", hash = "sha256:b7a83f506a8edf57926569e5f04471ce3f1700e572d3421b4ad0dad7a26c0978"}, +] + +[package.dependencies] +bitarray = ">=2.4.0" +eth-abi = ">=4.0.0-b.2" +eth-keyfile = ">=0.6.0" +eth-keys = ">=0.4.0" +eth-rlp = ">=0.3.0" +eth-utils = ">=2.0.0" +hexbytes = ">=0.1.0,<0.4.0" +rlp = ">=1.0.0" + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "coverage", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "hypothesis (>=4.18.0,<5)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)"] +test = ["coverage", "hypothesis (>=4.18.0,<5)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-hash" +version = "0.5.2" +description = "eth-hash: The Ethereum hashing function, keccak256, sometimes (erroneously) called sha3" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "eth-hash-0.5.2.tar.gz", hash = "sha256:1b5f10eca7765cc385e1430eefc5ced6e2e463bb18d1365510e2e539c1a6fe4e"}, + {file = "eth_hash-0.5.2-py3-none-any.whl", hash = "sha256:251f62f6579a1e247561679d78df37548bd5f59908da0b159982bf8293ad32f0"}, +] + +[package.dependencies] +pycryptodome = {version = ">=3.6.6,<4", optional = true, markers = "extra == \"pycryptodome\""} + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)"] +pycryptodome = ["pycryptodome (>=3.6.6,<4)"] +pysha3 = ["pysha3 (>=1.0.0,<2.0.0)", "safe-pysha3 (>=1.0.0)"] +test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-keyfile" +version = "0.7.0" +description = "eth-keyfile: A library for handling the encrypted keyfiles used to store ethereum private keys" +optional = false +python-versions = ">=3.8, <4" +files = [ + {file = "eth-keyfile-0.7.0.tar.gz", hash = "sha256:6bdb8110c3a50439deb68a04c93c9d5ddd5402353bfae1bf4cfca1d6dff14fcf"}, + {file = "eth_keyfile-0.7.0-py3-none-any.whl", hash = "sha256:6a89b231a2fe250c3a8f924f2695bb9cce33ddd0d6f7ebbcdacd183d7f83d537"}, +] + +[package.dependencies] +eth-keys = ">=0.4.0" +eth-utils = ">=2" +pycryptodome = ">=3.6.6,<4" + +[package.extras] +dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "ipython", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +docs = ["towncrier (>=21,<22)"] +test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-keys" +version = "0.4.0" +description = "Common API for Ethereum key operations." +optional = false +python-versions = "*" +files = [ + {file = "eth-keys-0.4.0.tar.gz", hash = "sha256:7d18887483bc9b8a3fdd8e32ddcb30044b9f08fcb24a380d93b6eee3a5bb3216"}, + {file = "eth_keys-0.4.0-py3-none-any.whl", hash = "sha256:e07915ffb91277803a28a379418bdd1fad1f390c38ad9353a0f189789a440d5d"}, +] + +[package.dependencies] +eth-typing = ">=3.0.0,<4" +eth-utils = ">=2.0.0,<3.0.0" + +[package.extras] +coincurve = ["coincurve (>=7.0.0,<16.0.0)"] +dev = ["asn1tools (>=0.146.2,<0.147)", "bumpversion (==0.5.3)", "eth-hash[pycryptodome]", "eth-hash[pysha3]", "eth-typing (>=3.0.0,<4)", "eth-utils (>=2.0.0,<3.0.0)", "factory-boy (>=3.0.1,<3.1)", "flake8 (==3.0.4)", "hypothesis (>=5.10.3,<6.0.0)", "mypy (==0.782)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==6.2.5)", "tox (==3.20.0)", "twine"] +eth-keys = ["eth-typing (>=3.0.0,<4)", "eth-utils (>=2.0.0,<3.0.0)"] +lint = ["flake8 (==3.0.4)", "mypy (==0.782)"] +test = ["asn1tools (>=0.146.2,<0.147)", "eth-hash[pycryptodome]", "eth-hash[pysha3]", "factory-boy (>=3.0.1,<3.1)", "hypothesis (>=5.10.3,<6.0.0)", "pyasn1 (>=0.4.5,<0.5)", "pytest (==6.2.5)"] + +[[package]] +name = "eth-rlp" +version = "1.0.0" +description = "eth-rlp: RLP definitions for common Ethereum objects in Python" +optional = false +python-versions = ">=3.8, <4" +files = [ + {file = "eth-rlp-1.0.0.tar.gz", hash = "sha256:a988d713a36452e7c6da71186798343f687eaf3aeb7f99266750dd9e1f754c7b"}, + {file = "eth_rlp-1.0.0-py3-none-any.whl", hash = "sha256:5029b90334bf21d4b728278b42d4672700c34e65ef34a70610b8fffcc8255fc8"}, +] + +[package.dependencies] +eth-utils = ">=2.0.0" +hexbytes = ">=0.1.0,<1" +rlp = ">=0.6.0" + +[package.extras] +dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "eth-hash[pycryptodome]", "ipython", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +docs = ["sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +test = ["eth-hash[pycryptodome]", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-typing" +version = "3.5.2" +description = "eth-typing: Common type annotations for ethereum python packages" +optional = false +python-versions = ">=3.7.2, <4" +files = [ + {file = "eth-typing-3.5.2.tar.gz", hash = "sha256:22bf051ddfaa35ff827c30090de167e5c5b8cc6d343f7f35c9b1c7553f6ab64d"}, + {file = "eth_typing-3.5.2-py3-none-any.whl", hash = "sha256:1842e628fb1ffa929b94f89a9d33caafbeb9978dc96abb6036a12bc91f1c624b"}, +] + +[package.dependencies] +typing-extensions = ">=4.0.1" + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "types-setuptools", "wheel"] +docs = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=6.0.0)", "types-setuptools"] +test = ["pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "eth-utils" +version = "2.3.1" +description = "eth-utils: Common utility functions for python code that interacts with Ethereum" +optional = false +python-versions = ">=3.7,<4" +files = [ + {file = "eth-utils-2.3.1.tar.gz", hash = "sha256:56a969b0536d4969dcb27e580521de35abf2dbed8b1bf072b5c80770c4324e27"}, + {file = "eth_utils-2.3.1-py3-none-any.whl", hash = "sha256:614eedc5ffcaf4e6708ca39e23b12bd69526a312068c1170c773bd1307d13972"}, +] + +[package.dependencies] +cytoolz = {version = ">=0.10.1", markers = "implementation_name == \"cpython\""} +eth-hash = ">=0.3.1" +eth-typing = ">=3.0.0" +toolz = {version = ">0.8.2", markers = "implementation_name == \"pypy\""} + +[package.extras] +dev = ["black (>=23)", "build (>=0.9.0)", "bumpversion (>=0.5.3)", "eth-hash[pycryptodome]", "flake8 (==3.8.3)", "hypothesis (>=4.43.0)", "ipython", "isort (>=5.11.0)", "mypy (==0.971)", "pydocstyle (>=5.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "types-setuptools", "wheel"] +docs = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=23)", "flake8 (==3.8.3)", "isort (>=5.11.0)", "mypy (==0.971)", "pydocstyle (>=5.0.0)", "types-setuptools"] +test = ["hypothesis (>=4.43.0)", "mypy (==0.971)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "types-setuptools"] + +[[package]] +name = "frozenlist" +version = "1.4.0" +description = "A list-like structure which implements collections.abc.MutableSequence" +optional = false +python-versions = ">=3.8" +files = [ + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:764226ceef3125e53ea2cb275000e309c0aa5464d43bd72abd661e27fffc26ab"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6484756b12f40003c6128bfcc3fa9f0d49a687e171186c2d85ec82e3758c559"}, + {file = "frozenlist-1.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9ac08e601308e41eb533f232dbf6b7e4cea762f9f84f6357136eed926c15d12c"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d081f13b095d74b67d550de04df1c756831f3b83dc9881c38985834387487f1b"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:71932b597f9895f011f47f17d6428252fc728ba2ae6024e13c3398a087c2cdea"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:981b9ab5a0a3178ff413bca62526bb784249421c24ad7381e39d67981be2c326"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e41f3de4df3e80de75845d3e743b3f1c4c8613c3997a912dbf0229fc61a8b963"}, + {file = "frozenlist-1.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6918d49b1f90821e93069682c06ffde41829c346c66b721e65a5c62b4bab0300"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0e5c8764c7829343d919cc2dfc587a8db01c4f70a4ebbc49abde5d4b158b007b"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:8d0edd6b1c7fb94922bf569c9b092ee187a83f03fb1a63076e7774b60f9481a8"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:e29cda763f752553fa14c68fb2195150bfab22b352572cb36c43c47bedba70eb"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:0c7c1b47859ee2cac3846fde1c1dc0f15da6cec5a0e5c72d101e0f83dcb67ff9"}, + {file = "frozenlist-1.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:901289d524fdd571be1c7be054f48b1f88ce8dddcbdf1ec698b27d4b8b9e5d62"}, + {file = "frozenlist-1.4.0-cp310-cp310-win32.whl", hash = "sha256:1a0848b52815006ea6596c395f87449f693dc419061cc21e970f139d466dc0a0"}, + {file = "frozenlist-1.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:b206646d176a007466358aa21d85cd8600a415c67c9bd15403336c331a10d956"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:de343e75f40e972bae1ef6090267f8260c1446a1695e77096db6cfa25e759a95"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ad2a9eb6d9839ae241701d0918f54c51365a51407fd80f6b8289e2dfca977cc3"}, + {file = "frozenlist-1.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7bd3b3830247580de99c99ea2a01416dfc3c34471ca1298bccabf86d0ff4dc"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bdf1847068c362f16b353163391210269e4f0569a3c166bc6a9f74ccbfc7e839"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38461d02d66de17455072c9ba981d35f1d2a73024bee7790ac2f9e361ef1cd0c"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5a32087d720c608f42caed0ef36d2b3ea61a9d09ee59a5142d6070da9041b8f"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd65632acaf0d47608190a71bfe46b209719bf2beb59507db08ccdbe712f969b"}, + {file = "frozenlist-1.4.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261b9f5d17cac914531331ff1b1d452125bf5daa05faf73b71d935485b0c510b"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b89ac9768b82205936771f8d2eb3ce88503b1556324c9f903e7156669f521472"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:008eb8b31b3ea6896da16c38c1b136cb9fec9e249e77f6211d479db79a4eaf01"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e74b0506fa5aa5598ac6a975a12aa8928cbb58e1f5ac8360792ef15de1aa848f"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:490132667476f6781b4c9458298b0c1cddf237488abd228b0b3650e5ecba7467"}, + {file = "frozenlist-1.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:76d4711f6f6d08551a7e9ef28c722f4a50dd0fc204c56b4bcd95c6cc05ce6fbb"}, + {file = "frozenlist-1.4.0-cp311-cp311-win32.whl", hash = "sha256:a02eb8ab2b8f200179b5f62b59757685ae9987996ae549ccf30f983f40602431"}, + {file = "frozenlist-1.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:515e1abc578dd3b275d6a5114030b1330ba044ffba03f94091842852f806f1c1"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f0ed05f5079c708fe74bf9027e95125334b6978bf07fd5ab923e9e55e5fbb9d3"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ca265542ca427bf97aed183c1676e2a9c66942e822b14dc6e5f42e038f92a503"}, + {file = "frozenlist-1.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:491e014f5c43656da08958808588cc6c016847b4360e327a62cb308c791bd2d9"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17ae5cd0f333f94f2e03aaf140bb762c64783935cc764ff9c82dff626089bebf"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e78fb68cf9c1a6aa4a9a12e960a5c9dfbdb89b3695197aa7064705662515de2"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5655a942f5f5d2c9ed93d72148226d75369b4f6952680211972a33e59b1dfdc"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c11b0746f5d946fecf750428a95f3e9ebe792c1ee3b1e96eeba145dc631a9672"}, + {file = "frozenlist-1.4.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e66d2a64d44d50d2543405fb183a21f76b3b5fd16f130f5c99187c3fb4e64919"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:88f7bc0fcca81f985f78dd0fa68d2c75abf8272b1f5c323ea4a01a4d7a614efc"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5833593c25ac59ede40ed4de6d67eb42928cca97f26feea219f21d0ed0959b79"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:fec520865f42e5c7f050c2a79038897b1c7d1595e907a9e08e3353293ffc948e"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:b826d97e4276750beca7c8f0f1a4938892697a6bcd8ec8217b3312dad6982781"}, + {file = "frozenlist-1.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:ceb6ec0a10c65540421e20ebd29083c50e6d1143278746a4ef6bcf6153171eb8"}, + {file = "frozenlist-1.4.0-cp38-cp38-win32.whl", hash = "sha256:2b8bcf994563466db019fab287ff390fffbfdb4f905fc77bc1c1d604b1c689cc"}, + {file = "frozenlist-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:a6c8097e01886188e5be3e6b14e94ab365f384736aa1fca6a0b9e35bd4a30bc7"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6c38721585f285203e4b4132a352eb3daa19121a035f3182e08e437cface44bf"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a0c6da9aee33ff0b1a451e867da0c1f47408112b3391dd43133838339e410963"}, + {file = "frozenlist-1.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93ea75c050c5bb3d98016b4ba2497851eadf0ac154d88a67d7a6816206f6fa7f"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f61e2dc5ad442c52b4887f1fdc112f97caeff4d9e6ebe78879364ac59f1663e1"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aa384489fefeb62321b238e64c07ef48398fe80f9e1e6afeff22e140e0850eef"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10ff5faaa22786315ef57097a279b833ecab1a0bfb07d604c9cbb1c4cdc2ed87"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:007df07a6e3eb3e33e9a1fe6a9db7af152bbd8a185f9aaa6ece10a3529e3e1c6"}, + {file = "frozenlist-1.4.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4f399d28478d1f604c2ff9119907af9726aed73680e5ed1ca634d377abb087"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5374b80521d3d3f2ec5572e05adc94601985cc526fb276d0c8574a6d749f1b3"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:ce31ae3e19f3c902de379cf1323d90c649425b86de7bbdf82871b8a2a0615f3d"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7211ef110a9194b6042449431e08c4d80c0481e5891e58d429df5899690511c2"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:556de4430ce324c836789fa4560ca62d1591d2538b8ceb0b4f68fb7b2384a27a"}, + {file = "frozenlist-1.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7645a8e814a3ee34a89c4a372011dcd817964ce8cb273c8ed6119d706e9613e3"}, + {file = "frozenlist-1.4.0-cp39-cp39-win32.whl", hash = "sha256:19488c57c12d4e8095a922f328df3f179c820c212940a498623ed39160bc3c2f"}, + {file = "frozenlist-1.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:6221d84d463fb110bdd7619b69cb43878a11d51cbb9394ae3105d082d5199167"}, + {file = "frozenlist-1.4.0.tar.gz", hash = "sha256:09163bdf0b2907454042edb19f887c6d33806adc71fbd54afc14908bfdc22251"}, +] + +[[package]] +name = "hexbytes" +version = "0.3.1" +description = "hexbytes: Python `bytes` subclass that decodes hex, with a readable console output" +optional = false +python-versions = ">=3.7, <4" +files = [ + {file = "hexbytes-0.3.1-py3-none-any.whl", hash = "sha256:383595ad75026cf00abd570f44b368c6cdac0c6becfae5c39ff88829877f8a59"}, + {file = "hexbytes-0.3.1.tar.gz", hash = "sha256:a3fe35c6831ee8fafd048c4c086b986075fc14fd46258fa24ecb8d65745f9a9d"}, +] + +[package.extras] +dev = ["black (>=22)", "bumpversion (>=0.5.3)", "eth-utils (>=1.0.1,<3)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "hypothesis (>=3.44.24,<=6.31.6)", "ipython", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=5.0.0)", "pytest (>=7.0.0)", "pytest-watch (>=4.1.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +doc = ["sphinx (>=5.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +lint = ["black (>=22)", "flake8 (==6.0.0)", "flake8-bugbear (==23.3.23)", "isort (>=5.10.1)", "mypy (==0.971)", "pydocstyle (>=5.0.0)"] +test = ["eth-utils (>=1.0.1,<3)", "hypothesis (>=3.44.24,<=6.31.6)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "idna" +version = "3.6" +description = "Internationalized Domain Names in Applications (IDNA)" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, +] + +[[package]] +name = "importlib-resources" +version = "6.1.1" +description = "Read resources from Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "importlib_resources-6.1.1-py3-none-any.whl", hash = "sha256:e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6"}, + {file = "importlib_resources-6.1.1.tar.gz", hash = "sha256:3893a00122eafde6894c59914446a512f728a0c1a45f9bb9b63721b6bacf0b4a"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-ruff", "zipp (>=3.17)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +optional = false +python-versions = ">=3.7" +files = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "jsonschema" +version = "4.20.0" +description = "An implementation of JSON Schema validation for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"}, + {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +jsonschema-specifications = ">=2023.03.6" +pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} +referencing = ">=0.28.4" +rpds-py = ">=0.7.1" + +[package.extras] +format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] + +[[package]] +name = "jsonschema-specifications" +version = "2023.11.2" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.8" +files = [ + {file = "jsonschema_specifications-2023.11.2-py3-none-any.whl", hash = "sha256:e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93"}, + {file = "jsonschema_specifications-2023.11.2.tar.gz", hash = "sha256:9472fc4fea474cd74bea4a2b190daeccb5a9e4db2ea80efcf7a1b582fc9a81b8"}, +] + +[package.dependencies] +importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} +referencing = ">=0.31.0" + +[[package]] +name = "lru-dict" +version = "1.2.0" +description = "An Dict like LRU container." +optional = false +python-versions = "*" +files = [ + {file = "lru-dict-1.2.0.tar.gz", hash = "sha256:13c56782f19d68ddf4d8db0170041192859616514c706b126d0df2ec72a11bd7"}, + {file = "lru_dict-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:de906e5486b5c053d15b7731583c25e3c9147c288ac8152a6d1f9bccdec72641"}, + {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604d07c7604b20b3130405d137cae61579578b0e8377daae4125098feebcb970"}, + {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:203b3e78d03d88f491fa134f85a42919020686b6e6f2d09759b2f5517260c651"}, + {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:020b93870f8c7195774cbd94f033b96c14f51c57537969965c3af300331724fe"}, + {file = "lru_dict-1.2.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1184d91cfebd5d1e659d47f17a60185bbf621635ca56dcdc46c6a1745d25df5c"}, + {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fc42882b554a86e564e0b662da47b8a4b32fa966920bd165e27bb8079a323bc1"}, + {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:18ee88ada65bd2ffd483023be0fa1c0a6a051ef666d1cd89e921dcce134149f2"}, + {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:756230c22257597b7557eaef7f90484c489e9ba78e5bb6ab5a5bcfb6b03cb075"}, + {file = "lru_dict-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c4da599af36618881748b5db457d937955bb2b4800db891647d46767d636c408"}, + {file = "lru_dict-1.2.0-cp310-cp310-win32.whl", hash = "sha256:35a142a7d1a4fd5d5799cc4f8ab2fff50a598d8cee1d1c611f50722b3e27874f"}, + {file = "lru_dict-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:6da5b8099766c4da3bf1ed6e7d7f5eff1681aff6b5987d1258a13bd2ed54f0c9"}, + {file = "lru_dict-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b20b7c9beb481e92e07368ebfaa363ed7ef61e65ffe6e0edbdbaceb33e134124"}, + {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22147367b296be31cc858bf167c448af02435cac44806b228c9be8117f1bfce4"}, + {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34a3091abeb95e707f381a8b5b7dc8e4ee016316c659c49b726857b0d6d1bd7a"}, + {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:877801a20f05c467126b55338a4e9fa30e2a141eb7b0b740794571b7d619ee11"}, + {file = "lru_dict-1.2.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d3336e901acec897bcd318c42c2b93d5f1d038e67688f497045fc6bad2c0be7"}, + {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8dafc481d2defb381f19b22cc51837e8a42631e98e34b9e0892245cc96593deb"}, + {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:87bbad3f5c3de8897b8c1263a9af73bbb6469fb90e7b57225dad89b8ef62cd8d"}, + {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:25f9e0bc2fe8f41c2711ccefd2871f8a5f50a39e6293b68c3dec576112937aad"}, + {file = "lru_dict-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ae301c282a499dc1968dd633cfef8771dd84228ae9d40002a3ea990e4ff0c469"}, + {file = "lru_dict-1.2.0-cp311-cp311-win32.whl", hash = "sha256:c9617583173a29048e11397f165501edc5ae223504a404b2532a212a71ecc9ed"}, + {file = "lru_dict-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6b7a031e47421d4b7aa626b8c91c180a9f037f89e5d0a71c4bb7afcf4036c774"}, + {file = "lru_dict-1.2.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:ea2ac3f7a7a2f32f194c84d82a034e66780057fd908b421becd2f173504d040e"}, + {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd46c94966f631a81ffe33eee928db58e9fbee15baba5923d284aeadc0e0fa76"}, + {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:086ce993414f0b28530ded7e004c77dc57c5748fa6da488602aa6e7f79e6210e"}, + {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df25a426446197488a6702954dcc1de511deee20c9db730499a2aa83fddf0df1"}, + {file = "lru_dict-1.2.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c53b12b89bd7a6c79f0536ff0d0a84fdf4ab5f6252d94b24b9b753bd9ada2ddf"}, + {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f9484016e6765bd295708cccc9def49f708ce07ac003808f69efa386633affb9"}, + {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:d0f7ec902a0097ac39f1922c89be9eaccf00eb87751e28915320b4f72912d057"}, + {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:981ef3edc82da38d39eb60eae225b88a538d47b90cce2e5808846fd2cf64384b"}, + {file = "lru_dict-1.2.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:e25b2e90a032dc248213af7f3f3e975e1934b204f3b16aeeaeaff27a3b65e128"}, + {file = "lru_dict-1.2.0-cp36-cp36m-win32.whl", hash = "sha256:59f3df78e94e07959f17764e7fa7ca6b54e9296953d2626a112eab08e1beb2db"}, + {file = "lru_dict-1.2.0-cp36-cp36m-win_amd64.whl", hash = "sha256:de24b47159e07833aeab517d9cb1c3c5c2d6445cc378b1c2f1d8d15fb4841d63"}, + {file = "lru_dict-1.2.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d0dd4cd58220351233002f910e35cc01d30337696b55c6578f71318b137770f9"}, + {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a87bdc291718bbdf9ea4be12ae7af26cbf0706fa62c2ac332748e3116c5510a7"}, + {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05fb8744f91f58479cbe07ed80ada6696ec7df21ea1740891d4107a8dd99a970"}, + {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00f6e8a3fc91481b40395316a14c94daa0f0a5de62e7e01a7d589f8d29224052"}, + {file = "lru_dict-1.2.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b172fce0a0ffc0fa6d282c14256d5a68b5db1e64719c2915e69084c4b6bf555"}, + {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e707d93bae8f0a14e6df1ae8b0f076532b35f00e691995f33132d806a88e5c18"}, + {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b9ec7a4a0d6b8297102aa56758434fb1fca276a82ed7362e37817407185c3abb"}, + {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f404dcc8172da1f28da9b1f0087009578e608a4899b96d244925c4f463201f2a"}, + {file = "lru_dict-1.2.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1171ad3bff32aa8086778be4a3bdff595cc2692e78685bcce9cb06b96b22dcc2"}, + {file = "lru_dict-1.2.0-cp37-cp37m-win32.whl", hash = "sha256:0c316dfa3897fabaa1fe08aae89352a3b109e5f88b25529bc01e98ac029bf878"}, + {file = "lru_dict-1.2.0-cp37-cp37m-win_amd64.whl", hash = "sha256:5919dd04446bc1ee8d6ecda2187deeebfff5903538ae71083e069bc678599446"}, + {file = "lru_dict-1.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:fbf36c5a220a85187cacc1fcb7dd87070e04b5fc28df7a43f6842f7c8224a388"}, + {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712e71b64da181e1c0a2eaa76cd860265980cd15cb0e0498602b8aa35d5db9f8"}, + {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f54908bf91280a9b8fa6a8c8f3c2f65850ce6acae2852bbe292391628ebca42f"}, + {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3838e33710935da2ade1dd404a8b936d571e29268a70ff4ca5ba758abb3850df"}, + {file = "lru_dict-1.2.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5d5a5f976b39af73324f2b793862859902ccb9542621856d51a5993064f25e4"}, + {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8bda3a9afd241ee0181661decaae25e5336ce513ac268ab57da737eacaa7871f"}, + {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:bd2cd1b998ea4c8c1dad829fc4fa88aeed4dee555b5e03c132fc618e6123f168"}, + {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:b55753ee23028ba8644fd22e50de7b8f85fa60b562a0fafaad788701d6131ff8"}, + {file = "lru_dict-1.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e51fa6a203fa91d415f3b2900e5748ec8e06ad75777c98cc3aeb3983ca416d7"}, + {file = "lru_dict-1.2.0-cp38-cp38-win32.whl", hash = "sha256:cd6806313606559e6c7adfa0dbeb30fc5ab625f00958c3d93f84831e7a32b71e"}, + {file = "lru_dict-1.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d90a70c53b0566084447c3ef9374cc5a9be886e867b36f89495f211baabd322"}, + {file = "lru_dict-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a3ea7571b6bf2090a85ff037e6593bbafe1a8598d5c3b4560eb56187bcccb4dc"}, + {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:287c2115a59c1c9ed0d5d8ae7671e594b1206c36ea9df2fca6b17b86c468ff99"}, + {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b5ccfd2291c93746a286c87c3f895165b697399969d24c54804ec3ec559d4e43"}, + {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b710f0f4d7ec4f9fa89dfde7002f80bcd77de8024017e70706b0911ea086e2ef"}, + {file = "lru_dict-1.2.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5345bf50e127bd2767e9fd42393635bbc0146eac01f6baf6ef12c332d1a6a329"}, + {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:291d13f85224551913a78fe695cde04cbca9dcb1d84c540167c443eb913603c9"}, + {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d5bb41bc74b321789803d45b124fc2145c1b3353b4ad43296d9d1d242574969b"}, + {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0facf49b053bf4926d92d8d5a46fe07eecd2af0441add0182c7432d53d6da667"}, + {file = "lru_dict-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:987b73a06bcf5a95d7dc296241c6b1f9bc6cda42586948c9dabf386dc2bef1cd"}, + {file = "lru_dict-1.2.0-cp39-cp39-win32.whl", hash = "sha256:231d7608f029dda42f9610e5723614a35b1fff035a8060cf7d2be19f1711ace8"}, + {file = "lru_dict-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:71da89e134747e20ed5b8ad5b4ee93fc5b31022c2b71e8176e73c5a44699061b"}, + {file = "lru_dict-1.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:21b3090928c7b6cec509e755cc3ab742154b33660a9b433923bd12c37c448e3e"}, + {file = "lru_dict-1.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aaecd7085212d0aa4cd855f38b9d61803d6509731138bf798a9594745953245b"}, + {file = "lru_dict-1.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ead83ac59a29d6439ddff46e205ce32f8b7f71a6bd8062347f77e232825e3d0a"}, + {file = "lru_dict-1.2.0-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:312b6b2a30188586fe71358f0f33e4bac882d33f5e5019b26f084363f42f986f"}, + {file = "lru_dict-1.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:b30122e098c80e36d0117810d46459a46313421ce3298709170b687dc1240b02"}, + {file = "lru_dict-1.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:f010cfad3ab10676e44dc72a813c968cd586f37b466d27cde73d1f7f1ba158c2"}, + {file = "lru_dict-1.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20f5f411f7751ad9a2c02e80287cedf69ae032edd321fe696e310d32dd30a1f8"}, + {file = "lru_dict-1.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:afdadd73304c9befaed02eb42f5f09fdc16288de0a08b32b8080f0f0f6350aa6"}, + {file = "lru_dict-1.2.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7ab0c10c4fa99dc9e26b04e6b62ac32d2bcaea3aad9b81ec8ce9a7aa32b7b1b"}, + {file = "lru_dict-1.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:edad398d5d402c43d2adada390dd83c74e46e020945ff4df801166047013617e"}, + {file = "lru_dict-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:91d577a11b84387013815b1ad0bb6e604558d646003b44c92b3ddf886ad0f879"}, + {file = "lru_dict-1.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb12f19cdf9c4f2d9aa259562e19b188ff34afab28dd9509ff32a3f1c2c29326"}, + {file = "lru_dict-1.2.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e4c85aa8844bdca3c8abac3b7f78da1531c74e9f8b3e4890c6e6d86a5a3f6c0"}, + {file = "lru_dict-1.2.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6acbd097b15bead4de8e83e8a1030bb4d8257723669097eac643a301a952f0"}, + {file = "lru_dict-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b6613daa851745dd22b860651de930275be9d3e9373283a2164992abacb75b62"}, +] + +[package.extras] +test = ["pytest"] + +[[package]] +name = "markupsafe" +version = "2.1.3" +description = "Safely add untrusted strings to HTML/XML markup." +optional = false +python-versions = ">=3.7" +files = [ + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, + {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, + {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, + {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"}, + {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"}, + {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, + {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, + {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, +] + +[[package]] +name = "multidict" +version = "6.0.4" +description = "multidict implementation" +optional = false +python-versions = ">=3.7" +files = [ + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0b1a97283e0c85772d613878028fec909f003993e1007eafa715b24b377cb9b8"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:eeb6dcc05e911516ae3d1f207d4b0520d07f54484c49dfc294d6e7d63b734171"}, + {file = "multidict-6.0.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d6d635d5209b82a3492508cf5b365f3446afb65ae7ebd755e70e18f287b0adf7"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c048099e4c9e9d615545e2001d3d8a4380bd403e1a0578734e0d31703d1b0c0b"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea20853c6dbbb53ed34cb4d080382169b6f4554d394015f1bef35e881bf83547"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:16d232d4e5396c2efbbf4f6d4df89bfa905eb0d4dc5b3549d872ab898451f569"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36c63aaa167f6c6b04ef2c85704e93af16c11d20de1d133e39de6a0e84582a93"}, + {file = "multidict-6.0.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64bdf1086b6043bf519869678f5f2757f473dee970d7abf6da91ec00acb9cb98"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:43644e38f42e3af682690876cff722d301ac585c5b9e1eacc013b7a3f7b696a0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7582a1d1030e15422262de9f58711774e02fa80df0d1578995c76214f6954988"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ddff9c4e225a63a5afab9dd15590432c22e8057e1a9a13d28ed128ecf047bbdc"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ee2a1ece51b9b9e7752e742cfb661d2a29e7bcdba2d27e66e28a99f1890e4fa0"}, + {file = "multidict-6.0.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2e4369eb3d47d2034032a26c7a80fcb21a2cb22e1173d761a162f11e562caa5"}, + {file = "multidict-6.0.4-cp310-cp310-win32.whl", hash = "sha256:574b7eae1ab267e5f8285f0fe881f17efe4b98c39a40858247720935b893bba8"}, + {file = "multidict-6.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:4dcbb0906e38440fa3e325df2359ac6cb043df8e58c965bb45f4e406ecb162cc"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:0dfad7a5a1e39c53ed00d2dd0c2e36aed4650936dc18fd9a1826a5ae1cad6f03"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:64da238a09d6039e3bd39bb3aee9c21a5e34f28bfa5aa22518581f910ff94af3"}, + {file = "multidict-6.0.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ff959bee35038c4624250473988b24f846cbeb2c6639de3602c073f10410ceba"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01a3a55bd90018c9c080fbb0b9f4891db37d148a0a18722b42f94694f8b6d4c9"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5cb09abb18c1ea940fb99360ea0396f34d46566f157122c92dfa069d3e0e982"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666daae833559deb2d609afa4490b85830ab0dfca811a98b70a205621a6109fe"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11bdf3f5e1518b24530b8241529d2050014c884cf18b6fc69c0c2b30ca248710"}, + {file = "multidict-6.0.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d18748f2d30f94f498e852c67d61261c643b349b9d2a581131725595c45ec6c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:458f37be2d9e4c95e2d8866a851663cbc76e865b78395090786f6cd9b3bbf4f4"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:b1a2eeedcead3a41694130495593a559a668f382eee0727352b9a41e1c45759a"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:7d6ae9d593ef8641544d6263c7fa6408cc90370c8cb2bbb65f8d43e5b0351d9c"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:5979b5632c3e3534e42ca6ff856bb24b2e3071b37861c2c727ce220d80eee9ed"}, + {file = "multidict-6.0.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dcfe792765fab89c365123c81046ad4103fcabbc4f56d1c1997e6715e8015461"}, + {file = "multidict-6.0.4-cp311-cp311-win32.whl", hash = "sha256:3601a3cece3819534b11d4efc1eb76047488fddd0c85a3948099d5da4d504636"}, + {file = "multidict-6.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:81a4f0b34bd92df3da93315c6a59034df95866014ac08535fc819f043bfd51f0"}, + {file = "multidict-6.0.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:67040058f37a2a51ed8ea8f6b0e6ee5bd78ca67f169ce6122f3e2ec80dfe9b78"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:853888594621e6604c978ce2a0444a1e6e70c8d253ab65ba11657659dcc9100f"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:39ff62e7d0f26c248b15e364517a72932a611a9b75f35b45be078d81bdb86603"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af048912e045a2dc732847d33821a9d84ba553f5c5f028adbd364dd4765092ac"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e8b901e607795ec06c9e42530788c45ac21ef3aaa11dbd0c69de543bfb79a9"}, + {file = "multidict-6.0.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62501642008a8b9871ddfccbf83e4222cf8ac0d5aeedf73da36153ef2ec222d2"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:99b76c052e9f1bc0721f7541e5e8c05db3941eb9ebe7b8553c625ef88d6eefde"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:509eac6cf09c794aa27bcacfd4d62c885cce62bef7b2c3e8b2e49d365b5003fe"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:21a12c4eb6ddc9952c415f24eef97e3e55ba3af61f67c7bc388dcdec1404a067"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:5cad9430ab3e2e4fa4a2ef4450f548768400a2ac635841bc2a56a2052cdbeb87"}, + {file = "multidict-6.0.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ab55edc2e84460694295f401215f4a58597f8f7c9466faec545093045476327d"}, + {file = "multidict-6.0.4-cp37-cp37m-win32.whl", hash = "sha256:5a4dcf02b908c3b8b17a45fb0f15b695bf117a67b76b7ad18b73cf8e92608775"}, + {file = "multidict-6.0.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6ed5f161328b7df384d71b07317f4d8656434e34591f20552c7bcef27b0ab88e"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5fc1b16f586f049820c5c5b17bb4ee7583092fa0d1c4e28b5239181ff9532e0c"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1502e24330eb681bdaa3eb70d6358e818e8e8f908a22a1851dfd4e15bc2f8161"}, + {file = "multidict-6.0.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b692f419760c0e65d060959df05f2a531945af31fda0c8a3b3195d4efd06de11"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45e1ecb0379bfaab5eef059f50115b54571acfbe422a14f668fc8c27ba410e7e"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddd3915998d93fbcd2566ddf9cf62cdb35c9e093075f862935573d265cf8f65d"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:59d43b61c59d82f2effb39a93c48b845efe23a3852d201ed2d24ba830d0b4cf2"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc8e1d0c705233c5dd0c5e6460fbad7827d5d36f310a0fadfd45cc3029762258"}, + {file = "multidict-6.0.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6aa0418fcc838522256761b3415822626f866758ee0bc6632c9486b179d0b52"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6748717bb10339c4760c1e63da040f5f29f5ed6e59d76daee30305894069a660"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4d1a3d7ef5e96b1c9e92f973e43aa5e5b96c659c9bc3124acbbd81b0b9c8a951"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4372381634485bec7e46718edc71528024fcdc6f835baefe517b34a33c731d60"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:fc35cb4676846ef752816d5be2193a1e8367b4c1397b74a565a9d0389c433a1d"}, + {file = "multidict-6.0.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b9d9e4e2b37daddb5c23ea33a3417901fa7c7b3dee2d855f63ee67a0b21e5b1"}, + {file = "multidict-6.0.4-cp38-cp38-win32.whl", hash = "sha256:e41b7e2b59679edfa309e8db64fdf22399eec4b0b24694e1b2104fb789207779"}, + {file = "multidict-6.0.4-cp38-cp38-win_amd64.whl", hash = "sha256:d6c254ba6e45d8e72739281ebc46ea5eb5f101234f3ce171f0e9f5cc86991480"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:16ab77bbeb596e14212e7bab8429f24c1579234a3a462105cda4a66904998664"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc779e9e6f7fda81b3f9aa58e3a6091d49ad528b11ed19f6621408806204ad35"}, + {file = "multidict-6.0.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4ceef517eca3e03c1cceb22030a3e39cb399ac86bff4e426d4fc6ae49052cc60"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:281af09f488903fde97923c7744bb001a9b23b039a909460d0f14edc7bf59706"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52f2dffc8acaba9a2f27174c41c9e57f60b907bb9f096b36b1a1f3be71c6284d"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b41156839806aecb3641f3208c0dafd3ac7775b9c4c422d82ee2a45c34ba81ca"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5e3fc56f88cc98ef8139255cf8cd63eb2c586531e43310ff859d6bb3a6b51f1"}, + {file = "multidict-6.0.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8316a77808c501004802f9beebde51c9f857054a0c871bd6da8280e718444449"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f70b98cd94886b49d91170ef23ec5c0e8ebb6f242d734ed7ed677b24d50c82cf"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bf6774e60d67a9efe02b3616fee22441d86fab4c6d335f9d2051d19d90a40063"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:e69924bfcdda39b722ef4d9aa762b2dd38e4632b3641b1d9a57ca9cd18f2f83a"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:6b181d8c23da913d4ff585afd1155a0e1194c0b50c54fcfe286f70cdaf2b7176"}, + {file = "multidict-6.0.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:52509b5be062d9eafc8170e53026fbc54cf3b32759a23d07fd935fb04fc22d95"}, + {file = "multidict-6.0.4-cp39-cp39-win32.whl", hash = "sha256:27c523fbfbdfd19c6867af7346332b62b586eed663887392cff78d614f9ec313"}, + {file = "multidict-6.0.4-cp39-cp39-win_amd64.whl", hash = "sha256:33029f5734336aa0d4c0384525da0387ef89148dc7191aae00ca5fb23d7aafc2"}, + {file = "multidict-6.0.4.tar.gz", hash = "sha256:3666906492efb76453c0e7b97f2cf459b0682e7402c0489a95484965dbc1da49"}, +] + +[[package]] +name = "parsimonious" +version = "0.9.0" +description = "(Soon to be) the fastest pure-Python PEG parser I could muster" +optional = false +python-versions = "*" +files = [ + {file = "parsimonious-0.9.0.tar.gz", hash = "sha256:b2ad1ae63a2f65bd78f5e0a8ac510a98f3607a43f1db2a8d46636a5d9e4a30c1"}, +] + +[package.dependencies] +regex = ">=2022.3.15" + +[[package]] +name = "pkgutil-resolve-name" +version = "1.3.10" +description = "Resolve a name to an object." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, + {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, +] + +[[package]] +name = "protobuf" +version = "4.25.1" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "protobuf-4.25.1-cp310-abi3-win32.whl", hash = "sha256:193f50a6ab78a970c9b4f148e7c750cfde64f59815e86f686c22e26b4fe01ce7"}, + {file = "protobuf-4.25.1-cp310-abi3-win_amd64.whl", hash = "sha256:3497c1af9f2526962f09329fd61a36566305e6c72da2590ae0d7d1322818843b"}, + {file = "protobuf-4.25.1-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:0bf384e75b92c42830c0a679b0cd4d6e2b36ae0cf3dbb1e1dfdda48a244f4bcd"}, + {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:0f881b589ff449bf0b931a711926e9ddaad3b35089cc039ce1af50b21a4ae8cb"}, + {file = "protobuf-4.25.1-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:ca37bf6a6d0046272c152eea90d2e4ef34593aaa32e8873fc14c16440f22d4b7"}, + {file = "protobuf-4.25.1-cp38-cp38-win32.whl", hash = "sha256:abc0525ae2689a8000837729eef7883b9391cd6aa7950249dcf5a4ede230d5dd"}, + {file = "protobuf-4.25.1-cp38-cp38-win_amd64.whl", hash = "sha256:1484f9e692091450e7edf418c939e15bfc8fc68856e36ce399aed6889dae8bb0"}, + {file = "protobuf-4.25.1-cp39-cp39-win32.whl", hash = "sha256:8bdbeaddaac52d15c6dce38c71b03038ef7772b977847eb6d374fc86636fa510"}, + {file = "protobuf-4.25.1-cp39-cp39-win_amd64.whl", hash = "sha256:becc576b7e6b553d22cbdf418686ee4daa443d7217999125c045ad56322dda10"}, + {file = "protobuf-4.25.1-py3-none-any.whl", hash = "sha256:a19731d5e83ae4737bb2a089605e636077ac001d18781b3cf489b9546c7c80d6"}, + {file = "protobuf-4.25.1.tar.gz", hash = "sha256:57d65074b4f5baa4ab5da1605c02be90ac20c8b40fb137d6a8df9f416b0d0ce2"}, +] + +[[package]] +name = "pycryptodome" +version = "3.19.0" +description = "Cryptographic library for Python" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "pycryptodome-3.19.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3006c44c4946583b6de24fe0632091c2653d6256b99a02a3db71ca06472ea1e4"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:7c760c8a0479a4042111a8dd2f067d3ae4573da286c53f13cf6f5c53a5c1f631"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:08ce3558af5106c632baf6d331d261f02367a6bc3733086ae43c0f988fe042db"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45430dfaf1f421cf462c0dd824984378bef32b22669f2635cb809357dbaab405"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:a9bcd5f3794879e91970f2bbd7d899780541d3ff439d8f2112441769c9f2ccea"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-win32.whl", hash = "sha256:190c53f51e988dceb60472baddce3f289fa52b0ec38fbe5fd20dd1d0f795c551"}, + {file = "pycryptodome-3.19.0-cp27-cp27m-win_amd64.whl", hash = "sha256:22e0ae7c3a7f87dcdcf302db06ab76f20e83f09a6993c160b248d58274473bfa"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:7822f36d683f9ad7bc2145b2c2045014afdbbd1d9922a6d4ce1cbd6add79a01e"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:05e33267394aad6db6595c0ce9d427fe21552f5425e116a925455e099fdf759a"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:829b813b8ee00d9c8aba417621b94bc0b5efd18c928923802ad5ba4cf1ec709c"}, + {file = "pycryptodome-3.19.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:fc7a79590e2b5d08530175823a242de6790abc73638cc6dc9d2684e7be2f5e49"}, + {file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:542f99d5026ac5f0ef391ba0602f3d11beef8e65aae135fa5b762f5ebd9d3bfb"}, + {file = "pycryptodome-3.19.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:61bb3ccbf4bf32ad9af32da8badc24e888ae5231c617947e0f5401077f8b091f"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d49a6c715d8cceffedabb6adb7e0cbf41ae1a2ff4adaeec9432074a80627dea1"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e249a784cc98a29c77cea9df54284a44b40cafbfae57636dd2f8775b48af2434"}, + {file = "pycryptodome-3.19.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d033947e7fd3e2ba9a031cb2d267251620964705a013c5a461fa5233cc025270"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:84c3e4fffad0c4988aef0d5591be3cad4e10aa7db264c65fadbc633318d20bde"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:139ae2c6161b9dd5d829c9645d781509a810ef50ea8b657e2257c25ca20efe33"}, + {file = "pycryptodome-3.19.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:5b1986c761258a5b4332a7f94a83f631c1ffca8747d75ab8395bf2e1b93283d9"}, + {file = "pycryptodome-3.19.0-cp35-abi3-win32.whl", hash = "sha256:536f676963662603f1f2e6ab01080c54d8cd20f34ec333dcb195306fa7826997"}, + {file = "pycryptodome-3.19.0-cp35-abi3-win_amd64.whl", hash = "sha256:04dd31d3b33a6b22ac4d432b3274588917dcf850cc0c51c84eca1d8ed6933810"}, + {file = "pycryptodome-3.19.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:8999316e57abcbd8085c91bc0ef75292c8618f41ca6d2b6132250a863a77d1e7"}, + {file = "pycryptodome-3.19.0-pp27-pypy_73-win32.whl", hash = "sha256:a0ab84755f4539db086db9ba9e9f3868d2e3610a3948cbd2a55e332ad83b01b0"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0101f647d11a1aae5a8ce4f5fad6644ae1b22bb65d05accc7d322943c69a74a6"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c1601e04d32087591d78e0b81e1e520e57a92796089864b20e5f18c9564b3fa"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:506c686a1eee6c00df70010be3b8e9e78f406af4f21b23162bbb6e9bdf5427bc"}, + {file = "pycryptodome-3.19.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7919ccd096584b911f2a303c593280869ce1af9bf5d36214511f5e5a1bed8c34"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:560591c0777f74a5da86718f70dfc8d781734cf559773b64072bbdda44b3fc3e"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1cc2f2ae451a676def1a73c1ae9120cd31af25db3f381893d45f75e77be2400"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:17940dcf274fcae4a54ec6117a9ecfe52907ed5e2e438fe712fe7ca502672ed5"}, + {file = "pycryptodome-3.19.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d04f5f623a280fbd0ab1c1d8ecbd753193ab7154f09b6161b0f857a1a676c15f"}, + {file = "pycryptodome-3.19.0.tar.gz", hash = "sha256:bc35d463222cdb4dbebd35e0784155c81e161b9284e567e7e933d722e533331e"}, +] + +[[package]] +name = "pyunormalize" +version = "15.1.0" +description = "Unicode normalization forms (NFC, NFKC, NFD, NFKD). A library independent from the Python core Unicode database." +optional = false +python-versions = ">=3.6" +files = [ + {file = "pyunormalize-15.1.0.tar.gz", hash = "sha256:cf4a87451a0f1cb76911aa97f432f4579e1f564a2f0c84ce488c73a73901b6c1"}, +] + +[[package]] +name = "pywin32" +version = "306" +description = "Python for Window Extensions" +optional = false +python-versions = "*" +files = [ + {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, + {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, + {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, + {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, + {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, + {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, + {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, + {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, + {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, + {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, + {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, + {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, + {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, + {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, +] + +[[package]] +name = "referencing" +version = "0.31.1" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "referencing-0.31.1-py3-none-any.whl", hash = "sha256:c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d"}, + {file = "referencing-0.31.1.tar.gz", hash = "sha256:81a1471c68c9d5e3831c30ad1dd9815c45b558e596653db751a2bfdd17b3b9ec"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" + +[[package]] +name = "regex" +version = "2023.10.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +files = [ + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, +] + +[[package]] +name = "requests" +version = "2.31.0" +description = "Python HTTP for Humans." +optional = false +python-versions = ">=3.7" +files = [ + {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, + {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "rlp" +version = "4.0.0" +description = "rlp: A package for Recursive Length Prefix encoding and decoding" +optional = false +python-versions = ">=3.8, <4" +files = [ + {file = "rlp-4.0.0-py3-none-any.whl", hash = "sha256:1747fd933e054e6d25abfe591be92e19a4193a56c93981c05bd0f84dfe279f14"}, + {file = "rlp-4.0.0.tar.gz", hash = "sha256:61a5541f86e4684ab145cb849a5929d2ced8222930a570b3941cf4af16b72a78"}, +] + +[package.dependencies] +eth-utils = ">=2" + +[package.extras] +dev = ["build (>=0.9.0)", "bumpversion (>=0.5.3)", "hypothesis (==5.19.0)", "ipython", "pre-commit (>=3.4.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)", "sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=4.0.0)", "twine", "wheel"] +docs = ["sphinx (>=6.0.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +rust-backend = ["rusty-rlp (>=0.2.1,<0.3)"] +test = ["hypothesis (==5.19.0)", "pytest (>=7.0.0)", "pytest-xdist (>=2.4.0)"] + +[[package]] +name = "rpds-py" +version = "0.13.2" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "rpds_py-0.13.2-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1ceebd0ae4f3e9b2b6b553b51971921853ae4eebf3f54086be0565d59291e53d"}, + {file = "rpds_py-0.13.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:46e1ed994a0920f350a4547a38471217eb86f57377e9314fbaaa329b71b7dfe3"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee353bb51f648924926ed05e0122b6a0b1ae709396a80eb583449d5d477fcdf7"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:530190eb0cd778363bbb7596612ded0bb9fef662daa98e9d92a0419ab27ae914"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d311e44dd16d2434d5506d57ef4d7036544fc3c25c14b6992ef41f541b10fb"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e72f750048b32d39e87fc85c225c50b2a6715034848dbb196bf3348aa761fa1"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db09b98c7540df69d4b47218da3fbd7cb466db0fb932e971c321f1c76f155266"}, + {file = "rpds_py-0.13.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ac26f50736324beb0282c819668328d53fc38543fa61eeea2c32ea8ea6eab8d"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12ecf89bd54734c3c2c79898ae2021dca42750c7bcfb67f8fb3315453738ac8f"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a44c8440183b43167fd1a0819e8356692bf5db1ad14ce140dbd40a1485f2dea"}, + {file = "rpds_py-0.13.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:bcef4f2d3dc603150421de85c916da19471f24d838c3c62a4f04c1eb511642c1"}, + {file = "rpds_py-0.13.2-cp310-none-win32.whl", hash = "sha256:ee6faebb265e28920a6f23a7d4c362414b3f4bb30607141d718b991669e49ddc"}, + {file = "rpds_py-0.13.2-cp310-none-win_amd64.whl", hash = "sha256:ac96d67b37f28e4b6ecf507c3405f52a40658c0a806dffde624a8fcb0314d5fd"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:b5f6328e8e2ae8238fc767703ab7b95785521c42bb2b8790984e3477d7fa71ad"}, + {file = "rpds_py-0.13.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:729408136ef8d45a28ee9a7411917c9e3459cf266c7e23c2f7d4bb8ef9e0da42"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65cfed9c807c27dee76407e8bb29e6f4e391e436774bcc769a037ff25ad8646e"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aefbdc934115d2f9278f153952003ac52cd2650e7313750390b334518c589568"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d48db29bd47814671afdd76c7652aefacc25cf96aad6daefa82d738ee87461e2"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3c55d7f2d817183d43220738270efd3ce4e7a7b7cbdaefa6d551ed3d6ed89190"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6aadae3042f8e6db3376d9e91f194c606c9a45273c170621d46128f35aef7cd0"}, + {file = "rpds_py-0.13.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5feae2f9aa7270e2c071f488fab256d768e88e01b958f123a690f1cc3061a09c"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51967a67ea0d7b9b5cd86036878e2d82c0b6183616961c26d825b8c994d4f2c8"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d0c10d803549427f427085ed7aebc39832f6e818a011dcd8785e9c6a1ba9b3e"}, + {file = "rpds_py-0.13.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:603d5868f7419081d616dab7ac3cfa285296735e7350f7b1e4f548f6f953ee7d"}, + {file = "rpds_py-0.13.2-cp311-none-win32.whl", hash = "sha256:b8996ffb60c69f677245f5abdbcc623e9442bcc91ed81b6cd6187129ad1fa3e7"}, + {file = "rpds_py-0.13.2-cp311-none-win_amd64.whl", hash = "sha256:5379e49d7e80dca9811b36894493d1c1ecb4c57de05c36f5d0dd09982af20211"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:8a776a29b77fe0cc28fedfd87277b0d0f7aa930174b7e504d764e0b43a05f381"}, + {file = "rpds_py-0.13.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1472956c5bcc49fb0252b965239bffe801acc9394f8b7c1014ae9258e4572b"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f252dfb4852a527987a9156cbcae3022a30f86c9d26f4f17b8c967d7580d65d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f0d320e70b6b2300ff6029e234e79fe44e9dbbfc7b98597ba28e054bd6606a57"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ade2ccb937060c299ab0dfb2dea3d2ddf7e098ed63ee3d651ebfc2c8d1e8632a"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9d121be0217787a7d59a5c6195b0842d3f701007333426e5154bf72346aa658"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa6bd071ec6d90f6e7baa66ae25820d57a8ab1b0a3c6d3edf1834d4b26fafa2"}, + {file = "rpds_py-0.13.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c918621ee0a3d1fe61c313f2489464f2ae3d13633e60f520a8002a5e910982ee"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:25b28b3d33ec0a78e944aaaed7e5e2a94ac811bcd68b557ca48a0c30f87497d2"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:31e220a040b89a01505128c2f8a59ee74732f666439a03e65ccbf3824cdddae7"}, + {file = "rpds_py-0.13.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:15253fff410873ebf3cfba1cc686a37711efcd9b8cb30ea21bb14a973e393f60"}, + {file = "rpds_py-0.13.2-cp312-none-win32.whl", hash = "sha256:b981a370f8f41c4024c170b42fbe9e691ae2dbc19d1d99151a69e2c84a0d194d"}, + {file = "rpds_py-0.13.2-cp312-none-win_amd64.whl", hash = "sha256:4c4e314d36d4f31236a545696a480aa04ea170a0b021e9a59ab1ed94d4c3ef27"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:80e5acb81cb49fd9f2d5c08f8b74ffff14ee73b10ca88297ab4619e946bcb1e1"}, + {file = "rpds_py-0.13.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:efe093acc43e869348f6f2224df7f452eab63a2c60a6c6cd6b50fd35c4e075ba"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c2a61c0e4811012b0ba9f6cdcb4437865df5d29eab5d6018ba13cee1c3064a0"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:751758d9dd04d548ec679224cc00e3591f5ebf1ff159ed0d4aba6a0746352452"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ba8858933f0c1a979781272a5f65646fca8c18c93c99c6ddb5513ad96fa54b1"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bfdfbe6a36bc3059fff845d64c42f2644cf875c65f5005db54f90cdfdf1df815"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa0379c1935c44053c98826bc99ac95f3a5355675a297ac9ce0dfad0ce2d50ca"}, + {file = "rpds_py-0.13.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5593855b5b2b73dd8413c3fdfa5d95b99d657658f947ba2c4318591e745d083"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:2a7bef6977043673750a88da064fd513f89505111014b4e00fbdd13329cd4e9a"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:3ab96754d23372009638a402a1ed12a27711598dd49d8316a22597141962fe66"}, + {file = "rpds_py-0.13.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:e06cfea0ece444571d24c18ed465bc93afb8c8d8d74422eb7026662f3d3f779b"}, + {file = "rpds_py-0.13.2-cp38-none-win32.whl", hash = "sha256:5493569f861fb7b05af6d048d00d773c6162415ae521b7010197c98810a14cab"}, + {file = "rpds_py-0.13.2-cp38-none-win_amd64.whl", hash = "sha256:b07501b720cf060c5856f7b5626e75b8e353b5f98b9b354a21eb4bfa47e421b1"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:881df98f0a8404d32b6de0fd33e91c1b90ed1516a80d4d6dc69d414b8850474c"}, + {file = "rpds_py-0.13.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d79c159adea0f1f4617f54aa156568ac69968f9ef4d1e5fefffc0a180830308e"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38d4f822ee2f338febcc85aaa2547eb5ba31ba6ff68d10b8ec988929d23bb6b4"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5d75d6d220d55cdced2f32cc22f599475dbe881229aeddba6c79c2e9df35a2b3"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d97e9ae94fb96df1ee3cb09ca376c34e8a122f36927230f4c8a97f469994bff"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67a429520e97621a763cf9b3ba27574779c4e96e49a27ff8a1aa99ee70beb28a"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:188435794405c7f0573311747c85a96b63c954a5f2111b1df8018979eca0f2f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38f9bf2ad754b4a45b8210a6c732fe876b8a14e14d5992a8c4b7c1ef78740f53"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:a6ba2cb7d676e9415b9e9ac7e2aae401dc1b1e666943d1f7bc66223d3d73467b"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:eaffbd8814bb1b5dc3ea156a4c5928081ba50419f9175f4fc95269e040eff8f0"}, + {file = "rpds_py-0.13.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a4c1058cdae6237d97af272b326e5f78ee7ee3bbffa6b24b09db4d828810468"}, + {file = "rpds_py-0.13.2-cp39-none-win32.whl", hash = "sha256:b5267feb19070bef34b8dea27e2b504ebd9d31748e3ecacb3a4101da6fcb255c"}, + {file = "rpds_py-0.13.2-cp39-none-win_amd64.whl", hash = "sha256:ddf23960cb42b69bce13045d5bc66f18c7d53774c66c13f24cf1b9c144ba3141"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:97163a1ab265a1073a6372eca9f4eeb9f8c6327457a0b22ddfc4a17dcd613e74"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:25ea41635d22b2eb6326f58e608550e55d01df51b8a580ea7e75396bafbb28e9"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76d59d4d451ba77f08cb4cd9268dec07be5bc65f73666302dbb5061989b17198"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e7c564c58cf8f248fe859a4f0fe501b050663f3d7fbc342172f259124fb59933"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61dbc1e01dc0c5875da2f7ae36d6e918dc1b8d2ce04e871793976594aad8a57a"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdb82eb60d31b0c033a8e8ee9f3fc7dfbaa042211131c29da29aea8531b4f18f"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d204957169f0b3511fb95395a9da7d4490fb361763a9f8b32b345a7fe119cb45"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c45008ca79bad237cbc03c72bc5205e8c6f66403773929b1b50f7d84ef9e4d07"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:79bf58c08f0756adba691d480b5a20e4ad23f33e1ae121584cf3a21717c36dfa"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e86593bf8637659e6a6ed58854b6c87ec4e9e45ee8a4adfd936831cef55c2d21"}, + {file = "rpds_py-0.13.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:d329896c40d9e1e5c7715c98529e4a188a1f2df51212fd65102b32465612b5dc"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4a5375c5fff13f209527cd886dc75394f040c7d1ecad0a2cb0627f13ebe78a12"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:06d218e4464d31301e943b65b2c6919318ea6f69703a351961e1baaf60347276"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c1f41d32a2ddc5a94df4b829b395916a4b7f103350fa76ba6de625fcb9e773ac"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6bc568b05e02cd612be53900c88aaa55012e744930ba2eeb56279db4c6676eb3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d94d78418203904730585efa71002286ac4c8ac0689d0eb61e3c465f9e608ff"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bed0252c85e21cf73d2d033643c945b460d6a02fc4a7d644e3b2d6f5f2956c64"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:244e173bb6d8f3b2f0c4d7370a1aa341f35da3e57ffd1798e5b2917b91731fd3"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7f55cd9cf1564b7b03f238e4c017ca4794c05b01a783e9291065cb2858d86ce4"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:f03a1b3a4c03e3e0161642ac5367f08479ab29972ea0ffcd4fa18f729cd2be0a"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:f5f4424cb87a20b016bfdc157ff48757b89d2cc426256961643d443c6c277007"}, + {file = "rpds_py-0.13.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c82bbf7e03748417c3a88c1b0b291288ce3e4887a795a3addaa7a1cfd9e7153e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:c0095b8aa3e432e32d372e9a7737e65b58d5ed23b9620fea7cb81f17672f1fa1"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:4c2d26aa03d877c9730bf005621c92da263523a1e99247590abbbe252ccb7824"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96f2975fb14f39c5fe75203f33dd3010fe37d1c4e33177feef1107b5ced750e3"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4dcc5ee1d0275cb78d443fdebd0241e58772a354a6d518b1d7af1580bbd2c4e8"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:61d42d2b08430854485135504f672c14d4fc644dd243a9c17e7c4e0faf5ed07e"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d3a61e928feddc458a55110f42f626a2a20bea942ccedb6fb4cee70b4830ed41"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7de12b69d95072394998c622cfd7e8cea8f560db5fca6a62a148f902a1029f8b"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:87a90f5545fd61f6964e65eebde4dc3fa8660bb7d87adb01d4cf17e0a2b484ad"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:9c95a1a290f9acf7a8f2ebbdd183e99215d491beea52d61aa2a7a7d2c618ddc6"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:35f53c76a712e323c779ca39b9a81b13f219a8e3bc15f106ed1e1462d56fcfe9"}, + {file = "rpds_py-0.13.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96fb0899bb2ab353f42e5374c8f0789f54e0a94ef2f02b9ac7149c56622eaf31"}, + {file = "rpds_py-0.13.2.tar.gz", hash = "sha256:f8eae66a1304de7368932b42d801c67969fd090ddb1a7a24f27b435ed4bed68f"}, +] + +[[package]] +name = "toolz" +version = "0.12.0" +description = "List processing tools and functional utilities" +optional = false +python-versions = ">=3.5" +files = [ + {file = "toolz-0.12.0-py3-none-any.whl", hash = "sha256:2059bd4148deb1884bb0eb770a3cde70e7f954cfbbdc2285f1f2de01fd21eb6f"}, + {file = "toolz-0.12.0.tar.gz", hash = "sha256:88c570861c440ee3f2f6037c4654613228ff40c93a6c25e0eba70d17282c6194"}, +] + +[[package]] +name = "typer" +version = "0.9.0" +description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +optional = false +python-versions = ">=3.6" +files = [ + {file = "typer-0.9.0-py3-none-any.whl", hash = "sha256:5d96d986a21493606a358cae4461bd8cdf83cbf33a5aa950ae629ca3b51467ee"}, + {file = "typer-0.9.0.tar.gz", hash = "sha256:50922fd79aea2f4751a8e0408ff10d2662bd0c8bbfa84755a699f3bada2978b2"}, +] + +[package.dependencies] +click = ">=7.1.1,<9.0.0" +typing-extensions = ">=3.7.4.3" + +[package.extras] +all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] +dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] +doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] +test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<14.0.0)", "shellingham (>=1.3.0,<2.0.0)"] + +[[package]] +name = "typing-extensions" +version = "4.8.0" +description = "Backported and Experimental Type Hints for Python 3.8+" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, + {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, +] + +[[package]] +name = "urllib3" +version = "2.1.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, + {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "web3" +version = "6.11.4" +description = "web3.py" +optional = false +python-versions = ">=3.7.2" +files = [ + {file = "web3-6.11.4-py3-none-any.whl", hash = "sha256:b63d461c6d48e9ec12ed22c293c1d22ef83d1ec650c570e70fc24a6432b1b4a3"}, + {file = "web3-6.11.4.tar.gz", hash = "sha256:5bf785e63868c271ebee05a9ab257858630a0b105d34872cfe6a6049a887fec6"}, +] + +[package.dependencies] +aiohttp = ">=3.7.4.post0" +eth-abi = ">=4.0.0" +eth-account = ">=0.8.0" +eth-hash = {version = ">=0.5.1", extras = ["pycryptodome"]} +eth-typing = ">=3.0.0" +eth-utils = ">=2.1.0" +hexbytes = ">=0.1.0,<0.4.0" +jsonschema = ">=4.0.0" +lru-dict = ">=1.1.6,<1.3.0" +protobuf = ">=4.21.6" +pyunormalize = ">=15.0.0" +pywin32 = {version = ">=223", markers = "platform_system == \"Windows\""} +requests = ">=2.16.0" +typing-extensions = ">=4.0.1" +websockets = ">=10.0.0" + +[package.extras] +dev = ["black (>=22.1.0)", "build (>=0.9.0)", "bumpversion", "eth-tester[py-evm] (==v0.9.1-b.1)", "flake8 (==3.8.3)", "flaky (>=3.7.0)", "hypothesis (>=3.31.2)", "importlib-metadata (<5.0)", "ipfshttpclient (==0.8.0a2)", "isort (>=5.11.0)", "mypy (==1.4.1)", "py-geth (>=3.11.0)", "pytest (>=7.0.0)", "pytest-asyncio (>=0.18.1)", "pytest-mock (>=1.10)", "pytest-watch (>=4.2)", "pytest-xdist (>=1.29)", "setuptools (>=38.6.0)", "sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)", "tox (>=3.18.0)", "tqdm (>4.32)", "twine (>=1.13)", "types-protobuf (==3.19.13)", "types-requests (>=2.26.1)", "types-setuptools (>=57.4.4)", "when-changed (>=0.3.0)"] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.0.0)", "towncrier (>=21,<22)"] +ipfs = ["ipfshttpclient (==0.8.0a2)"] +linter = ["black (>=22.1.0)", "flake8 (==3.8.3)", "isort (>=5.11.0)", "mypy (==1.4.1)", "types-protobuf (==3.19.13)", "types-requests (>=2.26.1)", "types-setuptools (>=57.4.4)"] +tester = ["eth-tester[py-evm] (==v0.9.1-b.1)", "py-geth (>=3.11.0)"] + +[[package]] +name = "websockets" +version = "12.0" +description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" +optional = false +python-versions = ">=3.8" +files = [ + {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, + {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, + {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, + {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, + {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, + {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, + {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, + {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, + {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, + {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, + {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, + {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, + {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, + {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, + {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, + {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, + {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, + {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, + {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, + {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, + {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, + {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, + {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, + {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, + {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, + {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, + {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, + {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, + {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, + {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, + {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, + {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, + {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, + {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, + {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, + {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, + {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, + {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, + {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, + {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, + {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, + {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, +] + +[[package]] +name = "yarl" +version = "1.9.4" +description = "Yet another URL library" +optional = false +python-versions = ">=3.7" +files = [ + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, + {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, + {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, + {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, + {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, + {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, + {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, + {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, + {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, + {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, + {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, + {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, + {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, + {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, + {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, + {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, + {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, + {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, + {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, + {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, + {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, + {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, + {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, + {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, + {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, + {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, + {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, + {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, + {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, + {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, + {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, + {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, + {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, +] + +[package.dependencies] +idna = ">=2.0" +multidict = ">=4.0" + +[[package]] +name = "zipp" +version = "3.17.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, + {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, +] + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.8" +content-hash = "712e9b1745489456c32f75c860acca77357e740357e5697ca44a16d6f7c92b5e" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..161f9f8f --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,18 @@ +[tool.poetry] +name = "bsc-genesis-contract" +version = "0.1.0" +description = "" +authors = ["BNB Chain"] +license = "Apache2.0" +readme = "README.md" + +[tool.poetry.dependencies] +python = "^3.8" +web3 = "6.11.4" +jinja2 = "3.1.2" +typer = "0.9.0" +typing-extensions = "4.8.0" + +[build-system] +requires = ["poetry-core"] +build-backend = "poetry.core.masonry.api" diff --git a/scripts/BLSkeystore.json b/scripts/BLSkeystore.json deleted file mode 100644 index 908cffe2..00000000 --- a/scripts/BLSkeystore.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "public_key": [ - "8f2bc5decb56ad5f88d4c704f6ad616d5038cf1bc068419f4d7f3457a853d74048b1ba3531185d6d36d6bd6881034505", - "83126cd32592a6be5e9658805c5da32db2f5d39f2f294a230cf1689b52f8b8be2135802f6b6ca6b11765331de2bb8def", - "b9cafd2354b57acadd88992fd9dc38986ec29d8efd793acb693f0d0f6b8397cb2a9f8d66e01253579c7d38242d3760f6", - "b373f6a4dfc54e625c2796da0789cbb243e6a285329c3c075ab1a9268db45951a2d6c2a2aafd558efc8c5857bd71dbc0", - "ac0646a7851a75f2d0d8239e717ed1874ed83906eff3845cc7a29abd6064adb8a48c221c3d12624f136292b19c0d92de", - "992354e0ff65e8cb4088a72a241992bf68a192ea685f810bda7a193dc056af3be4bf1f65073cf5e906676d32f2eabe60", - "95d8bb8660a34a374a05a3b9c59609f4a6f5598bba8240b59ef61e94ed6161e00108bac0b817bcb4cf13001924d19539", - "b4c030c9c012ab39aea3117fc96203b18ffb5e979ae44f17de64e212a1a97975d419e2060294940a285778e2100ff023", - "ac1e598ae0ccbeeaafa31bc6faefa85c2ae3138699cac79169cd718f1a38445201454ec092a86f200e08a15266bdc6e9", - "af3ca3f530c61bf7e6b82db58dc6bd4c75192044128004510290289330ae1d33269ec873e0a8e890c2619cf3868c8880", - "987c6c786c2d293f4b5337344c8d29ab0264f80851d5698e597e201f7743af3f848a1ffb7c4802a73e06696d99f95e45", - "97d9423cb780f6a09e759a7327fc5e2542ddc54f9d2cd1b836abf30948f45059709510e8421df03ceccf2ef2ecc9c594", - "b71f0d38cc1d05995126fa0ba311541f0ed3c5c7df64e33c8037afa5d72a5a38a83103433b204f1512502748656cf06f", - "b800c8a040b76946ca14470e7a67c9ca76bf9868730336be57235505e1786f3417a969587be2ac7e6aad1ab21db9cff9", - "a625e9aa0681a842091d9cbc26daa9497a9d305acc36d04f2cb42e9aed90a561514f607625fbf84b23f98ce4baadadb5", - "98a7250b7492047cdb0b388e094db5dc073bba5a4bfc9ed2fc0ec68cba5cec1aad06d72a91ed03211f583f52e5e5d221", - "a8fa139e60271c25de8d5c83a4d0d15107152c193897d2307d334425c40d31104b6ee507e5eb3402419bca0625b58835", - "905024253dae51eb1836a3da59e5883f48d768bb73b4c8be76fd3a124af6ed252941653619ab1e429253fc2586c65383", - "a52c02e1279cbadb974a02404d7cece18d70a2835d004a4e7a25c9e120d794f62e76b9728a13ee84bc6567716238c59f", - "aacd7b81831bc19de3a26f013d2bba8cf5a76cf3c6acee742bace02e2a809a96f72245fb6cb54874b72d300a42b14fe3", - "8f16d65d4898459265d237328b419fad130b2cf2ee381e0a0fc3d5898e81b577a0157d0b99b92eda8891b46ff62c9ea9", - "90ddfd09c9af4d0b693a4013b7e42595ea7bb60ee7fb942a8460d63cd5f0e4c3138467b7c2a50518fa26fe9a2450dbc0", - "a2ec2a7e46bb5d99e7307c39b9ba96e0ef245e2588658b5ccb9a8c2f682a111de5775fec6e7508d19e06be40a260cc7d", - "86d0488587c7dd682988d13c7db0bf9994dd21fa886244a1ddd24aea753de38d32d0c762bd6fbeb137b1ae3118c65885", - "b3e34b6aff02bf146faf47e27d813e3c1bcf2a9a424c2ec95da39ea9dd974aeb239e47bd183ac75e8502ca6e610caf7c", - "b45752f376347597826c52202dd5a4695b7f73b4a111d9a39f8bd43220984ecd428280779befa314f4b24ce537b7448b", - "83c96f5cab6a2d0fb3c4c96c7a1bf992c776f10aa6e321157df8b07359bbfdc111587f529d3ed867b1c69a98f57fea6b", - "9107b995298a0a2becc7a1feecc6d8a0cae95d66384ef08adb9dc74023357fb5c1dac1ce9de936eb4015d276150a4933", - "aa7049b3ce18e503b8546b08ef48056780cfeb4a48e50f30d0da8a2b6261e77ed19c40bc8050df874e992072db591575", - "b28f8221b85d07f04d6037a56d96e621d4c25bf3aaff3e745231bcf102dfa34508ca92814854019487b6dcecdaa0bab0", - "a75e47260f047889767fc8cc7121440afa2b4fc372ebc1ef39f72912247ad2efa1e0dc4022d4c44ecab95032fa30df49", - "a76daaa9e8741e7d9a5970f10bc585ce42a3e5ce4e53faadf3327a3b7759223e35aeb30214c0ecf2bca46a2ea1c45855", - "a031dcf5b47643630aba6e0625c21da9e0f76388ea6bcdd33ede31f51a1d080ba322ba0c9aaa5137b18fd3c47453aec9", - "a9be92a80b0909c491cd9475001cc34ee1a766b95109cdc32c8cdfcf7135c8d0e862b8612d0ea79e74d02a09d5403993", - "b490893e8eb5f101b5178e6ff8279fe14eb78b764290095e6e595dfcc11371925dc0af4b9d4bce8e69ac83ce57984e3a", - "89ca38e186e1378b0778cb8d4f0f6d4eef4a15db97a4596a44621548090dfb893f833689b580b0f60a934fd31c271bb3", - "8b20e24ad933b9af0a55a6d34a08e10b832a10f389154dc0dec79b63a38b79ea2f0d9f4fa664b3c06b1b2437cb58236f", - "a1484f2b97137fb957daad064ca6cbe5b99549249ceb51f42e928ec091f94fed642ddffe3a9916769538decd0a9937bf", - "89abcc45efe76bec679ca35c27adbd66fb9712a278e3c8530ab25cfaf997765aee574f5c5745dbb873dbf7e961684347", - "8addebd6ef7609df215e006987040d0a643858f3a4d791beaa77177d67529160e645fac54f0d8acdcd5a088393cb6681", - "85e6972fc98cd3c81d64d40e325acfed44365b97a7567a27939c14dbc7512ddcf54cb1284eb637cfa308ae4e00cb5588" - ] -} \ No newline at end of file diff --git a/scripts/flatten.sh b/scripts/flatten.sh new file mode 100644 index 00000000..2849cacf --- /dev/null +++ b/scripts/flatten.sh @@ -0,0 +1,17 @@ +forge flatten contracts/BSCValidatorSet.sol >contracts/flattened/BSCValidatorSet.sol +forge flatten contracts/GovHub.sol >contracts/flattened/GovHub.sol +forge flatten contracts/RelayerHub.sol >contracts/flattened/RelayerHub.sol +forge flatten contracts/RelayerIncentivize.sol >contracts/flattened/RelayerIncentivize.sol +forge flatten contracts/SlashIndicator.sol >contracts/flattened/SlashIndicator.sol +forge flatten contracts/SystemReward.sol >contracts/flattened/SystemReward.sol +forge flatten contracts/TendermintLightClient.sol >contracts/flattened/TendermintLightClient.sol +forge flatten contracts/TokenHub.sol >contracts/flattened/TokenHub.sol +forge flatten contracts/CrossChain.sol >contracts/flattened/CrossChain.sol +forge flatten contracts/TokenManager.sol >contracts/flattened/TokenManager.sol +forge flatten contracts/Staking.sol >contracts/flattened/Staking.sol +forge flatten contracts/BC_fusion/StakeHub.sol >contracts/flattened/StakeHub.sol +forge flatten contracts/BC_fusion/StakeCredit.sol >contracts/flattened/StakeCredit.sol +forge flatten contracts/BC_fusion/BSCGovernor.sol >contracts/flattened/BSCGovernor.sol +forge flatten contracts/BC_fusion/GovToken.sol >contracts/flattened/GovToken.sol +forge flatten contracts/BC_fusion/BSCTimelock.sol >contracts/flattened/BSCTimelock.sol +forge flatten contracts/BC_fusion/TokenRecoverPortal.sol > contracts/flattened/TokenRecoverPortal.sol diff --git a/scripts/generate-crossChain.sh b/scripts/generate-crossChain.sh deleted file mode 100644 index 1ae8fe4c..00000000 --- a/scripts/generate-crossChain.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -# Default values -OUTPUT="./contracts/CrossChain.sol" -BSC_CHAIN_ID="0060" -INIT_BATCH_SIZE_FOR_ORACLE="50" - -# Parse command line arguments -while [[ "$#" -gt 0 ]]; do - case $1 in - --bscChainId) - BSC_CHAIN_ID="$2" - shift - ;; - --initBatchSizeForOracle) - INIT_BATCH_SIZE_FOR_ORACLE="$2" - shift - ;; - *) - echo "Unknown parameter passed: $1" - exit 1 - ;; - esac - shift -done - -# Replace the specific line -sed -i -e "s/uint256 constant public CROSS_CHAIN_KEY_PREFIX = .*;/uint256 constant public CROSS_CHAIN_KEY_PREFIX = 0x01${BSC_CHAIN_ID}00;/g" "$OUTPUT" -sed -i -e "s/uint256 constant public INIT_BATCH_SIZE = .*;/uint256 constant public INIT_BATCH_SIZE = ${INIT_BATCH_SIZE_FOR_ORACLE};/g" "$OUTPUT" - -echo "CrossChain file updated." diff --git a/scripts/generate-genesis.js b/scripts/generate-genesis.js index eac6380e..9acddb72 100644 --- a/scripts/generate-genesis.js +++ b/scripts/generate-genesis.js @@ -17,7 +17,7 @@ program.option( ); program.parse(process.argv); -// compile contract +// get byte code from compiled contract function readByteCode(key, contractFile) { return new Promise((resolve, reject) => { fs.readFile(`${contractFile}`, 'utf8', (err, data) => { @@ -54,6 +54,12 @@ Promise.all([ readByteCode('tokenManager', 'out/TokenManager.sol/TokenManager.json'), readByteCode('crossChain', 'out/CrossChain.sol/CrossChain.json'), readByteCode('staking', 'out/Staking.sol/Staking.json'), + readByteCode('stakeHub', 'out/StakeHub.sol/StakeHub.json'), + readByteCode('stakeCredit', 'out/StakeCredit.sol/StakeCredit.json'), + readByteCode('governor', 'out/BSCGovernor.sol/BSCGovernor.json'), + readByteCode('govToken', 'out/GovToken.sol/GovToken.json'), + readByteCode('timelock', 'out/BSCTimelock.sol/BSCTimelock.json'), + readByteCode('tokenRecoverPortal', 'out/TokenRecoverPortal.sol/TokenRecoverPortal.json'), ]).then((result) => { const data = { initLockedBNBOnTokenHub: program.initLockedBNBOnTokenHub, diff --git a/scripts/generate-initHolders.js b/scripts/generate-initHolders.js deleted file mode 100644 index 593a8a5c..00000000 --- a/scripts/generate-initHolders.js +++ /dev/null @@ -1,29 +0,0 @@ -const program = require('commander'); -const fs = require('fs'); -const nunjucks = require('nunjucks'); - -nunjucks.configure('views', { autoescape: true }); - -program.version('0.0.1'); -program.option( - '-t, --template