From 466a151655c9f3dd3516be5d71e7ab6766914336 Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Tue, 18 Jan 2022 23:35:01 +1100 Subject: [PATCH 01/16] initial file --- .../wrap/RgtMigrationWrapAdapter.sol | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol new file mode 100644 index 000000000..e372b4ad3 --- /dev/null +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -0,0 +1,24 @@ +/* + Copyright 2021 Set Labs Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache License, Version 2.0 +*/ + +pragma solidity 0.6.10; +pragma experimental "ABIEncoderV2"; + +contract RgtMigrationWrapAdapter { + +} \ No newline at end of file From 9e9875dfb22c3c75d098f0295ddd1a2cf29bbdc3 Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Wed, 19 Jan 2022 17:31:08 +1100 Subject: [PATCH 02/16] add abi and some skeleton code --- .../wrap/RgtMigrationWrapAdapter.sol | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol index e372b4ad3..b9b225822 100644 --- a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -20,5 +20,57 @@ pragma solidity 0.6.10; pragma experimental "ABIEncoderV2"; contract RgtMigrationWrapAdapter { + + /* ============ External Getter Functions ============ */ + + /** + * Generates the calldata to migrate KNC Legacy to KNC. + * + * @param _underlyingToken Address of the component to be wrapped + * @param _wrappedToken Address of the wrapped component + * @param _underlyingUnits Total quantity of underlying units to wrap + * + * @return address Target contract address + * @return uint256 Total quantity of underlying units (if underlying is ETH) + * @return bytes Wrap calldata + */ + function getWrapCallData( + address _underlyingToken, + address _wrappedToken, + uint256 _underlyingUnits + ) + external + view + returns (address, uint256, bytes memory) + { + // mintWithOldKnc(uint256 amount) + bytes memory callData = abi.encodeWithSignature("mintWithOldKnc(uint256)", _underlyingUnits); + + return (kncToken, 0, callData); + } + + /** + * This function will revert, since migration cannot be reversed. + */ + function getUnwrapCallData( + address /* _underlyingToken */, + address /* _wrappedToken */, + uint256 /* _wrappedTokenUnits */ + ) + external + pure + returns (address, uint256, bytes memory) + { + revert("RGT migration cannot be reversed"); + } + + /** + * Returns the address to approve source tokens for wrapping. + * + * @return address Address of the contract to approve tokens to + */ + function getSpenderAddress(address /* _underlyingToken */, address /* _wrappedToken */) external view returns(address) { + return kncToken; + } } \ No newline at end of file From 46c8ac701a1902096a69f487be8c4ea96210ee8e Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Wed, 19 Jan 2022 18:29:48 +1100 Subject: [PATCH 03/16] wrap adapter --- .../wrap/RgtMigrationWrapAdapter.sol | 38 +++++++++++++++++-- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol index b9b225822..f0b1a226c 100644 --- a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -20,6 +20,33 @@ pragma solidity 0.6.10; pragma experimental "ABIEncoderV2"; contract RgtMigrationWrapAdapter { + + /* ============ State Variables ============ */ + + address public immutable rgtToken; + address public immutable tribeToken; + address public immutable pegExchanger; + + /* ============ Constructor ============ */ + + /** + * Set state variables + * + * @param _rgtToken Address of KNC Legacy token + * @param _tribeToken Address of KNC token + */ + constructor( + address _rgtToken, + address _tribeToken, + address _pegExchanger + ) + public + { + rgtToken = _rgtToken; + tribeToken = _tribeToken; + pegExchanger = _pegExchanger; + } + /* ============ External Getter Functions ============ */ @@ -44,10 +71,13 @@ contract RgtMigrationWrapAdapter { view returns (address, uint256, bytes memory) { - // mintWithOldKnc(uint256 amount) - bytes memory callData = abi.encodeWithSignature("mintWithOldKnc(uint256)", _underlyingUnits); + require(_underlyingToken == rgtToken, "Must be RGT token"); + require(_wrappedToken == _tribeToken, "Must be TRIBE token"); + + // exchange(uint256 amount) + bytes memory callData = abi.encodeWithSignature("exchange(uint256)", _underlyingUnits); - return (kncToken, 0, callData); + return (pegExchanger, 0, callData); } /** @@ -71,6 +101,6 @@ contract RgtMigrationWrapAdapter { * @return address Address of the contract to approve tokens to */ function getSpenderAddress(address /* _underlyingToken */, address /* _wrappedToken */) external view returns(address) { - return kncToken; + return pegExchanger; } } \ No newline at end of file From 1302ae8f8a6f28a4c68f22218e7fb1426e2afecb Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Wed, 19 Jan 2022 21:00:06 +1100 Subject: [PATCH 04/16] fix lint --- .../wrap/RgtMigrationWrapAdapter.sol | 29 +- external/abi/fei/FeiDAO.json | 1143 +++++++++++++++++ external/abi/fei/PegExchanger.json | 303 +++++ .../wrap/rgtMigrationWrapAdapter.spec.ts | 113 ++ utils/contracts/fei.ts | 1 + utils/contracts/index.ts | 1 + utils/deploys/deployAdapters.ts | 6 + utils/deploys/deployExternal.ts | 13 + 8 files changed, 1591 insertions(+), 18 deletions(-) create mode 100644 external/abi/fei/FeiDAO.json create mode 100644 external/abi/fei/PegExchanger.json create mode 100644 test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts create mode 100644 utils/contracts/fei.ts diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol index f0b1a226c..180c6dc2a 100644 --- a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -19,12 +19,17 @@ pragma solidity 0.6.10; pragma experimental "ABIEncoderV2"; +/** + * @title RgtMigrationWrapAdater + * @author Set Protocol + * + * Wrap adapter for one time token migration that returns data for wrapping RGT into TRIBE. + * Note: RGT can not be unwrapped into TRIBE, because migration can not be reversed. + */ contract RgtMigrationWrapAdapter { /* ============ State Variables ============ */ - address public immutable rgtToken; - address public immutable tribeToken; address public immutable pegExchanger; /* ============ Constructor ============ */ @@ -32,30 +37,21 @@ contract RgtMigrationWrapAdapter { /** * Set state variables * - * @param _rgtToken Address of KNC Legacy token - * @param _tribeToken Address of KNC token + * @param _pegExchanger Address of PegExchanger contract */ constructor( - address _rgtToken, - address _tribeToken, address _pegExchanger ) public { - rgtToken = _rgtToken; - tribeToken = _tribeToken; pegExchanger = _pegExchanger; - } - - + } /* ============ External Getter Functions ============ */ /** * Generates the calldata to migrate KNC Legacy to KNC. * - * @param _underlyingToken Address of the component to be wrapped - * @param _wrappedToken Address of the wrapped component * @param _underlyingUnits Total quantity of underlying units to wrap * * @return address Target contract address @@ -63,17 +59,14 @@ contract RgtMigrationWrapAdapter { * @return bytes Wrap calldata */ function getWrapCallData( - address _underlyingToken, - address _wrappedToken, + address /* _underlyingToken */, + address /* _wrappedToken */, uint256 _underlyingUnits ) external view returns (address, uint256, bytes memory) { - require(_underlyingToken == rgtToken, "Must be RGT token"); - require(_wrappedToken == _tribeToken, "Must be TRIBE token"); - // exchange(uint256 amount) bytes memory callData = abi.encodeWithSignature("exchange(uint256)", _underlyingUnits); diff --git a/external/abi/fei/FeiDAO.json b/external/abi/fei/FeiDAO.json new file mode 100644 index 000000000..49adc7c34 --- /dev/null +++ b/external/abi/fei/FeiDAO.json @@ -0,0 +1,1143 @@ +{ + "contractName": "FeiDAO", + "abi": [ + { + "inputs": [ + { + "internalType": "contract ERC20VotesComp", + "name": "tribe", + "type": "address" + }, + { + "internalType": "contract ICompoundTimelock", + "name": "timelock", + "type": "address" + }, + { + "internalType": "address", + "name": "guardian", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "ProposalCanceled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "indexed": false, + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "indexed": false, + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "indexed": false, + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "indexed": false, + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "ProposalCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "ProposalExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "ProposalQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldProposalThreshold", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newProposalThreshold", + "type": "uint256" + } + ], + "name": "ProposalThresholdUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldQuorum", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newQuorum", + "type": "uint256" + } + ], + "name": "QuorumUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [], + "name": "Rollback", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "RollbackQueued", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "oldTimelock", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newTimelock", + "type": "address" + } + ], + "name": "TimelockChange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "voter", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "weight", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "VoteCast", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldVotingDelay", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newVotingDelay", + "type": "uint256" + } + ], + "name": "VotingDelayUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldVotingPeriod", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newVotingPeriod", + "type": "uint256" + } + ], + "name": "VotingPeriodUpdated", + "type": "event" + }, + { + "inputs": [], + "name": "BACKUP_GOVERNOR", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BALLOT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "COUNTING_MODE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "ROLLBACK_DEADLINE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "__acceptAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "__executeRollback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "__rollback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "cancel", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + } + ], + "name": "castVote", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "castVoteBySig", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "string", + "name": "reason", + "type": "string" + } + ], + "name": "castVoteWithReason", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "execute", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "execute", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "getActions", + "outputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "voter", + "type": "address" + } + ], + "name": "getReceipt", + "outputs": [ + { + "components": [ + { + "internalType": "bool", + "name": "hasVoted", + "type": "bool" + }, + { + "internalType": "uint8", + "name": "support", + "type": "uint8" + }, + { + "internalType": "uint96", + "name": "votes", + "type": "uint96" + } + ], + "internalType": "struct IGovernorCompatibilityBravo.Receipt", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "getVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasVoted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "hashProposal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalDeadline", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalEta", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposalSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proposalThreshold", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "proposals", + "outputs": [ + { + "internalType": "uint256", + "name": "id", + "type": "uint256" + }, + { + "internalType": "address", + "name": "proposer", + "type": "address" + }, + { + "internalType": "uint256", + "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": "bool", + "name": "canceled", + "type": "bool" + }, + { + "internalType": "bool", + "name": "executed", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "propose", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "string", + "name": "description", + "type": "string" + } + ], + "name": "propose", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "bytes[]", + "name": "calldatas", + "type": "bytes[]" + }, + { + "internalType": "bytes32", + "name": "descriptionHash", + "type": "bytes32" + } + ], + "name": "queue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "queue", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "quorum", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quorumVotes", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newProposalThreshold", + "type": "uint256" + } + ], + "name": "setProposalThreshold", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newQuorum", + "type": "uint256" + } + ], + "name": "setQuorum", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newVotingDelay", + "type": "uint256" + } + ], + "name": "setVotingDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newVotingPeriod", + "type": "uint256" + } + ], + "name": "setVotingPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "proposalId", + "type": "uint256" + } + ], + "name": "state", + "outputs": [ + { + "internalType": "enum IGovernor.ProposalState", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "timelock", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "contract ERC20VotesComp", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ICompoundTimelock", + "name": "newTimelock", + "type": "address" + } + ], + "name": "updateTimelock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingDelay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "votingPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "61016060405260016005556132c86006556a14adf4b7320334b90000006007556a02116545850052128000006008553480156200003b57600080fd5b5060405162004a7838038062004a788339810160408190526200005e91620002be565b8183604051806040016040528060078152602001664665692044414f60c81b81525080620000916200017b60201b60201c565b815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060c0526101205250508251620001379250600091506020840190620001ff565b50506001600160a01b031661014052620001518162000196565b50600980546001600160a01b0319166001600160a01b0392909216919091179055506200034f9050565b6040805180820190915260018152603160f81b602082015290565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200020d9062000312565b90600052602060002090601f0160209004810192826200023157600085556200027c565b82601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b5b808211156200028a57600081556001016200028f565b6001600160a01b0381168114620002bb57600080fd5b50565b600080600060608486031215620002d457600080fd5b8351620002e181620002a5565b6020850151909350620002f481620002a5565b60408501519092506200030781620002a5565b809150509250925092565b600181811c908216806200032757607f821691505b602082108114156200034957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516146c7620003b16000396000818161090001526127cf01526000612a8a01526000612ad901526000612ab401526000612a0d01526000612a3701526000612a6101526146c76000f3fe6080604052600436106102555760003560e01c80637d5e81e211610139578063db90d48d116100b6578063ea0217cf1161007a578063ea0217cf1461086c578063eb9019d41461088c578063ece40cc1146108ac578063f8ce560a146108cc578063fc0c546a146108ee578063fe0d94c11461092257600080fd5b8063db90d48d146106e0578063dd4e2ba514610708578063ddf0b0091461074e578063deaaa7cc1461076e578063e23a9a52146107a257600080fd5b8063c01f9e37116100fd578063c01f9e371461062e578063c1ba4e591461064e578063c59057e41461066e578063d33219b41461068e578063da95691a146106c057600080fd5b80637d5e81e2146105a4578063a890c910146105c4578063ab58fb8e146105e4578063b58131b014610604578063b9a619611461061957600080fd5b8063328dd982116101d2578063438596321161019657806343859632146104b057806354fd4d50146104fa57806356781388146105245780636f8dd33d1461054457806370b0f660146105645780637b3c71d31461058457600080fd5b8063328dd982146103fe5780633932abb11461042e5780633bccf4fd146104435780633e4f49e61461046357806340e58ee51461049057600080fd5b8063148e946d11610219578063148e946d14610381578063160cbed71461039657806324bc1a64146103b65780632656227d146103cb5780632d63f693146103de57600080fd5b8063013cf08b1461027d57806301ffc9a7146102f857806302a251a31461032857806306fdde031461034757806310817f221461036957600080fd5b366102785730610263610935565b6001600160a01b03161461027657600080fd5b005b600080fd5b34801561028957600080fd5b5061029d6102983660046139e1565b61094e565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b34801561030457600080fd5b506103186103133660046139fa565b6109f7565b60405190151581526020016102ef565b34801561033457600080fd5b506006545b6040519081526020016102ef565b34801561035357600080fd5b5061035c610a08565b6040516102ef9190613a7c565b34801561037557600080fd5b5061033963617f2e0081565b34801561038d57600080fd5b50610276610a9a565b3480156103a257600080fd5b506103396103b1366004613cd0565b610c30565b3480156103c257600080fd5b50610339610faa565b6103396103d9366004613cd0565b610fba565b3480156103ea57600080fd5b506103396103f93660046139e1565b61108d565b34801561040a57600080fd5b5061041e6104193660046139e1565b6110c4565b6040516102ef9493929190613e28565b34801561043a57600080fd5b50600554610339565b34801561044f57600080fd5b5061033961045e366004613e8b565b611355565b34801561046f57600080fd5b5061048361047e3660046139e1565b6113e9565b6040516102ef9190613eef565b34801561049c57600080fd5b506102766104ab3660046139e1565b6113f4565b3480156104bc57600080fd5b506103186104cb366004613f17565b60008281526002602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b34801561050657600080fd5b506040805180820190915260018152603160f81b602082015261035c565b34801561053057600080fd5b5061033961053f366004613f47565b611707565b34801561055057600080fd5b5061027661055f3660046139e1565b611730565b34801561057057600080fd5b5061027661057f3660046139e1565b6118f7565b34801561059057600080fd5b5061033961059f366004613f73565b61196d565b3480156105b057600080fd5b506103396105bf366004614019565b6119bf565b3480156105d057600080fd5b506102766105df3660046140c5565b6119d6565b3480156105f057600080fd5b506103396105ff3660046139e1565b611a1a565b34801561061057600080fd5b50600854610339565b34801561062557600080fd5b50610276611a46565b34801561063a57600080fd5b506103396106493660046139e1565b611ab0565b34801561065a57600080fd5b506102766106693660046139e1565b611adf565b34801561067a57600080fd5b50610339610689366004613cd0565b611b55565b34801561069a57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016102ef565b3480156106cc57600080fd5b506103396106db366004614161565b611b8f565b3480156106ec57600080fd5b506106a8734c895973334af8e06fd6da4f723ac24a5f259e6b81565b34801561071457600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f000000000000602082015261035c565b34801561075a57600080fd5b506102766107693660046139e1565b611bb4565b34801561077a57600080fd5b506103397f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b3480156107ae57600080fd5b5061083c6107bd366004613f17565b60408051606081018252600080825260208201819052918101919091525060009182526002602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b0316908201526060016102ef565b34801561087857600080fd5b506102766108873660046139e1565b611e22565b34801561089857600080fd5b506103396108a7366004614232565b611e98565b3480156108b857600080fd5b506102766108c73660046139e1565b611eab565b3480156108d857600080fd5b506103396108e73660046139e1565b5060075490565b3480156108fa57600080fd5b506106a87f000000000000000000000000000000000000000000000000000000000000000081565b6102766109303660046139e1565b611f21565b60006109496003546001600160a01b031690565b905090565b80600080808080808080806109628a611a1a565b975061096d8b61108d565b96506109788b611ab0565b60008c815260026020526040812080546005820154600683015460078401546001600160a01b039093169e50949a5098509296509194506109b88d6113e9565b905060028160078111156109ce576109ce613ed9565b14935060078160078111156109e5576109e5613ed9565b14925050509193959799509193959799565b6000610a028261218f565b92915050565b606060008054610a179061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a439061425e565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b5050505050905090565b42600a541115610ae45760405162461bcd60e51b815260206004820152601060248201526f2332b4a220a79d103a37b79039b7b7b760811b60448201526064015b60405180910390fd5b6009546001600160a01b031615610b305760405162461bcd60e51b815260206004820152601060248201526f46656944414f3a206e6f20717565756560801b6044820152606401610adb565b6000610b446003546001600160a01b031690565b9050806001600160a01b0316630825f38f610b676003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b60208201526000910160408051601f1981840301815290829052600a546001600160e01b031960e087901b168352610bbc949392600401614293565b6000604051808303816000875af1158015610bdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c0391908101906142ff565b506040517fe7058e1559765746b4820bddac308b97653890ba0be3b171acd5218899b19b2690600090a150565b600080610c3f86868686611b55565b90506004610c4c826113e9565b6007811115610c5d57610c5d613ed9565b14610c7a5760405162461bcd60e51b8152600401610adb9061436c565b60035460408051630d48571f60e31b815290516000926001600160a01b031691636a42b8f89160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906143ad565b610cf290426143dc565b9050610d14610d00826121b4565b600084815260046020526040902090612220565b60005b8751811015610f655760035488516001600160a01b039091169063f2b06537908a9084908110610d4957610d496143f4565b6020026020010151898481518110610d6357610d636143f4565b6020026020010151898581518110610d7d57610d7d6143f4565b602002602001015186604051602001610d99949392919061440a565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610dcd91815260200190565b602060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e919061443f565b15610e8c5760405162461bcd60e51b815260206004820152604260248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a206964656e746960448201527f63616c2070726f706f73616c20616374696f6e20616c72656164792071756575606482015261195960f21b608482015260a401610adb565b60035488516001600160a01b0390911690633a66f901908a9084908110610eb557610eb56143f4565b6020026020010151898481518110610ecf57610ecf6143f4565b6020026020010151898581518110610ee957610ee96143f4565b6020026020010151866040518563ffffffff1660e01b8152600401610f11949392919061440a565b6020604051808303816000875af1158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5491906143ad565b50610f5e81614461565b9050610d17565b5060408051838152602081018390527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289291015b60405180910390a15095945050505050565b60006109496108e760014361447c565b600080610fc986868686611b55565b90506000610fd6826113e9565b90506004816007811115610fec57610fec613ed9565b14806110095750600581600781111561100757611007613ed9565b145b6110255760405162461bcd60e51b8152600401610adb9061436c565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1611083828888888861223e565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b6060806060806000600260008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561114657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611128575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561119857602002820191906000526020600020905b815481526020019060010190808311611184575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561126c5783829060005260206000200180546111df9061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461120b9061425e565b80156112585780601f1061122d57610100808354040283529160200191611258565b820191906000526020600020905b81548152906001019060200180831161123b57829003601f168201915b5050505050815260200190600101906111c0565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561133f5783829060005260206000200180546112b29061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546112de9061425e565b801561132b5780601f106113005761010080835404028352916020019161132b565b820191906000526020600020905b81548152906001019060200180831161130e57829003601f168201915b505050505081526020019060010190611293565b5050505090509450945094509450509193509193565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906113c1906113b99060800160405160208183030381529060405280519060200120612252565b8686866122a0565b90506113de878288604051806020016040528060008152506122be565b979650505050505050565b6000610a02826123c9565b600081815260026020526040902080546001600160a01b0316336001600160a01b0316148061143d5750600854815461143b906001600160a01b03166108a760014361447c565b105b6114995760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610adb565b611702816001018054806020026020016040519081016040528092919081815260200182805480156114f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114d6575b50505050508260020180548060200260200160405190810160405280929190818152602001828054801561154757602002820191906000526020600020905b815481526020019060010190808311611533575b50505050506116f884600301805480602002602001604051908101604052809291908181526020016000905b8282101561161f5783829060005260206000200180546115929061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546115be9061425e565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b505050505081526020019060010190611573565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546116629061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461168e9061425e565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b505050505081526020019060010190611643565b505050506124aa565b846009015461260a565b505050565b600080339050611728848285604051806020016040528060008152506122be565b949350505050565b6009546001600160a01b0316331461178a5760405162461bcd60e51b815260206004820152601b60248201527f46656944414f3a2063616c6c6572206e6f7420677561726469616e00000000006044820152606401610adb565b600980546001600160a01b031916905563617f2e008111156117ee5760405162461bcd60e51b815260206004820152601860248201527f46656944414f3a20726f6c6c6261636b206578706972656400000000000000006044820152606401610adb565b600a81905560006118076003546001600160a01b031690565b9050806001600160a01b0316633a66f90161182a6003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b602082015260009101604051602081830303815290604052866040518563ffffffff1660e01b815260040161187b9493929190614293565b6020604051808303816000875af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be91906143ad565b506040518281527fdb51ef15d5bea4363daa5cb7691e73d2b53e2addace8cc5bef3b85c4f4489af5906020015b60405180910390a15050565b6118ff610935565b6001600160a01b0316336001600160a01b03161461192f5760405162461bcd60e51b8152600401610adb90614493565b600580549082905560408051828152602081018490527f16569b50c8812bb18e4b5c46b0fee4a9acbb3a9dca1e1badce427e8d75b5652d91016118eb565b6000803390506119b586828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122be92505050565b9695505050505050565b60006119cd85858585612618565b95945050505050565b6119de610935565b6001600160a01b0316336001600160a01b031614611a0e5760405162461bcd60e51b8152600401610adb90614493565b611a1781612680565b50565b60008181526004602090815260408083208151928301909152546001600160401b0316908190526110b5565b600360009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50505050565b60008181526001602081815260408084208151928301909152909101546001600160401b0316908190526110b5565b611ae7610935565b6001600160a01b0316336001600160a01b031614611b175760405162461bcd60e51b8152600401610adb90614493565b600780549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb091016118eb565b600084848484604051602001611b6e94939291906144ca565b60408051601f19818403018152919052805160209091012095945050505050565b6000611b9f3387878787876126e9565b6119b58686611bae87876124aa565b856119bf565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611c1d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bff575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611c7057602002820191906000526020600020905b815481526020019060010190808311611c5c575b5050505050611e1884600301805480602002602001604051908101604052809291908181526020016000905b82821015611d48578382906000526020600020018054611cbb9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce79061425e565b8015611d345780601f10611d0957610100808354040283529160200191611d34565b820191906000526020600020905b815481529060010190602001808311611d1757829003601f168201915b505050505081526020019060010190611c9c565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef578382906000526020600020018054611d8b9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611db79061425e565b8015611e045780601f10611dd957610100808354040283529160200191611e04565b820191906000526020600020905b815481529060010190602001808311611de757829003601f168201915b505050505081526020019060010190611d6c565b8460090154610c30565b611e2a610935565b6001600160a01b0316336001600160a01b031614611e5a5760405162461bcd60e51b8152600401610adb90614493565b600680549082905560408051828152602081018490527fffc708f072ca56e3d45ef0cb288b96cb9378f5f63e1646868bfbc9c38f4263a191016118eb565b6000611ea483836127a6565b9392505050565b611eb3610935565b6001600160a01b0316336001600160a01b031614611ee35760405162461bcd60e51b8152600401610adb90614493565b600880549082905560408051828152602081018490527fe92242fc3efcad407a677132b517977331a6e5b65abab69fd757cc02e99c9c4e91016118eb565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611f8a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f6c575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611fdd57602002820191906000526020600020905b815481526020019060010190808311611fc9575b505050505061218584600301805480602002602001604051908101604052809291908181526020016000905b828210156120b55783829060005260206000200180546120289061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546120549061425e565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b505050505081526020019060010190612009565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546120f89061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546121249061425e565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050815260200190600101906120d9565b8460090154610fba565b60006001600160e01b03198216636e665ced60e01b1480610a025750610a028261284c565b60006001600160401b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610adb565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b61224b8585858585612881565b5050505050565b6000610a0261225f612a00565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006122b187878787612b27565b9150915061108381612c14565b60008481526001602081905260408220906122d8876113e9565b60078111156122e9576122e9613ed9565b146123425760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610adb565b604080516020810190915281546001600160401b03169081905260009061236a908790611e98565b905061237887878784612dcf565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516123b79493929190614515565b60405180910390a29695505050505050565b6000806123d583612f74565b905060048160078111156123eb576123eb613ed9565b146123f65792915050565b600061240184611a1a565b90508061240f575092915050565b600360009054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612462573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248691906143ad565b61249090826143dc565b42106124a0575060069392505050565b5060059392505050565b6060600082516001600160401b038111156124c7576124c7613a8f565b6040519080825280602002602001820160405280156124fa57816020015b60608152602001906001900390816124e55790505b50905060005b84518110156126025784818151811061251b5761251b6143f4565b6020026020010151516000146125b95784818151811061253d5761253d6143f4565b6020026020010151848281518110612557576125576143f4565b602002602001015160405160240161256f9190613a7c565b60408051601f19818403018152908290529161258a9161453d565b6040519081900390206020820180516001600160e01b03166001600160e01b03199092169190911790526125d4565b8381815181106125cb576125cb6143f4565b60200260200101515b8282815181106125e6576125e66143f4565b6020026020010181905250806125fb90614461565b9050612500565b509392505050565b60006119cd858585856130db565b600061267433868686516001600160401b0381111561263957612639613a8f565b60405190808252806020026020018201604052801561266c57816020015b60608152602001906001900390816126575790505b5087876126e9565b6119cd858585856131f6565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805160208201206000612707878761270188886124aa565b85611b55565b600081815260026020526040902060098101549192509061279b5780546001600160a01b0319166001600160a01b038a16178155875161275090600183019060208b0190613797565b50865161276690600283019060208a01906137f8565b50855161277c9060038301906020890190613833565b508451612792906004830190602088019061388c565b50600981018390555b505050505050505050565b60405163782d6fe160e01b81526001600160a01b038381166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063782d6fe190604401602060405180830381865afa158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c9190614559565b6001600160601b03169392505050565b60006001600160e01b0319821663bf26d89760e01b1480610a0257506301ffc9a760e01b6001600160e01b0319831614610a02565b600061288c86611a1a565b9050600081116128f85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a2070726f706f73604482015270185b081b9bdd081e595d081c5d595d5959607a1b6064820152608401610adb565b60035461290e906001600160a01b0316346134b3565b60005b85518110156129f75760035486516001600160a01b0390911690630825f38f90889084908110612943576129436143f4565b602002602001015187848151811061295d5761295d6143f4565b6020026020010151878581518110612977576129776143f4565b6020026020010151866040518563ffffffff1660e01b815260040161299f949392919061440a565b6000604051808303816000875af11580156129be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129e691908101906142ff565b506129f081614461565b9050612911565b50505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612a5957507f000000000000000000000000000000000000000000000000000000000000000046145b15612a8357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b5e5750600090506003612c0b565b8460ff16601b14158015612b7657508460ff16601c14155b15612b875750600090506004612c0b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612bdb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c0457600060019250925050612c0b565b9150600090505b94509492505050565b6000816004811115612c2857612c28613ed9565b1415612c315750565b6001816004811115612c4557612c45613ed9565b1415612c935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610adb565b6002816004811115612ca757612ca7613ed9565b1415612cf55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610adb565b6003816004811115612d0957612d09613ed9565b1415612d625760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610adb565b6004816004811115612d7657612d76613ed9565b1415611a175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610adb565b60008481526002602090815260408083206001600160a01b038716845260088101909252909120805460ff1615612e5e5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610adb565b805460ff85166101000261ffff19909116176001178155612e7e836135cc565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff8416612ece5782826006016000828254612ec391906143dc565b90915550612f6c9050565b60ff841660011415612eee5782826005016000828254612ec391906143dc565b60ff841660021415612f0e5782826007016000828254612ec391906143dc565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610adb565b505050505050565b6000818152600160208181526040808420815160a08101835281546001600160401b0390811660808301908152825283518086018552958301541685529283019390935260029092015460ff80821615801594840194909452610100909104161515606082015290612fe95750600792915050565b806060015115612ffc5750600292915050565b80515143906001600160401b0316106130185750600092915050565b4361302582602001515190565b6001600160401b03161061303c5750600192915050565b6130498160200151613634565b1561308d5761305783613663565b8015613079575060008381526002602052604090206006810154600590910154115b613084576003611ea4565b60049392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610adb565b50919050565b6000806130ea8686868661368b565b905060006130f782611a1a565b905080156110835760005b87518110156131d35760035488516001600160a01b039091169063591fcdfe908a9084908110613134576131346143f4565b602002602001015189848151811061314e5761314e6143f4565b6020026020010151898581518110613168576131686143f4565b6020026020010151866040518563ffffffff1660e01b8152600401613190949392919061440a565b600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050806131cc90614461565b9050613102565b506000828152600460205260409020805467ffffffffffffffff19169055611083565b600061320160085490565b613210336108a760014361447c565b10156132905760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a401610adb565b60006132a58686868680519060200120611b55565b905084518651146132c85760405162461bcd60e51b8152600401610adb90614582565b83518651146132e95760405162461bcd60e51b8152600401610adb90614582565b600086511161333a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c00000000000000006044820152606401610adb565b600081815260016020908152604091829020825191820190925281546001600160401b031690819052156133ba5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610adb565b60006133cd6133c860055490565b6121b4565b6133d6436121b4565b6133e091906145c3565b905060006133f06133c860065490565b6133fa90836145c3565b90506134068383612220565b6134136001840182612220565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b0381111561345157613451613a8f565b60405190808252806020026020018201604052801561348457816020015b606081526020019060019003908161346f5790505b508c88888e60405161349e999897969594939291906145ee565b60405180910390a15091979650505050505050565b804710156135035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610adb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613550576040519150601f19603f3d011682016040523d82523d6000602084013e613555565b606091505b50509050806117025760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610adb565b60006001600160601b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610adb565b600061364982516001600160401b0316151590565b8015610a0257505051436001600160401b03909116111590565b600081815260026020526040812060058101546136826108e78561108d565b11159392505050565b60008061369a86868686611b55565b905060006136a7826113e9565b905060028160078111156136bd576136bd613ed9565b141580156136dd575060068160078111156136da576136da613ed9565b14155b80156136fb575060078160078111156136f8576136f8613ed9565b14155b6137475760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610adb565b60008281526001602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f989084815260200190565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906137b7565b5061221c9291506138e5565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec578251825591602001919060010190613818565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825180516138709184916020909101906138fa565b5091602001919060010190613853565b5061221c92915061396d565b8280548282559060005260206000209081019282156138d9579160200282015b828111156138d957825180516138c99184916020909101906138fa565b50916020019190600101906138ac565b5061221c92915061398a565b5b8082111561221c57600081556001016138e6565b8280546139069061425e565b90600052602060002090601f01602090048101928261392857600085556137ec565b82601f1061394157805160ff19168380011785556137ec565b828001600101855582156137ec57918201828111156137ec578251825591602001919060010190613818565b8082111561221c57600061398182826139a7565b5060010161396d565b8082111561221c57600061399e82826139a7565b5060010161398a565b5080546139b39061425e565b6000825580601f106139c3575050565b601f016020900490600052602060002090810190611a1791906138e5565b6000602082840312156139f357600080fd5b5035919050565b600060208284031215613a0c57600080fd5b81356001600160e01b031981168114611ea457600080fd5b60005b83811015613a3f578181015183820152602001613a27565b83811115611aaa5750506000910152565b60008151808452613a68816020860160208601613a24565b601f01601f19169290920160200192915050565b602081526000611ea46020830184613a50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613acd57613acd613a8f565b604052919050565b60006001600160401b03821115613aee57613aee613a8f565b5060051b60200190565b6001600160a01b0381168114611a1757600080fd5b600082601f830112613b1e57600080fd5b81356020613b33613b2e83613ad5565b613aa5565b82815260059290921b84018101918181019086841115613b5257600080fd5b8286015b84811015613b76578035613b6981613af8565b8352918301918301613b56565b509695505050505050565b600082601f830112613b9257600080fd5b81356020613ba2613b2e83613ad5565b82815260059290921b84018101918181019086841115613bc157600080fd5b8286015b84811015613b765780358352918301918301613bc5565b60006001600160401b03821115613bf557613bf5613a8f565b50601f01601f191660200190565b6000613c11613b2e84613bdc565b9050828152838383011115613c2557600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c4d57600080fd5b81356020613c5d613b2e83613ad5565b82815260059290921b84018101918181019086841115613c7c57600080fd5b8286015b84811015613b765780356001600160401b03811115613c9f5760008081fd5b8701603f81018913613cb15760008081fd5b613cc2898683013560408401613c03565b845250918301918301613c80565b60008060008060808587031215613ce657600080fd5b84356001600160401b0380821115613cfd57600080fd5b613d0988838901613b0d565b95506020870135915080821115613d1f57600080fd5b613d2b88838901613b81565b94506040870135915080821115613d4157600080fd5b50613d4e87828801613c3c565b949793965093946060013593505050565b600081518084526020808501945080840160005b83811015613d985781516001600160a01b031687529582019590820190600101613d73565b509495945050505050565b600081518084526020808501945080840160005b83811015613d9857815187529582019590820190600101613db7565b600081518084526020808501808196508360051b8101915082860160005b85811015613e1b578284038952613e09848351613a50565b98850198935090840190600101613df1565b5091979650505050505050565b608081526000613e3b6080830187613d5f565b8281036020840152613e4d8187613da3565b90508281036040840152613e618186613dd3565b905082810360608401526113de8185613dd3565b803560ff81168114613e8657600080fd5b919050565b600080600080600060a08688031215613ea357600080fd5b85359450613eb360208701613e75565b9350613ec160408701613e75565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b6020810160088310613f1157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613f2a57600080fd5b823591506020830135613f3c81613af8565b809150509250929050565b60008060408385031215613f5a57600080fd5b82359150613f6a60208401613e75565b90509250929050565b60008060008060608587031215613f8957600080fd5b84359350613f9960208601613e75565b925060408501356001600160401b0380821115613fb557600080fd5b818701915087601f830112613fc957600080fd5b813581811115613fd857600080fd5b886020828501011115613fea57600080fd5b95989497505060200194505050565b600082601f83011261400a57600080fd5b611ea483833560208501613c03565b6000806000806080858703121561402f57600080fd5b84356001600160401b038082111561404657600080fd5b61405288838901613b0d565b9550602087013591508082111561406857600080fd5b61407488838901613b81565b9450604087013591508082111561408a57600080fd5b61409688838901613c3c565b935060608701359150808211156140ac57600080fd5b506140b987828801613ff9565b91505092959194509250565b6000602082840312156140d757600080fd5b8135611ea481613af8565b600082601f8301126140f357600080fd5b81356020614103613b2e83613ad5565b82815260059290921b8401810191818101908684111561412257600080fd5b8286015b84811015613b765780356001600160401b038111156141455760008081fd5b6141538986838b0101613ff9565b845250918301918301614126565b600080600080600060a0868803121561417957600080fd5b85356001600160401b038082111561419057600080fd5b61419c89838a01613b0d565b965060208801359150808211156141b257600080fd5b6141be89838a01613b81565b955060408801359150808211156141d457600080fd5b6141e089838a016140e2565b945060608801359150808211156141f657600080fd5b61420289838a01613c3c565b9350608088013591508082111561421857600080fd5b5061422588828901613ff9565b9150509295509295909350565b6000806040838503121561424557600080fd5b823561425081613af8565b946020939093013593505050565b600181811c9082168061427257607f821691505b602082108114156130d557634e487b7160e01b600052602260045260246000fd5b60018060a01b038516815283602082015260a06040820152601860a08201527f73657450656e64696e6741646d696e286164647265737329000000000000000060c082015260e0606082015260006142ee60e0830185613a50565b905082608083015295945050505050565b60006020828403121561431157600080fd5b81516001600160401b0381111561432757600080fd5b8201601f8101841361433857600080fd5b8051614346613b2e82613bdc565b81815285602083850101111561435b57600080fd5b6119cd826020830160208601613a24565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b6000602082840312156143bf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156143ef576143ef6143c6565b500190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b038516815283602082015260a06040820152600060a082015260c0606082015260006142ee60c0830185613a50565b60006020828403121561445157600080fd5b81518015158114611ea457600080fd5b6000600019821415614475576144756143c6565b5060010190565b60008282101561448e5761448e6143c6565b500390565b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b6080815260006144dd6080830187613d5f565b82810360208401526144ef8187613da3565b905082810360408401526145038186613dd3565b91505082606083015295945050505050565b84815260ff841660208201528260408201526080606082015260006119b56080830184613a50565b6000825161454f818460208701613a24565b9190910192915050565b60006020828403121561456b57600080fd5b81516001600160601b0381168114611ea457600080fd5b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006001600160401b038083168185168083038211156145e5576145e56143c6565b01949350505050565b8981526001600160a01b0389166020820152610120604082018190526000906146198382018b613d5f565b9050828103606084015261462d818a613da3565b905082810360808401526146418189613dd3565b905082810360a08401526146558188613dd3565b6001600160401b0387811660c0860152861660e085015283810361010085015290506146818185613a50565b9c9b50505050505050505050505056fea264697066735822122093e9e558c03743cbb7912a75250045d7910498ec68f1824fcc308c047c9aa9a864736f6c634300080a0033000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000008ace03fc45139fddba944c6a4082b604041d19fc0000000000000000000000000000000000000000000000000000000000000000" +} \ No newline at end of file diff --git a/external/abi/fei/PegExchanger.json b/external/abi/fei/PegExchanger.json new file mode 100644 index 000000000..e092ad8a6 --- /dev/null +++ b/external/abi/fei/PegExchanger.json @@ -0,0 +1,303 @@ +{ + "contractName": "PegExchanger", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "tribeRariDAO", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "dao", + "type": "address" + } + ], + "name": "Accept", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + } + ], + "name": "Enabled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amountOut", + "type": "uint256" + } + ], + "name": "Exchange", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + } + ], + "name": "SetExpiry", + "type": "event" + }, + { + "inputs": [], + "name": "MIN_EXPIRY_WINDOW", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "bothPartiesAccepted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "exchange", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "exchangeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "expirationTimestamp", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isExpired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rgt", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rgtAccept", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "rgtAccepted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rgtTimelock", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "scalar", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "setBothPartiesAccepted", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "setExpirationTimestamp", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tribe", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tribeAccept", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tribeAccepted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tribeRariDAO", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tribeTimelock", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "60a060405260001960015534801561001657600080fd5b50604051610dc9380380610dc983398101604081905261003591610046565b6001600160a01b0316608052610076565b60006020828403121561005857600080fd5b81516001600160a01b038116811461006f57600080fd5b9392505050565b608051610d316100986000396000818161022801526106ee0152610d316000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80637b288c2d116100a2578063af5a3d6611610071578063af5a3d6614610223578063b86677fe1461024a578063c53a352314610265578063f45e65d81461026d578063f9540ed71461027857600080fd5b80637b288c2d146101e55780637b44a8f5146102005780639f43ddd214610212578063a9c072121461021b57600080fd5b80634f0c3834116100e95780634f0c38341461016d57806353556559146101a05780635ef4b340146101b35780637ab03cf2146101c05780637ac59bc0146101ca57600080fd5b806304f441811461011b57806312e8fdf8146101305780632f13b60c146101385780633ba0b9a914610153575b600080fd5b61012e610129366004610bad565b61028b565b005b61012e610412565b60015442115b60405190151581526020015b60405180910390f35b61015f640637c83cd681565b60405190815260200161014a565b610188738ace03fc45139fddba944c6a4082b604041d19fc81565b6040516001600160a01b03909116815260200161014a565b61012e6101ae366004610bad565b6104b5565b60005461013e9060ff1681565b61015f62ed4e0081565b61018873d291e7a03283640fdc51b121ac401383a46cc62381565b61018873d51dba7a94e1adea403553a8235c302cebf41a3c81565b60005461013e90610100900460ff1681565b61015f60015481565b61012e6105ff565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b61018873c7283b66eb1eb5fb86327f08e1b5816b0720212b81565b61012e6106a5565b61015f633b9aca0081565b60005461013e9062010000900460ff1681565b3373d51dba7a94e1adea403553a8235c302cebf41a3c1461030a5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207468652074726962652074696d656c6f636b206d61792063616c6c60448201526d103a3434b990333ab731ba34b7b760911b60648201526084015b60405180910390fd5b61031762ed4e0042610bdc565b81116103595760405162461bcd60e51b815260206004820152601160248201527074696d657374616d7020746f6f206c6f7760781b6044820152606401610301565b60005462010000900460ff1615156001146103d55760405162461bcd60e51b815260206004820152603660248201527f436f6e7472616374206d75737420626520656e61626c6564206265666f72652060448201527518591b5a5b88199d5b98dd1a5bdb9cc818d85b1b195960521b6064820152608401610301565b600181905560405181815233907feb12923a5aa0d9a3885a3bed9c7cee86d52bb27d7399a46f1d34889ee367d1859060200160405180910390a250565b33738ace03fc45139fddba944c6a4082b604041d19fc1461046a5760405162461bcd60e51b81526020600482015260126024820152714f6e6c7920726172692074696d656c6f636b60701b6044820152606401610301565b6000805460ff19166001178155604051738ace03fc45139fddba944c6a4082b604041d19fc917f5dbe2599fd6080a6c8d91d0850baa44f165fb0c49bcfcbe85981e7ff77bdbe5291a2565b6001544211156105075760405162461bcd60e51b815260206004820152601960248201527f526564656d7074696f6e20706572696f64206973206f766572000000000000006044820152606401610301565b60005462010000900460ff1661055f5760405162461bcd60e51b815260206004820152601d60248201527f50726f706f73616c7320617265206e6f7420626f7468207061737365640000006044820152606401610301565b6000633b9aca00610575640637c83cd684610bf4565b61057f9190610c13565b90506105a173d291e7a03283640fdc51b121ac401383a46cc6233330856108bb565b6105c073c7283b66eb1eb5fb86327f08e1b5816b0720212b338361092c565b604080518381526020810183905233917f26981b9aefbb0f732b0264bd34c255e831001eb50b06bc85b32cc39e14389721910160405180910390a25050565b3373d51dba7a94e1adea403553a8235c302cebf41a3c146106585760405162461bcd60e51b81526020600482015260136024820152724f6e6c792074726962652074696d656c6f636b60681b6044820152606401610301565b6000805461ff00191661010017815560405173d51dba7a94e1adea403553a8235c302cebf41a3c917f5dbe2599fd6080a6c8d91d0850baa44f165fb0c49bcfcbe85981e7ff77bdbe5291a2565b60005462010000900460ff16156106ec5760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610301565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316738ace03fc45139fddba944c6a4082b604041d19fc6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c9190610c35565b6001600160a01b0316146107d75760405162461bcd60e51b815260206004820152601260248201527118591b5a5b881b9bdd081858d8d95c1d195960721b6044820152606401610301565b600054610100900460ff1661082e5760405162461bcd60e51b815260206004820152601a60248201527f54726962652044414f206e6f74207965742061636365707465640000000000006044820152606401610301565b60005460ff166108805760405162461bcd60e51b815260206004820152601960248201527f526172692044414f206e6f7420796574206163636570746564000000000000006044820152606401610301565b6000805462ff000019166201000017815560405133917f44bcce471802f9158ee4390426e4a931d186757cc50d302f6747504c17516d1291a2565b6040516001600160a01b03808516602483015283166044820152606481018290526109269085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610961565b50505050565b6040516001600160a01b03831660248201526044810182905261095c90849063a9059cbb60e01b906064016108ef565b505050565b60006109b6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a339092919063ffffffff16565b80519091501561095c57808060200190518101906109d49190610c5e565b61095c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610301565b6060610a428484600085610a4c565b90505b9392505050565b606082471015610aad5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610301565b843b610afb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610301565b600080866001600160a01b03168587604051610b179190610cac565b60006040518083038185875af1925050503d8060008114610b54576040519150601f19603f3d011682016040523d82523d6000602084013e610b59565b606091505b5091509150610b69828286610b74565b979650505050505050565b60608315610b83575081610a45565b825115610b935782518084602001fd5b8160405162461bcd60e51b81526004016103019190610cc8565b600060208284031215610bbf57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610bef57610bef610bc6565b500190565b6000816000190483118215151615610c0e57610c0e610bc6565b500290565b600082610c3057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610c4757600080fd5b81516001600160a01b0381168114610a4557600080fd5b600060208284031215610c7057600080fd5b81518015158114610a4557600080fd5b60005b83811015610c9b578181015183820152602001610c83565b838111156109265750506000910152565b60008251610cbe818460208701610c80565b9190910192915050565b6020815260008251806020840152610ce7816040850160208701610c80565b601f01601f1916919091016040019291505056fea264697066735822122036d124a661c1d190b892d62fa64562e4fc6ae1f0d442135f0fa16fdb39b35afd64736f6c634300080a0033" +} \ No newline at end of file diff --git a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts new file mode 100644 index 000000000..3a45a21ba --- /dev/null +++ b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts @@ -0,0 +1,113 @@ +import "module-alias/register"; + +import { BigNumber } from "ethers"; +import { Address } from "@utils/types"; +import { Account } from "@utils/test/types"; +import { ZERO } from "@utils/constants"; +import { RgtMigrationWrapAdapter } from "@utils/contracts"; +import { PegExchanger } from "@utils/contracts/fei"; +import DeployHelper from "@utils/deploys"; +import { + ether, +} from "@utils/index"; +import { + addSnapshotBeforeRestoreAfterEach, + getAccounts, + getWaffleExpect +} from "@utils/test/index"; + +const expect = getWaffleExpect(); + +describe("RgtMigrationWrapAdapter", () => { + let owner: Account; + let deployer: DeployHelper; + let pegExchanger: PegExchanger; + let rgtMigrationWrapAdapter: RgtMigrationWrapAdapter; + + before(async () => { + [ + owner, + ] = await getAccounts(); + + deployer = new DeployHelper(owner.wallet); + + const rariTribeDAO = await deployer.mocks.deployTokenMock(owner.address); + pegExchanger = await deployer.external.deployPegExchanger(rariTribeDAO.address); + + rgtMigrationWrapAdapter = await deployer.adapters.deployRgtMigrationWrapAdater(pegExchanger.address); + }); + + addSnapshotBeforeRestoreAfterEach(); + + describe("#constructor", async () => { + let subjectPegExchanger: Address; + + beforeEach(async () => { + subjectPegExchanger = pegExchanger.address; + }); + + async function subject(): Promise { + return deployer.adapters.deployRgtMigrationWrapAdater(subjectPegExchanger); + } + + it("should have the correct PegExchanger address", async () => { + const deployRgtMigrationWrapAdapter = await subject(); + + const pegExchanger = await deployRgtMigrationWrapAdapter.pegExchanger(); + const expectedKncLegacyToken = subjectPegExchanger; + + expect(pegExchanger).to.eq(expectedKncLegacyToken); + }); + }); + + describe("#getSpenderAddress", async () => { + async function subject(): Promise { + return rgtMigrationWrapAdapter.getSpenderAddress(owner.address, owner.address); + } + + it("should return the correct spender address", async () => { + const spender = await subject(); + + expect(spender).to.eq(pegExchanger.address); + }); + }); + + describe("#getWrapCallData", async () => { + let subjectUnderlyingUnits: BigNumber; + + beforeEach(async () => { + subjectUnderlyingUnits = ether(2); + }); + + async function subject(): Promise { + return rgtMigrationWrapAdapter.getWrapCallData(owner.address, owner.address, subjectUnderlyingUnits); + } + + it("should return correct data for valid pair", async () => { + const [targetAddress, ethValue, callData] = await subject(); + + const expectedCallData = pegExchanger.interface.encodeFunctionData("exchange", [subjectUnderlyingUnits]); + + expect(targetAddress).to.eq(pegExchanger.address); + expect(ethValue).to.eq(ZERO); + expect(callData).to.eq(expectedCallData); + }); + }); + + describe("#getUnwrapCallData", async () => { + let subjectWrappedTokenUnits: BigNumber; + + beforeEach(async () => { + subjectWrappedTokenUnits = ether(2); + }); + + async function subject(): Promise { + return rgtMigrationWrapAdapter.getUnwrapCallData(owner.address, owner.address, subjectWrappedTokenUnits); + } + + it("should revert", async () => { + await expect(subject()).to.be.revertedWith("RGT migration cannot be reversed"); + }); + }); + +}); \ No newline at end of file diff --git a/utils/contracts/fei.ts b/utils/contracts/fei.ts new file mode 100644 index 000000000..158376dae --- /dev/null +++ b/utils/contracts/fei.ts @@ -0,0 +1 @@ +export { PegExchanger } from "../../typechain/PegExchanger"; \ No newline at end of file diff --git a/utils/contracts/index.ts b/utils/contracts/index.ts index 8c6fd7722..ef2599a27 100644 --- a/utils/contracts/index.ts +++ b/utils/contracts/index.ts @@ -77,6 +77,7 @@ export { PreciseUnitMathMock } from "../../typechain/PreciseUnitMathMock"; export { PriceOracle } from "../../typechain/PriceOracle"; export { ProtocolViewer } from "../../typechain/ProtocolViewer"; export { ResourceIdentifierMock } from "../../typechain/ResourceIdentifierMock"; +export { RgtMigrationWrapAdapter } from "../../typechain/RgtMigrationWrapAdapter"; export { SetToken } from "../../typechain/SetToken"; export { SetTokenAccessibleMock } from "../../typechain/SetTokenAccessibleMock"; export { SetTokenCreator } from "../../typechain/SetTokenCreator"; diff --git a/utils/deploys/deployAdapters.ts b/utils/deploys/deployAdapters.ts index 194c666c9..032655c5f 100644 --- a/utils/deploys/deployAdapters.ts +++ b/utils/deploys/deployAdapters.ts @@ -33,6 +33,7 @@ import { SynthetixExchangeAdapter, CompoundBravoGovernanceAdapter, CompClaimAdapter, + RgtMigrationWrapAdapter, } from "../contracts"; import { Address, Bytes } from "./../types"; @@ -67,6 +68,7 @@ import { SnapshotGovernanceAdapter__factory } from "../../typechain/factories/Sn import { SynthetixExchangeAdapter__factory } from "../../typechain/factories/SynthetixExchangeAdapter__factory"; import { CompoundBravoGovernanceAdapter__factory } from "../../typechain/factories/CompoundBravoGovernanceAdapter__factory"; import { CompClaimAdapter__factory, AGIMigrationWrapAdapter__factory } from "../../typechain"; +import { RgtMigrationWrapAdapter__factory } from "@typechain/factories/RgtMigrationWrapAdapter__factory"; export default class DeployAdapters { private _deployerSigner: Signer; @@ -191,6 +193,10 @@ export default class DeployAdapters { return await new DgMigrationWrapAdapter__factory(this._deployerSigner).deploy(legacyAddress, newAddress); } + public async deployRgtMigrationWrapAdater(pegExchanger: Address): Promise { + return await new RgtMigrationWrapAdapter__factory(this._deployerSigner).deploy(pegExchanger); + } + public async deployUniswapPairPriceAdapter( controller: Address, uniswapFactory: Address, diff --git a/utils/deploys/deployExternal.ts b/utils/deploys/deployExternal.ts index 54b8333ab..e2cf511da 100644 --- a/utils/deploys/deployExternal.ts +++ b/utils/deploys/deployExternal.ts @@ -237,6 +237,10 @@ import { DGLight, DgToken } from "../contracts/dg"; import { DgToken__factory } from "../../typechain/factories/DgToken__factory"; import { DGLight__factory } from "../../typechain/factories/DGLight__factory"; +import { PegExchanger } from "../../typechain/PegExchanger"; +import { PegExchanger__factory } from "../../typechain/factories/PegExchanger__factory"; +import { FeiDAO } from "../../typechain/FeiDAO"; + export default class DeployExternalContracts { private _deployerSigner: Signer; @@ -821,6 +825,15 @@ export default class DeployExternalContracts { return await new DgToken__factory(this._deployerSigner).deploy(); } + // Fei + public async deployFeiDAO(): Promise { + throw new Error("Not yet implemented"); + } + + public async deployPegExchanger(rariTribeDAO: Address): Promise { + return await new PegExchanger__factory(this._deployerSigner).deploy(rariTribeDAO); + } + // PerpV2 public async deployPerpV2OrderBook(): Promise { From 623a59d1a51e5f47984a4c8a39c01508994a3ea2 Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Wed, 19 Jan 2022 21:05:34 +1100 Subject: [PATCH 05/16] fix lint --- .../rgtMigrationWrapModule.spec.ts | 164 ++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 test/integration/rgtMigrationWrapModule.spec.ts diff --git a/test/integration/rgtMigrationWrapModule.spec.ts b/test/integration/rgtMigrationWrapModule.spec.ts new file mode 100644 index 000000000..f06c0c12b --- /dev/null +++ b/test/integration/rgtMigrationWrapModule.spec.ts @@ -0,0 +1,164 @@ +import "module-alias/register"; +import { BigNumber } from "ethers"; + +import { Address } from "@utils/types"; +import { Account } from "@utils/test/types"; +import { ADDRESS_ZERO, ZERO } from "@utils/constants"; +import { RgtMigrationWrapAdapter, SetToken, WrapModule } from "@utils/contracts"; +import DeployHelper from "@utils/deploys"; +import { + ether, +} from "@utils/index"; +import { + addSnapshotBeforeRestoreAfterEach, + getAccounts, + getWaffleExpect, + getSystemFixture, +} from "@utils/test/index"; +import { SystemFixture } from "@utils/fixtures"; + +const expect = getWaffleExpect(); + +describe("rgtMigrationWrapModule", () => { + let owner: Account; + let deployer: DeployHelper; + let setup: SystemFixture; + + let wrapModule: WrapModule; + + // let rgtToken: RgtToken; + // let tribeToken: TribeToken; + let adapter: RgtMigrationWrapAdapter; + + const rgtMigrationWrapAdapterIntegrationName: string = "RGT_MIGRATION_WRAPPER"; + + before(async () => { + [ + owner, + ] = await getAccounts(); + + // System setup + deployer = new DeployHelper(owner.wallet); + setup = getSystemFixture(owner.address); + await setup.initialize(); + + // WrapModule setup + wrapModule = await deployer.modules.deployWrapModule(setup.controller.address, setup.weth.address); + await setup.controller.addModule(wrapModule.address); + + // RgtMigrationWrapV2Adapter setup + adapter = await deployer.adapters.deployRgtMigrationWrapAdapter(); + + await setup.integrationRegistry.addIntegration(wrapModule.address, rgtMigrationWrapAdapterIntegrationName, adapter.address); + }); + + addSnapshotBeforeRestoreAfterEach(); + + context("when a SetToken has been deployed and issued", async () => { + let setToken: SetToken; + let setTokensIssued: BigNumber; + + before(async () => { + setToken = await setup.createSetToken( + [dgClassic.address], + [BigNumber.from(10 ** 8)], + [setup.issuanceModule.address, wrapModule.address] + ); + + // Initialize modules + await setup.issuanceModule.initialize(setToken.address, ADDRESS_ZERO); + await wrapModule.initialize(setToken.address); + + // Issue some Sets + setTokensIssued = ether(10); + const underlyingRequired = setTokensIssued.div(10 ** 9); + await dgClassic.approve(setup.issuanceModule.address, underlyingRequired); + await setup.issuanceModule.issue(setToken.address, setTokensIssued, owner.address); + }); + + describe("#wrap", async () => { + let subjectSetToken: Address; + let subjectUnderlyingToken: Address; + let subjectWrappedToken: Address; + let subjectUnderlyingUnits: BigNumber; + let subjectIntegrationName: string; + let subjectCaller: Account; + + beforeEach(async () => { + subjectSetToken = setToken.address; + subjectUnderlyingToken = dgClassic.address; + subjectWrappedToken = dgLight.address; + subjectUnderlyingUnits = BigNumber.from(10 ** 8); + subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; + subjectCaller = owner; + }); + + async function subject(): Promise { + return wrapModule.connect(subjectCaller.wallet).wrap( + subjectSetToken, + subjectUnderlyingToken, + subjectWrappedToken, + subjectUnderlyingUnits, + subjectIntegrationName + ); + } + + it("should convert underlying balance of RGT tokens to TRIBE tokens * 1000", async () => { + const previousDgTokenBalance = await dgClassic.balanceOf(setToken.address); + const previousDGLightBalance = await dgLight.balanceOf(setToken.address); + expect(previousDgTokenBalance).to.eq(BigNumber.from(10 ** 9)); + expect(previousDGLightBalance).to.eq(ZERO); + + await subject(); + + const dgTokenBalance = await dgClassic.balanceOf(setToken.address); + const DGLightBalance = await dgLight.balanceOf(setToken.address); + const components = await setToken.getComponents(); + + expect(dgTokenBalance).to.eq(ZERO); + expect(DGLightBalance).to.eq(previousDgTokenBalance.mul(1000)); + expect(components.length).to.eq(1); + }); + }); + + describe("#unwrap", async () => { + let subjectSetToken: Address; + let subjectUnderlyingToken: Address; + let subjectWrappedToken: Address; + let subjectWrappedUnits: BigNumber; + let subjectIntegrationName: string; + let subjectCaller: Account; + + beforeEach(async () => { + subjectSetToken = setToken.address; + subjectUnderlyingToken = dgClassic.address; + subjectWrappedToken = dgLight.address; + subjectWrappedUnits = BigNumber.from(10 ** 8); + subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; + subjectCaller = owner; + + await wrapModule.connect(subjectCaller.wallet).wrap( + subjectSetToken, + subjectUnderlyingToken, + subjectWrappedToken, + subjectWrappedUnits, + subjectIntegrationName + ); + }); + + async function subject(): Promise { + return wrapModule.connect(subjectCaller.wallet).unwrap( + subjectSetToken, + subjectUnderlyingToken, + subjectWrappedToken, + subjectWrappedUnits, + subjectIntegrationName + ); + } + + it("should revert", async () => { + await expect(subject()).to.be.revertedWith("DG migration cannot be reversed"); + }); + }); + }); +}); From 792cff9f09cc500d11bfc603567a900f0a3a22fe Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Thu, 20 Jan 2022 01:07:29 +1100 Subject: [PATCH 06/16] add more external contracts --- external/abi/fei/Core.json | 754 +++++++++++++++++ external/abi/fei/FeiDAO.json | 2 +- external/abi/fei/FeiDAOTimelock.json | 777 ++++++++++++++++++ external/abi/fei/Tribe.json | 619 ++++++++++++++ external/abi/rari/Timelock.json | 463 +++++++++++ .../rgtMigrationWrapModule.spec.ts | 47 +- .../wrap/rgtMigrationWrapAdapter.spec.ts | 4 +- utils/deploys/deployAdapters.ts | 2 +- utils/deploys/deployExternal.ts | 27 +- 9 files changed, 2668 insertions(+), 27 deletions(-) create mode 100644 external/abi/fei/Core.json create mode 100644 external/abi/fei/FeiDAOTimelock.json create mode 100644 external/abi/fei/Tribe.json create mode 100644 external/abi/rari/Timelock.json diff --git a/external/abi/fei/Core.json b/external/abi/fei/Core.json new file mode 100644 index 000000000..fac99b007 --- /dev/null +++ b/external/abi/fei/Core.json @@ -0,0 +1,754 @@ +{ + "contractName": "Core", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_fei", + "type": "address" + } + ], + "name": "FeiUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_genesisGroup", + "type": "address" + } + ], + "name": "GenesisGroupUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "_timestamp", + "type": "uint256" + } + ], + "name": "GenesisPeriodComplete", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "_amount", + "type": "uint256" + } + ], + "name": "TribeAllocation", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "_tribe", + "type": "address" + } + ], + "name": "TribeUpdate", + "type": "event" + }, + { + "inputs": [], + "name": "BURNER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GOVERN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GUARDIAN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINTER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PCV_CONTROLLER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "allocateTribe", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "completeGenesisGroup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "adminRole", + "type": "bytes32" + } + ], + "name": "createRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "fei", + "outputs": [ + { + "internalType": "contract IFei", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "genesisGroup", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "burner", + "type": "address" + } + ], + "name": "grantBurner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governor", + "type": "address" + } + ], + "name": "grantGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "guardian", + "type": "address" + } + ], + "name": "grantGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "grantMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pcvController", + "type": "address" + } + ], + "name": "grantPCVController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "hasGenesisGroupCompleted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "init", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isBurner", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isGovernor", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isGuardian", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isMinter", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_address", + "type": "address" + } + ], + "name": "isPCVController", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "burner", + "type": "address" + } + ], + "name": "revokeBurner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "governor", + "type": "address" + } + ], + "name": "revokeGovernor", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "guardian", + "type": "address" + } + ], + "name": "revokeGuardian", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address" + } + ], + "name": "revokeMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeOverride", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pcvController", + "type": "address" + } + ], + "name": "revokePCVController", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "setFei", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_genesisGroup", + "type": "address" + } + ], + "name": "setGenesisGroup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "setTribe", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tribe", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "608060405262000018306001600160e01b03620000a616565b620000586040516200002a90620002ce565b60405180910390206040516200004090620002b7565b6040519081900390206001600160e01b03620000d416565b6200006a6040516200002a9062000287565b6200007c6040516200002a906200025e565b6200008e6040516200002a90620002b7565b620000a06040516200002a906200029e565b620002e5565b620000d1604051620000b890620002b7565b604051908190039020826001600160e01b036200012616565b50565b600082815260208190526040808220600201549051839285917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a460009182526020829052604090912060020155565b6200013b82826001600160e01b036200013f16565b5050565b6000828152602081815260409091206200016491839062001228620001c1821b17901c565b156200013b576200017d6001600160e01b03620001ea16565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620001e1836001600160a01b0384166001600160e01b03620001ee16565b90505b92915050565b3390565b60006200020583836001600160e01b036200024616565b6200023d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001e4565b506000620001e4565b60009081526001919091016020526040902054151590565b7f5043565f434f4e54524f4c4c45525f524f4c4500000000000000000000000000815260130190565b6a4255524e45525f524f4c4560a81b8152600b0190565b6c475541524449414e5f524f4c4560981b8152600d0190565b6a474f5645524e5f524f4c4560a81b8152600b0190565b6a4d494e5445525f524f4c4560a81b8152600b0190565b615d0880620002f56000396000f3fe60806040523480156200001157600080fd5b5060043610620002805760003560e01c80639010d07c1162000159578063c1ef303a11620000c9578063e0a200461162000087578063e0a200461462000560578063e1c7392a146200056a578063e43581b81462000574578063e6eb982f146200058b578063eacdd9e814620005a25762000280565b8063c1ef303a14620004fa578063ca15c8731462000511578063cfbd48851462000528578063d5391393146200053f578063d547741f14620005495762000280565b8063a217fddf1162000117578063a217fddf14620004a1578063aa271e1a14620004ab578063af648c3d14620004c2578063b86677fe14620004d9578063b9022dc014620004e35762000280565b80639010d07c146200044857806391d14854146200045f57806394b1d2c014620004765780639711ac34146200048d5780639a9ba4da14620004975762000280565b806336568abe11620001f55780635f06d76111620001b35780635f06d76114620003d3578063611cf19b14620003ea5780636186943e146200040157806384bb0a6b14620004185780638dd9227614620004315762000280565b806336568abe146200036d57806338b7f4461462000384578063395c62e8146200038e5780634334614a14620003a55780634c9f938414620003bc5762000280565b8063248a9ca31162000243578063248a9ca3146200030557806324ea54f4146200032b578063261707fa1462000335578063282c51f3146200034c5780632f2ff15d14620003565762000280565b8063080bf57c14620002855780630900cc33146200029e5780630c68ba2114620002b557806310511f9614620002e4578063201175c214620002fb575b600080fd5b6200029c6200029636600462001496565b620005b9565b005b6200029c620002af36600462001410565b62000683565b620002cc620002c636600462001410565b620006d1565b604051620002db9190620015d1565b60405180910390f35b6200029c620002f536600462001410565b620006fa565b6200029c62000745565b6200031c620003163660046200147d565b620007ee565b604051620002db9190620015dc565b6200031c62000803565b6200029c6200034636600462001410565b6200081c565b6200031c62000858565b6200029c6200036736600462001496565b62000866565b6200029c6200037e36600462001496565b620008b6565b6200031c620008ff565b6200029c6200039f36600462001410565b6200090d565b620002cc620003b636600462001410565b62000949565b6200029c620003cd366004620014d2565b6200095d565b6200029c620003e436600462001410565b62000993565b6200029c620003fb36600462001410565b620009c8565b620002cc6200041236600462001410565b62000a3c565b6200042262000a50565b604051620002db91906200158a565b6200029c6200044236600462001410565b62000a5f565b6200042262000459366004620014d2565b62000a9b565b620002cc6200047036600462001496565b62000ac2565b6200029c6200048736600462001410565b62000ae2565b620002cc62000b1e565b6200042262000b2e565b6200031c62000b43565b620002cc620004bc36600462001410565b62000b48565b6200029c620004d336600462001410565b62000b5c565b6200042262000b98565b6200029c620004f436600462001410565b62000ba7565b6200029c6200050b36600462001410565b62000bdc565b6200031c620005223660046200147d565b62000c18565b6200029c6200053936600462001410565b62000c31565b6200031c62000c6d565b6200029c6200055a36600462001496565b62000c7b565b6200031c62000cbb565b6200029c62000cc9565b620002cc6200058536600462001410565b62000df2565b6200029c6200059c36600462001410565b62000e06565b6200029c620005b33660046200142e565b62000e42565b620005c433620006d1565b620005ec5760405162461bcd60e51b8152600401620005e39062001825565b60405180910390fd5b604051620005fa906200155c565b6040518091039020821415620006245760405162461bcd60e51b8152600401620005e3906200186a565b60405163d547741f60e01b8152309063d547741f906200064b9085908590600401620015e5565b600060405180830381600087803b1580156200066657600080fd5b505af11580156200067b573d6000803e3d6000fd5b505050505050565b6200068e3362000df2565b620006ad5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf906200152c565b60405180910390208262000c7b565b50565b6000620006f4604051620006e59062001543565b60405180910390208362000ac2565b92915050565b620007053362000df2565b620007245760405162461bcd60e51b8152600401620005e3906200163e565b620006ce60405162000736906200152c565b60405180910390208262000866565b600354600160a01b900460ff1615620007725760405162461bcd60e51b8152600401620005e39062001743565b6003546001600160a01b031633146200079f5760405162461bcd60e51b8152600401620005e39062001702565b6003805460ff60a01b1916600160a01b1790556040517f55728014a7cf4447d0a7e11503cf9ab1ca633624fa3150f8fe149b56e3c026fb90620007e4904290620015dc565b60405180910390a1565b60009081526020819052604090206002015490565b604051620008119062001543565b604051809103902081565b620008273362000df2565b620008465760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620007369062001573565b60405162000811906200152c565b60008281526020819052604090206002015462000887906200047062000fe6565b620008a65760405162461bcd60e51b8152600401620005e39062001683565b620008b2828262000fea565b5050565b620008c062000fe6565b6001600160a01b0316816001600160a01b031614620008f35760405162461bcd60e51b8152600401620005e390620018b6565b620008b282826200105e565b60405162000811906200155c565b620009183362000df2565b620009375760405162461bcd60e51b8152600401620005e3906200163e565b620006ce60405162000736906200155c565b6000620006f4604051620006e5906200152c565b620009683362000df2565b620009875760405162461bcd60e51b8152600401620005e3906200163e565b620008b28282620010d2565b6200099e3362000df2565b620009bd5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce8162001124565b620009d33362000df2565b620009f25760405162461bcd60e51b8152600401620005e3906200163e565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f815cf7ef55cab2e0662e0739c044d60e9a897f882091d48baa1b0b30d28f8a3090600090a250565b6000620006f4604051620006e5906200150d565b6003546001600160a01b031681565b62000a6a3362000df2565b62000a895760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf906200150d565b600082815260208190526040812062000abb908363ffffffff6200117816565b9392505050565b600082815260208190526040812062000abb908363ffffffff6200118616565b62000aed3362000df2565b62000b0c5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620007369062001543565b600354600160a01b900460ff1681565b6001546201000090046001600160a01b031681565b600081565b6000620006f4604051620006e59062001573565b62000b673362000df2565b62000b865760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf9062001543565b6002546001600160a01b031681565b62000bb23362000df2565b62000bd15760405162461bcd60e51b8152600401620005e3906200163e565b620006ce816200119d565b62000be73362000df2565b62000c065760405162461bcd60e51b8152600401620005e3906200163e565b620006ce60405162000736906200150d565b6000818152602081905260408120620006f490620011e7565b62000c3c3362000df2565b62000c5b5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf9062001573565b604051620008119062001573565b60008281526020819052604090206002015462000c9c906200047062000fe6565b620008f35760405162461bcd60e51b8152600401620005e39062001787565b60405162000811906200150d565b600154610100900460ff168062000ce5575062000ce5620011f4565b8062000cf4575060015460ff16155b62000d135760405162461bcd60e51b8152600401620005e390620017d7565b600154610100900460ff1615801562000d3e576001805460ff1961ff00199091166101001716811790555b62000d493362001207565b60003060405162000d5a90620013dc565b62000d6691906200158a565b604051809103906000f08015801562000d83573d6000803e3d6000fd5b50905062000d918162001124565b6000303360405162000da390620013ea565b62000db09291906200159e565b604051809103906000f08015801562000dcd573d6000803e3d6000fd5b50905062000ddb816200119d565b50508015620006ce576001805461ff001916905550565b6000620006f4604051620006e5906200155c565b62000e113362000df2565b62000e305760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf906200155c565b62000e4d3362000df2565b62000e6c5760405162461bcd60e51b8152600401620005e3906200163e565b6002546040516370a0823160e01b81526001600160a01b0390911690829082906370a082319062000ea29030906004016200158a565b60206040518083038186803b15801562000ebb57600080fd5b505afa15801562000ed0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef69190620014f4565b101562000f175760405162461bcd60e51b8152600401620005e390620016d2565b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb9062000f479086908690600401620015b8565b602060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f9d91906200145b565b50826001600160a01b03167ffd90a2bc2c0c3cf07693529b256c4173a944fe9f55c1984c09a10a1ad28c11648360405162000fd99190620015dc565b60405180910390a2505050565b3390565b60008281526020819052604090206200100a908263ffffffff6200122816565b15620008b2576200101a62000fe6565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020819052604090206200107e908263ffffffff6200123f16565b15620008b2576200108e62000fe6565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600082815260208190526040808220600201549051839285917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a460009182526020829052604090912060020155565b6001805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fb382b2a2d84e1d7542e0d58950e00d33ddc7a4b379a265768bf3e8640dde4ef190600090a250565b600062000abb838362001256565b600062000abb836001600160a01b0384166200129f565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9675664499c8d4f09c5268d1696ba833416ed56d870558fa7a722bb8aff5d90f90600090a250565b6000620006f482620012b7565b60006200120130620012bb565b15905090565b620006ce60405162001219906200155c565b604051809103902082620008a6565b600062000abb836001600160a01b038416620012c1565b600062000abb836001600160a01b03841662001310565b815460009082106200127c5760405162461bcd60e51b8152600401620005e390620015fc565b8260000182815481106200128c57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b3b151590565b6000620012cf83836200129f565b6200130757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620006f4565b506000620006f4565b60008181526001830160205260408120548015620013d157835460001980830191908101906000908790839081106200134557fe5b90600052602060002001549050808760000184815481106200136357fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806200139457fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050620006f4565b6000915050620006f4565b6122c4806200190683390190565b6121098062003bca83390190565b80356001600160a01b0381168114620006f457600080fd5b60006020828403121562001422578081fd5b62000abb8383620013f8565b6000806040838503121562001441578081fd5b6200144d8484620013f8565b946020939093013593505050565b6000602082840312156200146d578081fd5b8151801515811462000abb578182fd5b6000602082840312156200148f578081fd5b5035919050565b60008060408385031215620014a9578182fd5b8235915060208301356001600160a01b0381168114620014c7578182fd5b809150509250929050565b60008060408385031215620014e5578182fd5b50508035926020909101359150565b60006020828403121562001506578081fd5b5051919050565b725043565f434f4e54524f4c4c45525f524f4c4560681b815260130190565b6a4255524e45525f524f4c4560a81b8152600b0190565b6c475541524449414e5f524f4c4560981b8152600d0190565b6a474f5645524e5f524f4c4560a81b8152600b0190565b6a4d494e5445525f524f4c4560a81b8152600b0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526025908201527f5065726d697373696f6e733a2043616c6c6572206973206e6f74206120676f7660408201526432b93737b960d91b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b602080825260169082015275436f72653a204e6f7420656e6f75676820547269626560501b604082015260600190565b60208082526021908201527f436f72653a2043616c6c6572206973206e6f742047656e657369732047726f756040820152600760fc1b606082015260800190565b60208082526024908201527f436f72653a2047656e657369732047726f757020616c726561647920636f6d706040820152636c65746560e01b606082015260800190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526025908201527f5065726d697373696f6e733a2043616c6c6572206973206e6f74206120677561604082015264393234b0b760d91b606082015260800190565b6020808252602c908201527f5065726d697373696f6e733a20477561726469616e2063616e6e6f742072657660408201526b37b5b29033b7bb32b93737b960a11b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b60608201526080019056fe60806040523480156200001157600080fd5b50604051620022c4380380620022c48339810160408190526200003491620002aa565b604080518082018252600781526611995a481554d160ca1b6020808301918252835180850190945260038085526246454960e81b91850191909152825185949262000080929162000208565b5080516200009690600490602084019062000208565b5050600580546001600160a01b039093166201000002610100600160b01b031960ff199094166012179390931692909217909155506040514690620000db90620002da565b604051908190039020620000f76001600160e01b036200016d16565b805160209182012060408051808201825260018152603160f81b90840152516200014993927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691869130910162000344565b60405160208183030381529060405280519060200120600781905550505062000370565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620001fd5780601f10620001d157610100808354040283529160200191620001fd565b820191906000526020600020905b815481529060010190602001808311620001df57829003601f168201915b505050505090505b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200024b57805160ff19168380011785556200027b565b828001600101855582156200027b579182015b828111156200027b5782518255916020019190600101906200025e565b50620002899291506200028d565b5090565b6200020591905b8082111562000289576000815560010162000294565b600060208284031215620002bc578081fd5b81516001600160a01b0381168114620002d3578182fd5b9392505050565b7f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b611f4480620003806000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806379cc679011610104578063a9059cbb116100a2578063bc701e7511610071578063bc701e751461036c578063d505accf1461037f578063dd62ed3e14610392578063f2f4eb26146103a5576101cf565b8063a9059cbb14610336578063b490589714610349578063b6232c9914610351578063b86677fe14610364576101cf565b80638456cb59116100de5780638456cb59146102fe57806395d89b41146103065780639a9ba4da1461030e578063a457c2d714610323576101cf565b806379cc6790146102c55780637ecebe00146102d857806380009630146102eb576101cf565b8063395093511161017157806342966c681161014b57806342966c681461028f5780635c975abb146102a25780636b6dff0a146102aa57806370a08231146102b2576101cf565b8063395093511461025f5780633f4ba83a1461027257806340c10f191461027c576101cf565b806323b872dd116101ad57806323b872dd1461022757806330adf81f1461023a578063313ce567146102425780633644e51514610257576101cf565b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610212575b600080fd5b6101dc6103ad565b6040516101e99190611a65565b60405180910390f35b61020561020036600461190f565b610443565b6040516101e991906119ff565b61021a610460565b6040516101e99190611a0a565b61020561023536600461185a565b610466565b61021a6104f3565b61024a610517565b6040516101e99190611e56565b61021a610520565b61020561026d36600461190f565b610526565b61027a61057a565b005b61027a61028a36600461190f565b6106b9565b61027a61029d366004611976565b6107d8565b610205610820565b61021a61082e565b61021a6102c0366004611806565b6108b8565b61027a6102d336600461190f565b6108d3565b61021a6102e6366004611806565b6109e6565b61027a6102f9366004611806565b6109f8565b61027a610aed565b6101dc610c21565b610316610c82565b6040516101e991906119c1565b61020561033136600461190f565b610d0a565b61020561034436600461190f565b610d78565b61021a610d8c565b61027a61035f366004611822565b610d96565b610316610e8e565b61031661037a366004611806565b610ede565b61027a61038d36600461189a565b610ef9565b61021a6103a0366004611822565b611068565b610316611093565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104395780601f1061040e57610100808354040283529160200191610439565b820191906000526020600020905b81548152906001019060200180831161041c57829003601f168201915b5050505050905090565b60006104576104506110a8565b84846110ac565b50600192915050565b60025490565b6000610473848484611160565b6104e98461047f6110a8565b6104e485604051806060016040528060288152602001611ec2602891396001600160a01b038a166000908152600160205260408120906104bd6110a8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61117b16565b6110ac565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b60006104576105336110a8565b846104e485600160006105446110a8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6111a716565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b8906105af9033906004016119c1565b60206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff919061193a565b8061068a5750600554604051630c68ba2160e01b8152620100009091046001600160a01b031690630c68ba219061063a9033906004016119c1565b60206040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061193a565b6106af5760405162461bcd60e51b81526004016106a690611ba2565b60405180910390fd5b6106b76111d3565b565b6005546040516355138f0d60e11b8152620100009091046001600160a01b03169063aa271e1a906106ee9033906004016119c1565b60206040518083038186803b15801561070657600080fd5b505afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e919061193a565b61075a5760405162461bcd60e51b81526004016106a690611b29565b610762610820565b1561077f5760405162461bcd60e51b81526004016106a690611cba565b6107898282611242565b336001600160a01b0316826001600160a01b03167fb1233017d63154bc561d57c16f7b6a55e2e1acd7fcac94045a9f35fb31a850ca836040516107cc9190611a0a565b60405180910390a35050565b6107e181611302565b604051339081907f227fb4b3aae8331f21af5167739c291fefe3afd3c2e08cea44f499e564f486ef90610815908590611a0a565b60405180910390a350565b600554610100900460ff1690565b6000610838610e8e565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161086391906119c1565b60206040518083038186803b15801561087b57600080fd5b505afa15801561088f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b3919061198e565b905090565b6001600160a01b031660009081526020819052604090205490565b60055460405163219a30a560e11b8152620100009091046001600160a01b031690634334614a906109089033906004016119c1565b60206040518083038186803b15801561092057600080fd5b505afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610958919061193a565b6109745760405162461bcd60e51b81526004016106a690611c26565b61097c610820565b156109995760405162461bcd60e51b81526004016106a690611cba565b6109a38282611316565b336001600160a01b0316826001600160a01b03167f227fb4b3aae8331f21af5167739c291fefe3afd3c2e08cea44f499e564f486ef836040516107cc9190611a0a565b60086020526000908152604090205481565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b890610a2d9033906004016119c1565b60206040518083038186803b158015610a4557600080fd5b505afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061193a565b610a995760405162461bcd60e51b81526004016106a690611dde565b6005805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fad9400e618eb1344fde53db22397a1b82c765527ecbba3a5c86bcac15090828b90600090a250565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b890610b229033906004016119c1565b60206040518083038186803b158015610b3a57600080fd5b505afa158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b72919061193a565b80610bfd5750600554604051630c68ba2160e01b8152620100009091046001600160a01b031690630c68ba2190610bad9033906004016119c1565b60206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd919061193a565b610c195760405162461bcd60e51b81526004016106a690611ba2565b6106b76113f8565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104395780601f1061040e57610100808354040283529160200191610439565b6000600560029054906101000a90046001600160a01b03166001600160a01b0316639a9ba4da6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd257600080fd5b505afa158015610ce6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b3919061195a565b6000610457610d176110a8565b846104e485604051806060016040528060258152602001611eea6025913960016000610d416110a8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61117b16565b6000610457610d856110a8565b8484611160565b6000610838610c82565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b890610dcb9033906004016119c1565b60206040518083038186803b158015610de357600080fd5b505afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b919061193a565b610e375760405162461bcd60e51b81526004016106a690611dde565b6001600160a01b0382811660008181526006602052604080822080546001600160a01b0319169486169485179055517f88bb9e877881758e827c849b8a0e38421bd5ff916f4ef79ed65aec74cc04a5da9190a35050565b6000600560029054906101000a90046001600160a01b03166001600160a01b031663b86677fe6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd257600080fd5b6006602052600090815260409020546001600160a01b031681565b42841015610f195760405162461bcd60e51b81526004016106a690611c5d565b6007546001600160a01b03881660009081526008602090815260408083208054600181019091559051929392610f7a927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d9101611a13565b60405160208183030381529060405280519060200120604051602001610fa19291906119a6565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051610fde9493929190611a47565b6020604051602081039080840390855afa158015611000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906110365750886001600160a01b0316816001600160a01b0316145b6110525760405162461bcd60e51b81526004016106a690611ce4565b61105d8989896110ac565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546201000090046001600160a01b031690565b3390565b6001600160a01b0383166110d25760405162461bcd60e51b81526004016106a690611d9a565b6001600160a01b0382166110f85760405162461bcd60e51b81526004016106a690611b60565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611153908590611a0a565b60405180910390a3505050565b61116b838383611455565b611176838383611576565b505050565b6000818484111561119f5760405162461bcd60e51b81526004016106a69190611a65565b505050900390565b6000828201838110156111cc5760405162461bcd60e51b81526004016106a690611bef565b9392505050565b6111db610820565b6111f75760405162461bcd60e51b81526004016106a690611afb565b6005805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61122b6110a8565b60405161123891906119c1565b60405180910390a1565b6001600160a01b0382166112685760405162461bcd60e51b81526004016106a690611e1f565b61127460008383611176565b600254611287908263ffffffff6111a716565b6002556001600160a01b0382166000908152602081905260409020546112b3908263ffffffff6111a716565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906107cc908590611a0a565b61131361130d6110a8565b82611316565b50565b6001600160a01b03821661133c5760405162461bcd60e51b81526004016106a690611d14565b61134882600083611176565b61138b81604051806060016040528060228152602001611e7a602291396001600160a01b038516600090815260208190526040902054919063ffffffff61117b16565b6001600160a01b0383166000908152602081905260409020556002546113b7908263ffffffff6117de16565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906107cc908590611a0a565b611400610820565b1561141d5760405162461bcd60e51b81526004016106a690611cba565b6005805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861122b6110a8565b6001600160a01b03831661147b5760405162461bcd60e51b81526004016106a690611d55565b6001600160a01b0382166114a15760405162461bcd60e51b81526004016106a690611ab8565b6114ac838383611176565b6114ef81604051806060016040528060268152602001611e9c602691396001600160a01b038616600090815260208190526040902054919063ffffffff61117b16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611524908263ffffffff6111a716565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611153908590611a0a565b6001600160a01b038084166000908152600660205260409020541680156115fc57604051636e22230d60e01b81526001600160a01b03821690636e22230d906115c99087908790339088906004016119d5565b600060405180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b505050505b6001600160a01b0380841660009081526006602052604090205416801561168257604051636e22230d60e01b81526001600160a01b03821690636e22230d9061164f9088908890339089906004016119d5565b600060405180830381600087803b15801561166957600080fd5b505af115801561167d573d6000803e3d6000fd5b505050505b336000818152600660205260409020546001600160a01b0390811691908716148015906116b85750336001600160a01b03861614155b80156116cc57506001600160a01b03811615155b1561173657604051636e22230d60e01b81526001600160a01b03821690636e22230d90611703908990899033908a906004016119d5565b600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b505050505b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546001600160a01b031680156117d557604051636e22230d60e01b81526001600160a01b03821690636e22230d906117a2908a908a9033908b906004016119d5565b600060405180830381600087803b1580156117bc57600080fd5b505af11580156117d0573d6000803e3d6000fd5b505050505b50505050505050565b6000828211156118005760405162461bcd60e51b81526004016106a690611c83565b50900390565b600060208284031215611817578081fd5b81356111cc81611e64565b60008060408385031215611834578081fd5b823561183f81611e64565b9150602083013561184f81611e64565b809150509250929050565b60008060006060848603121561186e578081fd5b833561187981611e64565b9250602084013561188981611e64565b929592945050506040919091013590565b600080600080600080600060e0888a0312156118b4578283fd5b87356118bf81611e64565b965060208801356118cf81611e64565b95506040880135945060608801359350608088013560ff811681146118f2578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611921578182fd5b823561192c81611e64565b946020939093013593505050565b60006020828403121561194b578081fd5b815180151581146111cc578182fd5b60006020828403121561196b578081fd5b81516111cc81611e64565b600060208284031215611987578081fd5b5035919050565b60006020828403121561199f578081fd5b5051919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611a9157858101830151858201604001528201611a75565b81811115611aa25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252601f908201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602d908201527f436f72655265663a2043616c6c6572206973206e6f742061206775617264696160408201526c371037b91033b7bb32b93737b960991b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604082015260600190565b6020808252600c908201526b11995a4e881156141254915160a21b604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601690820152754665693a20494e56414c49445f5349474e415455524560501b604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526021908201527f436f72655265663a2043616c6c6572206973206e6f74206120676f7665726e6f6040820152603960f91b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b60ff91909116815260200190565b6001600160a01b038116811461131357600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050e890c3b2545b3935ee59eb10f843e1ae9421c4c123c2534bea07e27e8ff0f164736f6c6343000606003360806040526b033b2e3c9fd0803ce80000006000553480156200002157600080fd5b506040516200210938038062002109833981016040819052620000449162000121565b600080546001600160a01b0384168083526003602052604080842080546001600160601b0319166001600160601b0390941693909317909255825491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000b2919062000179565b60405180910390a3600180546001600160a01b0319166001600160a01b0383811691909117918290556040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69262000111926000929116906200015f565b60405180910390a150506200019b565b6000806040838503121562000134578182fd5b8251620001418162000182565b6020840151909250620001548162000182565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6001600160a01b03811681146200019857600080fd5b50565b611f5e80620001ab6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063c3cda5201161007c578063c3cda520146102cc578063d505accf146102df578063dd62ed3e146102f2578063e7a324dc14610305578063f1127ed81461030d578063fca3b5aa1461032e57610158565b806370a0823114610258578063782d6fe11461026b5780637ecebe001461028b57806395d89b411461029e578063a9059cbb146102a6578063b4b5ea57146102b957610158565b806330adf81f1161011557806330adf81f146101e0578063313ce567146101e857806340c10f19146101fd578063587cde1e146102125780635c19a95c146102255780636fcfff451461023857610158565b806306fdde031461015d578063075461721461017b578063095ea7b31461019057806318160ddd146101b057806320606b70146101c557806323b872dd146101cd575b600080fd5b610165610341565b6040516101729190611b78565b60405180910390f35b610183610362565b6040516101729190611a9c565b6101a361019e3660046118ab565b610371565b6040516101729190611aca565b6101b861043b565b6040516101729190611ad5565b6101b8610441565b6101a36101db3660046117ff565b610458565b6101b86105a7565b6101f06105b3565b6040516101729190611e1c565b61021061020b3660046118ab565b6105b8565b005b6101836102203660046117b0565b610794565b6102106102333660046117b0565b6107af565b61024b6102463660046117b0565b6107bc565b6040516101729190611dec565b6101b86102663660046117b0565b6107d4565b61027e6102793660046118ab565b6107f8565b6040516101729190611e2a565b6101b86102993660046117b0565b610a06565b610165610a18565b6101a36102b43660046118ab565b610a39565b61027e6102c73660046117b0565b610a80565b6102106102da3660046118d5565b610af1565b6102106102ed36600461183f565b610cd8565b6101b86103003660046117cb565b610fcc565b6101b8611000565b61032061031b36600461192e565b61100c565b604051610172929190611dfd565b61021061033c3660046117b0565b611041565b60405180604001604052806005815260200164547269626560d81b81525081565b6001546001600160a01b031681565b60008060001983141561038757506000196103b7565b6103b4836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b3360008181526002602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b03861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610427908590611e2a565b60405180910390a360019150505b92915050565b60005481565b60405161044d906119f2565b604051809103902081565b6001600160a01b038316600090815260026020908152604080832033808552908352818420548251808401909352601d8352600080516020611f0983398151915293830193909352916001600160601b03169083906104b89086906110d4565b9050866001600160a01b0316836001600160a01b0316141580156104e557506001600160601b0382811614155b1561058f57600061050f8383604051806060016040528060308152602001611eb360309139611103565b6001600160a01b038981166000818152600260209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b0386161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610585908590611e2a565b60405180910390a3505b61059a878783611142565b5060019695505050505050565b60405161044d90611988565b601281565b6001546001600160a01b031633146105eb5760405162461bcd60e51b81526004016105e290611bcb565b60405180910390fd5b6001600160a01b0382166106115760405162461bcd60e51b81526004016105e290611c02565b6000610640826040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90506000610668600054604051806060016040528060228152602001611e91602291396110d4565b905061068d8183604051806060016040528060228152602001611e9160229139611305565b6001600160601b0390811660009081556001600160a01b0386168152600360209081526040918290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526106f79216908490611305565b6001600160a01b03851660008181526003602052604080822080546001600160601b0319166001600160601b03959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610761908690611e2a565b60405180910390a36001600160a01b0380851660009081526004602052604081205461078e921684611341565b50505050565b6004602052600090815260409020546001600160a01b031681565b6107b9338261150d565b50565b60066020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600360205260409020546001600160601b031690565b60004382106108195760405162461bcd60e51b81526004016105e290611db5565b6001600160a01b03831660009081526006602052604090205463ffffffff1680610847576000915050610435565b6001600160a01b038416600090815260056020908152604080832063ffffffff6000198601811685529252909120541683106108c3576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610435565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff168310156108fe576000915050610435565b600060001982015b8163ffffffff168163ffffffff1611156109c157600282820363ffffffff16048103610930611771565b506001600160a01b038716600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561099c576020015194506104359350505050565b805163ffffffff168711156109b3578193506109ba565b6001820392505b5050610906565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60076020526000908152604090205481565b60405180604001604052806005815260200164545249424560d81b81525081565b600080610a69836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b9050610a76338583611142565b5060019392505050565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610aab576000610aea565b6001600160a01b0383166000908152600560209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b9392505050565b6000604051610aff906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610b4e611591565b30604051602001610b629493929190611b36565b6040516020818303038152906040528051906020012090506000604051610b8890611a4d565b604051908190038120610ba3918a908a908a90602001611b12565b60405160208183030381529060405280519060200120905060008282604051602001610bd092919061196d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610c0d9493929190611b5a565b6020604051602081039080840390855afa158015610c2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c625760405162461bcd60e51b81526004016105e290611cfc565b6001600160a01b03811660009081526007602052604090208054600181019091558914610ca15760405162461bcd60e51b81526004016105e290611d33565b87421115610cc15760405162461bcd60e51b81526004016105e290611c4c565b610ccb818b61150d565b505050505b505050505050565b6000600019861415610ced5750600019610d1d565b610d1a866040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b6000604051610d2b906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610d7a611591565b30604051602001610d8e9493929190611b36565b6040516020818303038152906040528051906020012090506000604051610db490611988565b604080519182900382206001600160a01b038d16600090815260076020908152929020805460018101909155610df69391928e928e928e9290918e9101611ade565b60405160208183030381529060405280519060200120905060008282604051602001610e2392919061196d565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610e609493929190611b5a565b6020604051602081039080840390855afa158015610e82573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610eb55760405162461bcd60e51b81526004016105e290611cfc565b8b6001600160a01b0316816001600160a01b031614610ee65760405162461bcd60e51b81526004016105e290611ccf565b88421115610f065760405162461bcd60e51b81526004016105e290611c4c565b84600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051610fb69190611e2a565b60405180910390a3505050505050505050505050565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b60405161044d90611a4d565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6001546001600160a01b0316331461106b5760405162461bcd60e51b81526004016105e290611d61565b6001546040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6916110aa916001600160a01b03909116908490611ab0565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600081600160601b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b509192915050565b6000836001600160601b0316836001600160601b03161115829061113a5760405162461bcd60e51b81526004016105e29190611b78565b505050900390565b6001600160a01b0383166111685760405162461bcd60e51b81526004016105e290611c83565b6001600160a01b03821661118e5760405162461bcd60e51b81526004016105e290611c02565b6001600160a01b0383166000908152600360209081526040918290205482516060810190935260268084526111d9936001600160601b039092169285929190611ee390830139611103565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526112599216908390611305565b6001600160a01b038381166000818152600360205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112c6908590611e2a565b60405180910390a36001600160a01b0380841660009081526004602052604080822054858416835291205461130092918216911683611341565b505050565b6000838301826001600160601b0380871690831610156113385760405162461bcd60e51b81526004016105e29190611b78565b50949350505050565b816001600160a01b0316836001600160a01b03161415801561136c57506000816001600160601b0316115b15611300576001600160a01b03831615611441576001600160a01b03831660009081526006602052604081205463ffffffff1690816113ac5760006113eb565b6001600160a01b0385166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061142f82856040518060400160405280601d81526020017f54726962653a20766f746520616d6f756e7420756e646572666c6f7773000000815250611103565b905061143d86848484611595565b5050505b6001600160a01b03821615611300576001600160a01b03821660009081526006602052604081205463ffffffff16908161147c5760006114bb565b6001600160a01b0384166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006114ff82856040518060400160405280601c81526020017f54726962653a20766f746520616d6f756e74206f766572666c6f777300000000815250611305565b9050610cd085848484611595565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461078e828483611341565b4690565b60006115b943604051806060016040528060238152602001611e6e6023913961174a565b905060008463ffffffff1611801561160257506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611661576001600160a01b0385166000908152600560209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611700565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600583528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600690935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161173b929190611e3e565b60405180910390a25050505050565b600081600160201b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b604080518082019091526000808252602082015290565b80356001600160a01b038116811461043557600080fd5b803560ff8116811461043557600080fd5b6000602082840312156117c1578081fd5b610aea8383611788565b600080604083850312156117dd578081fd5b6117e78484611788565b91506117f68460208501611788565b90509250929050565b600080600060608486031215611813578081fd5b833561181e81611e58565b9250602084013561182e81611e58565b929592945050506040919091013590565b600080600080600080600060e0888a031215611859578283fd5b6118638989611788565b96506118728960208a01611788565b9550604088013594506060880135935061188f8960808a0161179f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156118bd578182fd5b6118c78484611788565b946020939093013593505050565b60008060008060008060c087890312156118ed578182fd5b6118f78888611788565b95506020870135945060408701359350611914886060890161179f565b92506080870135915060a087013590509295509295509295565b60008060408385031215611940578182fd5b61194a8484611788565b9150602083013563ffffffff81168114611962578182fd5b809150509250929050565b61190160f01b81526002810192909252602282015260420190565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520190565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611ba457858101830151858201604001528201611b88565b81811115611bb55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206d696e7400604082015260600190565b6020808252602a908201527f54726962653a2063616e6e6f74207472616e7366657220746f20746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526018908201527f54726962653a207369676e617475726520657870697265640000000000000000604082015260600190565b6020808252602c908201527f54726962653a2063616e6e6f74207472616e736665722066726f6d207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b602080825260139082015272151c9a58994e881d5b985d5d1a1bdc9a5e9959606a1b604082015260600190565b60208082526018908201527f54726962653a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526014908201527354726962653a20696e76616c6964206e6f6e636560601b604082015260600190565b60208082526034908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206368616e676040820152736520746865206d696e746572206164647265737360601b606082015260800190565b60208082526019908201527f54726962653a206e6f74207965742064657465726d696e656400000000000000604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160601b0316602082015260400190565b60ff91909116815260200190565b6001600160601b0391909116815260200190565b6001600160601b0392831681529116602082015260400190565b6001600160a01b03811681146107b957600080fdfe54726962653a20626c6f636b206e756d6265722065786365656473203332206269747354726962653a20746f74616c537570706c792065786365656473203936206269747354726962653a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636554726962653a207472616e7366657220616d6f756e7420657863656564732062616c616e636554726962653a20616d6f756e7420657863656564732039362062697473000000a26469706673582212204b5ab84c8ee5befcd5fba2745834ef385b0d07beb1f852bc25562eb10a137ac064736f6c63430006060033a2646970667358221220062ff29caa9fb83e030acb922feb057204cd2a5c38816a82f996dd0f7178683c64736f6c63430006060033" +} \ No newline at end of file diff --git a/external/abi/fei/FeiDAO.json b/external/abi/fei/FeiDAO.json index 49adc7c34..6a60b74a2 100644 --- a/external/abi/fei/FeiDAO.json +++ b/external/abi/fei/FeiDAO.json @@ -1139,5 +1139,5 @@ "type": "receive" } ], - "bytecode": "61016060405260016005556132c86006556a14adf4b7320334b90000006007556a02116545850052128000006008553480156200003b57600080fd5b5060405162004a7838038062004a788339810160408190526200005e91620002be565b8183604051806040016040528060078152602001664665692044414f60c81b81525080620000916200017b60201b60201c565b815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060c0526101205250508251620001379250600091506020840190620001ff565b50506001600160a01b031661014052620001518162000196565b50600980546001600160a01b0319166001600160a01b0392909216919091179055506200034f9050565b6040805180820190915260018152603160f81b602082015290565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200020d9062000312565b90600052602060002090601f0160209004810192826200023157600085556200027c565b82601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b5b808211156200028a57600081556001016200028f565b6001600160a01b0381168114620002bb57600080fd5b50565b600080600060608486031215620002d457600080fd5b8351620002e181620002a5565b6020850151909350620002f481620002a5565b60408501519092506200030781620002a5565b809150509250925092565b600181811c908216806200032757607f821691505b602082108114156200034957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516146c7620003b16000396000818161090001526127cf01526000612a8a01526000612ad901526000612ab401526000612a0d01526000612a3701526000612a6101526146c76000f3fe6080604052600436106102555760003560e01c80637d5e81e211610139578063db90d48d116100b6578063ea0217cf1161007a578063ea0217cf1461086c578063eb9019d41461088c578063ece40cc1146108ac578063f8ce560a146108cc578063fc0c546a146108ee578063fe0d94c11461092257600080fd5b8063db90d48d146106e0578063dd4e2ba514610708578063ddf0b0091461074e578063deaaa7cc1461076e578063e23a9a52146107a257600080fd5b8063c01f9e37116100fd578063c01f9e371461062e578063c1ba4e591461064e578063c59057e41461066e578063d33219b41461068e578063da95691a146106c057600080fd5b80637d5e81e2146105a4578063a890c910146105c4578063ab58fb8e146105e4578063b58131b014610604578063b9a619611461061957600080fd5b8063328dd982116101d2578063438596321161019657806343859632146104b057806354fd4d50146104fa57806356781388146105245780636f8dd33d1461054457806370b0f660146105645780637b3c71d31461058457600080fd5b8063328dd982146103fe5780633932abb11461042e5780633bccf4fd146104435780633e4f49e61461046357806340e58ee51461049057600080fd5b8063148e946d11610219578063148e946d14610381578063160cbed71461039657806324bc1a64146103b65780632656227d146103cb5780632d63f693146103de57600080fd5b8063013cf08b1461027d57806301ffc9a7146102f857806302a251a31461032857806306fdde031461034757806310817f221461036957600080fd5b366102785730610263610935565b6001600160a01b03161461027657600080fd5b005b600080fd5b34801561028957600080fd5b5061029d6102983660046139e1565b61094e565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b34801561030457600080fd5b506103186103133660046139fa565b6109f7565b60405190151581526020016102ef565b34801561033457600080fd5b506006545b6040519081526020016102ef565b34801561035357600080fd5b5061035c610a08565b6040516102ef9190613a7c565b34801561037557600080fd5b5061033963617f2e0081565b34801561038d57600080fd5b50610276610a9a565b3480156103a257600080fd5b506103396103b1366004613cd0565b610c30565b3480156103c257600080fd5b50610339610faa565b6103396103d9366004613cd0565b610fba565b3480156103ea57600080fd5b506103396103f93660046139e1565b61108d565b34801561040a57600080fd5b5061041e6104193660046139e1565b6110c4565b6040516102ef9493929190613e28565b34801561043a57600080fd5b50600554610339565b34801561044f57600080fd5b5061033961045e366004613e8b565b611355565b34801561046f57600080fd5b5061048361047e3660046139e1565b6113e9565b6040516102ef9190613eef565b34801561049c57600080fd5b506102766104ab3660046139e1565b6113f4565b3480156104bc57600080fd5b506103186104cb366004613f17565b60008281526002602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b34801561050657600080fd5b506040805180820190915260018152603160f81b602082015261035c565b34801561053057600080fd5b5061033961053f366004613f47565b611707565b34801561055057600080fd5b5061027661055f3660046139e1565b611730565b34801561057057600080fd5b5061027661057f3660046139e1565b6118f7565b34801561059057600080fd5b5061033961059f366004613f73565b61196d565b3480156105b057600080fd5b506103396105bf366004614019565b6119bf565b3480156105d057600080fd5b506102766105df3660046140c5565b6119d6565b3480156105f057600080fd5b506103396105ff3660046139e1565b611a1a565b34801561061057600080fd5b50600854610339565b34801561062557600080fd5b50610276611a46565b34801561063a57600080fd5b506103396106493660046139e1565b611ab0565b34801561065a57600080fd5b506102766106693660046139e1565b611adf565b34801561067a57600080fd5b50610339610689366004613cd0565b611b55565b34801561069a57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016102ef565b3480156106cc57600080fd5b506103396106db366004614161565b611b8f565b3480156106ec57600080fd5b506106a8734c895973334af8e06fd6da4f723ac24a5f259e6b81565b34801561071457600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f000000000000602082015261035c565b34801561075a57600080fd5b506102766107693660046139e1565b611bb4565b34801561077a57600080fd5b506103397f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b3480156107ae57600080fd5b5061083c6107bd366004613f17565b60408051606081018252600080825260208201819052918101919091525060009182526002602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b0316908201526060016102ef565b34801561087857600080fd5b506102766108873660046139e1565b611e22565b34801561089857600080fd5b506103396108a7366004614232565b611e98565b3480156108b857600080fd5b506102766108c73660046139e1565b611eab565b3480156108d857600080fd5b506103396108e73660046139e1565b5060075490565b3480156108fa57600080fd5b506106a87f000000000000000000000000000000000000000000000000000000000000000081565b6102766109303660046139e1565b611f21565b60006109496003546001600160a01b031690565b905090565b80600080808080808080806109628a611a1a565b975061096d8b61108d565b96506109788b611ab0565b60008c815260026020526040812080546005820154600683015460078401546001600160a01b039093169e50949a5098509296509194506109b88d6113e9565b905060028160078111156109ce576109ce613ed9565b14935060078160078111156109e5576109e5613ed9565b14925050509193959799509193959799565b6000610a028261218f565b92915050565b606060008054610a179061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a439061425e565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b5050505050905090565b42600a541115610ae45760405162461bcd60e51b815260206004820152601060248201526f2332b4a220a79d103a37b79039b7b7b760811b60448201526064015b60405180910390fd5b6009546001600160a01b031615610b305760405162461bcd60e51b815260206004820152601060248201526f46656944414f3a206e6f20717565756560801b6044820152606401610adb565b6000610b446003546001600160a01b031690565b9050806001600160a01b0316630825f38f610b676003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b60208201526000910160408051601f1981840301815290829052600a546001600160e01b031960e087901b168352610bbc949392600401614293565b6000604051808303816000875af1158015610bdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c0391908101906142ff565b506040517fe7058e1559765746b4820bddac308b97653890ba0be3b171acd5218899b19b2690600090a150565b600080610c3f86868686611b55565b90506004610c4c826113e9565b6007811115610c5d57610c5d613ed9565b14610c7a5760405162461bcd60e51b8152600401610adb9061436c565b60035460408051630d48571f60e31b815290516000926001600160a01b031691636a42b8f89160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906143ad565b610cf290426143dc565b9050610d14610d00826121b4565b600084815260046020526040902090612220565b60005b8751811015610f655760035488516001600160a01b039091169063f2b06537908a9084908110610d4957610d496143f4565b6020026020010151898481518110610d6357610d636143f4565b6020026020010151898581518110610d7d57610d7d6143f4565b602002602001015186604051602001610d99949392919061440a565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610dcd91815260200190565b602060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e919061443f565b15610e8c5760405162461bcd60e51b815260206004820152604260248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a206964656e746960448201527f63616c2070726f706f73616c20616374696f6e20616c72656164792071756575606482015261195960f21b608482015260a401610adb565b60035488516001600160a01b0390911690633a66f901908a9084908110610eb557610eb56143f4565b6020026020010151898481518110610ecf57610ecf6143f4565b6020026020010151898581518110610ee957610ee96143f4565b6020026020010151866040518563ffffffff1660e01b8152600401610f11949392919061440a565b6020604051808303816000875af1158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5491906143ad565b50610f5e81614461565b9050610d17565b5060408051838152602081018390527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289291015b60405180910390a15095945050505050565b60006109496108e760014361447c565b600080610fc986868686611b55565b90506000610fd6826113e9565b90506004816007811115610fec57610fec613ed9565b14806110095750600581600781111561100757611007613ed9565b145b6110255760405162461bcd60e51b8152600401610adb9061436c565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1611083828888888861223e565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b6060806060806000600260008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561114657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611128575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561119857602002820191906000526020600020905b815481526020019060010190808311611184575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561126c5783829060005260206000200180546111df9061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461120b9061425e565b80156112585780601f1061122d57610100808354040283529160200191611258565b820191906000526020600020905b81548152906001019060200180831161123b57829003601f168201915b5050505050815260200190600101906111c0565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561133f5783829060005260206000200180546112b29061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546112de9061425e565b801561132b5780601f106113005761010080835404028352916020019161132b565b820191906000526020600020905b81548152906001019060200180831161130e57829003601f168201915b505050505081526020019060010190611293565b5050505090509450945094509450509193509193565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906113c1906113b99060800160405160208183030381529060405280519060200120612252565b8686866122a0565b90506113de878288604051806020016040528060008152506122be565b979650505050505050565b6000610a02826123c9565b600081815260026020526040902080546001600160a01b0316336001600160a01b0316148061143d5750600854815461143b906001600160a01b03166108a760014361447c565b105b6114995760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610adb565b611702816001018054806020026020016040519081016040528092919081815260200182805480156114f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114d6575b50505050508260020180548060200260200160405190810160405280929190818152602001828054801561154757602002820191906000526020600020905b815481526020019060010190808311611533575b50505050506116f884600301805480602002602001604051908101604052809291908181526020016000905b8282101561161f5783829060005260206000200180546115929061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546115be9061425e565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b505050505081526020019060010190611573565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546116629061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461168e9061425e565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b505050505081526020019060010190611643565b505050506124aa565b846009015461260a565b505050565b600080339050611728848285604051806020016040528060008152506122be565b949350505050565b6009546001600160a01b0316331461178a5760405162461bcd60e51b815260206004820152601b60248201527f46656944414f3a2063616c6c6572206e6f7420677561726469616e00000000006044820152606401610adb565b600980546001600160a01b031916905563617f2e008111156117ee5760405162461bcd60e51b815260206004820152601860248201527f46656944414f3a20726f6c6c6261636b206578706972656400000000000000006044820152606401610adb565b600a81905560006118076003546001600160a01b031690565b9050806001600160a01b0316633a66f90161182a6003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b602082015260009101604051602081830303815290604052866040518563ffffffff1660e01b815260040161187b9493929190614293565b6020604051808303816000875af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be91906143ad565b506040518281527fdb51ef15d5bea4363daa5cb7691e73d2b53e2addace8cc5bef3b85c4f4489af5906020015b60405180910390a15050565b6118ff610935565b6001600160a01b0316336001600160a01b03161461192f5760405162461bcd60e51b8152600401610adb90614493565b600580549082905560408051828152602081018490527f16569b50c8812bb18e4b5c46b0fee4a9acbb3a9dca1e1badce427e8d75b5652d91016118eb565b6000803390506119b586828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122be92505050565b9695505050505050565b60006119cd85858585612618565b95945050505050565b6119de610935565b6001600160a01b0316336001600160a01b031614611a0e5760405162461bcd60e51b8152600401610adb90614493565b611a1781612680565b50565b60008181526004602090815260408083208151928301909152546001600160401b0316908190526110b5565b600360009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50505050565b60008181526001602081815260408084208151928301909152909101546001600160401b0316908190526110b5565b611ae7610935565b6001600160a01b0316336001600160a01b031614611b175760405162461bcd60e51b8152600401610adb90614493565b600780549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb091016118eb565b600084848484604051602001611b6e94939291906144ca565b60408051601f19818403018152919052805160209091012095945050505050565b6000611b9f3387878787876126e9565b6119b58686611bae87876124aa565b856119bf565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611c1d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bff575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611c7057602002820191906000526020600020905b815481526020019060010190808311611c5c575b5050505050611e1884600301805480602002602001604051908101604052809291908181526020016000905b82821015611d48578382906000526020600020018054611cbb9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce79061425e565b8015611d345780601f10611d0957610100808354040283529160200191611d34565b820191906000526020600020905b815481529060010190602001808311611d1757829003601f168201915b505050505081526020019060010190611c9c565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef578382906000526020600020018054611d8b9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611db79061425e565b8015611e045780601f10611dd957610100808354040283529160200191611e04565b820191906000526020600020905b815481529060010190602001808311611de757829003601f168201915b505050505081526020019060010190611d6c565b8460090154610c30565b611e2a610935565b6001600160a01b0316336001600160a01b031614611e5a5760405162461bcd60e51b8152600401610adb90614493565b600680549082905560408051828152602081018490527fffc708f072ca56e3d45ef0cb288b96cb9378f5f63e1646868bfbc9c38f4263a191016118eb565b6000611ea483836127a6565b9392505050565b611eb3610935565b6001600160a01b0316336001600160a01b031614611ee35760405162461bcd60e51b8152600401610adb90614493565b600880549082905560408051828152602081018490527fe92242fc3efcad407a677132b517977331a6e5b65abab69fd757cc02e99c9c4e91016118eb565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611f8a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f6c575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611fdd57602002820191906000526020600020905b815481526020019060010190808311611fc9575b505050505061218584600301805480602002602001604051908101604052809291908181526020016000905b828210156120b55783829060005260206000200180546120289061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546120549061425e565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b505050505081526020019060010190612009565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546120f89061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546121249061425e565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050815260200190600101906120d9565b8460090154610fba565b60006001600160e01b03198216636e665ced60e01b1480610a025750610a028261284c565b60006001600160401b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610adb565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b61224b8585858585612881565b5050505050565b6000610a0261225f612a00565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006122b187878787612b27565b9150915061108381612c14565b60008481526001602081905260408220906122d8876113e9565b60078111156122e9576122e9613ed9565b146123425760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610adb565b604080516020810190915281546001600160401b03169081905260009061236a908790611e98565b905061237887878784612dcf565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516123b79493929190614515565b60405180910390a29695505050505050565b6000806123d583612f74565b905060048160078111156123eb576123eb613ed9565b146123f65792915050565b600061240184611a1a565b90508061240f575092915050565b600360009054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612462573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248691906143ad565b61249090826143dc565b42106124a0575060069392505050565b5060059392505050565b6060600082516001600160401b038111156124c7576124c7613a8f565b6040519080825280602002602001820160405280156124fa57816020015b60608152602001906001900390816124e55790505b50905060005b84518110156126025784818151811061251b5761251b6143f4565b6020026020010151516000146125b95784818151811061253d5761253d6143f4565b6020026020010151848281518110612557576125576143f4565b602002602001015160405160240161256f9190613a7c565b60408051601f19818403018152908290529161258a9161453d565b6040519081900390206020820180516001600160e01b03166001600160e01b03199092169190911790526125d4565b8381815181106125cb576125cb6143f4565b60200260200101515b8282815181106125e6576125e66143f4565b6020026020010181905250806125fb90614461565b9050612500565b509392505050565b60006119cd858585856130db565b600061267433868686516001600160401b0381111561263957612639613a8f565b60405190808252806020026020018201604052801561266c57816020015b60608152602001906001900390816126575790505b5087876126e9565b6119cd858585856131f6565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805160208201206000612707878761270188886124aa565b85611b55565b600081815260026020526040902060098101549192509061279b5780546001600160a01b0319166001600160a01b038a16178155875161275090600183019060208b0190613797565b50865161276690600283019060208a01906137f8565b50855161277c9060038301906020890190613833565b508451612792906004830190602088019061388c565b50600981018390555b505050505050505050565b60405163782d6fe160e01b81526001600160a01b038381166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063782d6fe190604401602060405180830381865afa158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c9190614559565b6001600160601b03169392505050565b60006001600160e01b0319821663bf26d89760e01b1480610a0257506301ffc9a760e01b6001600160e01b0319831614610a02565b600061288c86611a1a565b9050600081116128f85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a2070726f706f73604482015270185b081b9bdd081e595d081c5d595d5959607a1b6064820152608401610adb565b60035461290e906001600160a01b0316346134b3565b60005b85518110156129f75760035486516001600160a01b0390911690630825f38f90889084908110612943576129436143f4565b602002602001015187848151811061295d5761295d6143f4565b6020026020010151878581518110612977576129776143f4565b6020026020010151866040518563ffffffff1660e01b815260040161299f949392919061440a565b6000604051808303816000875af11580156129be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129e691908101906142ff565b506129f081614461565b9050612911565b50505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612a5957507f000000000000000000000000000000000000000000000000000000000000000046145b15612a8357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b5e5750600090506003612c0b565b8460ff16601b14158015612b7657508460ff16601c14155b15612b875750600090506004612c0b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612bdb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c0457600060019250925050612c0b565b9150600090505b94509492505050565b6000816004811115612c2857612c28613ed9565b1415612c315750565b6001816004811115612c4557612c45613ed9565b1415612c935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610adb565b6002816004811115612ca757612ca7613ed9565b1415612cf55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610adb565b6003816004811115612d0957612d09613ed9565b1415612d625760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610adb565b6004816004811115612d7657612d76613ed9565b1415611a175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610adb565b60008481526002602090815260408083206001600160a01b038716845260088101909252909120805460ff1615612e5e5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610adb565b805460ff85166101000261ffff19909116176001178155612e7e836135cc565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff8416612ece5782826006016000828254612ec391906143dc565b90915550612f6c9050565b60ff841660011415612eee5782826005016000828254612ec391906143dc565b60ff841660021415612f0e5782826007016000828254612ec391906143dc565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610adb565b505050505050565b6000818152600160208181526040808420815160a08101835281546001600160401b0390811660808301908152825283518086018552958301541685529283019390935260029092015460ff80821615801594840194909452610100909104161515606082015290612fe95750600792915050565b806060015115612ffc5750600292915050565b80515143906001600160401b0316106130185750600092915050565b4361302582602001515190565b6001600160401b03161061303c5750600192915050565b6130498160200151613634565b1561308d5761305783613663565b8015613079575060008381526002602052604090206006810154600590910154115b613084576003611ea4565b60049392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610adb565b50919050565b6000806130ea8686868661368b565b905060006130f782611a1a565b905080156110835760005b87518110156131d35760035488516001600160a01b039091169063591fcdfe908a9084908110613134576131346143f4565b602002602001015189848151811061314e5761314e6143f4565b6020026020010151898581518110613168576131686143f4565b6020026020010151866040518563ffffffff1660e01b8152600401613190949392919061440a565b600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050806131cc90614461565b9050613102565b506000828152600460205260409020805467ffffffffffffffff19169055611083565b600061320160085490565b613210336108a760014361447c565b10156132905760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a401610adb565b60006132a58686868680519060200120611b55565b905084518651146132c85760405162461bcd60e51b8152600401610adb90614582565b83518651146132e95760405162461bcd60e51b8152600401610adb90614582565b600086511161333a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c00000000000000006044820152606401610adb565b600081815260016020908152604091829020825191820190925281546001600160401b031690819052156133ba5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610adb565b60006133cd6133c860055490565b6121b4565b6133d6436121b4565b6133e091906145c3565b905060006133f06133c860065490565b6133fa90836145c3565b90506134068383612220565b6134136001840182612220565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b0381111561345157613451613a8f565b60405190808252806020026020018201604052801561348457816020015b606081526020019060019003908161346f5790505b508c88888e60405161349e999897969594939291906145ee565b60405180910390a15091979650505050505050565b804710156135035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610adb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613550576040519150601f19603f3d011682016040523d82523d6000602084013e613555565b606091505b50509050806117025760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610adb565b60006001600160601b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610adb565b600061364982516001600160401b0316151590565b8015610a0257505051436001600160401b03909116111590565b600081815260026020526040812060058101546136826108e78561108d565b11159392505050565b60008061369a86868686611b55565b905060006136a7826113e9565b905060028160078111156136bd576136bd613ed9565b141580156136dd575060068160078111156136da576136da613ed9565b14155b80156136fb575060078160078111156136f8576136f8613ed9565b14155b6137475760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610adb565b60008281526001602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f989084815260200190565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906137b7565b5061221c9291506138e5565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec578251825591602001919060010190613818565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825180516138709184916020909101906138fa565b5091602001919060010190613853565b5061221c92915061396d565b8280548282559060005260206000209081019282156138d9579160200282015b828111156138d957825180516138c99184916020909101906138fa565b50916020019190600101906138ac565b5061221c92915061398a565b5b8082111561221c57600081556001016138e6565b8280546139069061425e565b90600052602060002090601f01602090048101928261392857600085556137ec565b82601f1061394157805160ff19168380011785556137ec565b828001600101855582156137ec57918201828111156137ec578251825591602001919060010190613818565b8082111561221c57600061398182826139a7565b5060010161396d565b8082111561221c57600061399e82826139a7565b5060010161398a565b5080546139b39061425e565b6000825580601f106139c3575050565b601f016020900490600052602060002090810190611a1791906138e5565b6000602082840312156139f357600080fd5b5035919050565b600060208284031215613a0c57600080fd5b81356001600160e01b031981168114611ea457600080fd5b60005b83811015613a3f578181015183820152602001613a27565b83811115611aaa5750506000910152565b60008151808452613a68816020860160208601613a24565b601f01601f19169290920160200192915050565b602081526000611ea46020830184613a50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613acd57613acd613a8f565b604052919050565b60006001600160401b03821115613aee57613aee613a8f565b5060051b60200190565b6001600160a01b0381168114611a1757600080fd5b600082601f830112613b1e57600080fd5b81356020613b33613b2e83613ad5565b613aa5565b82815260059290921b84018101918181019086841115613b5257600080fd5b8286015b84811015613b76578035613b6981613af8565b8352918301918301613b56565b509695505050505050565b600082601f830112613b9257600080fd5b81356020613ba2613b2e83613ad5565b82815260059290921b84018101918181019086841115613bc157600080fd5b8286015b84811015613b765780358352918301918301613bc5565b60006001600160401b03821115613bf557613bf5613a8f565b50601f01601f191660200190565b6000613c11613b2e84613bdc565b9050828152838383011115613c2557600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c4d57600080fd5b81356020613c5d613b2e83613ad5565b82815260059290921b84018101918181019086841115613c7c57600080fd5b8286015b84811015613b765780356001600160401b03811115613c9f5760008081fd5b8701603f81018913613cb15760008081fd5b613cc2898683013560408401613c03565b845250918301918301613c80565b60008060008060808587031215613ce657600080fd5b84356001600160401b0380821115613cfd57600080fd5b613d0988838901613b0d565b95506020870135915080821115613d1f57600080fd5b613d2b88838901613b81565b94506040870135915080821115613d4157600080fd5b50613d4e87828801613c3c565b949793965093946060013593505050565b600081518084526020808501945080840160005b83811015613d985781516001600160a01b031687529582019590820190600101613d73565b509495945050505050565b600081518084526020808501945080840160005b83811015613d9857815187529582019590820190600101613db7565b600081518084526020808501808196508360051b8101915082860160005b85811015613e1b578284038952613e09848351613a50565b98850198935090840190600101613df1565b5091979650505050505050565b608081526000613e3b6080830187613d5f565b8281036020840152613e4d8187613da3565b90508281036040840152613e618186613dd3565b905082810360608401526113de8185613dd3565b803560ff81168114613e8657600080fd5b919050565b600080600080600060a08688031215613ea357600080fd5b85359450613eb360208701613e75565b9350613ec160408701613e75565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b6020810160088310613f1157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613f2a57600080fd5b823591506020830135613f3c81613af8565b809150509250929050565b60008060408385031215613f5a57600080fd5b82359150613f6a60208401613e75565b90509250929050565b60008060008060608587031215613f8957600080fd5b84359350613f9960208601613e75565b925060408501356001600160401b0380821115613fb557600080fd5b818701915087601f830112613fc957600080fd5b813581811115613fd857600080fd5b886020828501011115613fea57600080fd5b95989497505060200194505050565b600082601f83011261400a57600080fd5b611ea483833560208501613c03565b6000806000806080858703121561402f57600080fd5b84356001600160401b038082111561404657600080fd5b61405288838901613b0d565b9550602087013591508082111561406857600080fd5b61407488838901613b81565b9450604087013591508082111561408a57600080fd5b61409688838901613c3c565b935060608701359150808211156140ac57600080fd5b506140b987828801613ff9565b91505092959194509250565b6000602082840312156140d757600080fd5b8135611ea481613af8565b600082601f8301126140f357600080fd5b81356020614103613b2e83613ad5565b82815260059290921b8401810191818101908684111561412257600080fd5b8286015b84811015613b765780356001600160401b038111156141455760008081fd5b6141538986838b0101613ff9565b845250918301918301614126565b600080600080600060a0868803121561417957600080fd5b85356001600160401b038082111561419057600080fd5b61419c89838a01613b0d565b965060208801359150808211156141b257600080fd5b6141be89838a01613b81565b955060408801359150808211156141d457600080fd5b6141e089838a016140e2565b945060608801359150808211156141f657600080fd5b61420289838a01613c3c565b9350608088013591508082111561421857600080fd5b5061422588828901613ff9565b9150509295509295909350565b6000806040838503121561424557600080fd5b823561425081613af8565b946020939093013593505050565b600181811c9082168061427257607f821691505b602082108114156130d557634e487b7160e01b600052602260045260246000fd5b60018060a01b038516815283602082015260a06040820152601860a08201527f73657450656e64696e6741646d696e286164647265737329000000000000000060c082015260e0606082015260006142ee60e0830185613a50565b905082608083015295945050505050565b60006020828403121561431157600080fd5b81516001600160401b0381111561432757600080fd5b8201601f8101841361433857600080fd5b8051614346613b2e82613bdc565b81815285602083850101111561435b57600080fd5b6119cd826020830160208601613a24565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b6000602082840312156143bf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156143ef576143ef6143c6565b500190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b038516815283602082015260a06040820152600060a082015260c0606082015260006142ee60c0830185613a50565b60006020828403121561445157600080fd5b81518015158114611ea457600080fd5b6000600019821415614475576144756143c6565b5060010190565b60008282101561448e5761448e6143c6565b500390565b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b6080815260006144dd6080830187613d5f565b82810360208401526144ef8187613da3565b905082810360408401526145038186613dd3565b91505082606083015295945050505050565b84815260ff841660208201528260408201526080606082015260006119b56080830184613a50565b6000825161454f818460208701613a24565b9190910192915050565b60006020828403121561456b57600080fd5b81516001600160601b0381168114611ea457600080fd5b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006001600160401b038083168185168083038211156145e5576145e56143c6565b01949350505050565b8981526001600160a01b0389166020820152610120604082018190526000906146198382018b613d5f565b9050828103606084015261462d818a613da3565b905082810360808401526146418189613dd3565b905082810360a08401526146558188613dd3565b6001600160401b0387811660c0860152861660e085015283810361010085015290506146818185613a50565b9c9b50505050505050505050505056fea264697066735822122093e9e558c03743cbb7912a75250045d7910498ec68f1824fcc308c047c9aa9a864736f6c634300080a0033000000000000000000000000c7283b66eb1eb5fb86327f08e1b5816b0720212b0000000000000000000000008ace03fc45139fddba944c6a4082b604041d19fc0000000000000000000000000000000000000000000000000000000000000000" + "bytecode": "61016060405260016005556132c86006556a14adf4b7320334b90000006007556a02116545850052128000006008553480156200003b57600080fd5b5060405162004a7838038062004a788339810160408190526200005e91620002be565b8183604051806040016040528060078152602001664665692044414f60c81b81525080620000916200017b60201b60201c565b815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060c0526101205250508251620001379250600091506020840190620001ff565b50506001600160a01b031661014052620001518162000196565b50600980546001600160a01b0319166001600160a01b0392909216919091179055506200034f9050565b6040805180820190915260018152603160f81b602082015290565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200020d9062000312565b90600052602060002090601f0160209004810192826200023157600085556200027c565b82601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b5b808211156200028a57600081556001016200028f565b6001600160a01b0381168114620002bb57600080fd5b50565b600080600060608486031215620002d457600080fd5b8351620002e181620002a5565b6020850151909350620002f481620002a5565b60408501519092506200030781620002a5565b809150509250925092565b600181811c908216806200032757607f821691505b602082108114156200034957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516146c7620003b16000396000818161090001526127cf01526000612a8a01526000612ad901526000612ab401526000612a0d01526000612a3701526000612a6101526146c76000f3fe6080604052600436106102555760003560e01c80637d5e81e211610139578063db90d48d116100b6578063ea0217cf1161007a578063ea0217cf1461086c578063eb9019d41461088c578063ece40cc1146108ac578063f8ce560a146108cc578063fc0c546a146108ee578063fe0d94c11461092257600080fd5b8063db90d48d146106e0578063dd4e2ba514610708578063ddf0b0091461074e578063deaaa7cc1461076e578063e23a9a52146107a257600080fd5b8063c01f9e37116100fd578063c01f9e371461062e578063c1ba4e591461064e578063c59057e41461066e578063d33219b41461068e578063da95691a146106c057600080fd5b80637d5e81e2146105a4578063a890c910146105c4578063ab58fb8e146105e4578063b58131b014610604578063b9a619611461061957600080fd5b8063328dd982116101d2578063438596321161019657806343859632146104b057806354fd4d50146104fa57806356781388146105245780636f8dd33d1461054457806370b0f660146105645780637b3c71d31461058457600080fd5b8063328dd982146103fe5780633932abb11461042e5780633bccf4fd146104435780633e4f49e61461046357806340e58ee51461049057600080fd5b8063148e946d11610219578063148e946d14610381578063160cbed71461039657806324bc1a64146103b65780632656227d146103cb5780632d63f693146103de57600080fd5b8063013cf08b1461027d57806301ffc9a7146102f857806302a251a31461032857806306fdde031461034757806310817f221461036957600080fd5b366102785730610263610935565b6001600160a01b03161461027657600080fd5b005b600080fd5b34801561028957600080fd5b5061029d6102983660046139e1565b61094e565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b34801561030457600080fd5b506103186103133660046139fa565b6109f7565b60405190151581526020016102ef565b34801561033457600080fd5b506006545b6040519081526020016102ef565b34801561035357600080fd5b5061035c610a08565b6040516102ef9190613a7c565b34801561037557600080fd5b5061033963617f2e0081565b34801561038d57600080fd5b50610276610a9a565b3480156103a257600080fd5b506103396103b1366004613cd0565b610c30565b3480156103c257600080fd5b50610339610faa565b6103396103d9366004613cd0565b610fba565b3480156103ea57600080fd5b506103396103f93660046139e1565b61108d565b34801561040a57600080fd5b5061041e6104193660046139e1565b6110c4565b6040516102ef9493929190613e28565b34801561043a57600080fd5b50600554610339565b34801561044f57600080fd5b5061033961045e366004613e8b565b611355565b34801561046f57600080fd5b5061048361047e3660046139e1565b6113e9565b6040516102ef9190613eef565b34801561049c57600080fd5b506102766104ab3660046139e1565b6113f4565b3480156104bc57600080fd5b506103186104cb366004613f17565b60008281526002602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b34801561050657600080fd5b506040805180820190915260018152603160f81b602082015261035c565b34801561053057600080fd5b5061033961053f366004613f47565b611707565b34801561055057600080fd5b5061027661055f3660046139e1565b611730565b34801561057057600080fd5b5061027661057f3660046139e1565b6118f7565b34801561059057600080fd5b5061033961059f366004613f73565b61196d565b3480156105b057600080fd5b506103396105bf366004614019565b6119bf565b3480156105d057600080fd5b506102766105df3660046140c5565b6119d6565b3480156105f057600080fd5b506103396105ff3660046139e1565b611a1a565b34801561061057600080fd5b50600854610339565b34801561062557600080fd5b50610276611a46565b34801561063a57600080fd5b506103396106493660046139e1565b611ab0565b34801561065a57600080fd5b506102766106693660046139e1565b611adf565b34801561067a57600080fd5b50610339610689366004613cd0565b611b55565b34801561069a57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016102ef565b3480156106cc57600080fd5b506103396106db366004614161565b611b8f565b3480156106ec57600080fd5b506106a8734c895973334af8e06fd6da4f723ac24a5f259e6b81565b34801561071457600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f000000000000602082015261035c565b34801561075a57600080fd5b506102766107693660046139e1565b611bb4565b34801561077a57600080fd5b506103397f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b3480156107ae57600080fd5b5061083c6107bd366004613f17565b60408051606081018252600080825260208201819052918101919091525060009182526002602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b0316908201526060016102ef565b34801561087857600080fd5b506102766108873660046139e1565b611e22565b34801561089857600080fd5b506103396108a7366004614232565b611e98565b3480156108b857600080fd5b506102766108c73660046139e1565b611eab565b3480156108d857600080fd5b506103396108e73660046139e1565b5060075490565b3480156108fa57600080fd5b506106a87f000000000000000000000000000000000000000000000000000000000000000081565b6102766109303660046139e1565b611f21565b60006109496003546001600160a01b031690565b905090565b80600080808080808080806109628a611a1a565b975061096d8b61108d565b96506109788b611ab0565b60008c815260026020526040812080546005820154600683015460078401546001600160a01b039093169e50949a5098509296509194506109b88d6113e9565b905060028160078111156109ce576109ce613ed9565b14935060078160078111156109e5576109e5613ed9565b14925050509193959799509193959799565b6000610a028261218f565b92915050565b606060008054610a179061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a439061425e565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b5050505050905090565b42600a541115610ae45760405162461bcd60e51b815260206004820152601060248201526f2332b4a220a79d103a37b79039b7b7b760811b60448201526064015b60405180910390fd5b6009546001600160a01b031615610b305760405162461bcd60e51b815260206004820152601060248201526f46656944414f3a206e6f20717565756560801b6044820152606401610adb565b6000610b446003546001600160a01b031690565b9050806001600160a01b0316630825f38f610b676003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b60208201526000910160408051601f1981840301815290829052600a546001600160e01b031960e087901b168352610bbc949392600401614293565b6000604051808303816000875af1158015610bdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c0391908101906142ff565b506040517fe7058e1559765746b4820bddac308b97653890ba0be3b171acd5218899b19b2690600090a150565b600080610c3f86868686611b55565b90506004610c4c826113e9565b6007811115610c5d57610c5d613ed9565b14610c7a5760405162461bcd60e51b8152600401610adb9061436c565b60035460408051630d48571f60e31b815290516000926001600160a01b031691636a42b8f89160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906143ad565b610cf290426143dc565b9050610d14610d00826121b4565b600084815260046020526040902090612220565b60005b8751811015610f655760035488516001600160a01b039091169063f2b06537908a9084908110610d4957610d496143f4565b6020026020010151898481518110610d6357610d636143f4565b6020026020010151898581518110610d7d57610d7d6143f4565b602002602001015186604051602001610d99949392919061440a565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610dcd91815260200190565b602060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e919061443f565b15610e8c5760405162461bcd60e51b815260206004820152604260248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a206964656e746960448201527f63616c2070726f706f73616c20616374696f6e20616c72656164792071756575606482015261195960f21b608482015260a401610adb565b60035488516001600160a01b0390911690633a66f901908a9084908110610eb557610eb56143f4565b6020026020010151898481518110610ecf57610ecf6143f4565b6020026020010151898581518110610ee957610ee96143f4565b6020026020010151866040518563ffffffff1660e01b8152600401610f11949392919061440a565b6020604051808303816000875af1158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5491906143ad565b50610f5e81614461565b9050610d17565b5060408051838152602081018390527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289291015b60405180910390a15095945050505050565b60006109496108e760014361447c565b600080610fc986868686611b55565b90506000610fd6826113e9565b90506004816007811115610fec57610fec613ed9565b14806110095750600581600781111561100757611007613ed9565b145b6110255760405162461bcd60e51b8152600401610adb9061436c565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1611083828888888861223e565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b6060806060806000600260008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561114657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611128575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561119857602002820191906000526020600020905b815481526020019060010190808311611184575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561126c5783829060005260206000200180546111df9061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461120b9061425e565b80156112585780601f1061122d57610100808354040283529160200191611258565b820191906000526020600020905b81548152906001019060200180831161123b57829003601f168201915b5050505050815260200190600101906111c0565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561133f5783829060005260206000200180546112b29061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546112de9061425e565b801561132b5780601f106113005761010080835404028352916020019161132b565b820191906000526020600020905b81548152906001019060200180831161130e57829003601f168201915b505050505081526020019060010190611293565b5050505090509450945094509450509193509193565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906113c1906113b99060800160405160208183030381529060405280519060200120612252565b8686866122a0565b90506113de878288604051806020016040528060008152506122be565b979650505050505050565b6000610a02826123c9565b600081815260026020526040902080546001600160a01b0316336001600160a01b0316148061143d5750600854815461143b906001600160a01b03166108a760014361447c565b105b6114995760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610adb565b611702816001018054806020026020016040519081016040528092919081815260200182805480156114f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114d6575b50505050508260020180548060200260200160405190810160405280929190818152602001828054801561154757602002820191906000526020600020905b815481526020019060010190808311611533575b50505050506116f884600301805480602002602001604051908101604052809291908181526020016000905b8282101561161f5783829060005260206000200180546115929061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546115be9061425e565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b505050505081526020019060010190611573565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546116629061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461168e9061425e565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b505050505081526020019060010190611643565b505050506124aa565b846009015461260a565b505050565b600080339050611728848285604051806020016040528060008152506122be565b949350505050565b6009546001600160a01b0316331461178a5760405162461bcd60e51b815260206004820152601b60248201527f46656944414f3a2063616c6c6572206e6f7420677561726469616e00000000006044820152606401610adb565b600980546001600160a01b031916905563617f2e008111156117ee5760405162461bcd60e51b815260206004820152601860248201527f46656944414f3a20726f6c6c6261636b206578706972656400000000000000006044820152606401610adb565b600a81905560006118076003546001600160a01b031690565b9050806001600160a01b0316633a66f90161182a6003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b602082015260009101604051602081830303815290604052866040518563ffffffff1660e01b815260040161187b9493929190614293565b6020604051808303816000875af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be91906143ad565b506040518281527fdb51ef15d5bea4363daa5cb7691e73d2b53e2addace8cc5bef3b85c4f4489af5906020015b60405180910390a15050565b6118ff610935565b6001600160a01b0316336001600160a01b03161461192f5760405162461bcd60e51b8152600401610adb90614493565b600580549082905560408051828152602081018490527f16569b50c8812bb18e4b5c46b0fee4a9acbb3a9dca1e1badce427e8d75b5652d91016118eb565b6000803390506119b586828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122be92505050565b9695505050505050565b60006119cd85858585612618565b95945050505050565b6119de610935565b6001600160a01b0316336001600160a01b031614611a0e5760405162461bcd60e51b8152600401610adb90614493565b611a1781612680565b50565b60008181526004602090815260408083208151928301909152546001600160401b0316908190526110b5565b600360009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50505050565b60008181526001602081815260408084208151928301909152909101546001600160401b0316908190526110b5565b611ae7610935565b6001600160a01b0316336001600160a01b031614611b175760405162461bcd60e51b8152600401610adb90614493565b600780549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb091016118eb565b600084848484604051602001611b6e94939291906144ca565b60408051601f19818403018152919052805160209091012095945050505050565b6000611b9f3387878787876126e9565b6119b58686611bae87876124aa565b856119bf565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611c1d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bff575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611c7057602002820191906000526020600020905b815481526020019060010190808311611c5c575b5050505050611e1884600301805480602002602001604051908101604052809291908181526020016000905b82821015611d48578382906000526020600020018054611cbb9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce79061425e565b8015611d345780601f10611d0957610100808354040283529160200191611d34565b820191906000526020600020905b815481529060010190602001808311611d1757829003601f168201915b505050505081526020019060010190611c9c565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef578382906000526020600020018054611d8b9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611db79061425e565b8015611e045780601f10611dd957610100808354040283529160200191611e04565b820191906000526020600020905b815481529060010190602001808311611de757829003601f168201915b505050505081526020019060010190611d6c565b8460090154610c30565b611e2a610935565b6001600160a01b0316336001600160a01b031614611e5a5760405162461bcd60e51b8152600401610adb90614493565b600680549082905560408051828152602081018490527fffc708f072ca56e3d45ef0cb288b96cb9378f5f63e1646868bfbc9c38f4263a191016118eb565b6000611ea483836127a6565b9392505050565b611eb3610935565b6001600160a01b0316336001600160a01b031614611ee35760405162461bcd60e51b8152600401610adb90614493565b600880549082905560408051828152602081018490527fe92242fc3efcad407a677132b517977331a6e5b65abab69fd757cc02e99c9c4e91016118eb565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611f8a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f6c575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611fdd57602002820191906000526020600020905b815481526020019060010190808311611fc9575b505050505061218584600301805480602002602001604051908101604052809291908181526020016000905b828210156120b55783829060005260206000200180546120289061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546120549061425e565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b505050505081526020019060010190612009565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546120f89061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546121249061425e565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050815260200190600101906120d9565b8460090154610fba565b60006001600160e01b03198216636e665ced60e01b1480610a025750610a028261284c565b60006001600160401b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610adb565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b61224b8585858585612881565b5050505050565b6000610a0261225f612a00565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006122b187878787612b27565b9150915061108381612c14565b60008481526001602081905260408220906122d8876113e9565b60078111156122e9576122e9613ed9565b146123425760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610adb565b604080516020810190915281546001600160401b03169081905260009061236a908790611e98565b905061237887878784612dcf565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516123b79493929190614515565b60405180910390a29695505050505050565b6000806123d583612f74565b905060048160078111156123eb576123eb613ed9565b146123f65792915050565b600061240184611a1a565b90508061240f575092915050565b600360009054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612462573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248691906143ad565b61249090826143dc565b42106124a0575060069392505050565b5060059392505050565b6060600082516001600160401b038111156124c7576124c7613a8f565b6040519080825280602002602001820160405280156124fa57816020015b60608152602001906001900390816124e55790505b50905060005b84518110156126025784818151811061251b5761251b6143f4565b6020026020010151516000146125b95784818151811061253d5761253d6143f4565b6020026020010151848281518110612557576125576143f4565b602002602001015160405160240161256f9190613a7c565b60408051601f19818403018152908290529161258a9161453d565b6040519081900390206020820180516001600160e01b03166001600160e01b03199092169190911790526125d4565b8381815181106125cb576125cb6143f4565b60200260200101515b8282815181106125e6576125e66143f4565b6020026020010181905250806125fb90614461565b9050612500565b509392505050565b60006119cd858585856130db565b600061267433868686516001600160401b0381111561263957612639613a8f565b60405190808252806020026020018201604052801561266c57816020015b60608152602001906001900390816126575790505b5087876126e9565b6119cd858585856131f6565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805160208201206000612707878761270188886124aa565b85611b55565b600081815260026020526040902060098101549192509061279b5780546001600160a01b0319166001600160a01b038a16178155875161275090600183019060208b0190613797565b50865161276690600283019060208a01906137f8565b50855161277c9060038301906020890190613833565b508451612792906004830190602088019061388c565b50600981018390555b505050505050505050565b60405163782d6fe160e01b81526001600160a01b038381166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063782d6fe190604401602060405180830381865afa158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c9190614559565b6001600160601b03169392505050565b60006001600160e01b0319821663bf26d89760e01b1480610a0257506301ffc9a760e01b6001600160e01b0319831614610a02565b600061288c86611a1a565b9050600081116128f85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a2070726f706f73604482015270185b081b9bdd081e595d081c5d595d5959607a1b6064820152608401610adb565b60035461290e906001600160a01b0316346134b3565b60005b85518110156129f75760035486516001600160a01b0390911690630825f38f90889084908110612943576129436143f4565b602002602001015187848151811061295d5761295d6143f4565b6020026020010151878581518110612977576129776143f4565b6020026020010151866040518563ffffffff1660e01b815260040161299f949392919061440a565b6000604051808303816000875af11580156129be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129e691908101906142ff565b506129f081614461565b9050612911565b50505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612a5957507f000000000000000000000000000000000000000000000000000000000000000046145b15612a8357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b5e5750600090506003612c0b565b8460ff16601b14158015612b7657508460ff16601c14155b15612b875750600090506004612c0b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612bdb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c0457600060019250925050612c0b565b9150600090505b94509492505050565b6000816004811115612c2857612c28613ed9565b1415612c315750565b6001816004811115612c4557612c45613ed9565b1415612c935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610adb565b6002816004811115612ca757612ca7613ed9565b1415612cf55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610adb565b6003816004811115612d0957612d09613ed9565b1415612d625760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610adb565b6004816004811115612d7657612d76613ed9565b1415611a175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610adb565b60008481526002602090815260408083206001600160a01b038716845260088101909252909120805460ff1615612e5e5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610adb565b805460ff85166101000261ffff19909116176001178155612e7e836135cc565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff8416612ece5782826006016000828254612ec391906143dc565b90915550612f6c9050565b60ff841660011415612eee5782826005016000828254612ec391906143dc565b60ff841660021415612f0e5782826007016000828254612ec391906143dc565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610adb565b505050505050565b6000818152600160208181526040808420815160a08101835281546001600160401b0390811660808301908152825283518086018552958301541685529283019390935260029092015460ff80821615801594840194909452610100909104161515606082015290612fe95750600792915050565b806060015115612ffc5750600292915050565b80515143906001600160401b0316106130185750600092915050565b4361302582602001515190565b6001600160401b03161061303c5750600192915050565b6130498160200151613634565b1561308d5761305783613663565b8015613079575060008381526002602052604090206006810154600590910154115b613084576003611ea4565b60049392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610adb565b50919050565b6000806130ea8686868661368b565b905060006130f782611a1a565b905080156110835760005b87518110156131d35760035488516001600160a01b039091169063591fcdfe908a9084908110613134576131346143f4565b602002602001015189848151811061314e5761314e6143f4565b6020026020010151898581518110613168576131686143f4565b6020026020010151866040518563ffffffff1660e01b8152600401613190949392919061440a565b600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050806131cc90614461565b9050613102565b506000828152600460205260409020805467ffffffffffffffff19169055611083565b600061320160085490565b613210336108a760014361447c565b10156132905760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a401610adb565b60006132a58686868680519060200120611b55565b905084518651146132c85760405162461bcd60e51b8152600401610adb90614582565b83518651146132e95760405162461bcd60e51b8152600401610adb90614582565b600086511161333a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c00000000000000006044820152606401610adb565b600081815260016020908152604091829020825191820190925281546001600160401b031690819052156133ba5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610adb565b60006133cd6133c860055490565b6121b4565b6133d6436121b4565b6133e091906145c3565b905060006133f06133c860065490565b6133fa90836145c3565b90506134068383612220565b6134136001840182612220565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b0381111561345157613451613a8f565b60405190808252806020026020018201604052801561348457816020015b606081526020019060019003908161346f5790505b508c88888e60405161349e999897969594939291906145ee565b60405180910390a15091979650505050505050565b804710156135035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610adb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613550576040519150601f19603f3d011682016040523d82523d6000602084013e613555565b606091505b50509050806117025760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610adb565b60006001600160601b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610adb565b600061364982516001600160401b0316151590565b8015610a0257505051436001600160401b03909116111590565b600081815260026020526040812060058101546136826108e78561108d565b11159392505050565b60008061369a86868686611b55565b905060006136a7826113e9565b905060028160078111156136bd576136bd613ed9565b141580156136dd575060068160078111156136da576136da613ed9565b14155b80156136fb575060078160078111156136f8576136f8613ed9565b14155b6137475760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610adb565b60008281526001602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f989084815260200190565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906137b7565b5061221c9291506138e5565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec578251825591602001919060010190613818565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825180516138709184916020909101906138fa565b5091602001919060010190613853565b5061221c92915061396d565b8280548282559060005260206000209081019282156138d9579160200282015b828111156138d957825180516138c99184916020909101906138fa565b50916020019190600101906138ac565b5061221c92915061398a565b5b8082111561221c57600081556001016138e6565b8280546139069061425e565b90600052602060002090601f01602090048101928261392857600085556137ec565b82601f1061394157805160ff19168380011785556137ec565b828001600101855582156137ec57918201828111156137ec578251825591602001919060010190613818565b8082111561221c57600061398182826139a7565b5060010161396d565b8082111561221c57600061399e82826139a7565b5060010161398a565b5080546139b39061425e565b6000825580601f106139c3575050565b601f016020900490600052602060002090810190611a1791906138e5565b6000602082840312156139f357600080fd5b5035919050565b600060208284031215613a0c57600080fd5b81356001600160e01b031981168114611ea457600080fd5b60005b83811015613a3f578181015183820152602001613a27565b83811115611aaa5750506000910152565b60008151808452613a68816020860160208601613a24565b601f01601f19169290920160200192915050565b602081526000611ea46020830184613a50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613acd57613acd613a8f565b604052919050565b60006001600160401b03821115613aee57613aee613a8f565b5060051b60200190565b6001600160a01b0381168114611a1757600080fd5b600082601f830112613b1e57600080fd5b81356020613b33613b2e83613ad5565b613aa5565b82815260059290921b84018101918181019086841115613b5257600080fd5b8286015b84811015613b76578035613b6981613af8565b8352918301918301613b56565b509695505050505050565b600082601f830112613b9257600080fd5b81356020613ba2613b2e83613ad5565b82815260059290921b84018101918181019086841115613bc157600080fd5b8286015b84811015613b765780358352918301918301613bc5565b60006001600160401b03821115613bf557613bf5613a8f565b50601f01601f191660200190565b6000613c11613b2e84613bdc565b9050828152838383011115613c2557600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c4d57600080fd5b81356020613c5d613b2e83613ad5565b82815260059290921b84018101918181019086841115613c7c57600080fd5b8286015b84811015613b765780356001600160401b03811115613c9f5760008081fd5b8701603f81018913613cb15760008081fd5b613cc2898683013560408401613c03565b845250918301918301613c80565b60008060008060808587031215613ce657600080fd5b84356001600160401b0380821115613cfd57600080fd5b613d0988838901613b0d565b95506020870135915080821115613d1f57600080fd5b613d2b88838901613b81565b94506040870135915080821115613d4157600080fd5b50613d4e87828801613c3c565b949793965093946060013593505050565b600081518084526020808501945080840160005b83811015613d985781516001600160a01b031687529582019590820190600101613d73565b509495945050505050565b600081518084526020808501945080840160005b83811015613d9857815187529582019590820190600101613db7565b600081518084526020808501808196508360051b8101915082860160005b85811015613e1b578284038952613e09848351613a50565b98850198935090840190600101613df1565b5091979650505050505050565b608081526000613e3b6080830187613d5f565b8281036020840152613e4d8187613da3565b90508281036040840152613e618186613dd3565b905082810360608401526113de8185613dd3565b803560ff81168114613e8657600080fd5b919050565b600080600080600060a08688031215613ea357600080fd5b85359450613eb360208701613e75565b9350613ec160408701613e75565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b6020810160088310613f1157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613f2a57600080fd5b823591506020830135613f3c81613af8565b809150509250929050565b60008060408385031215613f5a57600080fd5b82359150613f6a60208401613e75565b90509250929050565b60008060008060608587031215613f8957600080fd5b84359350613f9960208601613e75565b925060408501356001600160401b0380821115613fb557600080fd5b818701915087601f830112613fc957600080fd5b813581811115613fd857600080fd5b886020828501011115613fea57600080fd5b95989497505060200194505050565b600082601f83011261400a57600080fd5b611ea483833560208501613c03565b6000806000806080858703121561402f57600080fd5b84356001600160401b038082111561404657600080fd5b61405288838901613b0d565b9550602087013591508082111561406857600080fd5b61407488838901613b81565b9450604087013591508082111561408a57600080fd5b61409688838901613c3c565b935060608701359150808211156140ac57600080fd5b506140b987828801613ff9565b91505092959194509250565b6000602082840312156140d757600080fd5b8135611ea481613af8565b600082601f8301126140f357600080fd5b81356020614103613b2e83613ad5565b82815260059290921b8401810191818101908684111561412257600080fd5b8286015b84811015613b765780356001600160401b038111156141455760008081fd5b6141538986838b0101613ff9565b845250918301918301614126565b600080600080600060a0868803121561417957600080fd5b85356001600160401b038082111561419057600080fd5b61419c89838a01613b0d565b965060208801359150808211156141b257600080fd5b6141be89838a01613b81565b955060408801359150808211156141d457600080fd5b6141e089838a016140e2565b945060608801359150808211156141f657600080fd5b61420289838a01613c3c565b9350608088013591508082111561421857600080fd5b5061422588828901613ff9565b9150509295509295909350565b6000806040838503121561424557600080fd5b823561425081613af8565b946020939093013593505050565b600181811c9082168061427257607f821691505b602082108114156130d557634e487b7160e01b600052602260045260246000fd5b60018060a01b038516815283602082015260a06040820152601860a08201527f73657450656e64696e6741646d696e286164647265737329000000000000000060c082015260e0606082015260006142ee60e0830185613a50565b905082608083015295945050505050565b60006020828403121561431157600080fd5b81516001600160401b0381111561432757600080fd5b8201601f8101841361433857600080fd5b8051614346613b2e82613bdc565b81815285602083850101111561435b57600080fd5b6119cd826020830160208601613a24565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b6000602082840312156143bf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156143ef576143ef6143c6565b500190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b038516815283602082015260a06040820152600060a082015260c0606082015260006142ee60c0830185613a50565b60006020828403121561445157600080fd5b81518015158114611ea457600080fd5b6000600019821415614475576144756143c6565b5060010190565b60008282101561448e5761448e6143c6565b500390565b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b6080815260006144dd6080830187613d5f565b82810360208401526144ef8187613da3565b905082810360408401526145038186613dd3565b91505082606083015295945050505050565b84815260ff841660208201528260408201526080606082015260006119b56080830184613a50565b6000825161454f818460208701613a24565b9190910192915050565b60006020828403121561456b57600080fd5b81516001600160601b0381168114611ea457600080fd5b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006001600160401b038083168185168083038211156145e5576145e56143c6565b01949350505050565b8981526001600160a01b0389166020820152610120604082018190526000906146198382018b613d5f565b9050828103606084015261462d818a613da3565b905082810360808401526146418189613dd3565b905082810360a08401526146558188613dd3565b6001600160401b0387811660c0860152861660e085015283810361010085015290506146818185613a50565b9c9b50505050505050505050505056fea264697066735822122093e9e558c03743cbb7912a75250045d7910498ec68f1824fcc308c047c9aa9a864736f6c634300080a0033" } \ No newline at end of file diff --git a/external/abi/fei/FeiDAOTimelock.json b/external/abi/fei/FeiDAOTimelock.json new file mode 100644 index 000000000..988cb7d4a --- /dev/null +++ b/external/abi/fei/FeiDAOTimelock.json @@ -0,0 +1,777 @@ +{ + "contractName": "FeiDAOTimelock", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "core_", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "delay_", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minDelay_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "CancelTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "oldContractAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newContractAdminRole", + "type": "bytes32" + } + ], + "name": "ContractAdminRoleUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oldCore", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newCore", + "type": "address" + } + ], + "name": "CoreUpdate", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "ExecuteTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "newDelay", + "type": "uint256" + } + ], + "name": "NewDelay", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "NewPendingAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "QueueTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "CONTRACT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "GRACE_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAXIMUM_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MINIMUM_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "OLD_TIMELOCK", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "ROLLBACK_DEADLINE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "acceptAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "cancelTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "core", + "outputs": [ + { + "internalType": "contract ICore", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "executeTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "fei", + "outputs": [ + { + "internalType": "contract IFei", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "feiBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "getTxHash", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "governorSetPendingAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + } + ], + "name": "isContractAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "queueTransaction", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedTransactions", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rollback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "newContractAdminRole", + "type": "bytes32" + } + ], + "name": "setContractAdminRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newCore", + "type": "address" + } + ], + "name": "setCore", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "delay_", + "type": "uint256" + } + ], + "name": "setDelay", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pendingAdmin_", + "type": "address" + } + ], + "name": "setPendingAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "tribe", + "outputs": [ + { + "internalType": "contract IERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "tribeBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "values", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "signatures", + "type": "string[]" + }, + { + "internalType": "bytes[]", + "name": "datas", + "type": "bytes[]" + }, + { + "internalType": "uint256[]", + "name": "etas", + "type": "uint256[]" + } + ], + "name": "vetoTransactions", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "bytecode": "60a06040523480156200001157600080fd5b50604051620024e9380380620024e9833981016040819052620000349162000323565b60808190528383838380821015620000a65760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960448201526936bab6903232b630bc9760b11b60648201526084015b60405180910390fd5b62278d00821115620001125760405162461bcd60e51b815260206004820152602e60248201527f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060448201526d36b0bc34b6bab6903232b630bc9760911b60648201526084016200009d565b6001600160a01b038316620001785760405162461bcd60e51b815260206004820152602560248201527f54696d656c6f636b3a2041646d696e206d757374206e6f742062652030206164604482015264647265737360d81b60648201526084016200009d565b50600080546001600160a01b0319166001600160a01b0393909316929092179091556002556004805460ff19169055620001b281620001bd565b505050505062000383565b60065460ff1615620002125760405162461bcd60e51b815260206004820152601c60248201527f436f72655265663a20616c726561647920696e697469616c697a65640000000060448201526064016200009d565b6006805460ff19166001179055600480546001600160a01b03808416610100908102610100600160a81b03199093169290921780845560408051631c5bfa2360e11b81529051620002ca9594909204909216926338b7f44692808201926020929091829003018186803b1580156200028957600080fd5b505afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200036a565b620002cd565b50565b6005805490829055604051829082907f29ddd278ef9169e35aa84e424b39048b89af9c0b50f85497e40f97dff6946cf590600090a35050565b80516001600160a01b03811681146200031e57600080fd5b919050565b6000806000806080858703121562000339578384fd5b620003448562000306565b9350620003546020860162000306565b6040860151606090960151949790965092505050565b6000602082840312156200037c578081fd5b5051919050565b608051612143620003a66000396000818161044c015261119701526121436000f3fe6080604052600436106101dc5760003560e01c80638000963011610102578063c1a287e211610095578063f2f4eb2611610064578063f2f4eb261461051f578063f4376aec14610542578063f851a44014610562578063fc81a12a1461058257600080fd5b8063c1a287e214610498578063d3488442146104af578063e177246e146104cf578063f2b06537146104ef57600080fd5b80639afd9d78116100d15780639afd9d7814610425578063b1b43ae51461043a578063b49058971461046e578063b86677fe1461048357600080fd5b806380009630146103bb5780638456cb59146103db578063903f5c5e146103f05780639a9ba4da1461041057600080fd5b80633f4ba83a1161017a5780636a42b8f8116101495780636a42b8f8146103515780636b6dff0a146103675780637a63e7dd1461037c5780637d645fab146103a457600080fd5b80633f4ba83a146102d85780634dd18bf5146102ed578063591fcdfe1461030d5780635c975abb1461032d57600080fd5b806310817f22116101b657806310817f22146102525780631da033121461026a57806326782247146102805780633a66f901146102b857600080fd5b806304a71576146101e85780630825f38f1461021b5780630e18b6811461023b57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611c03565b6105a2565b6040519081526020015b60405180910390f35b61022e610229366004611c03565b6105de565b6040516102129190611e85565b34801561024757600080fd5b50610250610629565b005b34801561025e57600080fd5b5061020863617f2e0081565b34801561027657600080fd5b5061020860055481565b34801561028c57600080fd5b506001546102a0906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b3480156102c457600080fd5b506102086102d3366004611c03565b6106e0565b3480156102e457600080fd5b50610250610718565b3480156102f957600080fd5b50610250610308366004611be7565b610846565b34801561031957600080fd5b50610250610328366004611c03565b6108af565b34801561033957600080fd5b5060045460ff165b6040519015158152602001610212565b34801561035d57600080fd5b5061020860025481565b34801561037357600080fd5b506102086108ed565b34801561038857600080fd5b506102a073639572471f2f318464dc01066a56867130e45e2581565b3480156103b057600080fd5b5061020862278d0081565b3480156103c757600080fd5b506102506103d6366004611be7565b610975565b3480156103e757600080fd5b50610250610aba565b3480156103fc57600080fd5b5061025061040b366004611c88565b610be6565b34801561041c57600080fd5b506102a0610e00565b34801561043157600080fd5b50610250610e88565b34801561044657600080fd5b506102087f000000000000000000000000000000000000000000000000000000000000000081565b34801561047a57600080fd5b50610208611073565b34801561048f57600080fd5b506102a061107d565b3480156104a457600080fd5b506102086212750081565b3480156104bb57600080fd5b506102506104ca366004611d74565b6110cd565b3480156104db57600080fd5b506102506104ea366004611d74565b611176565b3480156104fb57600080fd5b5061034161050a366004611d74565b60036020526000908152604090205460ff1681565b34801561052b57600080fd5b5060045461010090046001600160a01b03166102a0565b34801561054e57600080fd5b5061025061055d366004611be7565b6112b5565b34801561056e57600080fd5b506000546102a0906001600160a01b031681565b34801561058e57600080fd5b5061034161059d366004611be7565b611352565b600085858585856040516020016105bd959493929190611e39565b60405160208183030381529060405280519060200120905095945050505050565b60606105ec60045460ff1690565b156106125760405162461bcd60e51b815260040161060990611f70565b60405180910390fd5b61061f86868686866113e4565b9695505050505050565b6001546001600160a01b031633146106975760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20706560448201526a373234b733a0b236b4b71760a91b6064820152608401610609565b60008054336001600160a01b0319918216811783556001805490921690915560405190917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b60006106ee60045460ff1690565b1561070b5760405162461bcd60e51b815260040161060990611f70565b61061f86868686866116c2565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107999190611d54565b80610820575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611d54565b61083c5760405162461bcd60e51b815260040161060990611e98565b6108446117f5565b565b3330146108655760405162461bcd60e51b815260040161060990611ee5565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000546001600160a01b031633146108d95760405162461bcd60e51b815260040161060990611f2c565b6108e68585858585611888565b5050505050565b60006108f761107d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190611da8565b905090565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b1580156109be57600080fd5b505afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611d54565b610a125760405162461bcd60e51b815260040161060990611f9a565b6001600160a01b038116610a605760405162461bcd60e51b8152602060048201526015602482015274436f72655265663a207a65726f206164647265737360581b6044820152606401610609565b600480546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f9209b7c8c06dcfd261686a663e7c55989337b18d59da5433c6f2835fb697092090600090a35050565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b158015610b0357600080fd5b505afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190611d54565b80610bc2575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b158015610b8a57600080fd5b505afa158015610b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc29190611d54565b610bde5760405162461bcd60e51b815260040161060990611e98565b610844611903565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611d54565b80610cee575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190611d54565b610d0a5760405162461bcd60e51b815260040161060990611e98565b60005b8551811015610df857610de6868281518110610d3957634e487b7160e01b600052603260045260246000fd5b6020026020010151868381518110610d6157634e487b7160e01b600052603260045260246000fd5b6020026020010151868481518110610d8957634e487b7160e01b600052603260045260246000fd5b6020026020010151868581518110610db157634e487b7160e01b600052603260045260246000fd5b6020026020010151868681518110610dd957634e487b7160e01b600052603260045260246000fd5b6020026020010151611888565b80610df0816120b1565b915050610d0d565b505050505050565b6000600460019054906101000a90046001600160a01b03166001600160a01b0316639a9ba4da6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190611d8c565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b158015610ed157600080fd5b505afa158015610ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f099190611d54565b80610f90575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b158015610f5857600080fd5b505afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190611d54565b610fac5760405162461bcd60e51b815260040161060990611e98565b63617f2e004211156110005760405162461bcd60e51b815260206004820181905260248201527f46656944414f54696d656c6f636b3a20726f6c6c6261636b20657870697265646044820152606401610609565b600054604051630a890c9160e41b815273639572471f2f318464dc01066a56867130e45e2560048201526001600160a01b039091169063a890c91090602401600060405180830381600087803b15801561105957600080fd5b505af115801561106d573d6000803e3d6000fd5b50505050565b60006108f7610e00565b6000600460019054906101000a90046001600160a01b03166001600160a01b031663b86677fe6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5057600080fd5b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b15801561111657600080fd5b505afa15801561112a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114e9190611d54565b61116a5760405162461bcd60e51b815260040161060990611f9a565b6111738161195b565b50565b3330146111955760405162461bcd60e51b815260040161060990611ee5565b7f00000000000000000000000000000000000000000000000000000000000000008110156112185760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960448201526936bab6903232b630bc9760b11b6064820152608401610609565b62278d008111156112825760405162461bcd60e51b815260206004820152602e60248201527f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060448201526d36b0bc34b6bab6903232b630bc9760911b6064820152608401610609565b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b1580156112fe57600080fd5b505afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190611d54565b6108655760405162461bcd60e51b815260040161060990611f9a565b60048054600554604051632474521560e21b8152928301526001600160a01b03838116602484015260009261010090920416906391d148549060440160206040518083038186803b1580156113a657600080fd5b505afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190611d54565b92915050565b6000546060906001600160a01b031633146114115760405162461bcd60e51b815260040161060990611f2c565b600061142087878787876105a2565b60008181526003602052604090205490915060ff166114935760405162461bcd60e51b815260206004820152602960248201527f54696d656c6f636b3a205472616e73616374696f6e206861736e277420626565604482015268371038bab2bab2b21760b91b6064820152608401610609565b824210156114fd5760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b3a205472616e73616374696f6e206861736e2774207375726044820152703830b9b9b2b2103a34b6b2903637b1b59760791b6064820152608401610609565b61150a8362127500611994565b4211156115595760405162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a205472616e73616374696f6e206973207374616c652e006044820152606401610609565b6000818152600360205260409020805460ff19169055845160609061157f5750836115ab565b858051906020012085604051602001611599929190611dec565b60405160208183030381529060405290505b600080896001600160a01b031689846040516115c79190611e1d565b60006040518083038185875af1925050503d8060008114611604576040519150601f19603f3d011682016040523d82523d6000602084013e611609565b606091505b50915091508161166d5760405162461bcd60e51b815260206004820152602960248201527f54696d656c6f636b3a205472616e73616374696f6e20657865637574696f6e206044820152683932bb32b93a32b21760b91b6064820152608401610609565b896001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b6040516116ad9493929190611fdb565b60405180910390a39998505050505050505050565b600080546001600160a01b031633146116ed5760405162461bcd60e51b815260040161060990611f2c565b6117006002546116fa4290565b90611994565b8210156117755760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a20457374696d6174656420657865637574696f6e20626c60448201527f6f636b206d75737420736174697366792064656c61792e0000000000000000006064820152608401610609565b600061178487878787876105a2565b60008181526003602052604090819020805460ff19166001179055519091506001600160a01b0388169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f906117e3908a908a908a908a90611fdb565b60405180910390a39695505050505050565b60045460ff1661183e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610609565b6004805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061189786868686866105a2565b60008181526003602052604090819020805460ff19169055519091506001600160a01b0387169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf87906118f3908990899089908990611fdb565b60405180910390a3505050505050565b60045460ff16156119265760405162461bcd60e51b815260040161060990611f70565b6004805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861186b3390565b6005805490829055604051829082907f29ddd278ef9169e35aa84e424b39048b89af9c0b50f85497e40f97dff6946cf590600090a35050565b60006119a0828461206d565b9392505050565b600082601f8301126119b7578081fd5b813560206119cc6119c783612049565b612018565b80838252828201915082860187848660051b89010111156119eb578586fd5b855b85811015611a12578135611a00816120f8565b845292840192908401906001016119ed565b5090979650505050505050565b600082601f830112611a2f578081fd5b81356020611a3f6119c783612049565b80838252828201915082860187848660051b8901011115611a5e578586fd5b855b85811015611a1257813567ffffffffffffffff811115611a7e578788fd5b611a8c8a87838c0101611b7c565b8552509284019290840190600101611a60565b600082601f830112611aaf578081fd5b81356020611abf6119c783612049565b80838252828201915082860187848660051b8901011115611ade578586fd5b855b85811015611a1257813567ffffffffffffffff811115611afe578788fd5b611b0c8a87838c0101611b7c565b8552509284019290840190600101611ae0565b600082601f830112611b2f578081fd5b81356020611b3f6119c783612049565b80838252828201915082860187848660051b8901011115611b5e578586fd5b855b85811015611a1257813584529284019290840190600101611b60565b600082601f830112611b8c578081fd5b813567ffffffffffffffff811115611ba657611ba66120e2565b611bb9601f8201601f1916602001612018565b818152846020838601011115611bcd578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611bf8578081fd5b81356119a0816120f8565b600080600080600060a08688031215611c1a578081fd5b8535611c25816120f8565b945060208601359350604086013567ffffffffffffffff80821115611c48578283fd5b611c5489838a01611b7c565b94506060880135915080821115611c69578283fd5b50611c7688828901611b7c565b95989497509295608001359392505050565b600080600080600060a08688031215611c9f578081fd5b853567ffffffffffffffff80821115611cb6578283fd5b611cc289838a016119a7565b96506020880135915080821115611cd7578283fd5b611ce389838a01611b1f565b95506040880135915080821115611cf8578283fd5b611d0489838a01611a9f565b94506060880135915080821115611d19578283fd5b611d2589838a01611a1f565b93506080880135915080821115611d3a578283fd5b50611d4788828901611b1f565b9150509295509295909350565b600060208284031215611d65578081fd5b815180151581146119a0578182fd5b600060208284031215611d85578081fd5b5035919050565b600060208284031215611d9d578081fd5b81516119a0816120f8565b600060208284031215611db9578081fd5b5051919050565b60008151808452611dd8816020860160208601612085565b601f01601f19169290920160200192915050565b6001600160e01b0319831681528151600090611e0f816004850160208701612085565b919091016004019392505050565b60008251611e2f818460208701612085565b9190910192915050565b60018060a01b038616815284602082015260a060408201526000611e6060a0830186611dc0565b8281036060840152611e728186611dc0565b9150508260808301529695505050505050565b6020815260006119a06020830184611dc0565b6020808252602d908201527f436f72655265663a2043616c6c6572206973206e6f742061206775617264696160408201526c371037b91033b7bb32b93737b960991b606082015260800190565b60208082526027908201527f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20546960408201526636b2b637b1b59760c91b606082015260800190565b60208082526024908201527f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20616460408201526336b4b71760e11b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526021908201527f436f72655265663a2043616c6c6572206973206e6f74206120676f7665726e6f6040820152603960f91b606082015260800190565b848152608060208201526000611ff46080830186611dc0565b82810360408401526120068186611dc0565b91505082606083015295945050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612041576120416120e2565b604052919050565b600067ffffffffffffffff821115612063576120636120e2565b5060051b60200190565b60008219821115612080576120806120cc565b500190565b60005b838110156120a0578181015183820152602001612088565b8381111561106d5750506000910152565b60006000198214156120c5576120c56120cc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461117357600080fdfea26469706673582212200db80a9ed7d2750f076bd3356996eaa79ba6de912f384b26f6982cf6ea80b33364736f6c63430008040033" +} \ No newline at end of file diff --git a/external/abi/fei/Tribe.json b/external/abi/fei/Tribe.json new file mode 100644 index 000000000..b678fc480 --- /dev/null +++ b/external/abi/fei/Tribe.json @@ -0,0 +1,619 @@ +{ + "contractName": "Tribe", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "minter_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "fromDelegate", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "toDelegate", + "type": "address" + } + ], + "name": "DelegateChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "delegate", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "previousBalance", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newBalance", + "type": "uint256" + } + ], + "name": "DelegateVotesChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newMinter", + "type": "address" + } + ], + "name": "MinterChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "DELEGATION_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "DOMAIN_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PERMIT_TYPEHASH", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "name": "checkpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "fromBlock", + "type": "uint32" + }, + { + "internalType": "uint96", + "name": "votes", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + } + ], + "name": "delegate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "delegatee", + "type": "address" + }, + { + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "expiry", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "delegateBySig", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "delegates", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "getCurrentVotes", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + } + ], + "name": "getPriorVotes", + "outputs": [ + { + "internalType": "uint96", + "name": "", + "type": "uint96" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" + } + ], + "name": "mint", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "minter", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "nonces", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "numCheckpoints", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint8", + "name": "v", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "r", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "s", + "type": "bytes32" + } + ], + "name": "permit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter_", + "type": "address" + } + ], + "name": "setMinter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "rawAmount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "60806040526b033b2e3c9fd0803ce80000006000553480156200002157600080fd5b506040516200210938038062002109833981016040819052620000449162000121565b600080546001600160a01b0384168083526003602052604080842080546001600160601b0319166001600160601b0390941693909317909255825491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000b2919062000179565b60405180910390a3600180546001600160a01b0319166001600160a01b0383811691909117918290556040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69262000111926000929116906200015f565b60405180910390a150506200019b565b6000806040838503121562000134578182fd5b8251620001418162000182565b6020840151909250620001548162000182565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6001600160a01b03811681146200019857600080fd5b50565b611f5e80620001ab6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063c3cda5201161007c578063c3cda520146102cc578063d505accf146102df578063dd62ed3e146102f2578063e7a324dc14610305578063f1127ed81461030d578063fca3b5aa1461032e57610158565b806370a0823114610258578063782d6fe11461026b5780637ecebe001461028b57806395d89b411461029e578063a9059cbb146102a6578063b4b5ea57146102b957610158565b806330adf81f1161011557806330adf81f146101e0578063313ce567146101e857806340c10f19146101fd578063587cde1e146102125780635c19a95c146102255780636fcfff451461023857610158565b806306fdde031461015d578063075461721461017b578063095ea7b31461019057806318160ddd146101b057806320606b70146101c557806323b872dd146101cd575b600080fd5b610165610341565b6040516101729190611b78565b60405180910390f35b610183610362565b6040516101729190611a9c565b6101a361019e3660046118ab565b610371565b6040516101729190611aca565b6101b861043b565b6040516101729190611ad5565b6101b8610441565b6101a36101db3660046117ff565b610458565b6101b86105a7565b6101f06105b3565b6040516101729190611e1c565b61021061020b3660046118ab565b6105b8565b005b6101836102203660046117b0565b610794565b6102106102333660046117b0565b6107af565b61024b6102463660046117b0565b6107bc565b6040516101729190611dec565b6101b86102663660046117b0565b6107d4565b61027e6102793660046118ab565b6107f8565b6040516101729190611e2a565b6101b86102993660046117b0565b610a06565b610165610a18565b6101a36102b43660046118ab565b610a39565b61027e6102c73660046117b0565b610a80565b6102106102da3660046118d5565b610af1565b6102106102ed36600461183f565b610cd8565b6101b86103003660046117cb565b610fcc565b6101b8611000565b61032061031b36600461192e565b61100c565b604051610172929190611dfd565b61021061033c3660046117b0565b611041565b60405180604001604052806005815260200164547269626560d81b81525081565b6001546001600160a01b031681565b60008060001983141561038757506000196103b7565b6103b4836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b3360008181526002602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b03861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610427908590611e2a565b60405180910390a360019150505b92915050565b60005481565b60405161044d906119f2565b604051809103902081565b6001600160a01b038316600090815260026020908152604080832033808552908352818420548251808401909352601d8352600080516020611f0983398151915293830193909352916001600160601b03169083906104b89086906110d4565b9050866001600160a01b0316836001600160a01b0316141580156104e557506001600160601b0382811614155b1561058f57600061050f8383604051806060016040528060308152602001611eb360309139611103565b6001600160a01b038981166000818152600260209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b0386161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610585908590611e2a565b60405180910390a3505b61059a878783611142565b5060019695505050505050565b60405161044d90611988565b601281565b6001546001600160a01b031633146105eb5760405162461bcd60e51b81526004016105e290611bcb565b60405180910390fd5b6001600160a01b0382166106115760405162461bcd60e51b81526004016105e290611c02565b6000610640826040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90506000610668600054604051806060016040528060228152602001611e91602291396110d4565b905061068d8183604051806060016040528060228152602001611e9160229139611305565b6001600160601b0390811660009081556001600160a01b0386168152600360209081526040918290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526106f79216908490611305565b6001600160a01b03851660008181526003602052604080822080546001600160601b0319166001600160601b03959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610761908690611e2a565b60405180910390a36001600160a01b0380851660009081526004602052604081205461078e921684611341565b50505050565b6004602052600090815260409020546001600160a01b031681565b6107b9338261150d565b50565b60066020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600360205260409020546001600160601b031690565b60004382106108195760405162461bcd60e51b81526004016105e290611db5565b6001600160a01b03831660009081526006602052604090205463ffffffff1680610847576000915050610435565b6001600160a01b038416600090815260056020908152604080832063ffffffff6000198601811685529252909120541683106108c3576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610435565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff168310156108fe576000915050610435565b600060001982015b8163ffffffff168163ffffffff1611156109c157600282820363ffffffff16048103610930611771565b506001600160a01b038716600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561099c576020015194506104359350505050565b805163ffffffff168711156109b3578193506109ba565b6001820392505b5050610906565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60076020526000908152604090205481565b60405180604001604052806005815260200164545249424560d81b81525081565b600080610a69836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b9050610a76338583611142565b5060019392505050565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610aab576000610aea565b6001600160a01b0383166000908152600560209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b9392505050565b6000604051610aff906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610b4e611591565b30604051602001610b629493929190611b36565b6040516020818303038152906040528051906020012090506000604051610b8890611a4d565b604051908190038120610ba3918a908a908a90602001611b12565b60405160208183030381529060405280519060200120905060008282604051602001610bd092919061196d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610c0d9493929190611b5a565b6020604051602081039080840390855afa158015610c2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c625760405162461bcd60e51b81526004016105e290611cfc565b6001600160a01b03811660009081526007602052604090208054600181019091558914610ca15760405162461bcd60e51b81526004016105e290611d33565b87421115610cc15760405162461bcd60e51b81526004016105e290611c4c565b610ccb818b61150d565b505050505b505050505050565b6000600019861415610ced5750600019610d1d565b610d1a866040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b6000604051610d2b906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610d7a611591565b30604051602001610d8e9493929190611b36565b6040516020818303038152906040528051906020012090506000604051610db490611988565b604080519182900382206001600160a01b038d16600090815260076020908152929020805460018101909155610df69391928e928e928e9290918e9101611ade565b60405160208183030381529060405280519060200120905060008282604051602001610e2392919061196d565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610e609493929190611b5a565b6020604051602081039080840390855afa158015610e82573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610eb55760405162461bcd60e51b81526004016105e290611cfc565b8b6001600160a01b0316816001600160a01b031614610ee65760405162461bcd60e51b81526004016105e290611ccf565b88421115610f065760405162461bcd60e51b81526004016105e290611c4c565b84600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051610fb69190611e2a565b60405180910390a3505050505050505050505050565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b60405161044d90611a4d565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6001546001600160a01b0316331461106b5760405162461bcd60e51b81526004016105e290611d61565b6001546040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6916110aa916001600160a01b03909116908490611ab0565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600081600160601b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b509192915050565b6000836001600160601b0316836001600160601b03161115829061113a5760405162461bcd60e51b81526004016105e29190611b78565b505050900390565b6001600160a01b0383166111685760405162461bcd60e51b81526004016105e290611c83565b6001600160a01b03821661118e5760405162461bcd60e51b81526004016105e290611c02565b6001600160a01b0383166000908152600360209081526040918290205482516060810190935260268084526111d9936001600160601b039092169285929190611ee390830139611103565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526112599216908390611305565b6001600160a01b038381166000818152600360205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112c6908590611e2a565b60405180910390a36001600160a01b0380841660009081526004602052604080822054858416835291205461130092918216911683611341565b505050565b6000838301826001600160601b0380871690831610156113385760405162461bcd60e51b81526004016105e29190611b78565b50949350505050565b816001600160a01b0316836001600160a01b03161415801561136c57506000816001600160601b0316115b15611300576001600160a01b03831615611441576001600160a01b03831660009081526006602052604081205463ffffffff1690816113ac5760006113eb565b6001600160a01b0385166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061142f82856040518060400160405280601d81526020017f54726962653a20766f746520616d6f756e7420756e646572666c6f7773000000815250611103565b905061143d86848484611595565b5050505b6001600160a01b03821615611300576001600160a01b03821660009081526006602052604081205463ffffffff16908161147c5760006114bb565b6001600160a01b0384166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006114ff82856040518060400160405280601c81526020017f54726962653a20766f746520616d6f756e74206f766572666c6f777300000000815250611305565b9050610cd085848484611595565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461078e828483611341565b4690565b60006115b943604051806060016040528060238152602001611e6e6023913961174a565b905060008463ffffffff1611801561160257506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611661576001600160a01b0385166000908152600560209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611700565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600583528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600690935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161173b929190611e3e565b60405180910390a25050505050565b600081600160201b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b604080518082019091526000808252602082015290565b80356001600160a01b038116811461043557600080fd5b803560ff8116811461043557600080fd5b6000602082840312156117c1578081fd5b610aea8383611788565b600080604083850312156117dd578081fd5b6117e78484611788565b91506117f68460208501611788565b90509250929050565b600080600060608486031215611813578081fd5b833561181e81611e58565b9250602084013561182e81611e58565b929592945050506040919091013590565b600080600080600080600060e0888a031215611859578283fd5b6118638989611788565b96506118728960208a01611788565b9550604088013594506060880135935061188f8960808a0161179f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156118bd578182fd5b6118c78484611788565b946020939093013593505050565b60008060008060008060c087890312156118ed578182fd5b6118f78888611788565b95506020870135945060408701359350611914886060890161179f565b92506080870135915060a087013590509295509295509295565b60008060408385031215611940578182fd5b61194a8484611788565b9150602083013563ffffffff81168114611962578182fd5b809150509250929050565b61190160f01b81526002810192909252602282015260420190565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520190565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611ba457858101830151858201604001528201611b88565b81811115611bb55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206d696e7400604082015260600190565b6020808252602a908201527f54726962653a2063616e6e6f74207472616e7366657220746f20746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526018908201527f54726962653a207369676e617475726520657870697265640000000000000000604082015260600190565b6020808252602c908201527f54726962653a2063616e6e6f74207472616e736665722066726f6d207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b602080825260139082015272151c9a58994e881d5b985d5d1a1bdc9a5e9959606a1b604082015260600190565b60208082526018908201527f54726962653a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526014908201527354726962653a20696e76616c6964206e6f6e636560601b604082015260600190565b60208082526034908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206368616e676040820152736520746865206d696e746572206164647265737360601b606082015260800190565b60208082526019908201527f54726962653a206e6f74207965742064657465726d696e656400000000000000604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160601b0316602082015260400190565b60ff91909116815260200190565b6001600160601b0391909116815260200190565b6001600160601b0392831681529116602082015260400190565b6001600160a01b03811681146107b957600080fdfe54726962653a20626c6f636b206e756d6265722065786365656473203332206269747354726962653a20746f74616c537570706c792065786365656473203936206269747354726962653a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636554726962653a207472616e7366657220616d6f756e7420657863656564732062616c616e636554726962653a20616d6f756e7420657863656564732039362062697473000000a26469706673582212204b5ab84c8ee5befcd5fba2745834ef385b0d07beb1f852bc25562eb10a137ac064736f6c63430006060033" +} \ No newline at end of file diff --git a/external/abi/rari/Timelock.json b/external/abi/rari/Timelock.json new file mode 100644 index 000000000..f2802d1b1 --- /dev/null +++ b/external/abi/rari/Timelock.json @@ -0,0 +1,463 @@ +{ + "contractName": "Timelock", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "uint256", + "name": "delay_", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "CancelTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "ExecuteTransaction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "NewAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint256", + "name": "newDelay", + "type": "uint256" + } + ], + "name": "NewDelay", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newPendingAdmin", + "type": "address" + } + ], + "name": "NewPendingAdmin", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "txHash", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "QueueTransaction", + "type": "event" + }, + { + "payable": true, + "stateMutability": "payable", + "type": "fallback" + }, + { + "constant": true, + "inputs": [], + "name": "GRACE_PERIOD", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MAXIMUM_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "MINIMUM_DELAY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [], + "name": "acceptAdmin", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "cancelTransaction", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "delay", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "executeTransaction", + "outputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "payable": true, + "stateMutability": "payable", + "type": "function" + }, + { + "constant": true, + "inputs": [], + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "eta", + "type": "uint256" + } + ], + "name": "queueTransaction", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": true, + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "queuedTransactions", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "payable": false, + "stateMutability": "view", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "uint256", + "name": "delay_", + "type": "uint256" + } + ], + "name": "setDelay", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + }, + { + "constant": false, + "inputs": [ + { + "internalType": "address", + "name": "pendingAdmin_", + "type": "address" + } + ], + "name": "setPendingAdmin", + "outputs": [], + "payable": false, + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "608060405234801561001057600080fd5b506040516118a63803806118a68339818101604052604081101561003357600080fd5b5080516020909101516202a30081101561007e5760405162461bcd60e51b81526004018080602001828103825260378152602001806118376037913960400191505060405180910390fd5b62278d008111156100c05760405162461bcd60e51b815260040180806020018281038252603881526020018061186e6038913960400191505060405180910390fd5b600080546001600160a01b039093166001600160a01b031990931692909217909155600255611743806100f46000396000f3fe6080604052600436106100c25760003560e01c80636a42b8f81161007f578063c1a287e211610059578063c1a287e2146105dd578063e177246e146105f2578063f2b065371461061c578063f851a4401461065a576100c2565b80636a42b8f81461059e5780637d645fab146105b3578063b1b43ae5146105c8576100c2565b80630825f38f146100c45780630e18b68114610279578063267822471461028e5780633a66f901146102bf5780634dd18bf51461041e578063591fcdfe14610451575b005b610204600480360360a08110156100da57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561010957600080fd5b82018360208201111561011b57600080fd5b803590602001918460018302840111600160201b8311171561013c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561018e57600080fd5b8201836020820111156101a057600080fd5b803590602001918460018302840111600160201b831117156101c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061066f915050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b506100c2610b88565b34801561029a57600080fd5b506102a3610c24565b604080516001600160a01b039092168252519081900360200190f35b3480156102cb57600080fd5b5061040c600480360360a08110156102e257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561031157600080fd5b82018360208201111561032357600080fd5b803590602001918460018302840111600160201b8311171561034457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561039657600080fd5b8201836020820111156103a857600080fd5b803590602001918460018302840111600160201b831117156103c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c33915050565b60408051918252519081900360200190f35b34801561042a57600080fd5b506100c26004803603602081101561044157600080fd5b50356001600160a01b0316610f44565b34801561045d57600080fd5b506100c2600480360360a081101561047457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460018302840111600160201b831117156104d657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561052857600080fd5b82018360208201111561053a57600080fd5b803590602001918460018302840111600160201b8311171561055b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610fd2915050565b3480156105aa57600080fd5b5061040c611288565b3480156105bf57600080fd5b5061040c61128e565b3480156105d457600080fd5b5061040c611295565b3480156105e957600080fd5b5061040c61129c565b3480156105fe57600080fd5b506100c26004803603602081101561061557600080fd5b50356112a3565b34801561062857600080fd5b506106466004803603602081101561063f57600080fd5b5035611398565b604080519115158252519081900360200190f35b34801561066657600080fd5b506102a36113ad565b6000546060906001600160a01b031633146106bb5760405162461bcd60e51b81526004018080602001828103825260388152602001806114226038913960400191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561072a578181015183820152602001610712565b50505050905090810190601f1680156107575780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561078a578181015183820152602001610772565b50505050905090810190601f1680156107b75780820380516001836020036101000a031916815260200191505b5060408051601f1981840301815291815281516020928301206000818152600390935291205490995060ff16975061082896505050505050505760405162461bcd60e51b815260040180806020018281038252603d815260200180611575603d913960400191505060405180910390fd5b826108316113bc565b101561086e5760405162461bcd60e51b81526004018080602001828103825260458152602001806114c46045913960600191505060405180910390fd5b610881836212750063ffffffff6113c016565b6108896113bc565b11156108c65760405162461bcd60e51b81526004018080602001828103825260338152602001806114916033913960400191505060405180910390fd5b6000818152600360205260409020805460ff1916905584516060906108ec575083610979565b85805190602001208560405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106109415780518252601f199092019160209182019101610922565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060896001600160a01b031689846040518082805190602001908083835b602083106109b85780518252601f199092019160209182019101610999565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a1a576040519150601f19603f3d011682016040523d82523d6000602084013e610a1f565b606091505b509150915081610a605760405162461bcd60e51b815260040180806020018281038252603d815260200180611658603d913960400191505060405180910390fd5b896001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610add578181015183820152602001610ac5565b50505050905090810190601f168015610b0a5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610b3d578181015183820152602001610b25565b50505050905090810190601f168015610b6a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39998505050505050505050565b6001546001600160a01b03163314610bd15760405162461bcd60e51b81526004018080602001828103825260388152602001806115b26038913960400191505060405180910390fd5b60008054336001600160a01b031991821617808355600180549092169091556040516001600160a01b03909116917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b6001546001600160a01b031681565b600080546001600160a01b03163314610c7d5760405162461bcd60e51b81526004018080602001828103825260368152602001806116226036913960400191505060405180910390fd5b610c97600254610c8b6113bc565b9063ffffffff6113c016565b821015610cd55760405162461bcd60e51b81526004018080602001828103825260498152602001806116956049913960600191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610d44578181015183820152602001610d2c565b50505050905090810190601f168015610d715780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610da4578181015183820152602001610d8c565b50505050905090810190601f168015610dd15780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060016003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550866001600160a01b0316817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610e9c578181015183820152602001610e84565b50505050905090810190601f168015610ec95780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610efc578181015183820152602001610ee4565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39695505050505050565b333014610f825760405162461bcd60e51b81526004018080602001828103825260388152602001806115ea6038913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000546001600160a01b0316331461101b5760405162461bcd60e51b815260040180806020018281038252603781526020018061145a6037913960400191505060405180910390fd5b6000858585858560405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561108a578181015183820152602001611072565b50505050905090810190601f1680156110b75780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156110ea5781810151838201526020016110d2565b50505050905090810190601f1680156111175780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060006003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550856001600160a01b0316817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561124257818101518382015260200161122a565b50505050905090810190601f16801561126f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050565b60025481565b62278d0081565b6202a30081565b6212750081565b3330146112e15760405162461bcd60e51b81526004018080602001828103825260318152602001806116de6031913960400191505060405180910390fd5b6202a3008110156113235760405162461bcd60e51b81526004018080602001828103825260348152602001806115096034913960400191505060405180910390fd5b62278d008111156113655760405162461bcd60e51b815260040180806020018281038252603881526020018061153d6038913960400191505060405180910390fd5b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b60036020526000908152604090205460ff1681565b6000546001600160a01b031681565b4290565b60008282018381101561141a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b939250505056fe54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206973207374616c652e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774207375727061737365642074696d65206c6f636b2e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774206265656e207175657565642e54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737420636f6d652066726f6d2070656e64696e6741646d696e2e54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a20457374696d6174656420657865637574696f6e20626c6f636b206d75737420736174697366792064656c61792e54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2ea265627a7a723158204006fd3bbe7037fa19163d36030b3420a9f20909a7c457317f16446d0cf5f48764736f6c6343000511003254696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e000000000000000000000000fbf3f9067b602126db5879ff7e6a66d391c69dfd000000000000000000000000000000000000000000000000000000000002a300" +} \ No newline at end of file diff --git a/test/integration/rgtMigrationWrapModule.spec.ts b/test/integration/rgtMigrationWrapModule.spec.ts index f06c0c12b..64add4daa 100644 --- a/test/integration/rgtMigrationWrapModule.spec.ts +++ b/test/integration/rgtMigrationWrapModule.spec.ts @@ -4,7 +4,7 @@ import { BigNumber } from "ethers"; import { Address } from "@utils/types"; import { Account } from "@utils/test/types"; import { ADDRESS_ZERO, ZERO } from "@utils/constants"; -import { RgtMigrationWrapAdapter, SetToken, WrapModule } from "@utils/contracts"; +import { RgtMigrationWrapAdapter, SetToken, StandardTokenMock, WrapModule } from "@utils/contracts"; import DeployHelper from "@utils/deploys"; import { ether, @@ -26,8 +26,8 @@ describe("rgtMigrationWrapModule", () => { let wrapModule: WrapModule; - // let rgtToken: RgtToken; - // let tribeToken: TribeToken; + let rgtToken: StandardTokenMock; + let tribeToken: StandardTokenMock; let adapter: RgtMigrationWrapAdapter; const rgtMigrationWrapAdapterIntegrationName: string = "RGT_MIGRATION_WRAPPER"; @@ -47,7 +47,14 @@ describe("rgtMigrationWrapModule", () => { await setup.controller.addModule(wrapModule.address); // RgtMigrationWrapV2Adapter setup - adapter = await deployer.adapters.deployRgtMigrationWrapAdapter(); + rgtToken = await deployer.mocks.deployTokenMock(owner.address); + tribeToken = await deployer.mocks.deployTokenMock(owner.address); + + const rariTimelock = await deployer.external.deployRariTimelock(owner.address, 3); + const tribe = await deployer.external.deployFeiTribe(owner.address, owner.address); + const rariTribeDao = await deployer.external.deployFeiDAO(tribe.address, rariTimelock.address, ADDRESS_ZERO); + const pegExchanger = await deployer.external.deployPegExchanger(rariTribeDao.address); + adapter = await deployer.adapters.deployRgtMigrationWrapAdapter(pegExchanger.address); await setup.integrationRegistry.addIntegration(wrapModule.address, rgtMigrationWrapAdapterIntegrationName, adapter.address); }); @@ -60,7 +67,7 @@ describe("rgtMigrationWrapModule", () => { before(async () => { setToken = await setup.createSetToken( - [dgClassic.address], + [rgtToken.address], [BigNumber.from(10 ** 8)], [setup.issuanceModule.address, wrapModule.address] ); @@ -72,7 +79,7 @@ describe("rgtMigrationWrapModule", () => { // Issue some Sets setTokensIssued = ether(10); const underlyingRequired = setTokensIssued.div(10 ** 9); - await dgClassic.approve(setup.issuanceModule.address, underlyingRequired); + await rgtToken.approve(setup.issuanceModule.address, underlyingRequired); await setup.issuanceModule.issue(setToken.address, setTokensIssued, owner.address); }); @@ -86,8 +93,8 @@ describe("rgtMigrationWrapModule", () => { beforeEach(async () => { subjectSetToken = setToken.address; - subjectUnderlyingToken = dgClassic.address; - subjectWrappedToken = dgLight.address; + subjectUnderlyingToken = rgtToken.address; + subjectWrappedToken = tribeToken.address; subjectUnderlyingUnits = BigNumber.from(10 ** 8); subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; @@ -103,20 +110,20 @@ describe("rgtMigrationWrapModule", () => { ); } - it("should convert underlying balance of RGT tokens to TRIBE tokens * 1000", async () => { - const previousDgTokenBalance = await dgClassic.balanceOf(setToken.address); - const previousDGLightBalance = await dgLight.balanceOf(setToken.address); - expect(previousDgTokenBalance).to.eq(BigNumber.from(10 ** 9)); - expect(previousDGLightBalance).to.eq(ZERO); + it("should convert underlying balance of RGT tokens to TRIBE tokens * 26705673430 / 10e9", async () => { + const previousRgtTokenBalance = await rgtToken.balanceOf(setToken.address); + const previousTribeTokenBalance = await tribeToken.balanceOf(setToken.address); + expect(previousRgtTokenBalance).to.eq(BigNumber.from(10 ** 9)); + expect(previousTribeTokenBalance).to.eq(ZERO); await subject(); - const dgTokenBalance = await dgClassic.balanceOf(setToken.address); - const DGLightBalance = await dgLight.balanceOf(setToken.address); + const rgtTokenBalance = await rgtToken.balanceOf(setToken.address); + const tribeTokenBalance = await tribeToken.balanceOf(setToken.address); const components = await setToken.getComponents(); - expect(dgTokenBalance).to.eq(ZERO); - expect(DGLightBalance).to.eq(previousDgTokenBalance.mul(1000)); + expect(rgtTokenBalance).to.eq(ZERO); + expect(tribeTokenBalance).to.eq(previousRgtTokenBalance.mul(26705673430).div(10e9)); expect(components.length).to.eq(1); }); }); @@ -131,8 +138,8 @@ describe("rgtMigrationWrapModule", () => { beforeEach(async () => { subjectSetToken = setToken.address; - subjectUnderlyingToken = dgClassic.address; - subjectWrappedToken = dgLight.address; + subjectUnderlyingToken = rgtToken.address; + subjectWrappedToken = tribeToken.address; subjectWrappedUnits = BigNumber.from(10 ** 8); subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; @@ -157,7 +164,7 @@ describe("rgtMigrationWrapModule", () => { } it("should revert", async () => { - await expect(subject()).to.be.revertedWith("DG migration cannot be reversed"); + await expect(subject()).to.be.revertedWith("RGT migration cannot be reversed"); }); }); }); diff --git a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts index 3a45a21ba..12568c734 100644 --- a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts +++ b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts @@ -34,7 +34,7 @@ describe("RgtMigrationWrapAdapter", () => { const rariTribeDAO = await deployer.mocks.deployTokenMock(owner.address); pegExchanger = await deployer.external.deployPegExchanger(rariTribeDAO.address); - rgtMigrationWrapAdapter = await deployer.adapters.deployRgtMigrationWrapAdater(pegExchanger.address); + rgtMigrationWrapAdapter = await deployer.adapters.deployRgtMigrationWrapAdapter(pegExchanger.address); }); addSnapshotBeforeRestoreAfterEach(); @@ -47,7 +47,7 @@ describe("RgtMigrationWrapAdapter", () => { }); async function subject(): Promise { - return deployer.adapters.deployRgtMigrationWrapAdater(subjectPegExchanger); + return deployer.adapters.deployRgtMigrationWrapAdapter(subjectPegExchanger); } it("should have the correct PegExchanger address", async () => { diff --git a/utils/deploys/deployAdapters.ts b/utils/deploys/deployAdapters.ts index 032655c5f..c4ae31bf9 100644 --- a/utils/deploys/deployAdapters.ts +++ b/utils/deploys/deployAdapters.ts @@ -193,7 +193,7 @@ export default class DeployAdapters { return await new DgMigrationWrapAdapter__factory(this._deployerSigner).deploy(legacyAddress, newAddress); } - public async deployRgtMigrationWrapAdater(pegExchanger: Address): Promise { + public async deployRgtMigrationWrapAdapter(pegExchanger: Address): Promise { return await new RgtMigrationWrapAdapter__factory(this._deployerSigner).deploy(pegExchanger); } diff --git a/utils/deploys/deployExternal.ts b/utils/deploys/deployExternal.ts index e2cf511da..06dc0fd52 100644 --- a/utils/deploys/deployExternal.ts +++ b/utils/deploys/deployExternal.ts @@ -240,6 +240,14 @@ import { DGLight__factory } from "../../typechain/factories/DGLight__factory"; import { PegExchanger } from "../../typechain/PegExchanger"; import { PegExchanger__factory } from "../../typechain/factories/PegExchanger__factory"; import { FeiDAO } from "../../typechain/FeiDAO"; +import { FeiDAO__factory } from "../../typechain/factories/FeiDAO__factory"; +import { Tribe } from "../../typechain/Tribe"; +import { Tribe__factory } from "../../typechain/factories/Tribe__factory"; +import { FeiDAOTimelock } from "../../typechain/FeiDAOTimelock"; +import { FeiDAOTimelock__factory } from "../../typechain/factories/FeiDAOTimelock__factory"; + +import { Timelock } from "../../typechain/Timelock"; +import { Timelock__factory } from "../../typechain/factories/Timelock__factory"; export default class DeployExternalContracts { private _deployerSigner: Signer; @@ -825,9 +833,22 @@ export default class DeployExternalContracts { return await new DgToken__factory(this._deployerSigner).deploy(); } - // Fei - public async deployFeiDAO(): Promise { - throw new Error("Not yet implemented"); + // Rari + public async deployRariTimelock(admin: Address, delay: BigNumberish): Promise { + return await new Timelock__factory(this._deployerSigner).deploy(admin, delay); + } + + // Fei Protocol + public async deployFeiTimelock(core: Address, admin: Address, delay: BigNumberish, minDelay: BigNumberish): Promise { + return await new FeiDAOTimelock__factory(this._deployerSigner).deploy(core, admin, delay, minDelay); + } + + public async deployFeiTribe(account: Address, minter: Address): Promise { + return await new Tribe__factory(this._deployerSigner).deploy(account, minter); + } + + public async deployFeiDAO(tribe: Address, timelock: Address, guardian: Address): Promise { + return await new FeiDAO__factory(this._deployerSigner).deploy(tribe, timelock, guardian); } public async deployPegExchanger(rariTribeDAO: Address): Promise { From 146522012d0fb924a9530bafb6969dcd207f25c2 Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Thu, 20 Jan 2022 20:00:47 +1100 Subject: [PATCH 07/16] add mock and fix some tests --- .../mocks/external/TribePegExchangerMock.sol | 58 + external/abi/fei/Core.json | 754 ----------- external/abi/fei/FeiDAO.json | 1143 ----------------- external/abi/fei/FeiDAOTimelock.json | 777 ----------- external/abi/fei/PegExchanger.json | 303 ----- external/abi/fei/Tribe.json | 619 --------- external/abi/rari/Timelock.json | 463 ------- .../rgtMigrationWrapModule.spec.ts | 14 +- .../wrap/rgtMigrationWrapAdapter.spec.ts | 5 +- utils/contracts/index.ts | 1 + utils/deploys/deployExternal.ts | 34 - utils/deploys/deployMocks.ts | 6 + 12 files changed, 76 insertions(+), 4101 deletions(-) create mode 100644 contracts/mocks/external/TribePegExchangerMock.sol delete mode 100644 external/abi/fei/Core.json delete mode 100644 external/abi/fei/FeiDAO.json delete mode 100644 external/abi/fei/FeiDAOTimelock.json delete mode 100644 external/abi/fei/PegExchanger.json delete mode 100644 external/abi/fei/Tribe.json delete mode 100644 external/abi/rari/Timelock.json diff --git a/contracts/mocks/external/TribePegExchangerMock.sol b/contracts/mocks/external/TribePegExchangerMock.sol new file mode 100644 index 000000000..8befa34c4 --- /dev/null +++ b/contracts/mocks/external/TribePegExchangerMock.sol @@ -0,0 +1,58 @@ +/* + Copyright 2021 Set Labs Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache License, Version 2.0 +*/ + +pragma solidity 0.6.10; + +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; +import "hardhat/console.sol"; + +/** + @title Contract to exchange RGT with TRIBE post-merger +*/ +contract TribePegExchangerMock { + using SafeERC20 for IERC20; + + /// @notice the multiplier applied to RGT before converting to TRIBE scaled up by 1e9 + uint256 public constant exchangeRate = 26705673430; // 26.7 TRIBE / RGT + /// @notice the granularity of the exchange rate + uint256 public constant scalar = 1e9; + + event Exchange(address indexed from, uint256 amountIn, uint256 amountOut); + + address public immutable rgt; + address public immutable tribe; + + constructor(address _rgt, address _tribe) public { + rgt = _rgt; + tribe = _tribe; + } + + /// @notice call to exchange held RGT with TRIBE + /// @param amount the amount to exchange + function exchange(uint256 amount) public { + uint256 tribeOut = amount * exchangeRate / scalar; + console.log("starting transfer"); + console.log(tribeOut); + IERC20(rgt).safeTransferFrom(msg.sender, address(this), amount); + console.log("transferred rgt"); + IERC20(tribe).safeTransfer(msg.sender, tribeOut); + console.log("transferred tribe"); + emit Exchange(msg.sender, amount, tribeOut); + } +} \ No newline at end of file diff --git a/external/abi/fei/Core.json b/external/abi/fei/Core.json deleted file mode 100644 index fac99b007..000000000 --- a/external/abi/fei/Core.json +++ /dev/null @@ -1,754 +0,0 @@ -{ - "contractName": "Core", - "abi": [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_fei", - "type": "address" - } - ], - "name": "FeiUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_genesisGroup", - "type": "address" - } - ], - "name": "GenesisGroupUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "_timestamp", - "type": "uint256" - } - ], - "name": "GenesisPeriodComplete", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "TribeAllocation", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "_tribe", - "type": "address" - } - ], - "name": "TribeUpdate", - "type": "event" - }, - { - "inputs": [], - "name": "BURNER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GOVERN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GUARDIAN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINTER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PCV_CONTROLLER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "allocateTribe", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "completeGenesisGroup", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "adminRole", - "type": "bytes32" - } - ], - "name": "createRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "fei", - "outputs": [ - { - "internalType": "contract IFei", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "genesisGroup", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getRoleMember", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleMemberCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "burner", - "type": "address" - } - ], - "name": "grantBurner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governor", - "type": "address" - } - ], - "name": "grantGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guardian", - "type": "address" - } - ], - "name": "grantGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "grantMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pcvController", - "type": "address" - } - ], - "name": "grantPCVController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "hasGenesisGroupCompleted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "init", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isBurner", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isGovernor", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isGuardian", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isMinter", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_address", - "type": "address" - } - ], - "name": "isPCVController", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "burner", - "type": "address" - } - ], - "name": "revokeBurner", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "governor", - "type": "address" - } - ], - "name": "revokeGovernor", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "guardian", - "type": "address" - } - ], - "name": "revokeGuardian", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "minter", - "type": "address" - } - ], - "name": "revokeMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeOverride", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pcvController", - "type": "address" - } - ], - "name": "revokePCVController", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "setFei", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_genesisGroup", - "type": "address" - } - ], - "name": "setGenesisGroup", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "token", - "type": "address" - } - ], - "name": "setTribe", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tribe", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "608060405262000018306001600160e01b03620000a616565b620000586040516200002a90620002ce565b60405180910390206040516200004090620002b7565b6040519081900390206001600160e01b03620000d416565b6200006a6040516200002a9062000287565b6200007c6040516200002a906200025e565b6200008e6040516200002a90620002b7565b620000a06040516200002a906200029e565b620002e5565b620000d1604051620000b890620002b7565b604051908190039020826001600160e01b036200012616565b50565b600082815260208190526040808220600201549051839285917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a460009182526020829052604090912060020155565b6200013b82826001600160e01b036200013f16565b5050565b6000828152602081815260409091206200016491839062001228620001c1821b17901c565b156200013b576200017d6001600160e01b03620001ea16565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b6000620001e1836001600160a01b0384166001600160e01b03620001ee16565b90505b92915050565b3390565b60006200020583836001600160e01b036200024616565b6200023d57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620001e4565b506000620001e4565b60009081526001919091016020526040902054151590565b7f5043565f434f4e54524f4c4c45525f524f4c4500000000000000000000000000815260130190565b6a4255524e45525f524f4c4560a81b8152600b0190565b6c475541524449414e5f524f4c4560981b8152600d0190565b6a474f5645524e5f524f4c4560a81b8152600b0190565b6a4d494e5445525f524f4c4560a81b8152600b0190565b615d0880620002f56000396000f3fe60806040523480156200001157600080fd5b5060043610620002805760003560e01c80639010d07c1162000159578063c1ef303a11620000c9578063e0a200461162000087578063e0a200461462000560578063e1c7392a146200056a578063e43581b81462000574578063e6eb982f146200058b578063eacdd9e814620005a25762000280565b8063c1ef303a14620004fa578063ca15c8731462000511578063cfbd48851462000528578063d5391393146200053f578063d547741f14620005495762000280565b8063a217fddf1162000117578063a217fddf14620004a1578063aa271e1a14620004ab578063af648c3d14620004c2578063b86677fe14620004d9578063b9022dc014620004e35762000280565b80639010d07c146200044857806391d14854146200045f57806394b1d2c014620004765780639711ac34146200048d5780639a9ba4da14620004975762000280565b806336568abe11620001f55780635f06d76111620001b35780635f06d76114620003d3578063611cf19b14620003ea5780636186943e146200040157806384bb0a6b14620004185780638dd9227614620004315762000280565b806336568abe146200036d57806338b7f4461462000384578063395c62e8146200038e5780634334614a14620003a55780634c9f938414620003bc5762000280565b8063248a9ca31162000243578063248a9ca3146200030557806324ea54f4146200032b578063261707fa1462000335578063282c51f3146200034c5780632f2ff15d14620003565762000280565b8063080bf57c14620002855780630900cc33146200029e5780630c68ba2114620002b557806310511f9614620002e4578063201175c214620002fb575b600080fd5b6200029c6200029636600462001496565b620005b9565b005b6200029c620002af36600462001410565b62000683565b620002cc620002c636600462001410565b620006d1565b604051620002db9190620015d1565b60405180910390f35b6200029c620002f536600462001410565b620006fa565b6200029c62000745565b6200031c620003163660046200147d565b620007ee565b604051620002db9190620015dc565b6200031c62000803565b6200029c6200034636600462001410565b6200081c565b6200031c62000858565b6200029c6200036736600462001496565b62000866565b6200029c6200037e36600462001496565b620008b6565b6200031c620008ff565b6200029c6200039f36600462001410565b6200090d565b620002cc620003b636600462001410565b62000949565b6200029c620003cd366004620014d2565b6200095d565b6200029c620003e436600462001410565b62000993565b6200029c620003fb36600462001410565b620009c8565b620002cc6200041236600462001410565b62000a3c565b6200042262000a50565b604051620002db91906200158a565b6200029c6200044236600462001410565b62000a5f565b6200042262000459366004620014d2565b62000a9b565b620002cc6200047036600462001496565b62000ac2565b6200029c6200048736600462001410565b62000ae2565b620002cc62000b1e565b6200042262000b2e565b6200031c62000b43565b620002cc620004bc36600462001410565b62000b48565b6200029c620004d336600462001410565b62000b5c565b6200042262000b98565b6200029c620004f436600462001410565b62000ba7565b6200029c6200050b36600462001410565b62000bdc565b6200031c620005223660046200147d565b62000c18565b6200029c6200053936600462001410565b62000c31565b6200031c62000c6d565b6200029c6200055a36600462001496565b62000c7b565b6200031c62000cbb565b6200029c62000cc9565b620002cc6200058536600462001410565b62000df2565b6200029c6200059c36600462001410565b62000e06565b6200029c620005b33660046200142e565b62000e42565b620005c433620006d1565b620005ec5760405162461bcd60e51b8152600401620005e39062001825565b60405180910390fd5b604051620005fa906200155c565b6040518091039020821415620006245760405162461bcd60e51b8152600401620005e3906200186a565b60405163d547741f60e01b8152309063d547741f906200064b9085908590600401620015e5565b600060405180830381600087803b1580156200066657600080fd5b505af11580156200067b573d6000803e3d6000fd5b505050505050565b6200068e3362000df2565b620006ad5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf906200152c565b60405180910390208262000c7b565b50565b6000620006f4604051620006e59062001543565b60405180910390208362000ac2565b92915050565b620007053362000df2565b620007245760405162461bcd60e51b8152600401620005e3906200163e565b620006ce60405162000736906200152c565b60405180910390208262000866565b600354600160a01b900460ff1615620007725760405162461bcd60e51b8152600401620005e39062001743565b6003546001600160a01b031633146200079f5760405162461bcd60e51b8152600401620005e39062001702565b6003805460ff60a01b1916600160a01b1790556040517f55728014a7cf4447d0a7e11503cf9ab1ca633624fa3150f8fe149b56e3c026fb90620007e4904290620015dc565b60405180910390a1565b60009081526020819052604090206002015490565b604051620008119062001543565b604051809103902081565b620008273362000df2565b620008465760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620007369062001573565b60405162000811906200152c565b60008281526020819052604090206002015462000887906200047062000fe6565b620008a65760405162461bcd60e51b8152600401620005e39062001683565b620008b2828262000fea565b5050565b620008c062000fe6565b6001600160a01b0316816001600160a01b031614620008f35760405162461bcd60e51b8152600401620005e390620018b6565b620008b282826200105e565b60405162000811906200155c565b620009183362000df2565b620009375760405162461bcd60e51b8152600401620005e3906200163e565b620006ce60405162000736906200155c565b6000620006f4604051620006e5906200152c565b620009683362000df2565b620009875760405162461bcd60e51b8152600401620005e3906200163e565b620008b28282620010d2565b6200099e3362000df2565b620009bd5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce8162001124565b620009d33362000df2565b620009f25760405162461bcd60e51b8152600401620005e3906200163e565b600380546001600160a01b0319166001600160a01b0383169081179091556040517f815cf7ef55cab2e0662e0739c044d60e9a897f882091d48baa1b0b30d28f8a3090600090a250565b6000620006f4604051620006e5906200150d565b6003546001600160a01b031681565b62000a6a3362000df2565b62000a895760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf906200150d565b600082815260208190526040812062000abb908363ffffffff6200117816565b9392505050565b600082815260208190526040812062000abb908363ffffffff6200118616565b62000aed3362000df2565b62000b0c5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620007369062001543565b600354600160a01b900460ff1681565b6001546201000090046001600160a01b031681565b600081565b6000620006f4604051620006e59062001573565b62000b673362000df2565b62000b865760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf9062001543565b6002546001600160a01b031681565b62000bb23362000df2565b62000bd15760405162461bcd60e51b8152600401620005e3906200163e565b620006ce816200119d565b62000be73362000df2565b62000c065760405162461bcd60e51b8152600401620005e3906200163e565b620006ce60405162000736906200150d565b6000818152602081905260408120620006f490620011e7565b62000c3c3362000df2565b62000c5b5760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf9062001573565b604051620008119062001573565b60008281526020819052604090206002015462000c9c906200047062000fe6565b620008f35760405162461bcd60e51b8152600401620005e39062001787565b60405162000811906200150d565b600154610100900460ff168062000ce5575062000ce5620011f4565b8062000cf4575060015460ff16155b62000d135760405162461bcd60e51b8152600401620005e390620017d7565b600154610100900460ff1615801562000d3e576001805460ff1961ff00199091166101001716811790555b62000d493362001207565b60003060405162000d5a90620013dc565b62000d6691906200158a565b604051809103906000f08015801562000d83573d6000803e3d6000fd5b50905062000d918162001124565b6000303360405162000da390620013ea565b62000db09291906200159e565b604051809103906000f08015801562000dcd573d6000803e3d6000fd5b50905062000ddb816200119d565b50508015620006ce576001805461ff001916905550565b6000620006f4604051620006e5906200155c565b62000e113362000df2565b62000e305760405162461bcd60e51b8152600401620005e3906200163e565b620006ce604051620006bf906200155c565b62000e4d3362000df2565b62000e6c5760405162461bcd60e51b8152600401620005e3906200163e565b6002546040516370a0823160e01b81526001600160a01b0390911690829082906370a082319062000ea29030906004016200158a565b60206040518083038186803b15801562000ebb57600080fd5b505afa15801562000ed0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ef69190620014f4565b101562000f175760405162461bcd60e51b8152600401620005e390620016d2565b60405163a9059cbb60e01b81526001600160a01b0382169063a9059cbb9062000f479086908690600401620015b8565b602060405180830381600087803b15801562000f6257600080fd5b505af115801562000f77573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f9d91906200145b565b50826001600160a01b03167ffd90a2bc2c0c3cf07693529b256c4173a944fe9f55c1984c09a10a1ad28c11648360405162000fd99190620015dc565b60405180910390a2505050565b3390565b60008281526020819052604090206200100a908263ffffffff6200122816565b15620008b2576200101a62000fe6565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020819052604090206200107e908263ffffffff6200123f16565b15620008b2576200108e62000fe6565b6001600160a01b0316816001600160a01b0316837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45050565b600082815260208190526040808220600201549051839285917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a460009182526020829052604090912060020155565b6001805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fb382b2a2d84e1d7542e0d58950e00d33ddc7a4b379a265768bf3e8640dde4ef190600090a250565b600062000abb838362001256565b600062000abb836001600160a01b0384166200129f565b600280546001600160a01b0319166001600160a01b0383169081179091556040517f9675664499c8d4f09c5268d1696ba833416ed56d870558fa7a722bb8aff5d90f90600090a250565b6000620006f482620012b7565b60006200120130620012bb565b15905090565b620006ce60405162001219906200155c565b604051809103902082620008a6565b600062000abb836001600160a01b038416620012c1565b600062000abb836001600160a01b03841662001310565b815460009082106200127c5760405162461bcd60e51b8152600401620005e390620015fc565b8260000182815481106200128c57fe5b9060005260206000200154905092915050565b60009081526001919091016020526040902054151590565b5490565b3b151590565b6000620012cf83836200129f565b6200130757508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620006f4565b506000620006f4565b60008181526001830160205260408120548015620013d157835460001980830191908101906000908790839081106200134557fe5b90600052602060002001549050808760000184815481106200136357fe5b6000918252602080832090910192909255828152600189810190925260409020908401905586548790806200139457fe5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050620006f4565b6000915050620006f4565b6122c4806200190683390190565b6121098062003bca83390190565b80356001600160a01b0381168114620006f457600080fd5b60006020828403121562001422578081fd5b62000abb8383620013f8565b6000806040838503121562001441578081fd5b6200144d8484620013f8565b946020939093013593505050565b6000602082840312156200146d578081fd5b8151801515811462000abb578182fd5b6000602082840312156200148f578081fd5b5035919050565b60008060408385031215620014a9578182fd5b8235915060208301356001600160a01b0381168114620014c7578182fd5b809150509250929050565b60008060408385031215620014e5578182fd5b50508035926020909101359150565b60006020828403121562001506578081fd5b5051919050565b725043565f434f4e54524f4c4c45525f524f4c4560681b815260130190565b6a4255524e45525f524f4c4560a81b8152600b0190565b6c475541524449414e5f524f4c4560981b8152600d0190565b6a474f5645524e5f524f4c4560a81b8152600b0190565b6a4d494e5445525f524f4c4560a81b8152600b0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b90815260200190565b9182526001600160a01b0316602082015260400190565b60208082526022908201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604082015261647360f01b606082015260800190565b60208082526025908201527f5065726d697373696f6e733a2043616c6c6572206973206e6f74206120676f7660408201526432b93737b960d91b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526e0818591b5a5b881d1bc819dc985b9d608a1b606082015260800190565b602080825260169082015275436f72653a204e6f7420656e6f75676820547269626560501b604082015260600190565b60208082526021908201527f436f72653a2043616c6c6572206973206e6f742047656e657369732047726f756040820152600760fc1b606082015260800190565b60208082526024908201527f436f72653a2047656e657369732047726f757020616c726561647920636f6d706040820152636c65746560e01b606082015260800190565b60208082526030908201527f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60408201526f2061646d696e20746f207265766f6b6560801b606082015260800190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526025908201527f5065726d697373696f6e733a2043616c6c6572206973206e6f74206120677561604082015264393234b0b760d91b606082015260800190565b6020808252602c908201527f5065726d697373696f6e733a20477561726469616e2063616e6e6f742072657660408201526b37b5b29033b7bb32b93737b960a11b606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560408201526e103937b632b9903337b91039b2b63360891b60608201526080019056fe60806040523480156200001157600080fd5b50604051620022c4380380620022c48339810160408190526200003491620002aa565b604080518082018252600781526611995a481554d160ca1b6020808301918252835180850190945260038085526246454960e81b91850191909152825185949262000080929162000208565b5080516200009690600490602084019062000208565b5050600580546001600160a01b039093166201000002610100600160b01b031960ff199094166012179390931692909217909155506040514690620000db90620002da565b604051908190039020620000f76001600160e01b036200016d16565b805160209182012060408051808201825260018152603160f81b90840152516200014993927fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc691869130910162000344565b60405160208183030381529060405280519060200120600781905550505062000370565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620001fd5780601f10620001d157610100808354040283529160200191620001fd565b820191906000526020600020905b815481529060010190602001808311620001df57829003601f168201915b505050505090505b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200024b57805160ff19168380011785556200027b565b828001600101855582156200027b579182015b828111156200027b5782518255916020019190600101906200025e565b50620002899291506200028d565b5090565b6200020591905b8082111562000289576000815560010162000294565b600060208284031215620002bc578081fd5b81516001600160a01b0381168114620002d3578182fd5b9392505050565b7f454950373132446f6d61696e28737472696e67206e616d652c737472696e672081527f76657273696f6e2c75696e7432353620636861696e49642c6164647265737320602082015271766572696679696e67436f6e74726163742960701b604082015260520190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b611f4480620003806000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806379cc679011610104578063a9059cbb116100a2578063bc701e7511610071578063bc701e751461036c578063d505accf1461037f578063dd62ed3e14610392578063f2f4eb26146103a5576101cf565b8063a9059cbb14610336578063b490589714610349578063b6232c9914610351578063b86677fe14610364576101cf565b80638456cb59116100de5780638456cb59146102fe57806395d89b41146103065780639a9ba4da1461030e578063a457c2d714610323576101cf565b806379cc6790146102c55780637ecebe00146102d857806380009630146102eb576101cf565b8063395093511161017157806342966c681161014b57806342966c681461028f5780635c975abb146102a25780636b6dff0a146102aa57806370a08231146102b2576101cf565b8063395093511461025f5780633f4ba83a1461027257806340c10f191461027c576101cf565b806323b872dd116101ad57806323b872dd1461022757806330adf81f1461023a578063313ce567146102425780633644e51514610257576101cf565b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610212575b600080fd5b6101dc6103ad565b6040516101e99190611a65565b60405180910390f35b61020561020036600461190f565b610443565b6040516101e991906119ff565b61021a610460565b6040516101e99190611a0a565b61020561023536600461185a565b610466565b61021a6104f3565b61024a610517565b6040516101e99190611e56565b61021a610520565b61020561026d36600461190f565b610526565b61027a61057a565b005b61027a61028a36600461190f565b6106b9565b61027a61029d366004611976565b6107d8565b610205610820565b61021a61082e565b61021a6102c0366004611806565b6108b8565b61027a6102d336600461190f565b6108d3565b61021a6102e6366004611806565b6109e6565b61027a6102f9366004611806565b6109f8565b61027a610aed565b6101dc610c21565b610316610c82565b6040516101e991906119c1565b61020561033136600461190f565b610d0a565b61020561034436600461190f565b610d78565b61021a610d8c565b61027a61035f366004611822565b610d96565b610316610e8e565b61031661037a366004611806565b610ede565b61027a61038d36600461189a565b610ef9565b61021a6103a0366004611822565b611068565b610316611093565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104395780601f1061040e57610100808354040283529160200191610439565b820191906000526020600020905b81548152906001019060200180831161041c57829003601f168201915b5050505050905090565b60006104576104506110a8565b84846110ac565b50600192915050565b60025490565b6000610473848484611160565b6104e98461047f6110a8565b6104e485604051806060016040528060288152602001611ec2602891396001600160a01b038a166000908152600160205260408120906104bd6110a8565b6001600160a01b03168152602081019190915260400160002054919063ffffffff61117b16565b6110ac565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b60006104576105336110a8565b846104e485600160006105446110a8565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6111a716565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b8906105af9033906004016119c1565b60206040518083038186803b1580156105c757600080fd5b505afa1580156105db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105ff919061193a565b8061068a5750600554604051630c68ba2160e01b8152620100009091046001600160a01b031690630c68ba219061063a9033906004016119c1565b60206040518083038186803b15801561065257600080fd5b505afa158015610666573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061068a919061193a565b6106af5760405162461bcd60e51b81526004016106a690611ba2565b60405180910390fd5b6106b76111d3565b565b6005546040516355138f0d60e11b8152620100009091046001600160a01b03169063aa271e1a906106ee9033906004016119c1565b60206040518083038186803b15801561070657600080fd5b505afa15801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e919061193a565b61075a5760405162461bcd60e51b81526004016106a690611b29565b610762610820565b1561077f5760405162461bcd60e51b81526004016106a690611cba565b6107898282611242565b336001600160a01b0316826001600160a01b03167fb1233017d63154bc561d57c16f7b6a55e2e1acd7fcac94045a9f35fb31a850ca836040516107cc9190611a0a565b60405180910390a35050565b6107e181611302565b604051339081907f227fb4b3aae8331f21af5167739c291fefe3afd3c2e08cea44f499e564f486ef90610815908590611a0a565b60405180910390a350565b600554610100900460ff1690565b6000610838610e8e565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161086391906119c1565b60206040518083038186803b15801561087b57600080fd5b505afa15801561088f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b3919061198e565b905090565b6001600160a01b031660009081526020819052604090205490565b60055460405163219a30a560e11b8152620100009091046001600160a01b031690634334614a906109089033906004016119c1565b60206040518083038186803b15801561092057600080fd5b505afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610958919061193a565b6109745760405162461bcd60e51b81526004016106a690611c26565b61097c610820565b156109995760405162461bcd60e51b81526004016106a690611cba565b6109a38282611316565b336001600160a01b0316826001600160a01b03167f227fb4b3aae8331f21af5167739c291fefe3afd3c2e08cea44f499e564f486ef836040516107cc9190611a0a565b60086020526000908152604090205481565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b890610a2d9033906004016119c1565b60206040518083038186803b158015610a4557600080fd5b505afa158015610a59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7d919061193a565b610a995760405162461bcd60e51b81526004016106a690611dde565b6005805462010000600160b01b031916620100006001600160a01b038416908102919091179091556040517fad9400e618eb1344fde53db22397a1b82c765527ecbba3a5c86bcac15090828b90600090a250565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b890610b229033906004016119c1565b60206040518083038186803b158015610b3a57600080fd5b505afa158015610b4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b72919061193a565b80610bfd5750600554604051630c68ba2160e01b8152620100009091046001600160a01b031690630c68ba2190610bad9033906004016119c1565b60206040518083038186803b158015610bc557600080fd5b505afa158015610bd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfd919061193a565b610c195760405162461bcd60e51b81526004016106a690611ba2565b6106b76113f8565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104395780601f1061040e57610100808354040283529160200191610439565b6000600560029054906101000a90046001600160a01b03166001600160a01b0316639a9ba4da6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd257600080fd5b505afa158015610ce6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b3919061195a565b6000610457610d176110a8565b846104e485604051806060016040528060258152602001611eea6025913960016000610d416110a8565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff61117b16565b6000610457610d856110a8565b8484611160565b6000610838610c82565b600554604051631c86b03760e31b8152620100009091046001600160a01b03169063e43581b890610dcb9033906004016119c1565b60206040518083038186803b158015610de357600080fd5b505afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b919061193a565b610e375760405162461bcd60e51b81526004016106a690611dde565b6001600160a01b0382811660008181526006602052604080822080546001600160a01b0319169486169485179055517f88bb9e877881758e827c849b8a0e38421bd5ff916f4ef79ed65aec74cc04a5da9190a35050565b6000600560029054906101000a90046001600160a01b03166001600160a01b031663b86677fe6040518163ffffffff1660e01b815260040160206040518083038186803b158015610cd257600080fd5b6006602052600090815260409020546001600160a01b031681565b42841015610f195760405162461bcd60e51b81526004016106a690611c5d565b6007546001600160a01b03881660009081526008602090815260408083208054600181019091559051929392610f7a927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928d928d928d92918d9101611a13565b60405160208183030381529060405280519060200120604051602001610fa19291906119a6565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051610fde9493929190611a47565b6020604051602081039080840390855afa158015611000573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906110365750886001600160a01b0316816001600160a01b0316145b6110525760405162461bcd60e51b81526004016106a690611ce4565b61105d8989896110ac565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546201000090046001600160a01b031690565b3390565b6001600160a01b0383166110d25760405162461bcd60e51b81526004016106a690611d9a565b6001600160a01b0382166110f85760405162461bcd60e51b81526004016106a690611b60565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611153908590611a0a565b60405180910390a3505050565b61116b838383611455565b611176838383611576565b505050565b6000818484111561119f5760405162461bcd60e51b81526004016106a69190611a65565b505050900390565b6000828201838110156111cc5760405162461bcd60e51b81526004016106a690611bef565b9392505050565b6111db610820565b6111f75760405162461bcd60e51b81526004016106a690611afb565b6005805461ff00191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61122b6110a8565b60405161123891906119c1565b60405180910390a1565b6001600160a01b0382166112685760405162461bcd60e51b81526004016106a690611e1f565b61127460008383611176565b600254611287908263ffffffff6111a716565b6002556001600160a01b0382166000908152602081905260409020546112b3908263ffffffff6111a716565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906107cc908590611a0a565b61131361130d6110a8565b82611316565b50565b6001600160a01b03821661133c5760405162461bcd60e51b81526004016106a690611d14565b61134882600083611176565b61138b81604051806060016040528060228152602001611e7a602291396001600160a01b038516600090815260208190526040902054919063ffffffff61117b16565b6001600160a01b0383166000908152602081905260409020556002546113b7908263ffffffff6117de16565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906107cc908590611a0a565b611400610820565b1561141d5760405162461bcd60e51b81526004016106a690611cba565b6005805461ff0019166101001790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861122b6110a8565b6001600160a01b03831661147b5760405162461bcd60e51b81526004016106a690611d55565b6001600160a01b0382166114a15760405162461bcd60e51b81526004016106a690611ab8565b6114ac838383611176565b6114ef81604051806060016040528060268152602001611e9c602691396001600160a01b038616600090815260208190526040902054919063ffffffff61117b16565b6001600160a01b038085166000908152602081905260408082209390935590841681522054611524908263ffffffff6111a716565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611153908590611a0a565b6001600160a01b038084166000908152600660205260409020541680156115fc57604051636e22230d60e01b81526001600160a01b03821690636e22230d906115c99087908790339088906004016119d5565b600060405180830381600087803b1580156115e357600080fd5b505af11580156115f7573d6000803e3d6000fd5b505050505b6001600160a01b0380841660009081526006602052604090205416801561168257604051636e22230d60e01b81526001600160a01b03821690636e22230d9061164f9088908890339089906004016119d5565b600060405180830381600087803b15801561166957600080fd5b505af115801561167d573d6000803e3d6000fd5b505050505b336000818152600660205260409020546001600160a01b0390811691908716148015906116b85750336001600160a01b03861614155b80156116cc57506001600160a01b03811615155b1561173657604051636e22230d60e01b81526001600160a01b03821690636e22230d90611703908990899033908a906004016119d5565b600060405180830381600087803b15801561171d57600080fd5b505af1158015611731573d6000803e3d6000fd5b505050505b6000805260066020527f54cdd369e4e8a8515e52ca72ec816c2101831ad1f18bf44102ed171459c9b4f8546001600160a01b031680156117d557604051636e22230d60e01b81526001600160a01b03821690636e22230d906117a2908a908a9033908b906004016119d5565b600060405180830381600087803b1580156117bc57600080fd5b505af11580156117d0573d6000803e3d6000fd5b505050505b50505050505050565b6000828211156118005760405162461bcd60e51b81526004016106a690611c83565b50900390565b600060208284031215611817578081fd5b81356111cc81611e64565b60008060408385031215611834578081fd5b823561183f81611e64565b9150602083013561184f81611e64565b809150509250929050565b60008060006060848603121561186e578081fd5b833561187981611e64565b9250602084013561188981611e64565b929592945050506040919091013590565b600080600080600080600060e0888a0312156118b4578283fd5b87356118bf81611e64565b965060208801356118cf81611e64565b95506040880135945060608801359350608088013560ff811681146118f2578384fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611921578182fd5b823561192c81611e64565b946020939093013593505050565b60006020828403121561194b578081fd5b815180151581146111cc578182fd5b60006020828403121561196b578081fd5b81516111cc81611e64565b600060208284031215611987578081fd5b5035919050565b60006020828403121561199f578081fd5b5051919050565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611a9157858101830151858201604001528201611a75565b81811115611aa25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252601f908201527f436f72655265663a2043616c6c6572206973206e6f742061206d696e74657200604082015260600190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252602d908201527f436f72655265663a2043616c6c6572206973206e6f742061206775617264696160408201526c371037b91033b7bb32b93737b960991b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252601f908201527f436f72655265663a2043616c6c6572206973206e6f742061206275726e657200604082015260600190565b6020808252600c908201526b11995a4e881156141254915160a21b604082015260600190565b6020808252601e908201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601690820152754665693a20494e56414c49445f5349474e415455524560501b604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526021908201527f436f72655265663a2043616c6c6572206973206e6f74206120676f7665726e6f6040820152603960f91b606082015260800190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b60ff91909116815260200190565b6001600160a01b038116811461131357600080fdfe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122050e890c3b2545b3935ee59eb10f843e1ae9421c4c123c2534bea07e27e8ff0f164736f6c6343000606003360806040526b033b2e3c9fd0803ce80000006000553480156200002157600080fd5b506040516200210938038062002109833981016040819052620000449162000121565b600080546001600160a01b0384168083526003602052604080842080546001600160601b0319166001600160601b0390941693909317909255825491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000b2919062000179565b60405180910390a3600180546001600160a01b0319166001600160a01b0383811691909117918290556040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69262000111926000929116906200015f565b60405180910390a150506200019b565b6000806040838503121562000134578182fd5b8251620001418162000182565b6020840151909250620001548162000182565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6001600160a01b03811681146200019857600080fd5b50565b611f5e80620001ab6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063c3cda5201161007c578063c3cda520146102cc578063d505accf146102df578063dd62ed3e146102f2578063e7a324dc14610305578063f1127ed81461030d578063fca3b5aa1461032e57610158565b806370a0823114610258578063782d6fe11461026b5780637ecebe001461028b57806395d89b411461029e578063a9059cbb146102a6578063b4b5ea57146102b957610158565b806330adf81f1161011557806330adf81f146101e0578063313ce567146101e857806340c10f19146101fd578063587cde1e146102125780635c19a95c146102255780636fcfff451461023857610158565b806306fdde031461015d578063075461721461017b578063095ea7b31461019057806318160ddd146101b057806320606b70146101c557806323b872dd146101cd575b600080fd5b610165610341565b6040516101729190611b78565b60405180910390f35b610183610362565b6040516101729190611a9c565b6101a361019e3660046118ab565b610371565b6040516101729190611aca565b6101b861043b565b6040516101729190611ad5565b6101b8610441565b6101a36101db3660046117ff565b610458565b6101b86105a7565b6101f06105b3565b6040516101729190611e1c565b61021061020b3660046118ab565b6105b8565b005b6101836102203660046117b0565b610794565b6102106102333660046117b0565b6107af565b61024b6102463660046117b0565b6107bc565b6040516101729190611dec565b6101b86102663660046117b0565b6107d4565b61027e6102793660046118ab565b6107f8565b6040516101729190611e2a565b6101b86102993660046117b0565b610a06565b610165610a18565b6101a36102b43660046118ab565b610a39565b61027e6102c73660046117b0565b610a80565b6102106102da3660046118d5565b610af1565b6102106102ed36600461183f565b610cd8565b6101b86103003660046117cb565b610fcc565b6101b8611000565b61032061031b36600461192e565b61100c565b604051610172929190611dfd565b61021061033c3660046117b0565b611041565b60405180604001604052806005815260200164547269626560d81b81525081565b6001546001600160a01b031681565b60008060001983141561038757506000196103b7565b6103b4836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b3360008181526002602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b03861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610427908590611e2a565b60405180910390a360019150505b92915050565b60005481565b60405161044d906119f2565b604051809103902081565b6001600160a01b038316600090815260026020908152604080832033808552908352818420548251808401909352601d8352600080516020611f0983398151915293830193909352916001600160601b03169083906104b89086906110d4565b9050866001600160a01b0316836001600160a01b0316141580156104e557506001600160601b0382811614155b1561058f57600061050f8383604051806060016040528060308152602001611eb360309139611103565b6001600160a01b038981166000818152600260209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b0386161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610585908590611e2a565b60405180910390a3505b61059a878783611142565b5060019695505050505050565b60405161044d90611988565b601281565b6001546001600160a01b031633146105eb5760405162461bcd60e51b81526004016105e290611bcb565b60405180910390fd5b6001600160a01b0382166106115760405162461bcd60e51b81526004016105e290611c02565b6000610640826040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90506000610668600054604051806060016040528060228152602001611e91602291396110d4565b905061068d8183604051806060016040528060228152602001611e9160229139611305565b6001600160601b0390811660009081556001600160a01b0386168152600360209081526040918290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526106f79216908490611305565b6001600160a01b03851660008181526003602052604080822080546001600160601b0319166001600160601b03959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610761908690611e2a565b60405180910390a36001600160a01b0380851660009081526004602052604081205461078e921684611341565b50505050565b6004602052600090815260409020546001600160a01b031681565b6107b9338261150d565b50565b60066020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600360205260409020546001600160601b031690565b60004382106108195760405162461bcd60e51b81526004016105e290611db5565b6001600160a01b03831660009081526006602052604090205463ffffffff1680610847576000915050610435565b6001600160a01b038416600090815260056020908152604080832063ffffffff6000198601811685529252909120541683106108c3576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610435565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff168310156108fe576000915050610435565b600060001982015b8163ffffffff168163ffffffff1611156109c157600282820363ffffffff16048103610930611771565b506001600160a01b038716600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561099c576020015194506104359350505050565b805163ffffffff168711156109b3578193506109ba565b6001820392505b5050610906565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60076020526000908152604090205481565b60405180604001604052806005815260200164545249424560d81b81525081565b600080610a69836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b9050610a76338583611142565b5060019392505050565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610aab576000610aea565b6001600160a01b0383166000908152600560209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b9392505050565b6000604051610aff906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610b4e611591565b30604051602001610b629493929190611b36565b6040516020818303038152906040528051906020012090506000604051610b8890611a4d565b604051908190038120610ba3918a908a908a90602001611b12565b60405160208183030381529060405280519060200120905060008282604051602001610bd092919061196d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610c0d9493929190611b5a565b6020604051602081039080840390855afa158015610c2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c625760405162461bcd60e51b81526004016105e290611cfc565b6001600160a01b03811660009081526007602052604090208054600181019091558914610ca15760405162461bcd60e51b81526004016105e290611d33565b87421115610cc15760405162461bcd60e51b81526004016105e290611c4c565b610ccb818b61150d565b505050505b505050505050565b6000600019861415610ced5750600019610d1d565b610d1a866040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b6000604051610d2b906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610d7a611591565b30604051602001610d8e9493929190611b36565b6040516020818303038152906040528051906020012090506000604051610db490611988565b604080519182900382206001600160a01b038d16600090815260076020908152929020805460018101909155610df69391928e928e928e9290918e9101611ade565b60405160208183030381529060405280519060200120905060008282604051602001610e2392919061196d565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610e609493929190611b5a565b6020604051602081039080840390855afa158015610e82573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610eb55760405162461bcd60e51b81526004016105e290611cfc565b8b6001600160a01b0316816001600160a01b031614610ee65760405162461bcd60e51b81526004016105e290611ccf565b88421115610f065760405162461bcd60e51b81526004016105e290611c4c565b84600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051610fb69190611e2a565b60405180910390a3505050505050505050505050565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b60405161044d90611a4d565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6001546001600160a01b0316331461106b5760405162461bcd60e51b81526004016105e290611d61565b6001546040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6916110aa916001600160a01b03909116908490611ab0565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600081600160601b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b509192915050565b6000836001600160601b0316836001600160601b03161115829061113a5760405162461bcd60e51b81526004016105e29190611b78565b505050900390565b6001600160a01b0383166111685760405162461bcd60e51b81526004016105e290611c83565b6001600160a01b03821661118e5760405162461bcd60e51b81526004016105e290611c02565b6001600160a01b0383166000908152600360209081526040918290205482516060810190935260268084526111d9936001600160601b039092169285929190611ee390830139611103565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526112599216908390611305565b6001600160a01b038381166000818152600360205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112c6908590611e2a565b60405180910390a36001600160a01b0380841660009081526004602052604080822054858416835291205461130092918216911683611341565b505050565b6000838301826001600160601b0380871690831610156113385760405162461bcd60e51b81526004016105e29190611b78565b50949350505050565b816001600160a01b0316836001600160a01b03161415801561136c57506000816001600160601b0316115b15611300576001600160a01b03831615611441576001600160a01b03831660009081526006602052604081205463ffffffff1690816113ac5760006113eb565b6001600160a01b0385166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061142f82856040518060400160405280601d81526020017f54726962653a20766f746520616d6f756e7420756e646572666c6f7773000000815250611103565b905061143d86848484611595565b5050505b6001600160a01b03821615611300576001600160a01b03821660009081526006602052604081205463ffffffff16908161147c5760006114bb565b6001600160a01b0384166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006114ff82856040518060400160405280601c81526020017f54726962653a20766f746520616d6f756e74206f766572666c6f777300000000815250611305565b9050610cd085848484611595565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461078e828483611341565b4690565b60006115b943604051806060016040528060238152602001611e6e6023913961174a565b905060008463ffffffff1611801561160257506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611661576001600160a01b0385166000908152600560209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611700565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600583528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600690935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161173b929190611e3e565b60405180910390a25050505050565b600081600160201b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b604080518082019091526000808252602082015290565b80356001600160a01b038116811461043557600080fd5b803560ff8116811461043557600080fd5b6000602082840312156117c1578081fd5b610aea8383611788565b600080604083850312156117dd578081fd5b6117e78484611788565b91506117f68460208501611788565b90509250929050565b600080600060608486031215611813578081fd5b833561181e81611e58565b9250602084013561182e81611e58565b929592945050506040919091013590565b600080600080600080600060e0888a031215611859578283fd5b6118638989611788565b96506118728960208a01611788565b9550604088013594506060880135935061188f8960808a0161179f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156118bd578182fd5b6118c78484611788565b946020939093013593505050565b60008060008060008060c087890312156118ed578182fd5b6118f78888611788565b95506020870135945060408701359350611914886060890161179f565b92506080870135915060a087013590509295509295509295565b60008060408385031215611940578182fd5b61194a8484611788565b9150602083013563ffffffff81168114611962578182fd5b809150509250929050565b61190160f01b81526002810192909252602282015260420190565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520190565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611ba457858101830151858201604001528201611b88565b81811115611bb55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206d696e7400604082015260600190565b6020808252602a908201527f54726962653a2063616e6e6f74207472616e7366657220746f20746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526018908201527f54726962653a207369676e617475726520657870697265640000000000000000604082015260600190565b6020808252602c908201527f54726962653a2063616e6e6f74207472616e736665722066726f6d207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b602080825260139082015272151c9a58994e881d5b985d5d1a1bdc9a5e9959606a1b604082015260600190565b60208082526018908201527f54726962653a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526014908201527354726962653a20696e76616c6964206e6f6e636560601b604082015260600190565b60208082526034908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206368616e676040820152736520746865206d696e746572206164647265737360601b606082015260800190565b60208082526019908201527f54726962653a206e6f74207965742064657465726d696e656400000000000000604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160601b0316602082015260400190565b60ff91909116815260200190565b6001600160601b0391909116815260200190565b6001600160601b0392831681529116602082015260400190565b6001600160a01b03811681146107b957600080fdfe54726962653a20626c6f636b206e756d6265722065786365656473203332206269747354726962653a20746f74616c537570706c792065786365656473203936206269747354726962653a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636554726962653a207472616e7366657220616d6f756e7420657863656564732062616c616e636554726962653a20616d6f756e7420657863656564732039362062697473000000a26469706673582212204b5ab84c8ee5befcd5fba2745834ef385b0d07beb1f852bc25562eb10a137ac064736f6c63430006060033a2646970667358221220062ff29caa9fb83e030acb922feb057204cd2a5c38816a82f996dd0f7178683c64736f6c63430006060033" -} \ No newline at end of file diff --git a/external/abi/fei/FeiDAO.json b/external/abi/fei/FeiDAO.json deleted file mode 100644 index 6a60b74a2..000000000 --- a/external/abi/fei/FeiDAO.json +++ /dev/null @@ -1,1143 +0,0 @@ -{ - "contractName": "FeiDAO", - "abi": [ - { - "inputs": [ - { - "internalType": "contract ERC20VotesComp", - "name": "tribe", - "type": "address" - }, - { - "internalType": "contract ICompoundTimelock", - "name": "timelock", - "type": "address" - }, - { - "internalType": "address", - "name": "guardian", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "ProposalCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "indexed": false, - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "indexed": false, - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "indexed": false, - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "indexed": false, - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "startBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "endBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "name": "ProposalCreated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "ProposalExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "ProposalQueued", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldProposalThreshold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newProposalThreshold", - "type": "uint256" - } - ], - "name": "ProposalThresholdUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldQuorum", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newQuorum", - "type": "uint256" - } - ], - "name": "QuorumUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [], - "name": "Rollback", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "RollbackQueued", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "oldTimelock", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newTimelock", - "type": "address" - } - ], - "name": "TimelockChange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "voter", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "weight", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "VoteCast", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldVotingDelay", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newVotingDelay", - "type": "uint256" - } - ], - "name": "VotingDelayUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldVotingPeriod", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newVotingPeriod", - "type": "uint256" - } - ], - "name": "VotingPeriodUpdated", - "type": "event" - }, - { - "inputs": [], - "name": "BACKUP_GOVERNOR", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "BALLOT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "COUNTING_MODE", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "ROLLBACK_DEADLINE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "__acceptAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "__executeRollback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "__rollback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "cancel", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - } - ], - "name": "castVote", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "castVoteBySig", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "string", - "name": "reason", - "type": "string" - } - ], - "name": "castVoteWithReason", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "execute", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "execute", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "getActions", - "outputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "voter", - "type": "address" - } - ], - "name": "getReceipt", - "outputs": [ - { - "components": [ - { - "internalType": "bool", - "name": "hasVoted", - "type": "bool" - }, - { - "internalType": "uint8", - "name": "support", - "type": "uint8" - }, - { - "internalType": "uint96", - "name": "votes", - "type": "uint96" - } - ], - "internalType": "struct IGovernorCompatibilityBravo.Receipt", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "getVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasVoted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "hashProposal", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalDeadline", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalEta", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposalSnapshot", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proposalThreshold", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "proposals", - "outputs": [ - { - "internalType": "uint256", - "name": "id", - "type": "uint256" - }, - { - "internalType": "address", - "name": "proposer", - "type": "address" - }, - { - "internalType": "uint256", - "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": "bool", - "name": "canceled", - "type": "bool" - }, - { - "internalType": "bool", - "name": "executed", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "name": "propose", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "string", - "name": "description", - "type": "string" - } - ], - "name": "propose", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "bytes[]", - "name": "calldatas", - "type": "bytes[]" - }, - { - "internalType": "bytes32", - "name": "descriptionHash", - "type": "bytes32" - } - ], - "name": "queue", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "queue", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "name": "quorum", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "quorumVotes", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newProposalThreshold", - "type": "uint256" - } - ], - "name": "setProposalThreshold", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newQuorum", - "type": "uint256" - } - ], - "name": "setQuorum", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newVotingDelay", - "type": "uint256" - } - ], - "name": "setVotingDelay", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newVotingPeriod", - "type": "uint256" - } - ], - "name": "setVotingPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "proposalId", - "type": "uint256" - } - ], - "name": "state", - "outputs": [ - { - "internalType": "enum IGovernor.ProposalState", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "timelock", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "token", - "outputs": [ - { - "internalType": "contract ERC20VotesComp", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract ICompoundTimelock", - "name": "newTimelock", - "type": "address" - } - ], - "name": "updateTimelock", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "version", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "votingDelay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "votingPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "61016060405260016005556132c86006556a14adf4b7320334b90000006007556a02116545850052128000006008553480156200003b57600080fd5b5060405162004a7838038062004a788339810160408190526200005e91620002be565b8183604051806040016040528060078152602001664665692044414f60c81b81525080620000916200017b60201b60201c565b815160208084019190912082518383012060e08290526101008190524660a0818152604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81880181905281830187905260608201869052608082019490945230818401528151808203909301835260c00190528051940193909320919290916080523060c0526101205250508251620001379250600091506020840190620001ff565b50506001600160a01b031661014052620001518162000196565b50600980546001600160a01b0319166001600160a01b0392909216919091179055506200034f9050565b6040805180820190915260018152603160f81b602082015290565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b8280546200020d9062000312565b90600052602060002090601f0160209004810192826200023157600085556200027c565b82601f106200024c57805160ff19168380011785556200027c565b828001600101855582156200027c579182015b828111156200027c5782518255916020019190600101906200025f565b506200028a9291506200028e565b5090565b5b808211156200028a57600081556001016200028f565b6001600160a01b0381168114620002bb57600080fd5b50565b600080600060608486031215620002d457600080fd5b8351620002e181620002a5565b6020850151909350620002f481620002a5565b60408501519092506200030781620002a5565b809150509250925092565b600181811c908216806200032757607f821691505b602082108114156200034957634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a05160c05160e0516101005161012051610140516146c7620003b16000396000818161090001526127cf01526000612a8a01526000612ad901526000612ab401526000612a0d01526000612a3701526000612a6101526146c76000f3fe6080604052600436106102555760003560e01c80637d5e81e211610139578063db90d48d116100b6578063ea0217cf1161007a578063ea0217cf1461086c578063eb9019d41461088c578063ece40cc1146108ac578063f8ce560a146108cc578063fc0c546a146108ee578063fe0d94c11461092257600080fd5b8063db90d48d146106e0578063dd4e2ba514610708578063ddf0b0091461074e578063deaaa7cc1461076e578063e23a9a52146107a257600080fd5b8063c01f9e37116100fd578063c01f9e371461062e578063c1ba4e591461064e578063c59057e41461066e578063d33219b41461068e578063da95691a146106c057600080fd5b80637d5e81e2146105a4578063a890c910146105c4578063ab58fb8e146105e4578063b58131b014610604578063b9a619611461061957600080fd5b8063328dd982116101d2578063438596321161019657806343859632146104b057806354fd4d50146104fa57806356781388146105245780636f8dd33d1461054457806370b0f660146105645780637b3c71d31461058457600080fd5b8063328dd982146103fe5780633932abb11461042e5780633bccf4fd146104435780633e4f49e61461046357806340e58ee51461049057600080fd5b8063148e946d11610219578063148e946d14610381578063160cbed71461039657806324bc1a64146103b65780632656227d146103cb5780632d63f693146103de57600080fd5b8063013cf08b1461027d57806301ffc9a7146102f857806302a251a31461032857806306fdde031461034757806310817f221461036957600080fd5b366102785730610263610935565b6001600160a01b03161461027657600080fd5b005b600080fd5b34801561028957600080fd5b5061029d6102983660046139e1565b61094e565b604080519a8b526001600160a01b0390991660208b0152978901969096526060880194909452608087019290925260a086015260c085015260e084015215156101008301521515610120820152610140015b60405180910390f35b34801561030457600080fd5b506103186103133660046139fa565b6109f7565b60405190151581526020016102ef565b34801561033457600080fd5b506006545b6040519081526020016102ef565b34801561035357600080fd5b5061035c610a08565b6040516102ef9190613a7c565b34801561037557600080fd5b5061033963617f2e0081565b34801561038d57600080fd5b50610276610a9a565b3480156103a257600080fd5b506103396103b1366004613cd0565b610c30565b3480156103c257600080fd5b50610339610faa565b6103396103d9366004613cd0565b610fba565b3480156103ea57600080fd5b506103396103f93660046139e1565b61108d565b34801561040a57600080fd5b5061041e6104193660046139e1565b6110c4565b6040516102ef9493929190613e28565b34801561043a57600080fd5b50600554610339565b34801561044f57600080fd5b5061033961045e366004613e8b565b611355565b34801561046f57600080fd5b5061048361047e3660046139e1565b6113e9565b6040516102ef9190613eef565b34801561049c57600080fd5b506102766104ab3660046139e1565b6113f4565b3480156104bc57600080fd5b506103186104cb366004613f17565b60008281526002602090815260408083206001600160a01b038516845260080190915290205460ff1692915050565b34801561050657600080fd5b506040805180820190915260018152603160f81b602082015261035c565b34801561053057600080fd5b5061033961053f366004613f47565b611707565b34801561055057600080fd5b5061027661055f3660046139e1565b611730565b34801561057057600080fd5b5061027661057f3660046139e1565b6118f7565b34801561059057600080fd5b5061033961059f366004613f73565b61196d565b3480156105b057600080fd5b506103396105bf366004614019565b6119bf565b3480156105d057600080fd5b506102766105df3660046140c5565b6119d6565b3480156105f057600080fd5b506103396105ff3660046139e1565b611a1a565b34801561061057600080fd5b50600854610339565b34801561062557600080fd5b50610276611a46565b34801561063a57600080fd5b506103396106493660046139e1565b611ab0565b34801561065a57600080fd5b506102766106693660046139e1565b611adf565b34801561067a57600080fd5b50610339610689366004613cd0565b611b55565b34801561069a57600080fd5b506003546001600160a01b03165b6040516001600160a01b0390911681526020016102ef565b3480156106cc57600080fd5b506103396106db366004614161565b611b8f565b3480156106ec57600080fd5b506106a8734c895973334af8e06fd6da4f723ac24a5f259e6b81565b34801561071457600080fd5b5060408051808201909152601a81527f737570706f72743d627261766f2671756f72756d3d627261766f000000000000602082015261035c565b34801561075a57600080fd5b506102766107693660046139e1565b611bb4565b34801561077a57600080fd5b506103397f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f81565b3480156107ae57600080fd5b5061083c6107bd366004613f17565b60408051606081018252600080825260208201819052918101919091525060009182526002602090815260408084206001600160a01b0393909316845260089092018152918190208151606081018352905460ff8082161515835261010082041693820193909352620100009092046001600160601b03169082015290565b6040805182511515815260208084015160ff1690820152918101516001600160601b0316908201526060016102ef565b34801561087857600080fd5b506102766108873660046139e1565b611e22565b34801561089857600080fd5b506103396108a7366004614232565b611e98565b3480156108b857600080fd5b506102766108c73660046139e1565b611eab565b3480156108d857600080fd5b506103396108e73660046139e1565b5060075490565b3480156108fa57600080fd5b506106a87f000000000000000000000000000000000000000000000000000000000000000081565b6102766109303660046139e1565b611f21565b60006109496003546001600160a01b031690565b905090565b80600080808080808080806109628a611a1a565b975061096d8b61108d565b96506109788b611ab0565b60008c815260026020526040812080546005820154600683015460078401546001600160a01b039093169e50949a5098509296509194506109b88d6113e9565b905060028160078111156109ce576109ce613ed9565b14935060078160078111156109e5576109e5613ed9565b14925050509193959799509193959799565b6000610a028261218f565b92915050565b606060008054610a179061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a439061425e565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b5050505050905090565b42600a541115610ae45760405162461bcd60e51b815260206004820152601060248201526f2332b4a220a79d103a37b79039b7b7b760811b60448201526064015b60405180910390fd5b6009546001600160a01b031615610b305760405162461bcd60e51b815260206004820152601060248201526f46656944414f3a206e6f20717565756560801b6044820152606401610adb565b6000610b446003546001600160a01b031690565b9050806001600160a01b0316630825f38f610b676003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b60208201526000910160408051601f1981840301815290829052600a546001600160e01b031960e087901b168352610bbc949392600401614293565b6000604051808303816000875af1158015610bdb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c0391908101906142ff565b506040517fe7058e1559765746b4820bddac308b97653890ba0be3b171acd5218899b19b2690600090a150565b600080610c3f86868686611b55565b90506004610c4c826113e9565b6007811115610c5d57610c5d613ed9565b14610c7a5760405162461bcd60e51b8152600401610adb9061436c565b60035460408051630d48571f60e31b815290516000926001600160a01b031691636a42b8f89160048083019260209291908290030181865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce891906143ad565b610cf290426143dc565b9050610d14610d00826121b4565b600084815260046020526040902090612220565b60005b8751811015610f655760035488516001600160a01b039091169063f2b06537908a9084908110610d4957610d496143f4565b6020026020010151898481518110610d6357610d636143f4565b6020026020010151898581518110610d7d57610d7d6143f4565b602002602001015186604051602001610d99949392919061440a565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401610dcd91815260200190565b602060405180830381865afa158015610dea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0e919061443f565b15610e8c5760405162461bcd60e51b815260206004820152604260248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a206964656e746960448201527f63616c2070726f706f73616c20616374696f6e20616c72656164792071756575606482015261195960f21b608482015260a401610adb565b60035488516001600160a01b0390911690633a66f901908a9084908110610eb557610eb56143f4565b6020026020010151898481518110610ecf57610ecf6143f4565b6020026020010151898581518110610ee957610ee96143f4565b6020026020010151866040518563ffffffff1660e01b8152600401610f11949392919061440a565b6020604051808303816000875af1158015610f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5491906143ad565b50610f5e81614461565b9050610d17565b5060408051838152602081018390527f9a2e42fd6722813d69113e7d0079d3d940171428df7373df9c7f7617cfda289291015b60405180910390a15095945050505050565b60006109496108e760014361447c565b600080610fc986868686611b55565b90506000610fd6826113e9565b90506004816007811115610fec57610fec613ed9565b14806110095750600581600781111561100757611007613ed9565b145b6110255760405162461bcd60e51b8152600401610adb9061436c565b600082815260016020818152604092839020600201805460ff191690921790915590518381527f712ae1383f79ac853f8d882153778e0260ef8f03b504e2866e0593e04d2b291f910160405180910390a1611083828888888861223e565b5095945050505050565b60008181526001602090815260408083208151928301909152546001600160401b0316908190525b6001600160401b031692915050565b6060806060806000600260008781526020019081526020016000209050806001018160020182600301836004018380548060200260200160405190810160405280929190818152602001828054801561114657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611128575b505050505093508280548060200260200160405190810160405280929190818152602001828054801561119857602002820191906000526020600020905b815481526020019060010190808311611184575b5050505050925081805480602002602001604051908101604052809291908181526020016000905b8282101561126c5783829060005260206000200180546111df9061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461120b9061425e565b80156112585780601f1061122d57610100808354040283529160200191611258565b820191906000526020600020905b81548152906001019060200180831161123b57829003601f168201915b5050505050815260200190600101906111c0565b50505050915080805480602002602001604051908101604052809291908181526020016000905b8282101561133f5783829060005260206000200180546112b29061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546112de9061425e565b801561132b5780601f106113005761010080835404028352916020019161132b565b820191906000526020600020905b81548152906001019060200180831161130e57829003601f168201915b505050505081526020019060010190611293565b5050505090509450945094509450509193509193565b604080517f150214d74d59b7d1e90c73fc22ef3d991dd0a76b046543d4d80ab92d2a50328f602082015290810186905260ff8516606082015260009081906113c1906113b99060800160405160208183030381529060405280519060200120612252565b8686866122a0565b90506113de878288604051806020016040528060008152506122be565b979650505050505050565b6000610a02826123c9565b600081815260026020526040902080546001600160a01b0316336001600160a01b0316148061143d5750600854815461143b906001600160a01b03166108a760014361447c565b105b6114995760405162461bcd60e51b815260206004820152602760248201527f476f7665726e6f72427261766f3a2070726f706f7365722061626f76652074686044820152661c995cda1bdb1960ca1b6064820152608401610adb565b611702816001018054806020026020016040519081016040528092919081815260200182805480156114f457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114d6575b50505050508260020180548060200260200160405190810160405280929190818152602001828054801561154757602002820191906000526020600020905b815481526020019060010190808311611533575b50505050506116f884600301805480602002602001604051908101604052809291908181526020016000905b8282101561161f5783829060005260206000200180546115929061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546115be9061425e565b801561160b5780601f106115e05761010080835404028352916020019161160b565b820191906000526020600020905b8154815290600101906020018083116115ee57829003601f168201915b505050505081526020019060010190611573565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546116629061425e565b80601f016020809104026020016040519081016040528092919081815260200182805461168e9061425e565b80156116db5780601f106116b0576101008083540402835291602001916116db565b820191906000526020600020905b8154815290600101906020018083116116be57829003601f168201915b505050505081526020019060010190611643565b505050506124aa565b846009015461260a565b505050565b600080339050611728848285604051806020016040528060008152506122be565b949350505050565b6009546001600160a01b0316331461178a5760405162461bcd60e51b815260206004820152601b60248201527f46656944414f3a2063616c6c6572206e6f7420677561726469616e00000000006044820152606401610adb565b600980546001600160a01b031916905563617f2e008111156117ee5760405162461bcd60e51b815260206004820152601860248201527f46656944414f3a20726f6c6c6261636b206578706972656400000000000000006044820152606401610adb565b600a81905560006118076003546001600160a01b031690565b9050806001600160a01b0316633a66f90161182a6003546001600160a01b031690565b60408051734c895973334af8e06fd6da4f723ac24a5f259e6b602082015260009101604051602081830303815290604052866040518563ffffffff1660e01b815260040161187b9493929190614293565b6020604051808303816000875af115801561189a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118be91906143ad565b506040518281527fdb51ef15d5bea4363daa5cb7691e73d2b53e2addace8cc5bef3b85c4f4489af5906020015b60405180910390a15050565b6118ff610935565b6001600160a01b0316336001600160a01b03161461192f5760405162461bcd60e51b8152600401610adb90614493565b600580549082905560408051828152602081018490527f16569b50c8812bb18e4b5c46b0fee4a9acbb3a9dca1e1badce427e8d75b5652d91016118eb565b6000803390506119b586828787878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122be92505050565b9695505050505050565b60006119cd85858585612618565b95945050505050565b6119de610935565b6001600160a01b0316336001600160a01b031614611a0e5760405162461bcd60e51b8152600401610adb90614493565b611a1781612680565b50565b60008181526004602090815260408083208151928301909152546001600160401b0316908190526110b5565b600360009054906101000a90046001600160a01b03166001600160a01b0316630e18b6816040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b50505050565b60008181526001602081815260408084208151928301909152909101546001600160401b0316908190526110b5565b611ae7610935565b6001600160a01b0316336001600160a01b031614611b175760405162461bcd60e51b8152600401610adb90614493565b600780549082905560408051828152602081018490527f6784e9bcb845caaa98267d7b0918f97d3d17f7cb35a05b52010f7eb587a0acb091016118eb565b600084848484604051602001611b6e94939291906144ca565b60408051601f19818403018152919052805160209091012095945050505050565b6000611b9f3387878787876126e9565b6119b58686611bae87876124aa565b856119bf565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611c1d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611bff575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611c7057602002820191906000526020600020905b815481526020019060010190808311611c5c575b5050505050611e1884600301805480602002602001604051908101604052809291908181526020016000905b82821015611d48578382906000526020600020018054611cbb9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce79061425e565b8015611d345780601f10611d0957610100808354040283529160200191611d34565b820191906000526020600020905b815481529060010190602001808311611d1757829003601f168201915b505050505081526020019060010190611c9c565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef578382906000526020600020018054611d8b9061425e565b80601f0160208091040260200160405190810160405280929190818152602001828054611db79061425e565b8015611e045780601f10611dd957610100808354040283529160200191611e04565b820191906000526020600020905b815481529060010190602001808311611de757829003601f168201915b505050505081526020019060010190611d6c565b8460090154610c30565b611e2a610935565b6001600160a01b0316336001600160a01b031614611e5a5760405162461bcd60e51b8152600401610adb90614493565b600680549082905560408051828152602081018490527fffc708f072ca56e3d45ef0cb288b96cb9378f5f63e1646868bfbc9c38f4263a191016118eb565b6000611ea483836127a6565b9392505050565b611eb3610935565b6001600160a01b0316336001600160a01b031614611ee35760405162461bcd60e51b8152600401610adb90614493565b600880549082905560408051828152602081018490527fe92242fc3efcad407a677132b517977331a6e5b65abab69fd757cc02e99c9c4e91016118eb565b600081815260026020908152604091829020600181018054845181850281018501909552808552919361170293909290830182828015611f8a57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611f6c575b505050505082600201805480602002602001604051908101604052809291908181526020018280548015611fdd57602002820191906000526020600020905b815481526020019060010190808311611fc9575b505050505061218584600301805480602002602001604051908101604052809291908181526020016000905b828210156120b55783829060005260206000200180546120289061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546120549061425e565b80156120a15780601f10612076576101008083540402835291602001916120a1565b820191906000526020600020905b81548152906001019060200180831161208457829003601f168201915b505050505081526020019060010190612009565b50505060048701805460408051602080840282018101909252828152935060009084015b828210156116ef5783829060005260206000200180546120f89061425e565b80601f01602080910402602001604051908101604052809291908181526020018280546121249061425e565b80156121715780601f1061214657610100808354040283529160200191612171565b820191906000526020600020905b81548152906001019060200180831161215457829003601f168201915b5050505050815260200190600101906120d9565b8460090154610fba565b60006001600160e01b03198216636e665ced60e01b1480610a025750610a028261284c565b60006001600160401b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401610adb565b5090565b815467ffffffffffffffff19166001600160401b0391909116179055565b61224b8585858585612881565b5050505050565b6000610a0261225f612a00565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b60008060006122b187878787612b27565b9150915061108381612c14565b60008481526001602081905260408220906122d8876113e9565b60078111156122e9576122e9613ed9565b146123425760405162461bcd60e51b815260206004820152602360248201527f476f7665726e6f723a20766f7465206e6f742063757272656e746c792061637460448201526269766560e81b6064820152608401610adb565b604080516020810190915281546001600160401b03169081905260009061236a908790611e98565b905061237887878784612dcf565b856001600160a01b03167fb8e138887d0aa13bab447e82de9d5c1777041ecd21ca36ba824ff1e6c07ddda4888784886040516123b79493929190614515565b60405180910390a29695505050505050565b6000806123d583612f74565b905060048160078111156123eb576123eb613ed9565b146123f65792915050565b600061240184611a1a565b90508061240f575092915050565b600360009054906101000a90046001600160a01b03166001600160a01b031663c1a287e26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612462573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061248691906143ad565b61249090826143dc565b42106124a0575060069392505050565b5060059392505050565b6060600082516001600160401b038111156124c7576124c7613a8f565b6040519080825280602002602001820160405280156124fa57816020015b60608152602001906001900390816124e55790505b50905060005b84518110156126025784818151811061251b5761251b6143f4565b6020026020010151516000146125b95784818151811061253d5761253d6143f4565b6020026020010151848281518110612557576125576143f4565b602002602001015160405160240161256f9190613a7c565b60408051601f19818403018152908290529161258a9161453d565b6040519081900390206020820180516001600160e01b03166001600160e01b03199092169190911790526125d4565b8381815181106125cb576125cb6143f4565b60200260200101515b8282815181106125e6576125e66143f4565b6020026020010181905250806125fb90614461565b9050612500565b509392505050565b60006119cd858585856130db565b600061267433868686516001600160401b0381111561263957612639613a8f565b60405190808252806020026020018201604052801561266c57816020015b60608152602001906001900390816126575790505b5087876126e9565b6119cd858585856131f6565b600354604080516001600160a01b03928316815291831660208301527f08f74ea46ef7894f65eabfb5e6e695de773a000b47c529ab559178069b226401910160405180910390a1600380546001600160a01b0319166001600160a01b0392909216919091179055565b805160208201206000612707878761270188886124aa565b85611b55565b600081815260026020526040902060098101549192509061279b5780546001600160a01b0319166001600160a01b038a16178155875161275090600183019060208b0190613797565b50865161276690600283019060208a01906137f8565b50855161277c9060038301906020890190613833565b508451612792906004830190602088019061388c565b50600981018390555b505050505050505050565b60405163782d6fe160e01b81526001600160a01b038381166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063782d6fe190604401602060405180830381865afa158015612818573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283c9190614559565b6001600160601b03169392505050565b60006001600160e01b0319821663bf26d89760e01b1480610a0257506301ffc9a760e01b6001600160e01b0319831614610a02565b600061288c86611a1a565b9050600081116128f85760405162461bcd60e51b815260206004820152603160248201527f476f7665726e6f7254696d656c6f636b436f6d706f756e643a2070726f706f73604482015270185b081b9bdd081e595d081c5d595d5959607a1b6064820152608401610adb565b60035461290e906001600160a01b0316346134b3565b60005b85518110156129f75760035486516001600160a01b0390911690630825f38f90889084908110612943576129436143f4565b602002602001015187848151811061295d5761295d6143f4565b6020026020010151878581518110612977576129776143f4565b6020026020010151866040518563ffffffff1660e01b815260040161299f949392919061440a565b6000604051808303816000875af11580156129be573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129e691908101906142ff565b506129f081614461565b9050612911565b50505050505050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612a5957507f000000000000000000000000000000000000000000000000000000000000000046145b15612a8357507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115612b5e5750600090506003612c0b565b8460ff16601b14158015612b7657508460ff16601c14155b15612b875750600090506004612c0b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612bdb573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612c0457600060019250925050612c0b565b9150600090505b94509492505050565b6000816004811115612c2857612c28613ed9565b1415612c315750565b6001816004811115612c4557612c45613ed9565b1415612c935760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610adb565b6002816004811115612ca757612ca7613ed9565b1415612cf55760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610adb565b6003816004811115612d0957612d09613ed9565b1415612d625760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610adb565b6004816004811115612d7657612d76613ed9565b1415611a175760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610adb565b60008481526002602090815260408083206001600160a01b038716845260088101909252909120805460ff1615612e5e5760405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20766f746560448201526c08185b1c9958591e4818d85cdd609a1b6064820152608401610adb565b805460ff85166101000261ffff19909116176001178155612e7e836135cc565b81546001600160601b039190911662010000026dffffffffffffffffffffffff00001990911617815560ff8416612ece5782826006016000828254612ec391906143dc565b90915550612f6c9050565b60ff841660011415612eee5782826005016000828254612ec391906143dc565b60ff841660021415612f0e5782826007016000828254612ec391906143dc565b60405162461bcd60e51b815260206004820152602d60248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a20696e766160448201526c6c696420766f7465207479706560981b6064820152608401610adb565b505050505050565b6000818152600160208181526040808420815160a08101835281546001600160401b0390811660808301908152825283518086018552958301541685529283019390935260029092015460ff80821615801594840194909452610100909104161515606082015290612fe95750600792915050565b806060015115612ffc5750600292915050565b80515143906001600160401b0316106130185750600092915050565b4361302582602001515190565b6001600160401b03161061303c5750600192915050565b6130498160200151613634565b1561308d5761305783613663565b8015613079575060008381526002602052604090206006810154600590910154115b613084576003611ea4565b60049392505050565b60405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a20756e6b6e6f776e2070726f706f73616c2069640000006044820152606401610adb565b50919050565b6000806130ea8686868661368b565b905060006130f782611a1a565b905080156110835760005b87518110156131d35760035488516001600160a01b039091169063591fcdfe908a9084908110613134576131346143f4565b602002602001015189848151811061314e5761314e6143f4565b6020026020010151898581518110613168576131686143f4565b6020026020010151866040518563ffffffff1660e01b8152600401613190949392919061440a565b600060405180830381600087803b1580156131aa57600080fd5b505af11580156131be573d6000803e3d6000fd5b50505050806131cc90614461565b9050613102565b506000828152600460205260409020805467ffffffffffffffff19169055611083565b600061320160085490565b613210336108a760014361447c565b10156132905760405162461bcd60e51b815260206004820152604360248201527f476f7665726e6f72436f6d7061746962696c697479427261766f3a2070726f7060448201527f6f73657220766f7465732062656c6f772070726f706f73616c207468726573686064820152621bdb1960ea1b608482015260a401610adb565b60006132a58686868680519060200120611b55565b905084518651146132c85760405162461bcd60e51b8152600401610adb90614582565b83518651146132e95760405162461bcd60e51b8152600401610adb90614582565b600086511161333a5760405162461bcd60e51b815260206004820152601860248201527f476f7665726e6f723a20656d7074792070726f706f73616c00000000000000006044820152606401610adb565b600081815260016020908152604091829020825191820190925281546001600160401b031690819052156133ba5760405162461bcd60e51b815260206004820152602160248201527f476f7665726e6f723a2070726f706f73616c20616c72656164792065786973746044820152607360f81b6064820152608401610adb565b60006133cd6133c860055490565b6121b4565b6133d6436121b4565b6133e091906145c3565b905060006133f06133c860065490565b6133fa90836145c3565b90506134068383612220565b6134136001840182612220565b7f7d84a6263ae0d98d3329bd7b46bb4e8d6f98cd35a7adb45c274c8b7fd5ebd5e084338b8b8d516001600160401b0381111561345157613451613a8f565b60405190808252806020026020018201604052801561348457816020015b606081526020019060019003908161346f5790505b508c88888e60405161349e999897969594939291906145ee565b60405180910390a15091979650505050505050565b804710156135035760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610adb565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613550576040519150601f19603f3d011682016040523d82523d6000602084013e613555565b606091505b50509050806117025760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401610adb565b60006001600160601b0382111561221c5760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201526536206269747360d01b6064820152608401610adb565b600061364982516001600160401b0316151590565b8015610a0257505051436001600160401b03909116111590565b600081815260026020526040812060058101546136826108e78561108d565b11159392505050565b60008061369a86868686611b55565b905060006136a7826113e9565b905060028160078111156136bd576136bd613ed9565b141580156136dd575060068160078111156136da576136da613ed9565b14155b80156136fb575060078160078111156136f8576136f8613ed9565b14155b6137475760405162461bcd60e51b815260206004820152601d60248201527f476f7665726e6f723a2070726f706f73616c206e6f74206163746976650000006044820152606401610adb565b60008281526001602052604090819020600201805461ff001916610100179055517f789cf55be980739dad1d0699b93b58e806b51c9d96619bfa8fe0a28abaa7b30c90610f989084815260200190565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906137b7565b5061221c9291506138e5565b8280548282559060005260206000209081019282156137ec579160200282015b828111156137ec578251825591602001919060010190613818565b828054828255906000526020600020908101928215613880579160200282015b8281111561388057825180516138709184916020909101906138fa565b5091602001919060010190613853565b5061221c92915061396d565b8280548282559060005260206000209081019282156138d9579160200282015b828111156138d957825180516138c99184916020909101906138fa565b50916020019190600101906138ac565b5061221c92915061398a565b5b8082111561221c57600081556001016138e6565b8280546139069061425e565b90600052602060002090601f01602090048101928261392857600085556137ec565b82601f1061394157805160ff19168380011785556137ec565b828001600101855582156137ec57918201828111156137ec578251825591602001919060010190613818565b8082111561221c57600061398182826139a7565b5060010161396d565b8082111561221c57600061399e82826139a7565b5060010161398a565b5080546139b39061425e565b6000825580601f106139c3575050565b601f016020900490600052602060002090810190611a1791906138e5565b6000602082840312156139f357600080fd5b5035919050565b600060208284031215613a0c57600080fd5b81356001600160e01b031981168114611ea457600080fd5b60005b83811015613a3f578181015183820152602001613a27565b83811115611aaa5750506000910152565b60008151808452613a68816020860160208601613a24565b601f01601f19169290920160200192915050565b602081526000611ea46020830184613a50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715613acd57613acd613a8f565b604052919050565b60006001600160401b03821115613aee57613aee613a8f565b5060051b60200190565b6001600160a01b0381168114611a1757600080fd5b600082601f830112613b1e57600080fd5b81356020613b33613b2e83613ad5565b613aa5565b82815260059290921b84018101918181019086841115613b5257600080fd5b8286015b84811015613b76578035613b6981613af8565b8352918301918301613b56565b509695505050505050565b600082601f830112613b9257600080fd5b81356020613ba2613b2e83613ad5565b82815260059290921b84018101918181019086841115613bc157600080fd5b8286015b84811015613b765780358352918301918301613bc5565b60006001600160401b03821115613bf557613bf5613a8f565b50601f01601f191660200190565b6000613c11613b2e84613bdc565b9050828152838383011115613c2557600080fd5b828260208301376000602084830101529392505050565b600082601f830112613c4d57600080fd5b81356020613c5d613b2e83613ad5565b82815260059290921b84018101918181019086841115613c7c57600080fd5b8286015b84811015613b765780356001600160401b03811115613c9f5760008081fd5b8701603f81018913613cb15760008081fd5b613cc2898683013560408401613c03565b845250918301918301613c80565b60008060008060808587031215613ce657600080fd5b84356001600160401b0380821115613cfd57600080fd5b613d0988838901613b0d565b95506020870135915080821115613d1f57600080fd5b613d2b88838901613b81565b94506040870135915080821115613d4157600080fd5b50613d4e87828801613c3c565b949793965093946060013593505050565b600081518084526020808501945080840160005b83811015613d985781516001600160a01b031687529582019590820190600101613d73565b509495945050505050565b600081518084526020808501945080840160005b83811015613d9857815187529582019590820190600101613db7565b600081518084526020808501808196508360051b8101915082860160005b85811015613e1b578284038952613e09848351613a50565b98850198935090840190600101613df1565b5091979650505050505050565b608081526000613e3b6080830187613d5f565b8281036020840152613e4d8187613da3565b90508281036040840152613e618186613dd3565b905082810360608401526113de8185613dd3565b803560ff81168114613e8657600080fd5b919050565b600080600080600060a08688031215613ea357600080fd5b85359450613eb360208701613e75565b9350613ec160408701613e75565b94979396509394606081013594506080013592915050565b634e487b7160e01b600052602160045260246000fd5b6020810160088310613f1157634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215613f2a57600080fd5b823591506020830135613f3c81613af8565b809150509250929050565b60008060408385031215613f5a57600080fd5b82359150613f6a60208401613e75565b90509250929050565b60008060008060608587031215613f8957600080fd5b84359350613f9960208601613e75565b925060408501356001600160401b0380821115613fb557600080fd5b818701915087601f830112613fc957600080fd5b813581811115613fd857600080fd5b886020828501011115613fea57600080fd5b95989497505060200194505050565b600082601f83011261400a57600080fd5b611ea483833560208501613c03565b6000806000806080858703121561402f57600080fd5b84356001600160401b038082111561404657600080fd5b61405288838901613b0d565b9550602087013591508082111561406857600080fd5b61407488838901613b81565b9450604087013591508082111561408a57600080fd5b61409688838901613c3c565b935060608701359150808211156140ac57600080fd5b506140b987828801613ff9565b91505092959194509250565b6000602082840312156140d757600080fd5b8135611ea481613af8565b600082601f8301126140f357600080fd5b81356020614103613b2e83613ad5565b82815260059290921b8401810191818101908684111561412257600080fd5b8286015b84811015613b765780356001600160401b038111156141455760008081fd5b6141538986838b0101613ff9565b845250918301918301614126565b600080600080600060a0868803121561417957600080fd5b85356001600160401b038082111561419057600080fd5b61419c89838a01613b0d565b965060208801359150808211156141b257600080fd5b6141be89838a01613b81565b955060408801359150808211156141d457600080fd5b6141e089838a016140e2565b945060608801359150808211156141f657600080fd5b61420289838a01613c3c565b9350608088013591508082111561421857600080fd5b5061422588828901613ff9565b9150509295509295909350565b6000806040838503121561424557600080fd5b823561425081613af8565b946020939093013593505050565b600181811c9082168061427257607f821691505b602082108114156130d557634e487b7160e01b600052602260045260246000fd5b60018060a01b038516815283602082015260a06040820152601860a08201527f73657450656e64696e6741646d696e286164647265737329000000000000000060c082015260e0606082015260006142ee60e0830185613a50565b905082608083015295945050505050565b60006020828403121561431157600080fd5b81516001600160401b0381111561432757600080fd5b8201601f8101841361433857600080fd5b8051614346613b2e82613bdc565b81815285602083850101111561435b57600080fd5b6119cd826020830160208601613a24565b60208082526021908201527f476f7665726e6f723a2070726f706f73616c206e6f74207375636365737366756040820152601b60fa1b606082015260800190565b6000602082840312156143bf57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b600082198211156143ef576143ef6143c6565b500190565b634e487b7160e01b600052603260045260246000fd5b60018060a01b038516815283602082015260a06040820152600060a082015260c0606082015260006142ee60c0830185613a50565b60006020828403121561445157600080fd5b81518015158114611ea457600080fd5b6000600019821415614475576144756143c6565b5060010190565b60008282101561448e5761448e6143c6565b500390565b60208082526018908201527f476f7665726e6f723a206f6e6c79476f7665726e616e63650000000000000000604082015260600190565b6080815260006144dd6080830187613d5f565b82810360208401526144ef8187613da3565b905082810360408401526145038186613dd3565b91505082606083015295945050505050565b84815260ff841660208201528260408201526080606082015260006119b56080830184613a50565b6000825161454f818460208701613a24565b9190910192915050565b60006020828403121561456b57600080fd5b81516001600160601b0381168114611ea457600080fd5b60208082526021908201527f476f7665726e6f723a20696e76616c69642070726f706f73616c206c656e67746040820152600d60fb1b606082015260800190565b60006001600160401b038083168185168083038211156145e5576145e56143c6565b01949350505050565b8981526001600160a01b0389166020820152610120604082018190526000906146198382018b613d5f565b9050828103606084015261462d818a613da3565b905082810360808401526146418189613dd3565b905082810360a08401526146558188613dd3565b6001600160401b0387811660c0860152861660e085015283810361010085015290506146818185613a50565b9c9b50505050505050505050505056fea264697066735822122093e9e558c03743cbb7912a75250045d7910498ec68f1824fcc308c047c9aa9a864736f6c634300080a0033" -} \ No newline at end of file diff --git a/external/abi/fei/FeiDAOTimelock.json b/external/abi/fei/FeiDAOTimelock.json deleted file mode 100644 index 988cb7d4a..000000000 --- a/external/abi/fei/FeiDAOTimelock.json +++ /dev/null @@ -1,777 +0,0 @@ -{ - "contractName": "FeiDAOTimelock", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "core_", - "type": "address" - }, - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "uint256", - "name": "delay_", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "minDelay_", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "CancelTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "oldContractAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newContractAdminRole", - "type": "bytes32" - } - ], - "name": "ContractAdminRoleUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "oldCore", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newCore", - "type": "address" - } - ], - "name": "CoreUpdate", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "ExecuteTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "NewAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "newDelay", - "type": "uint256" - } - ], - "name": "NewDelay", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPendingAdmin", - "type": "address" - } - ], - "name": "NewPendingAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "QueueTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "inputs": [], - "name": "CONTRACT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "GRACE_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAXIMUM_DELAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MINIMUM_DELAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "OLD_TIMELOCK", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "ROLLBACK_DEADLINE", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "acceptAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "cancelTransaction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "core", - "outputs": [ - { - "internalType": "contract ICore", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "executeTransaction", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [], - "name": "fei", - "outputs": [ - { - "internalType": "contract IFei", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "feiBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "getTxHash", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "governorSetPendingAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - } - ], - "name": "isContractAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "queueTransaction", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "queuedTransactions", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rollback", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "newContractAdminRole", - "type": "bytes32" - } - ], - "name": "setContractAdminRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newCore", - "type": "address" - } - ], - "name": "setCore", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "delay_", - "type": "uint256" - } - ], - "name": "setDelay", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "pendingAdmin_", - "type": "address" - } - ], - "name": "setPendingAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tribe", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tribeBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "targets", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "values", - "type": "uint256[]" - }, - { - "internalType": "string[]", - "name": "signatures", - "type": "string[]" - }, - { - "internalType": "bytes[]", - "name": "datas", - "type": "bytes[]" - }, - { - "internalType": "uint256[]", - "name": "etas", - "type": "uint256[]" - } - ], - "name": "vetoTransactions", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "stateMutability": "payable", - "type": "receive" - } - ], - "bytecode": "60a06040523480156200001157600080fd5b50604051620024e9380380620024e9833981016040819052620000349162000323565b60808190528383838380821015620000a65760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960448201526936bab6903232b630bc9760b11b60648201526084015b60405180910390fd5b62278d00821115620001125760405162461bcd60e51b815260206004820152602e60248201527f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060448201526d36b0bc34b6bab6903232b630bc9760911b60648201526084016200009d565b6001600160a01b038316620001785760405162461bcd60e51b815260206004820152602560248201527f54696d656c6f636b3a2041646d696e206d757374206e6f742062652030206164604482015264647265737360d81b60648201526084016200009d565b50600080546001600160a01b0319166001600160a01b0393909316929092179091556002556004805460ff19169055620001b281620001bd565b505050505062000383565b60065460ff1615620002125760405162461bcd60e51b815260206004820152601c60248201527f436f72655265663a20616c726561647920696e697469616c697a65640000000060448201526064016200009d565b6006805460ff19166001179055600480546001600160a01b03808416610100908102610100600160a81b03199093169290921780845560408051631c5bfa2360e11b81529051620002ca9594909204909216926338b7f44692808201926020929091829003018186803b1580156200028957600080fd5b505afa1580156200029e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c491906200036a565b620002cd565b50565b6005805490829055604051829082907f29ddd278ef9169e35aa84e424b39048b89af9c0b50f85497e40f97dff6946cf590600090a35050565b80516001600160a01b03811681146200031e57600080fd5b919050565b6000806000806080858703121562000339578384fd5b620003448562000306565b9350620003546020860162000306565b6040860151606090960151949790965092505050565b6000602082840312156200037c578081fd5b5051919050565b608051612143620003a66000396000818161044c015261119701526121436000f3fe6080604052600436106101dc5760003560e01c80638000963011610102578063c1a287e211610095578063f2f4eb2611610064578063f2f4eb261461051f578063f4376aec14610542578063f851a44014610562578063fc81a12a1461058257600080fd5b8063c1a287e214610498578063d3488442146104af578063e177246e146104cf578063f2b06537146104ef57600080fd5b80639afd9d78116100d15780639afd9d7814610425578063b1b43ae51461043a578063b49058971461046e578063b86677fe1461048357600080fd5b806380009630146103bb5780638456cb59146103db578063903f5c5e146103f05780639a9ba4da1461041057600080fd5b80633f4ba83a1161017a5780636a42b8f8116101495780636a42b8f8146103515780636b6dff0a146103675780637a63e7dd1461037c5780637d645fab146103a457600080fd5b80633f4ba83a146102d85780634dd18bf5146102ed578063591fcdfe1461030d5780635c975abb1461032d57600080fd5b806310817f22116101b657806310817f22146102525780631da033121461026a57806326782247146102805780633a66f901146102b857600080fd5b806304a71576146101e85780630825f38f1461021b5780630e18b6811461023b57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b50610208610203366004611c03565b6105a2565b6040519081526020015b60405180910390f35b61022e610229366004611c03565b6105de565b6040516102129190611e85565b34801561024757600080fd5b50610250610629565b005b34801561025e57600080fd5b5061020863617f2e0081565b34801561027657600080fd5b5061020860055481565b34801561028c57600080fd5b506001546102a0906001600160a01b031681565b6040516001600160a01b039091168152602001610212565b3480156102c457600080fd5b506102086102d3366004611c03565b6106e0565b3480156102e457600080fd5b50610250610718565b3480156102f957600080fd5b50610250610308366004611be7565b610846565b34801561031957600080fd5b50610250610328366004611c03565b6108af565b34801561033957600080fd5b5060045460ff165b6040519015158152602001610212565b34801561035d57600080fd5b5061020860025481565b34801561037357600080fd5b506102086108ed565b34801561038857600080fd5b506102a073639572471f2f318464dc01066a56867130e45e2581565b3480156103b057600080fd5b5061020862278d0081565b3480156103c757600080fd5b506102506103d6366004611be7565b610975565b3480156103e757600080fd5b50610250610aba565b3480156103fc57600080fd5b5061025061040b366004611c88565b610be6565b34801561041c57600080fd5b506102a0610e00565b34801561043157600080fd5b50610250610e88565b34801561044657600080fd5b506102087f000000000000000000000000000000000000000000000000000000000000000081565b34801561047a57600080fd5b50610208611073565b34801561048f57600080fd5b506102a061107d565b3480156104a457600080fd5b506102086212750081565b3480156104bb57600080fd5b506102506104ca366004611d74565b6110cd565b3480156104db57600080fd5b506102506104ea366004611d74565b611176565b3480156104fb57600080fd5b5061034161050a366004611d74565b60036020526000908152604090205460ff1681565b34801561052b57600080fd5b5060045461010090046001600160a01b03166102a0565b34801561054e57600080fd5b5061025061055d366004611be7565b6112b5565b34801561056e57600080fd5b506000546102a0906001600160a01b031681565b34801561058e57600080fd5b5061034161059d366004611be7565b611352565b600085858585856040516020016105bd959493929190611e39565b60405160208183030381529060405280519060200120905095945050505050565b60606105ec60045460ff1690565b156106125760405162461bcd60e51b815260040161060990611f70565b60405180910390fd5b61061f86868686866113e4565b9695505050505050565b6001546001600160a01b031633146106975760405162461bcd60e51b815260206004820152602b60248201527f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20706560448201526a373234b733a0b236b4b71760a91b6064820152608401610609565b60008054336001600160a01b0319918216811783556001805490921690915560405190917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b60006106ee60045460ff1690565b1561070b5760405162461bcd60e51b815260040161060990611f70565b61061f86868686866116c2565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b15801561076157600080fd5b505afa158015610775573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107999190611d54565b80610820575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b1580156107e857600080fd5b505afa1580156107fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108209190611d54565b61083c5760405162461bcd60e51b815260040161060990611e98565b6108446117f5565b565b3330146108655760405162461bcd60e51b815260040161060990611ee5565b600180546001600160a01b0319166001600160a01b0383169081179091556040517f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000546001600160a01b031633146108d95760405162461bcd60e51b815260040161060990611f2c565b6108e68585858585611888565b5050505050565b60006108f761107d565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a082319060240160206040518083038186803b15801561093857600080fd5b505afa15801561094c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190611da8565b905090565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b1580156109be57600080fd5b505afa1580156109d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f69190611d54565b610a125760405162461bcd60e51b815260040161060990611f9a565b6001600160a01b038116610a605760405162461bcd60e51b8152602060048201526015602482015274436f72655265663a207a65726f206164647265737360581b6044820152606401610609565b600480546001600160a01b03838116610100818102610100600160a81b031985161790945560405193909204169182907f9209b7c8c06dcfd261686a663e7c55989337b18d59da5433c6f2835fb697092090600090a35050565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b158015610b0357600080fd5b505afa158015610b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3b9190611d54565b80610bc2575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b158015610b8a57600080fd5b505afa158015610b9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc29190611d54565b610bde5760405162461bcd60e51b815260040161060990611e98565b610844611903565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b158015610c2f57600080fd5b505afa158015610c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c679190611d54565b80610cee575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b158015610cb657600080fd5b505afa158015610cca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cee9190611d54565b610d0a5760405162461bcd60e51b815260040161060990611e98565b60005b8551811015610df857610de6868281518110610d3957634e487b7160e01b600052603260045260246000fd5b6020026020010151868381518110610d6157634e487b7160e01b600052603260045260246000fd5b6020026020010151868481518110610d8957634e487b7160e01b600052603260045260246000fd5b6020026020010151868581518110610db157634e487b7160e01b600052603260045260246000fd5b6020026020010151868681518110610dd957634e487b7160e01b600052603260045260246000fd5b6020026020010151611888565b80610df0816120b1565b915050610d0d565b505050505050565b6000600460019054906101000a90046001600160a01b03166001600160a01b0316639a9ba4da6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5057600080fd5b505afa158015610e64573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109709190611d8c565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b158015610ed157600080fd5b505afa158015610ee5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f099190611d54565b80610f90575060048054604051630c68ba2160e01b8152339281019290925261010090046001600160a01b031690630c68ba219060240160206040518083038186803b158015610f5857600080fd5b505afa158015610f6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f909190611d54565b610fac5760405162461bcd60e51b815260040161060990611e98565b63617f2e004211156110005760405162461bcd60e51b815260206004820181905260248201527f46656944414f54696d656c6f636b3a20726f6c6c6261636b20657870697265646044820152606401610609565b600054604051630a890c9160e41b815273639572471f2f318464dc01066a56867130e45e2560048201526001600160a01b039091169063a890c91090602401600060405180830381600087803b15801561105957600080fd5b505af115801561106d573d6000803e3d6000fd5b50505050565b60006108f7610e00565b6000600460019054906101000a90046001600160a01b03166001600160a01b031663b86677fe6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e5057600080fd5b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b15801561111657600080fd5b505afa15801561112a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114e9190611d54565b61116a5760405162461bcd60e51b815260040161060990611f9a565b6111738161195b565b50565b3330146111955760405162461bcd60e51b815260040161060990611ee5565b7f00000000000000000000000000000000000000000000000000000000000000008110156112185760405162461bcd60e51b815260206004820152602a60248201527f54696d656c6f636b3a2044656c6179206d75737420657863656564206d696e6960448201526936bab6903232b630bc9760b11b6064820152608401610609565b62278d008111156112825760405162461bcd60e51b815260206004820152602e60248201527f54696d656c6f636b3a2044656c6179206d757374206e6f74206578636565642060448201526d36b0bc34b6bab6903232b630bc9760911b6064820152608401610609565b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b60048054604051631c86b03760e31b8152339281019290925261010090046001600160a01b03169063e43581b89060240160206040518083038186803b1580156112fe57600080fd5b505afa158015611312573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113369190611d54565b6108655760405162461bcd60e51b815260040161060990611f9a565b60048054600554604051632474521560e21b8152928301526001600160a01b03838116602484015260009261010090920416906391d148549060440160206040518083038186803b1580156113a657600080fd5b505afa1580156113ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113de9190611d54565b92915050565b6000546060906001600160a01b031633146114115760405162461bcd60e51b815260040161060990611f2c565b600061142087878787876105a2565b60008181526003602052604090205490915060ff166114935760405162461bcd60e51b815260206004820152602960248201527f54696d656c6f636b3a205472616e73616374696f6e206861736e277420626565604482015268371038bab2bab2b21760b91b6064820152608401610609565b824210156114fd5760405162461bcd60e51b815260206004820152603160248201527f54696d656c6f636b3a205472616e73616374696f6e206861736e2774207375726044820152703830b9b9b2b2103a34b6b2903637b1b59760791b6064820152608401610609565b61150a8362127500611994565b4211156115595760405162461bcd60e51b815260206004820152601f60248201527f54696d656c6f636b3a205472616e73616374696f6e206973207374616c652e006044820152606401610609565b6000818152600360205260409020805460ff19169055845160609061157f5750836115ab565b858051906020012085604051602001611599929190611dec565b60405160208183030381529060405290505b600080896001600160a01b031689846040516115c79190611e1d565b60006040518083038185875af1925050503d8060008114611604576040519150601f19603f3d011682016040523d82523d6000602084013e611609565b606091505b50915091508161166d5760405162461bcd60e51b815260206004820152602960248201527f54696d656c6f636b3a205472616e73616374696f6e20657865637574696f6e206044820152683932bb32b93a32b21760b91b6064820152608401610609565b896001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b6040516116ad9493929190611fdb565b60405180910390a39998505050505050505050565b600080546001600160a01b031633146116ed5760405162461bcd60e51b815260040161060990611f2c565b6117006002546116fa4290565b90611994565b8210156117755760405162461bcd60e51b815260206004820152603760248201527f54696d656c6f636b3a20457374696d6174656420657865637574696f6e20626c60448201527f6f636b206d75737420736174697366792064656c61792e0000000000000000006064820152608401610609565b600061178487878787876105a2565b60008181526003602052604090819020805460ff19166001179055519091506001600160a01b0388169082907f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f906117e3908a908a908a908a90611fdb565b60405180910390a39695505050505050565b60045460ff1661183e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610609565b6004805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b600061189786868686866105a2565b60008181526003602052604090819020805460ff19169055519091506001600160a01b0387169082907f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf87906118f3908990899089908990611fdb565b60405180910390a3505050505050565b60045460ff16156119265760405162461bcd60e51b815260040161060990611f70565b6004805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861186b3390565b6005805490829055604051829082907f29ddd278ef9169e35aa84e424b39048b89af9c0b50f85497e40f97dff6946cf590600090a35050565b60006119a0828461206d565b9392505050565b600082601f8301126119b7578081fd5b813560206119cc6119c783612049565b612018565b80838252828201915082860187848660051b89010111156119eb578586fd5b855b85811015611a12578135611a00816120f8565b845292840192908401906001016119ed565b5090979650505050505050565b600082601f830112611a2f578081fd5b81356020611a3f6119c783612049565b80838252828201915082860187848660051b8901011115611a5e578586fd5b855b85811015611a1257813567ffffffffffffffff811115611a7e578788fd5b611a8c8a87838c0101611b7c565b8552509284019290840190600101611a60565b600082601f830112611aaf578081fd5b81356020611abf6119c783612049565b80838252828201915082860187848660051b8901011115611ade578586fd5b855b85811015611a1257813567ffffffffffffffff811115611afe578788fd5b611b0c8a87838c0101611b7c565b8552509284019290840190600101611ae0565b600082601f830112611b2f578081fd5b81356020611b3f6119c783612049565b80838252828201915082860187848660051b8901011115611b5e578586fd5b855b85811015611a1257813584529284019290840190600101611b60565b600082601f830112611b8c578081fd5b813567ffffffffffffffff811115611ba657611ba66120e2565b611bb9601f8201601f1916602001612018565b818152846020838601011115611bcd578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611bf8578081fd5b81356119a0816120f8565b600080600080600060a08688031215611c1a578081fd5b8535611c25816120f8565b945060208601359350604086013567ffffffffffffffff80821115611c48578283fd5b611c5489838a01611b7c565b94506060880135915080821115611c69578283fd5b50611c7688828901611b7c565b95989497509295608001359392505050565b600080600080600060a08688031215611c9f578081fd5b853567ffffffffffffffff80821115611cb6578283fd5b611cc289838a016119a7565b96506020880135915080821115611cd7578283fd5b611ce389838a01611b1f565b95506040880135915080821115611cf8578283fd5b611d0489838a01611a9f565b94506060880135915080821115611d19578283fd5b611d2589838a01611a1f565b93506080880135915080821115611d3a578283fd5b50611d4788828901611b1f565b9150509295509295909350565b600060208284031215611d65578081fd5b815180151581146119a0578182fd5b600060208284031215611d85578081fd5b5035919050565b600060208284031215611d9d578081fd5b81516119a0816120f8565b600060208284031215611db9578081fd5b5051919050565b60008151808452611dd8816020860160208601612085565b601f01601f19169290920160200192915050565b6001600160e01b0319831681528151600090611e0f816004850160208701612085565b919091016004019392505050565b60008251611e2f818460208701612085565b9190910192915050565b60018060a01b038616815284602082015260a060408201526000611e6060a0830186611dc0565b8281036060840152611e728186611dc0565b9150508260808301529695505050505050565b6020815260006119a06020830184611dc0565b6020808252602d908201527f436f72655265663a2043616c6c6572206973206e6f742061206775617264696160408201526c371037b91033b7bb32b93737b960991b606082015260800190565b60208082526027908201527f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20546960408201526636b2b637b1b59760c91b606082015260800190565b60208082526024908201527f54696d656c6f636b3a2043616c6c206d75737420636f6d652066726f6d20616460408201526336b4b71760e11b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526021908201527f436f72655265663a2043616c6c6572206973206e6f74206120676f7665726e6f6040820152603960f91b606082015260800190565b848152608060208201526000611ff46080830186611dc0565b82810360408401526120068186611dc0565b91505082606083015295945050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612041576120416120e2565b604052919050565b600067ffffffffffffffff821115612063576120636120e2565b5060051b60200190565b60008219821115612080576120806120cc565b500190565b60005b838110156120a0578181015183820152602001612088565b8381111561106d5750506000910152565b60006000198214156120c5576120c56120cc565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461117357600080fdfea26469706673582212200db80a9ed7d2750f076bd3356996eaa79ba6de912f384b26f6982cf6ea80b33364736f6c63430008040033" -} \ No newline at end of file diff --git a/external/abi/fei/PegExchanger.json b/external/abi/fei/PegExchanger.json deleted file mode 100644 index e092ad8a6..000000000 --- a/external/abi/fei/PegExchanger.json +++ /dev/null @@ -1,303 +0,0 @@ -{ - "contractName": "PegExchanger", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "tribeRariDAO", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "dao", - "type": "address" - } - ], - "name": "Accept", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - } - ], - "name": "Enabled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountIn", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amountOut", - "type": "uint256" - } - ], - "name": "Exchange", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "caller", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - } - ], - "name": "SetExpiry", - "type": "event" - }, - { - "inputs": [], - "name": "MIN_EXPIRY_WINDOW", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "bothPartiesAccepted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "exchange", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "exchangeRate", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "expirationTimestamp", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "isExpired", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rgt", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rgtAccept", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "rgtAccepted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rgtTimelock", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "scalar", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "setBothPartiesAccepted", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "timestamp", - "type": "uint256" - } - ], - "name": "setExpirationTimestamp", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tribe", - "outputs": [ - { - "internalType": "contract IERC20", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tribeAccept", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "tribeAccepted", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tribeRariDAO", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "tribeTimelock", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } - ], - "bytecode": "60a060405260001960015534801561001657600080fd5b50604051610dc9380380610dc983398101604081905261003591610046565b6001600160a01b0316608052610076565b60006020828403121561005857600080fd5b81516001600160a01b038116811461006f57600080fd5b9392505050565b608051610d316100986000396000818161022801526106ee0152610d316000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80637b288c2d116100a2578063af5a3d6611610071578063af5a3d6614610223578063b86677fe1461024a578063c53a352314610265578063f45e65d81461026d578063f9540ed71461027857600080fd5b80637b288c2d146101e55780637b44a8f5146102005780639f43ddd214610212578063a9c072121461021b57600080fd5b80634f0c3834116100e95780634f0c38341461016d57806353556559146101a05780635ef4b340146101b35780637ab03cf2146101c05780637ac59bc0146101ca57600080fd5b806304f441811461011b57806312e8fdf8146101305780632f13b60c146101385780633ba0b9a914610153575b600080fd5b61012e610129366004610bad565b61028b565b005b61012e610412565b60015442115b60405190151581526020015b60405180910390f35b61015f640637c83cd681565b60405190815260200161014a565b610188738ace03fc45139fddba944c6a4082b604041d19fc81565b6040516001600160a01b03909116815260200161014a565b61012e6101ae366004610bad565b6104b5565b60005461013e9060ff1681565b61015f62ed4e0081565b61018873d291e7a03283640fdc51b121ac401383a46cc62381565b61018873d51dba7a94e1adea403553a8235c302cebf41a3c81565b60005461013e90610100900460ff1681565b61015f60015481565b61012e6105ff565b6101887f000000000000000000000000000000000000000000000000000000000000000081565b61018873c7283b66eb1eb5fb86327f08e1b5816b0720212b81565b61012e6106a5565b61015f633b9aca0081565b60005461013e9062010000900460ff1681565b3373d51dba7a94e1adea403553a8235c302cebf41a3c1461030a5760405162461bcd60e51b815260206004820152602e60248201527f4f6e6c79207468652074726962652074696d656c6f636b206d61792063616c6c60448201526d103a3434b990333ab731ba34b7b760911b60648201526084015b60405180910390fd5b61031762ed4e0042610bdc565b81116103595760405162461bcd60e51b815260206004820152601160248201527074696d657374616d7020746f6f206c6f7760781b6044820152606401610301565b60005462010000900460ff1615156001146103d55760405162461bcd60e51b815260206004820152603660248201527f436f6e7472616374206d75737420626520656e61626c6564206265666f72652060448201527518591b5a5b88199d5b98dd1a5bdb9cc818d85b1b195960521b6064820152608401610301565b600181905560405181815233907feb12923a5aa0d9a3885a3bed9c7cee86d52bb27d7399a46f1d34889ee367d1859060200160405180910390a250565b33738ace03fc45139fddba944c6a4082b604041d19fc1461046a5760405162461bcd60e51b81526020600482015260126024820152714f6e6c7920726172692074696d656c6f636b60701b6044820152606401610301565b6000805460ff19166001178155604051738ace03fc45139fddba944c6a4082b604041d19fc917f5dbe2599fd6080a6c8d91d0850baa44f165fb0c49bcfcbe85981e7ff77bdbe5291a2565b6001544211156105075760405162461bcd60e51b815260206004820152601960248201527f526564656d7074696f6e20706572696f64206973206f766572000000000000006044820152606401610301565b60005462010000900460ff1661055f5760405162461bcd60e51b815260206004820152601d60248201527f50726f706f73616c7320617265206e6f7420626f7468207061737365640000006044820152606401610301565b6000633b9aca00610575640637c83cd684610bf4565b61057f9190610c13565b90506105a173d291e7a03283640fdc51b121ac401383a46cc6233330856108bb565b6105c073c7283b66eb1eb5fb86327f08e1b5816b0720212b338361092c565b604080518381526020810183905233917f26981b9aefbb0f732b0264bd34c255e831001eb50b06bc85b32cc39e14389721910160405180910390a25050565b3373d51dba7a94e1adea403553a8235c302cebf41a3c146106585760405162461bcd60e51b81526020600482015260136024820152724f6e6c792074726962652074696d656c6f636b60681b6044820152606401610301565b6000805461ff00191661010017815560405173d51dba7a94e1adea403553a8235c302cebf41a3c917f5dbe2599fd6080a6c8d91d0850baa44f165fb0c49bcfcbe85981e7ff77bdbe5291a2565b60005462010000900460ff16156106ec5760405162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b6044820152606401610301565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316738ace03fc45139fddba944c6a4082b604041d19fc6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610768573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078c9190610c35565b6001600160a01b0316146107d75760405162461bcd60e51b815260206004820152601260248201527118591b5a5b881b9bdd081858d8d95c1d195960721b6044820152606401610301565b600054610100900460ff1661082e5760405162461bcd60e51b815260206004820152601a60248201527f54726962652044414f206e6f74207965742061636365707465640000000000006044820152606401610301565b60005460ff166108805760405162461bcd60e51b815260206004820152601960248201527f526172692044414f206e6f7420796574206163636570746564000000000000006044820152606401610301565b6000805462ff000019166201000017815560405133917f44bcce471802f9158ee4390426e4a931d186757cc50d302f6747504c17516d1291a2565b6040516001600160a01b03808516602483015283166044820152606481018290526109269085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610961565b50505050565b6040516001600160a01b03831660248201526044810182905261095c90849063a9059cbb60e01b906064016108ef565b505050565b60006109b6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316610a339092919063ffffffff16565b80519091501561095c57808060200190518101906109d49190610c5e565b61095c5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610301565b6060610a428484600085610a4c565b90505b9392505050565b606082471015610aad5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610301565b843b610afb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610301565b600080866001600160a01b03168587604051610b179190610cac565b60006040518083038185875af1925050503d8060008114610b54576040519150601f19603f3d011682016040523d82523d6000602084013e610b59565b606091505b5091509150610b69828286610b74565b979650505050505050565b60608315610b83575081610a45565b825115610b935782518084602001fd5b8160405162461bcd60e51b81526004016103019190610cc8565b600060208284031215610bbf57600080fd5b5035919050565b634e487b7160e01b600052601160045260246000fd5b60008219821115610bef57610bef610bc6565b500190565b6000816000190483118215151615610c0e57610c0e610bc6565b500290565b600082610c3057634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215610c4757600080fd5b81516001600160a01b0381168114610a4557600080fd5b600060208284031215610c7057600080fd5b81518015158114610a4557600080fd5b60005b83811015610c9b578181015183820152602001610c83565b838111156109265750506000910152565b60008251610cbe818460208701610c80565b9190910192915050565b6020815260008251806020840152610ce7816040850160208701610c80565b601f01601f1916919091016040019291505056fea264697066735822122036d124a661c1d190b892d62fa64562e4fc6ae1f0d442135f0fa16fdb39b35afd64736f6c634300080a0033" -} \ No newline at end of file diff --git a/external/abi/fei/Tribe.json b/external/abi/fei/Tribe.json deleted file mode 100644 index b678fc480..000000000 --- a/external/abi/fei/Tribe.json +++ /dev/null @@ -1,619 +0,0 @@ -{ - "contractName": "Tribe", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "minter_", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Approval", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "fromDelegate", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "toDelegate", - "type": "address" - } - ], - "name": "DelegateChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "delegate", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "previousBalance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newBalance", - "type": "uint256" - } - ], - "name": "DelegateVotesChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "minter", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newMinter", - "type": "address" - } - ], - "name": "MinterChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "from", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "to", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "Transfer", - "type": "event" - }, - { - "inputs": [], - "name": "DELEGATION_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DOMAIN_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PERMIT_TYPEHASH", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - } - ], - "name": "allowance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "approve", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "balanceOf", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - }, - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "name": "checkpoints", - "outputs": [ - { - "internalType": "uint32", - "name": "fromBlock", - "type": "uint32" - }, - { - "internalType": "uint96", - "name": "votes", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "decimals", - "outputs": [ - { - "internalType": "uint8", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - } - ], - "name": "delegate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "delegatee", - "type": "address" - }, - { - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "expiry", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "delegateBySig", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "delegates", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "getCurrentVotes", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - } - ], - "name": "getPriorVotes", - "outputs": [ - { - "internalType": "uint96", - "name": "", - "type": "uint96" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "mint", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "minter", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "nonces", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "numCheckpoints", - "outputs": [ - { - "internalType": "uint32", - "name": "", - "type": "uint32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "internalType": "address", - "name": "spender", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "deadline", - "type": "uint256" - }, - { - "internalType": "uint8", - "name": "v", - "type": "uint8" - }, - { - "internalType": "bytes32", - "name": "r", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "s", - "type": "bytes32" - } - ], - "name": "permit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "minter_", - "type": "address" - } - ], - "name": "setMinter", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "symbol", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalSupply", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "transfer", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "src", - "type": "address" - }, - { - "internalType": "address", - "name": "dst", - "type": "address" - }, - { - "internalType": "uint256", - "name": "rawAmount", - "type": "uint256" - } - ], - "name": "transferFrom", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "60806040526b033b2e3c9fd0803ce80000006000553480156200002157600080fd5b506040516200210938038062002109833981016040819052620000449162000121565b600080546001600160a01b0384168083526003602052604080842080546001600160601b0319166001600160601b0390941693909317909255825491519092917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620000b2919062000179565b60405180910390a3600180546001600160a01b0319166001600160a01b0383811691909117918290556040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f69262000111926000929116906200015f565b60405180910390a150506200019b565b6000806040838503121562000134578182fd5b8251620001418162000182565b6020840151909250620001548162000182565b809150509250929050565b6001600160a01b0392831681529116602082015260400190565b90815260200190565b6001600160a01b03811681146200019857600080fd5b50565b611f5e80620001ab6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063c3cda5201161007c578063c3cda520146102cc578063d505accf146102df578063dd62ed3e146102f2578063e7a324dc14610305578063f1127ed81461030d578063fca3b5aa1461032e57610158565b806370a0823114610258578063782d6fe11461026b5780637ecebe001461028b57806395d89b411461029e578063a9059cbb146102a6578063b4b5ea57146102b957610158565b806330adf81f1161011557806330adf81f146101e0578063313ce567146101e857806340c10f19146101fd578063587cde1e146102125780635c19a95c146102255780636fcfff451461023857610158565b806306fdde031461015d578063075461721461017b578063095ea7b31461019057806318160ddd146101b057806320606b70146101c557806323b872dd146101cd575b600080fd5b610165610341565b6040516101729190611b78565b60405180910390f35b610183610362565b6040516101729190611a9c565b6101a361019e3660046118ab565b610371565b6040516101729190611aca565b6101b861043b565b6040516101729190611ad5565b6101b8610441565b6101a36101db3660046117ff565b610458565b6101b86105a7565b6101f06105b3565b6040516101729190611e1c565b61021061020b3660046118ab565b6105b8565b005b6101836102203660046117b0565b610794565b6102106102333660046117b0565b6107af565b61024b6102463660046117b0565b6107bc565b6040516101729190611dec565b6101b86102663660046117b0565b6107d4565b61027e6102793660046118ab565b6107f8565b6040516101729190611e2a565b6101b86102993660046117b0565b610a06565b610165610a18565b6101a36102b43660046118ab565b610a39565b61027e6102c73660046117b0565b610a80565b6102106102da3660046118d5565b610af1565b6102106102ed36600461183f565b610cd8565b6101b86103003660046117cb565b610fcc565b6101b8611000565b61032061031b36600461192e565b61100c565b604051610172929190611dfd565b61021061033c3660046117b0565b611041565b60405180604001604052806005815260200164547269626560d81b81525081565b6001546001600160a01b031681565b60008060001983141561038757506000196103b7565b6103b4836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b3360008181526002602090815260408083206001600160a01b03891680855292529182902080546001600160601b0319166001600160601b03861617905590519091907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610427908590611e2a565b60405180910390a360019150505b92915050565b60005481565b60405161044d906119f2565b604051809103902081565b6001600160a01b038316600090815260026020908152604080832033808552908352818420548251808401909352601d8352600080516020611f0983398151915293830193909352916001600160601b03169083906104b89086906110d4565b9050866001600160a01b0316836001600160a01b0316141580156104e557506001600160601b0382811614155b1561058f57600061050f8383604051806060016040528060308152602001611eb360309139611103565b6001600160a01b038981166000818152600260209081526040808320948a16808452949091529081902080546001600160601b0319166001600160601b0386161790555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610585908590611e2a565b60405180910390a3505b61059a878783611142565b5060019695505050505050565b60405161044d90611988565b601281565b6001546001600160a01b031633146105eb5760405162461bcd60e51b81526004016105e290611bcb565b60405180910390fd5b6001600160a01b0382166106115760405162461bcd60e51b81526004016105e290611c02565b6000610640826040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90506000610668600054604051806060016040528060228152602001611e91602291396110d4565b905061068d8183604051806060016040528060228152602001611e9160229139611305565b6001600160601b0390811660009081556001600160a01b0386168152600360209081526040918290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526106f79216908490611305565b6001600160a01b03851660008181526003602052604080822080546001600160601b0319166001600160601b03959095169490941790935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610761908690611e2a565b60405180910390a36001600160a01b0380851660009081526004602052604081205461078e921684611341565b50505050565b6004602052600090815260409020546001600160a01b031681565b6107b9338261150d565b50565b60066020526000908152604090205463ffffffff1681565b6001600160a01b03166000908152600360205260409020546001600160601b031690565b60004382106108195760405162461bcd60e51b81526004016105e290611db5565b6001600160a01b03831660009081526006602052604090205463ffffffff1680610847576000915050610435565b6001600160a01b038416600090815260056020908152604080832063ffffffff6000198601811685529252909120541683106108c3576001600160a01b03841660009081526005602090815260408083206000199490940163ffffffff1683529290522054600160201b90046001600160601b03169050610435565b6001600160a01b038416600090815260056020908152604080832083805290915290205463ffffffff168310156108fe576000915050610435565b600060001982015b8163ffffffff168163ffffffff1611156109c157600282820363ffffffff16048103610930611771565b506001600160a01b038716600090815260056020908152604080832063ffffffff858116855290835292819020815180830190925254928316808252600160201b9093046001600160601b0316918101919091529087141561099c576020015194506104359350505050565b805163ffffffff168711156109b3578193506109ba565b6001820392505b5050610906565b506001600160a01b038516600090815260056020908152604080832063ffffffff909416835292905220546001600160601b03600160201b9091041691505092915050565b60076020526000908152604090205481565b60405180604001604052806005815260200164545249424560d81b81525081565b600080610a69836040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b9050610a76338583611142565b5060019392505050565b6001600160a01b03811660009081526006602052604081205463ffffffff1680610aab576000610aea565b6001600160a01b0383166000908152600560209081526040808320600019850163ffffffff168452909152902054600160201b90046001600160601b03165b9392505050565b6000604051610aff906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610b4e611591565b30604051602001610b629493929190611b36565b6040516020818303038152906040528051906020012090506000604051610b8890611a4d565b604051908190038120610ba3918a908a908a90602001611b12565b60405160208183030381529060405280519060200120905060008282604051602001610bd092919061196d565b604051602081830303815290604052805190602001209050600060018288888860405160008152602001604052604051610c0d9493929190611b5a565b6020604051602081039080840390855afa158015610c2f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610c625760405162461bcd60e51b81526004016105e290611cfc565b6001600160a01b03811660009081526007602052604090208054600181019091558914610ca15760405162461bcd60e51b81526004016105e290611d33565b87421115610cc15760405162461bcd60e51b81526004016105e290611c4c565b610ccb818b61150d565b505050505b505050505050565b6000600019861415610ced5750600019610d1d565b610d1a866040518060400160405280601d8152602001600080516020611f098339815191528152506110d4565b90505b6000604051610d2b906119f2565b604080519182900382208282019091526005825264547269626560d81b6020909201919091527febed0dee75115424b4c6084a9ab165e0c99bcf5a44403d7510e1ad1caeaea506610d7a611591565b30604051602001610d8e9493929190611b36565b6040516020818303038152906040528051906020012090506000604051610db490611988565b604080519182900382206001600160a01b038d16600090815260076020908152929020805460018101909155610df69391928e928e928e9290918e9101611ade565b60405160208183030381529060405280519060200120905060008282604051602001610e2392919061196d565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610e609493929190611b5a565b6020604051602081039080840390855afa158015610e82573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116610eb55760405162461bcd60e51b81526004016105e290611cfc565b8b6001600160a01b0316816001600160a01b031614610ee65760405162461bcd60e51b81526004016105e290611ccf565b88421115610f065760405162461bcd60e51b81526004016105e290611c4c565b84600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002060008d6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a8154816001600160601b0302191690836001600160601b031602179055508a6001600160a01b03168c6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92587604051610fb69190611e2a565b60405180910390a3505050505050505050505050565b6001600160a01b0391821660009081526002602090815260408083209390941682529190915220546001600160601b031690565b60405161044d90611a4d565b600560209081526000928352604080842090915290825290205463ffffffff811690600160201b90046001600160601b031682565b6001546001600160a01b0316331461106b5760405162461bcd60e51b81526004016105e290611d61565b6001546040517f3b0007eb941cf645526cbb3a4fdaecda9d28ce4843167d9263b536a1f1edc0f6916110aa916001600160a01b03909116908490611ab0565b60405180910390a1600180546001600160a01b0319166001600160a01b0392909216919091179055565b600081600160601b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b509192915050565b6000836001600160601b0316836001600160601b03161115829061113a5760405162461bcd60e51b81526004016105e29190611b78565b505050900390565b6001600160a01b0383166111685760405162461bcd60e51b81526004016105e290611c83565b6001600160a01b03821661118e5760405162461bcd60e51b81526004016105e290611c02565b6001600160a01b0383166000908152600360209081526040918290205482516060810190935260268084526111d9936001600160601b039092169285929190611ee390830139611103565b6001600160a01b03848116600090815260036020908152604080832080546001600160601b0319166001600160601b039687161790559286168252908290205482518084019093528183527f54726962653a207472616e7366657220616d6f756e74206f766572666c6f7773918301919091526112599216908390611305565b6001600160a01b038381166000818152600360205260409081902080546001600160601b0319166001600160601b0395909516949094179093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906112c6908590611e2a565b60405180910390a36001600160a01b0380841660009081526004602052604080822054858416835291205461130092918216911683611341565b505050565b6000838301826001600160601b0380871690831610156113385760405162461bcd60e51b81526004016105e29190611b78565b50949350505050565b816001600160a01b0316836001600160a01b03161415801561136c57506000816001600160601b0316115b15611300576001600160a01b03831615611441576001600160a01b03831660009081526006602052604081205463ffffffff1690816113ac5760006113eb565b6001600160a01b0385166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b9050600061142f82856040518060400160405280601d81526020017f54726962653a20766f746520616d6f756e7420756e646572666c6f7773000000815250611103565b905061143d86848484611595565b5050505b6001600160a01b03821615611300576001600160a01b03821660009081526006602052604081205463ffffffff16908161147c5760006114bb565b6001600160a01b0384166000908152600560209081526040808320600019860163ffffffff168452909152902054600160201b90046001600160601b03165b905060006114ff82856040518060400160405280601c81526020017f54726962653a20766f746520616d6f756e74206f766572666c6f777300000000815250611305565b9050610cd085848484611595565b6001600160a01b03808316600081815260046020818152604080842080546003845282862054949093528787166001600160a01b031984168117909155905191909516946001600160601b039092169391928592917f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a461078e828483611341565b4690565b60006115b943604051806060016040528060238152602001611e6e6023913961174a565b905060008463ffffffff1611801561160257506001600160a01b038516600090815260056020908152604080832063ffffffff6000198901811685529252909120548282169116145b15611661576001600160a01b0385166000908152600560209081526040808320600019880163ffffffff168452909152902080546fffffffffffffffffffffffff000000001916600160201b6001600160601b03851602179055611700565b60408051808201825263ffffffff80841682526001600160601b0380861660208085019182526001600160a01b038b166000818152600583528781208c871682528352878120965187549451909516600160201b026fffffffffffffffffffffffff000000001995871663ffffffff19958616179590951694909417909555938252600690935292909220805460018801909316929091169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724848460405161173b929190611e3e565b60405180910390a25050505050565b600081600160201b84106110fb5760405162461bcd60e51b81526004016105e29190611b78565b604080518082019091526000808252602082015290565b80356001600160a01b038116811461043557600080fd5b803560ff8116811461043557600080fd5b6000602082840312156117c1578081fd5b610aea8383611788565b600080604083850312156117dd578081fd5b6117e78484611788565b91506117f68460208501611788565b90509250929050565b600080600060608486031215611813578081fd5b833561181e81611e58565b9250602084013561182e81611e58565b929592945050506040919091013590565b600080600080600080600060e0888a031215611859578283fd5b6118638989611788565b96506118728960208a01611788565b9550604088013594506060880135935061188f8960808a0161179f565b925060a0880135915060c0880135905092959891949750929550565b600080604083850312156118bd578182fd5b6118c78484611788565b946020939093013593505050565b60008060008060008060c087890312156118ed578182fd5b6118f78888611788565b95506020870135945060408701359350611914886060890161179f565b92506080870135915060a087013590509295509295509295565b60008060408385031215611940578182fd5b61194a8484611788565b9150602083013563ffffffff81168114611962578182fd5b809150509250929050565b61190160f01b81526002810192909252602282015260420190565b7f5065726d69742861646472657373206f776e65722c616464726573732073706581527f6e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63656020820152712c75696e7432353620646561646c696e652960701b604082015260520190565b7f454950373132446f6d61696e28737472696e67206e616d652c75696e7432353681527f20636861696e49642c6164647265737320766572696679696e67436f6e74726160208201526263742960e81b604082015260430190565b7f44656c65676174696f6e28616464726573732064656c6567617465652c75696e81527f74323536206e6f6e63652c75696e7432353620657870697279290000000000006020820152603a0190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015611ba457858101830151858201604001528201611b88565b81811115611bb55783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601f908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206d696e7400604082015260600190565b6020808252602a908201527f54726962653a2063616e6e6f74207472616e7366657220746f20746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526018908201527f54726962653a207369676e617475726520657870697265640000000000000000604082015260600190565b6020808252602c908201527f54726962653a2063616e6e6f74207472616e736665722066726f6d207468652060408201526b7a65726f206164647265737360a01b606082015260800190565b602080825260139082015272151c9a58994e881d5b985d5d1a1bdc9a5e9959606a1b604082015260600190565b60208082526018908201527f54726962653a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526014908201527354726962653a20696e76616c6964206e6f6e636560601b604082015260600190565b60208082526034908201527f54726962653a206f6e6c7920746865206d696e7465722063616e206368616e676040820152736520746865206d696e746572206164647265737360601b606082015260800190565b60208082526019908201527f54726962653a206e6f74207965742064657465726d696e656400000000000000604082015260600190565b63ffffffff91909116815260200190565b63ffffffff9290921682526001600160601b0316602082015260400190565b60ff91909116815260200190565b6001600160601b0391909116815260200190565b6001600160601b0392831681529116602082015260400190565b6001600160a01b03811681146107b957600080fdfe54726962653a20626c6f636b206e756d6265722065786365656473203332206269747354726962653a20746f74616c537570706c792065786365656473203936206269747354726962653a207472616e7366657220616d6f756e742065786365656473207370656e64657220616c6c6f77616e636554726962653a207472616e7366657220616d6f756e7420657863656564732062616c616e636554726962653a20616d6f756e7420657863656564732039362062697473000000a26469706673582212204b5ab84c8ee5befcd5fba2745834ef385b0d07beb1f852bc25562eb10a137ac064736f6c63430006060033" -} \ No newline at end of file diff --git a/external/abi/rari/Timelock.json b/external/abi/rari/Timelock.json deleted file mode 100644 index f2802d1b1..000000000 --- a/external/abi/rari/Timelock.json +++ /dev/null @@ -1,463 +0,0 @@ -{ - "contractName": "Timelock", - "abi": [ - { - "inputs": [ - { - "internalType": "address", - "name": "admin_", - "type": "address" - }, - { - "internalType": "uint256", - "name": "delay_", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "CancelTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "ExecuteTransaction", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "NewAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "newDelay", - "type": "uint256" - } - ], - "name": "NewDelay", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "newPendingAdmin", - "type": "address" - } - ], - "name": "NewPendingAdmin", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "txHash", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "QueueTransaction", - "type": "event" - }, - { - "payable": true, - "stateMutability": "payable", - "type": "fallback" - }, - { - "constant": true, - "inputs": [], - "name": "GRACE_PERIOD", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MAXIMUM_DELAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "MINIMUM_DELAY", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [], - "name": "acceptAdmin", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "admin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "cancelTransaction", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "delay", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "executeTransaction", - "outputs": [ - { - "internalType": "bytes", - "name": "", - "type": "bytes" - } - ], - "payable": true, - "stateMutability": "payable", - "type": "function" - }, - { - "constant": true, - "inputs": [], - "name": "pendingAdmin", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "target", - "type": "address" - }, - { - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "internalType": "string", - "name": "signature", - "type": "string" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "eta", - "type": "uint256" - } - ], - "name": "queueTransaction", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": true, - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "queuedTransactions", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "payable": false, - "stateMutability": "view", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "uint256", - "name": "delay_", - "type": "uint256" - } - ], - "name": "setDelay", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - }, - { - "constant": false, - "inputs": [ - { - "internalType": "address", - "name": "pendingAdmin_", - "type": "address" - } - ], - "name": "setPendingAdmin", - "outputs": [], - "payable": false, - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "608060405234801561001057600080fd5b506040516118a63803806118a68339818101604052604081101561003357600080fd5b5080516020909101516202a30081101561007e5760405162461bcd60e51b81526004018080602001828103825260378152602001806118376037913960400191505060405180910390fd5b62278d008111156100c05760405162461bcd60e51b815260040180806020018281038252603881526020018061186e6038913960400191505060405180910390fd5b600080546001600160a01b039093166001600160a01b031990931692909217909155600255611743806100f46000396000f3fe6080604052600436106100c25760003560e01c80636a42b8f81161007f578063c1a287e211610059578063c1a287e2146105dd578063e177246e146105f2578063f2b065371461061c578063f851a4401461065a576100c2565b80636a42b8f81461059e5780637d645fab146105b3578063b1b43ae5146105c8576100c2565b80630825f38f146100c45780630e18b68114610279578063267822471461028e5780633a66f901146102bf5780634dd18bf51461041e578063591fcdfe14610451575b005b610204600480360360a08110156100da57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561010957600080fd5b82018360208201111561011b57600080fd5b803590602001918460018302840111600160201b8311171561013c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561018e57600080fd5b8201836020820111156101a057600080fd5b803590602001918460018302840111600160201b831117156101c157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550509135925061066f915050565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561023e578181015183820152602001610226565b50505050905090810190601f16801561026b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561028557600080fd5b506100c2610b88565b34801561029a57600080fd5b506102a3610c24565b604080516001600160a01b039092168252519081900360200190f35b3480156102cb57600080fd5b5061040c600480360360a08110156102e257600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561031157600080fd5b82018360208201111561032357600080fd5b803590602001918460018302840111600160201b8311171561034457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561039657600080fd5b8201836020820111156103a857600080fd5b803590602001918460018302840111600160201b831117156103c957600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610c33915050565b60408051918252519081900360200190f35b34801561042a57600080fd5b506100c26004803603602081101561044157600080fd5b50356001600160a01b0316610f44565b34801561045d57600080fd5b506100c2600480360360a081101561047457600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460018302840111600160201b831117156104d657600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561052857600080fd5b82018360208201111561053a57600080fd5b803590602001918460018302840111600160201b8311171561055b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505091359250610fd2915050565b3480156105aa57600080fd5b5061040c611288565b3480156105bf57600080fd5b5061040c61128e565b3480156105d457600080fd5b5061040c611295565b3480156105e957600080fd5b5061040c61129c565b3480156105fe57600080fd5b506100c26004803603602081101561061557600080fd5b50356112a3565b34801561062857600080fd5b506106466004803603602081101561063f57600080fd5b5035611398565b604080519115158252519081900360200190f35b34801561066657600080fd5b506102a36113ad565b6000546060906001600160a01b031633146106bb5760405162461bcd60e51b81526004018080602001828103825260388152602001806114226038913960400191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561072a578181015183820152602001610712565b50505050905090810190601f1680156107575780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561078a578181015183820152602001610772565b50505050905090810190601f1680156107b75780820380516001836020036101000a031916815260200191505b5060408051601f1981840301815291815281516020928301206000818152600390935291205490995060ff16975061082896505050505050505760405162461bcd60e51b815260040180806020018281038252603d815260200180611575603d913960400191505060405180910390fd5b826108316113bc565b101561086e5760405162461bcd60e51b81526004018080602001828103825260458152602001806114c46045913960600191505060405180910390fd5b610881836212750063ffffffff6113c016565b6108896113bc565b11156108c65760405162461bcd60e51b81526004018080602001828103825260338152602001806114916033913960400191505060405180910390fd5b6000818152600360205260409020805460ff1916905584516060906108ec575083610979565b85805190602001208560405160200180836001600160e01b0319166001600160e01b031916815260040182805190602001908083835b602083106109415780518252601f199092019160209182019101610922565b6001836020036101000a0380198251168184511680821785525050505050509050019250505060405160208183030381529060405290505b60006060896001600160a01b031689846040518082805190602001908083835b602083106109b85780518252601f199092019160209182019101610999565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114610a1a576040519150601f19603f3d011682016040523d82523d6000602084013e610a1f565b606091505b509150915081610a605760405162461bcd60e51b815260040180806020018281038252603d815260200180611658603d913960400191505060405180910390fd5b896001600160a01b0316847fa560e3198060a2f10670c1ec5b403077ea6ae93ca8de1c32b451dc1a943cd6e78b8b8b8b604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610add578181015183820152602001610ac5565b50505050905090810190601f168015610b0a5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610b3d578181015183820152602001610b25565b50505050905090810190601f168015610b6a5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39998505050505050505050565b6001546001600160a01b03163314610bd15760405162461bcd60e51b81526004018080602001828103825260388152602001806115b26038913960400191505060405180910390fd5b60008054336001600160a01b031991821617808355600180549092169091556040516001600160a01b03909116917f71614071b88dee5e0b2ae578a9dd7b2ebbe9ae832ba419dc0242cd065a290b6c91a2565b6001546001600160a01b031681565b600080546001600160a01b03163314610c7d5760405162461bcd60e51b81526004018080602001828103825260368152602001806116226036913960400191505060405180910390fd5b610c97600254610c8b6113bc565b9063ffffffff6113c016565b821015610cd55760405162461bcd60e51b81526004018080602001828103825260498152602001806116956049913960600191505060405180910390fd5b6000868686868660405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610d44578181015183820152602001610d2c565b50505050905090810190601f168015610d715780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610da4578181015183820152602001610d8c565b50505050905090810190601f168015610dd15780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060016003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550866001600160a01b0316817f76e2796dc3a81d57b0e8504b647febcbeeb5f4af818e164f11eef8131a6a763f88888888604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b83811015610e9c578181015183820152602001610e84565b50505050905090810190601f168015610ec95780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b83811015610efc578181015183820152602001610ee4565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a39695505050505050565b333014610f825760405162461bcd60e51b81526004018080602001828103825260388152602001806115ea6038913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b0383811691909117918290556040519116907f69d78e38a01985fbb1462961809b4b2d65531bc93b2b94037f3334b82ca4a75690600090a250565b6000546001600160a01b0316331461101b5760405162461bcd60e51b815260040180806020018281038252603781526020018061145a6037913960400191505060405180910390fd5b6000858585858560405160200180866001600160a01b03166001600160a01b031681526020018581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b8381101561108a578181015183820152602001611072565b50505050905090810190601f1680156110b75780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b838110156110ea5781810151838201526020016110d2565b50505050905090810190601f1680156111175780820380516001836020036101000a031916815260200191505b5097505050505050505060405160208183030381529060405280519060200120905060006003600083815260200190815260200160002060006101000a81548160ff021916908315150217905550856001600160a01b0316817f2fffc091a501fd91bfbff27141450d3acb40fb8e6d8382b243ec7a812a3aaf8787878787604051808581526020018060200180602001848152602001838103835286818151815260200191508051906020019080838360005b838110156111e25781810151838201526020016111ca565b50505050905090810190601f16801561120f5780820380516001836020036101000a031916815260200191505b50838103825285518152855160209182019187019080838360005b8381101561124257818101518382015260200161122a565b50505050905090810190601f16801561126f5780820380516001836020036101000a031916815260200191505b50965050505050505060405180910390a3505050505050565b60025481565b62278d0081565b6202a30081565b6212750081565b3330146112e15760405162461bcd60e51b81526004018080602001828103825260318152602001806116de6031913960400191505060405180910390fd5b6202a3008110156113235760405162461bcd60e51b81526004018080602001828103825260348152602001806115096034913960400191505060405180910390fd5b62278d008111156113655760405162461bcd60e51b815260040180806020018281038252603881526020018061153d6038913960400191505060405180910390fd5b600281905560405181907f948b1f6a42ee138b7e34058ba85a37f716d55ff25ff05a763f15bed6a04c8d2c90600090a250565b60036020526000908152604090205460ff1681565b6000546001600160a01b031681565b4290565b60008282018381101561141a576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b939250505056fe54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a63616e63656c5472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206973207374616c652e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774207375727061737365642074696d65206c6f636b2e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e206861736e2774206265656e207175657565642e54696d656c6f636b3a3a61636365707441646d696e3a2043616c6c206d75737420636f6d652066726f6d2070656e64696e6741646d696e2e54696d656c6f636b3a3a73657450656e64696e6741646d696e3a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a2043616c6c206d75737420636f6d652066726f6d2061646d696e2e54696d656c6f636b3a3a657865637574655472616e73616374696f6e3a205472616e73616374696f6e20657865637574696f6e2072657665727465642e54696d656c6f636b3a3a71756575655472616e73616374696f6e3a20457374696d6174656420657865637574696f6e20626c6f636b206d75737420736174697366792064656c61792e54696d656c6f636b3a3a73657444656c61793a2043616c6c206d75737420636f6d652066726f6d2054696d656c6f636b2ea265627a7a723158204006fd3bbe7037fa19163d36030b3420a9f20909a7c457317f16446d0cf5f48764736f6c6343000511003254696d656c6f636b3a3a636f6e7374727563746f723a2044656c6179206d75737420657863656564206d696e696d756d2064656c61792e54696d656c6f636b3a3a73657444656c61793a2044656c6179206d757374206e6f7420657863656564206d6178696d756d2064656c61792e000000000000000000000000fbf3f9067b602126db5879ff7e6a66d391c69dfd000000000000000000000000000000000000000000000000000000000002a300" -} \ No newline at end of file diff --git a/test/integration/rgtMigrationWrapModule.spec.ts b/test/integration/rgtMigrationWrapModule.spec.ts index 64add4daa..44f136e99 100644 --- a/test/integration/rgtMigrationWrapModule.spec.ts +++ b/test/integration/rgtMigrationWrapModule.spec.ts @@ -48,12 +48,9 @@ describe("rgtMigrationWrapModule", () => { // RgtMigrationWrapV2Adapter setup rgtToken = await deployer.mocks.deployTokenMock(owner.address); - tribeToken = await deployer.mocks.deployTokenMock(owner.address); + tribeToken = await deployer.mocks.deployTokenMock(owner.address, ether(267056734300)); - const rariTimelock = await deployer.external.deployRariTimelock(owner.address, 3); - const tribe = await deployer.external.deployFeiTribe(owner.address, owner.address); - const rariTribeDao = await deployer.external.deployFeiDAO(tribe.address, rariTimelock.address, ADDRESS_ZERO); - const pegExchanger = await deployer.external.deployPegExchanger(rariTribeDao.address); + const pegExchanger = await deployer.mocks.deployTribePegExchangerMock(rgtToken.address, tribeToken.address); adapter = await deployer.adapters.deployRgtMigrationWrapAdapter(pegExchanger.address); await setup.integrationRegistry.addIntegration(wrapModule.address, rgtMigrationWrapAdapterIntegrationName, adapter.address); @@ -95,7 +92,7 @@ describe("rgtMigrationWrapModule", () => { subjectSetToken = setToken.address; subjectUnderlyingToken = rgtToken.address; subjectWrappedToken = tribeToken.address; - subjectUnderlyingUnits = BigNumber.from(10 ** 8); + subjectUnderlyingUnits = BigNumber.from(10 ** 9); subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; }); @@ -111,12 +108,17 @@ describe("rgtMigrationWrapModule", () => { } it("should convert underlying balance of RGT tokens to TRIBE tokens * 26705673430 / 10e9", async () => { + console.log("started"); const previousRgtTokenBalance = await rgtToken.balanceOf(setToken.address); + console.log("rgtToken balance " + previousRgtTokenBalance); const previousTribeTokenBalance = await tribeToken.balanceOf(setToken.address); + console.log("started 3"); expect(previousRgtTokenBalance).to.eq(BigNumber.from(10 ** 9)); expect(previousTribeTokenBalance).to.eq(ZERO); + console.log("subject"); await subject(); + console.log("subject complete"); const rgtTokenBalance = await rgtToken.balanceOf(setToken.address); const tribeTokenBalance = await tribeToken.balanceOf(setToken.address); diff --git a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts index 12568c734..a4bee9f0c 100644 --- a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts +++ b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts @@ -31,8 +31,9 @@ describe("RgtMigrationWrapAdapter", () => { deployer = new DeployHelper(owner.wallet); - const rariTribeDAO = await deployer.mocks.deployTokenMock(owner.address); - pegExchanger = await deployer.external.deployPegExchanger(rariTribeDAO.address); + const rgt = await deployer.mocks.deployTokenMock(owner.address); + const tribe = await deployer.mocks.deployTokenMock(owner.address); + pegExchanger = await deployer.mocks.deployTribePegExchangerMock(rgt.address, tribe.address); rgtMigrationWrapAdapter = await deployer.adapters.deployRgtMigrationWrapAdapter(pegExchanger.address); }); diff --git a/utils/contracts/index.ts b/utils/contracts/index.ts index ef2599a27..8bbc5c9ef 100644 --- a/utils/contracts/index.ts +++ b/utils/contracts/index.ts @@ -96,6 +96,7 @@ export { StreamingFeeModule } from "../../typechain/StreamingFeeModule"; export { SynthetixExchangeAdapter } from "../../typechain/SynthetixExchangeAdapter"; export { SynthetixExchangerMock } from "../../typechain/SynthetixExchangerMock"; export { SynthMock } from "../../typechain/SynthMock"; +export { TribePegExchangerMock } from "../../typechain/TribePegExchangerMock"; export { TokenSwap } from "../../typechain/TokenSwap"; export { TradeModule } from "../../typechain/TradeModule"; export { TradeAdapterMock } from "../../typechain/TradeAdapterMock"; diff --git a/utils/deploys/deployExternal.ts b/utils/deploys/deployExternal.ts index 06dc0fd52..54b8333ab 100644 --- a/utils/deploys/deployExternal.ts +++ b/utils/deploys/deployExternal.ts @@ -237,18 +237,6 @@ import { DGLight, DgToken } from "../contracts/dg"; import { DgToken__factory } from "../../typechain/factories/DgToken__factory"; import { DGLight__factory } from "../../typechain/factories/DGLight__factory"; -import { PegExchanger } from "../../typechain/PegExchanger"; -import { PegExchanger__factory } from "../../typechain/factories/PegExchanger__factory"; -import { FeiDAO } from "../../typechain/FeiDAO"; -import { FeiDAO__factory } from "../../typechain/factories/FeiDAO__factory"; -import { Tribe } from "../../typechain/Tribe"; -import { Tribe__factory } from "../../typechain/factories/Tribe__factory"; -import { FeiDAOTimelock } from "../../typechain/FeiDAOTimelock"; -import { FeiDAOTimelock__factory } from "../../typechain/factories/FeiDAOTimelock__factory"; - -import { Timelock } from "../../typechain/Timelock"; -import { Timelock__factory } from "../../typechain/factories/Timelock__factory"; - export default class DeployExternalContracts { private _deployerSigner: Signer; @@ -833,28 +821,6 @@ export default class DeployExternalContracts { return await new DgToken__factory(this._deployerSigner).deploy(); } - // Rari - public async deployRariTimelock(admin: Address, delay: BigNumberish): Promise { - return await new Timelock__factory(this._deployerSigner).deploy(admin, delay); - } - - // Fei Protocol - public async deployFeiTimelock(core: Address, admin: Address, delay: BigNumberish, minDelay: BigNumberish): Promise { - return await new FeiDAOTimelock__factory(this._deployerSigner).deploy(core, admin, delay, minDelay); - } - - public async deployFeiTribe(account: Address, minter: Address): Promise { - return await new Tribe__factory(this._deployerSigner).deploy(account, minter); - } - - public async deployFeiDAO(tribe: Address, timelock: Address, guardian: Address): Promise { - return await new FeiDAO__factory(this._deployerSigner).deploy(tribe, timelock, guardian); - } - - public async deployPegExchanger(rariTribeDAO: Address): Promise { - return await new PegExchanger__factory(this._deployerSigner).deploy(rariTribeDAO); - } - // PerpV2 public async deployPerpV2OrderBook(): Promise { diff --git a/utils/deploys/deployMocks.ts b/utils/deploys/deployMocks.ts index c70677c3e..7b2e69ae9 100644 --- a/utils/deploys/deployMocks.ts +++ b/utils/deploys/deployMocks.ts @@ -41,6 +41,7 @@ import { TradeAdapterMock, SynthMock, SynthetixExchangerMock, + TribePegExchangerMock, Uint256ArrayUtilsMock, WrapAdapterMock, WrapV2AdapterMock, @@ -91,6 +92,7 @@ import { StakingAdapterMock__factory } from "../../typechain/factories/StakingAd import { StandardTokenMock__factory } from "../../typechain/factories/StandardTokenMock__factory"; import { StandardTokenWithRoundingErrorMock__factory } from "../../typechain/factories/StandardTokenWithRoundingErrorMock__factory"; import { StandardTokenWithFeeMock__factory } from "../../typechain/factories/StandardTokenWithFeeMock__factory"; +import { TribePegExchangerMock__factory } from "../../typechain/factories/TribePegExchangerMock__factory"; import { TradeAdapterMock__factory } from "../../typechain/factories/TradeAdapterMock__factory"; import { Uint256ArrayUtilsMock__factory } from "../../typechain/factories/Uint256ArrayUtilsMock__factory"; import { WrapAdapterMock__factory } from "../../typechain/factories/WrapAdapterMock__factory"; @@ -401,6 +403,10 @@ export default class DeployMocks { return await new ChainlinkAggregatorMock__factory(this._deployerSigner).deploy(decimals); } + public async deployTribePegExchangerMock(rgt: Address, tribe: Address): Promise { + return await new TribePegExchangerMock__factory(this._deployerSigner).deploy(rgt, tribe); + } + /** *********************************** * Instance getters ************************************/ From d23a2345ef5314e2fb7efe8270ef02615a7c057c Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Thu, 20 Jan 2022 20:49:23 +1100 Subject: [PATCH 08/16] continue trying to fix integration test wtf --- .../mocks/external/TribePegExchangerMock.sol | 1 + .../integration/rgtMigrationWrapModule.spec.ts | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/contracts/mocks/external/TribePegExchangerMock.sol b/contracts/mocks/external/TribePegExchangerMock.sol index 8befa34c4..f3fa99d5e 100644 --- a/contracts/mocks/external/TribePegExchangerMock.sol +++ b/contracts/mocks/external/TribePegExchangerMock.sol @@ -51,6 +51,7 @@ contract TribePegExchangerMock { console.log(tribeOut); IERC20(rgt).safeTransferFrom(msg.sender, address(this), amount); console.log("transferred rgt"); + console.log(IERC20(tribe).balanceOf(tribe)); IERC20(tribe).safeTransfer(msg.sender, tribeOut); console.log("transferred tribe"); emit Exchange(msg.sender, amount, tribeOut); diff --git a/test/integration/rgtMigrationWrapModule.spec.ts b/test/integration/rgtMigrationWrapModule.spec.ts index 44f136e99..0a727a96a 100644 --- a/test/integration/rgtMigrationWrapModule.spec.ts +++ b/test/integration/rgtMigrationWrapModule.spec.ts @@ -3,7 +3,7 @@ import { BigNumber } from "ethers"; import { Address } from "@utils/types"; import { Account } from "@utils/test/types"; -import { ADDRESS_ZERO, ZERO } from "@utils/constants"; +import { ADDRESS_ZERO, MAX_UINT_256, ZERO } from "@utils/constants"; import { RgtMigrationWrapAdapter, SetToken, StandardTokenMock, WrapModule } from "@utils/contracts"; import DeployHelper from "@utils/deploys"; import { @@ -46,11 +46,13 @@ describe("rgtMigrationWrapModule", () => { wrapModule = await deployer.modules.deployWrapModule(setup.controller.address, setup.weth.address); await setup.controller.addModule(wrapModule.address); - // RgtMigrationWrapV2Adapter setup rgtToken = await deployer.mocks.deployTokenMock(owner.address); - tribeToken = await deployer.mocks.deployTokenMock(owner.address, ether(267056734300)); + tribeToken = await deployer.mocks.deployTokenMock(owner.address); + // RgtMigrationWrapV2Adapter setup const pegExchanger = await deployer.mocks.deployTribePegExchangerMock(rgtToken.address, tribeToken.address); + await tribeToken.approve(pegExchanger.address, MAX_UINT_256); + await rgtToken.approve(pegExchanger.address, MAX_UINT_256); adapter = await deployer.adapters.deployRgtMigrationWrapAdapter(pegExchanger.address); await setup.integrationRegistry.addIntegration(wrapModule.address, rgtMigrationWrapAdapterIntegrationName, adapter.address); @@ -75,8 +77,7 @@ describe("rgtMigrationWrapModule", () => { // Issue some Sets setTokensIssued = ether(10); - const underlyingRequired = setTokensIssued.div(10 ** 9); - await rgtToken.approve(setup.issuanceModule.address, underlyingRequired); + await rgtToken.approve(setup.issuanceModule.address, BigNumber.from(10 ** 9)); await setup.issuanceModule.issue(setToken.address, setTokensIssued, owner.address); }); @@ -95,6 +96,8 @@ describe("rgtMigrationWrapModule", () => { subjectUnderlyingUnits = BigNumber.from(10 ** 9); subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; + + tribeToken.mint(tribeToken.address, BigNumber.from(10 ** 9).mul(28)); }); async function subject(): Promise { @@ -108,11 +111,8 @@ describe("rgtMigrationWrapModule", () => { } it("should convert underlying balance of RGT tokens to TRIBE tokens * 26705673430 / 10e9", async () => { - console.log("started"); const previousRgtTokenBalance = await rgtToken.balanceOf(setToken.address); - console.log("rgtToken balance " + previousRgtTokenBalance); const previousTribeTokenBalance = await tribeToken.balanceOf(setToken.address); - console.log("started 3"); expect(previousRgtTokenBalance).to.eq(BigNumber.from(10 ** 9)); expect(previousTribeTokenBalance).to.eq(ZERO); @@ -146,6 +146,8 @@ describe("rgtMigrationWrapModule", () => { subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; + tribeToken.mint(tribeToken.address, BigNumber.from(10 ** 9).mul(28)); + await wrapModule.connect(subjectCaller.wallet).wrap( subjectSetToken, subjectUnderlyingToken, From cce6e001ec173776e6d29bdc7ca2a28d705f3d94 Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Fri, 21 Jan 2022 00:26:50 +1100 Subject: [PATCH 09/16] fix integration tests --- .../mocks/external/TribePegExchangerMock.sol | 10 ++++---- .../rgtMigrationWrapModule.spec.ts | 23 +++++++++---------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/contracts/mocks/external/TribePegExchangerMock.sol b/contracts/mocks/external/TribePegExchangerMock.sol index f3fa99d5e..d6385a693 100644 --- a/contracts/mocks/external/TribePegExchangerMock.sol +++ b/contracts/mocks/external/TribePegExchangerMock.sol @@ -45,13 +45,13 @@ contract TribePegExchangerMock { /// @notice call to exchange held RGT with TRIBE /// @param amount the amount to exchange + /// Mirrors the real contract without the permission state checks. function exchange(uint256 amount) public { - uint256 tribeOut = amount * exchangeRate / scalar; - console.log("starting transfer"); - console.log(tribeOut); + uint256 tribeOut = amount * exchangeRate / scalar; IERC20(rgt).safeTransferFrom(msg.sender, address(this), amount); - console.log("transferred rgt"); - console.log(IERC20(tribe).balanceOf(tribe)); + console.log("transferred from rgt"); + console.log("transferring %s", tribeOut); + console.log(IERC20(tribe).balanceOf(address(this))); IERC20(tribe).safeTransfer(msg.sender, tribeOut); console.log("transferred tribe"); emit Exchange(msg.sender, amount, tribeOut); diff --git a/test/integration/rgtMigrationWrapModule.spec.ts b/test/integration/rgtMigrationWrapModule.spec.ts index 0a727a96a..db3b7c026 100644 --- a/test/integration/rgtMigrationWrapModule.spec.ts +++ b/test/integration/rgtMigrationWrapModule.spec.ts @@ -3,8 +3,8 @@ import { BigNumber } from "ethers"; import { Address } from "@utils/types"; import { Account } from "@utils/test/types"; -import { ADDRESS_ZERO, MAX_UINT_256, ZERO } from "@utils/constants"; -import { RgtMigrationWrapAdapter, SetToken, StandardTokenMock, WrapModule } from "@utils/contracts"; +import { ADDRESS_ZERO, ZERO } from "@utils/constants"; +import { RgtMigrationWrapAdapter, SetToken, StandardTokenMock, TribePegExchangerMock, WrapModule } from "@utils/contracts"; import DeployHelper from "@utils/deploys"; import { ether, @@ -28,9 +28,12 @@ describe("rgtMigrationWrapModule", () => { let rgtToken: StandardTokenMock; let tribeToken: StandardTokenMock; + let pegExchanger: TribePegExchangerMock; let adapter: RgtMigrationWrapAdapter; const rgtMigrationWrapAdapterIntegrationName: string = "RGT_MIGRATION_WRAPPER"; + const exchangeRate = 26705673430; + const scalar = 1e9; before(async () => { [ @@ -50,9 +53,7 @@ describe("rgtMigrationWrapModule", () => { tribeToken = await deployer.mocks.deployTokenMock(owner.address); // RgtMigrationWrapV2Adapter setup - const pegExchanger = await deployer.mocks.deployTribePegExchangerMock(rgtToken.address, tribeToken.address); - await tribeToken.approve(pegExchanger.address, MAX_UINT_256); - await rgtToken.approve(pegExchanger.address, MAX_UINT_256); + pegExchanger = await deployer.mocks.deployTribePegExchangerMock(rgtToken.address, tribeToken.address); adapter = await deployer.adapters.deployRgtMigrationWrapAdapter(pegExchanger.address); await setup.integrationRegistry.addIntegration(wrapModule.address, rgtMigrationWrapAdapterIntegrationName, adapter.address); @@ -93,11 +94,11 @@ describe("rgtMigrationWrapModule", () => { subjectSetToken = setToken.address; subjectUnderlyingToken = rgtToken.address; subjectWrappedToken = tribeToken.address; - subjectUnderlyingUnits = BigNumber.from(10 ** 9); + subjectUnderlyingUnits = BigNumber.from(10 ** 8); subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; - tribeToken.mint(tribeToken.address, BigNumber.from(10 ** 9).mul(28)); + await tribeToken.mint(pegExchanger.address, BigNumber.from(10 ** 9).mul(exchangeRate).div(scalar)); }); async function subject(): Promise { @@ -110,22 +111,20 @@ describe("rgtMigrationWrapModule", () => { ); } - it("should convert underlying balance of RGT tokens to TRIBE tokens * 26705673430 / 10e9", async () => { + it("should convert underlying balance of RGT tokens to TRIBE tokens * multiplier", async () => { const previousRgtTokenBalance = await rgtToken.balanceOf(setToken.address); const previousTribeTokenBalance = await tribeToken.balanceOf(setToken.address); expect(previousRgtTokenBalance).to.eq(BigNumber.from(10 ** 9)); expect(previousTribeTokenBalance).to.eq(ZERO); - console.log("subject"); await subject(); - console.log("subject complete"); const rgtTokenBalance = await rgtToken.balanceOf(setToken.address); const tribeTokenBalance = await tribeToken.balanceOf(setToken.address); const components = await setToken.getComponents(); expect(rgtTokenBalance).to.eq(ZERO); - expect(tribeTokenBalance).to.eq(previousRgtTokenBalance.mul(26705673430).div(10e9)); + expect(tribeTokenBalance).to.eq(previousRgtTokenBalance.mul(exchangeRate).div(scalar)); expect(components.length).to.eq(1); }); }); @@ -146,7 +145,7 @@ describe("rgtMigrationWrapModule", () => { subjectIntegrationName = rgtMigrationWrapAdapterIntegrationName; subjectCaller = owner; - tribeToken.mint(tribeToken.address, BigNumber.from(10 ** 9).mul(28)); + await tribeToken.mint(pegExchanger.address, BigNumber.from(10 ** 9).mul(exchangeRate).div(scalar)); await wrapModule.connect(subjectCaller.wallet).wrap( subjectSetToken, From cf5f5a498bd2c3298bf10671d6d0a39dd47e0672 Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Fri, 21 Jan 2022 00:32:39 +1100 Subject: [PATCH 10/16] add nls and remove unnecessary fei.ts --- contracts/mocks/external/TribePegExchangerMock.sol | 2 +- contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol | 2 +- test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts | 2 +- utils/contracts/fei.ts | 1 - utils/deploys/deployAdapters.ts | 2 +- 5 files changed, 4 insertions(+), 5 deletions(-) delete mode 100644 utils/contracts/fei.ts diff --git a/contracts/mocks/external/TribePegExchangerMock.sol b/contracts/mocks/external/TribePegExchangerMock.sol index d6385a693..39d9f9001 100644 --- a/contracts/mocks/external/TribePegExchangerMock.sol +++ b/contracts/mocks/external/TribePegExchangerMock.sol @@ -56,4 +56,4 @@ contract TribePegExchangerMock { console.log("transferred tribe"); emit Exchange(msg.sender, amount, tribeOut); } -} \ No newline at end of file +} diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol index 180c6dc2a..609f6d3ee 100644 --- a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -96,4 +96,4 @@ contract RgtMigrationWrapAdapter { function getSpenderAddress(address /* _underlyingToken */, address /* _wrappedToken */) external view returns(address) { return pegExchanger; } -} \ No newline at end of file +} diff --git a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts index a4bee9f0c..5ccb63349 100644 --- a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts +++ b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts @@ -111,4 +111,4 @@ describe("RgtMigrationWrapAdapter", () => { }); }); -}); \ No newline at end of file +}); diff --git a/utils/contracts/fei.ts b/utils/contracts/fei.ts deleted file mode 100644 index 158376dae..000000000 --- a/utils/contracts/fei.ts +++ /dev/null @@ -1 +0,0 @@ -export { PegExchanger } from "../../typechain/PegExchanger"; \ No newline at end of file diff --git a/utils/deploys/deployAdapters.ts b/utils/deploys/deployAdapters.ts index c4ae31bf9..4cfdc716f 100644 --- a/utils/deploys/deployAdapters.ts +++ b/utils/deploys/deployAdapters.ts @@ -68,7 +68,7 @@ import { SnapshotGovernanceAdapter__factory } from "../../typechain/factories/Sn import { SynthetixExchangeAdapter__factory } from "../../typechain/factories/SynthetixExchangeAdapter__factory"; import { CompoundBravoGovernanceAdapter__factory } from "../../typechain/factories/CompoundBravoGovernanceAdapter__factory"; import { CompClaimAdapter__factory, AGIMigrationWrapAdapter__factory } from "../../typechain"; -import { RgtMigrationWrapAdapter__factory } from "@typechain/factories/RgtMigrationWrapAdapter__factory"; +import { RgtMigrationWrapAdapter__factory } from "../../typechain/factories/RgtMigrationWrapAdapter__factory"; export default class DeployAdapters { private _deployerSigner: Signer; From ec8d484e0192d2076596120c7b615497a40f389a Mon Sep 17 00:00:00 2001 From: Richard Guan Date: Fri, 21 Jan 2022 09:37:35 +1100 Subject: [PATCH 11/16] review fixes --- contracts/mocks/external/TribePegExchangerMock.sol | 8 ++------ .../protocol/integration/wrap/RgtMigrationWrapAdapter.sol | 2 +- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/contracts/mocks/external/TribePegExchangerMock.sol b/contracts/mocks/external/TribePegExchangerMock.sol index 39d9f9001..4471e1edb 100644 --- a/contracts/mocks/external/TribePegExchangerMock.sol +++ b/contracts/mocks/external/TribePegExchangerMock.sol @@ -20,11 +20,10 @@ pragma solidity 0.6.10; import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/SafeERC20.sol"; -import "hardhat/console.sol"; /** - @title Contract to exchange RGT with TRIBE post-merger -*/ + * @title Contract to exchange RGT with TRIBE post-merger + */ contract TribePegExchangerMock { using SafeERC20 for IERC20; @@ -49,11 +48,8 @@ contract TribePegExchangerMock { function exchange(uint256 amount) public { uint256 tribeOut = amount * exchangeRate / scalar; IERC20(rgt).safeTransferFrom(msg.sender, address(this), amount); - console.log("transferred from rgt"); - console.log("transferring %s", tribeOut); console.log(IERC20(tribe).balanceOf(address(this))); IERC20(tribe).safeTransfer(msg.sender, tribeOut); - console.log("transferred tribe"); emit Exchange(msg.sender, amount, tribeOut); } } diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol index 609f6d3ee..f180a2bea 100644 --- a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -50,7 +50,7 @@ contract RgtMigrationWrapAdapter { /* ============ External Getter Functions ============ */ /** - * Generates the calldata to migrate KNC Legacy to KNC. + * Generates the calldata to migrate RGT tokens to TRIBE tokens. * * @param _underlyingUnits Total quantity of underlying units to wrap * From 7cf9d6bbad7e67dd394da498c664c099dc25dd51 Mon Sep 17 00:00:00 2001 From: Pranav Bhardwaj <84149824+pblivin0x@users.noreply.github.com> Date: Mon, 4 Apr 2022 19:02:58 -0400 Subject: [PATCH 12/16] Update mock used for PegExchanger in tests --- .../protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts index 5ccb63349..0a93ac2b6 100644 --- a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts +++ b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts @@ -5,7 +5,7 @@ import { Address } from "@utils/types"; import { Account } from "@utils/test/types"; import { ZERO } from "@utils/constants"; import { RgtMigrationWrapAdapter } from "@utils/contracts"; -import { PegExchanger } from "@utils/contracts/fei"; +import { TribePegExchangerMock } from "@utils/contracts"; import DeployHelper from "@utils/deploys"; import { ether, @@ -21,7 +21,7 @@ const expect = getWaffleExpect(); describe("RgtMigrationWrapAdapter", () => { let owner: Account; let deployer: DeployHelper; - let pegExchanger: PegExchanger; + let pegExchanger: TribePegExchangerMock; let rgtMigrationWrapAdapter: RgtMigrationWrapAdapter; before(async () => { From 6c4596678b9aad14220f4f932ef5f5864b5fcd18 Mon Sep 17 00:00:00 2001 From: Pranav Bhardwaj <84149824+pblivin0x@users.noreply.github.com> Date: Mon, 4 Apr 2022 19:03:41 -0400 Subject: [PATCH 13/16] remove console.log statement --- contracts/mocks/external/TribePegExchangerMock.sol | 1 - 1 file changed, 1 deletion(-) diff --git a/contracts/mocks/external/TribePegExchangerMock.sol b/contracts/mocks/external/TribePegExchangerMock.sol index 4471e1edb..c989b90cb 100644 --- a/contracts/mocks/external/TribePegExchangerMock.sol +++ b/contracts/mocks/external/TribePegExchangerMock.sol @@ -48,7 +48,6 @@ contract TribePegExchangerMock { function exchange(uint256 amount) public { uint256 tribeOut = amount * exchangeRate / scalar; IERC20(rgt).safeTransferFrom(msg.sender, address(this), amount); - console.log(IERC20(tribe).balanceOf(address(this))); IERC20(tribe).safeTransfer(msg.sender, tribeOut); emit Exchange(msg.sender, amount, tribeOut); } From 01f941f69d5f6deb5062271607692f87e8ad3a88 Mon Sep 17 00:00:00 2001 From: Pranav Bhardwaj <84149824+pblivin0x@users.noreply.github.com> Date: Mon, 4 Apr 2022 19:05:28 -0400 Subject: [PATCH 14/16] change contract author to FlattestWhite --- contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol index f180a2bea..a0c7aa51f 100644 --- a/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol +++ b/contracts/protocol/integration/wrap/RgtMigrationWrapAdapter.sol @@ -21,7 +21,7 @@ pragma experimental "ABIEncoderV2"; /** * @title RgtMigrationWrapAdater - * @author Set Protocol + * @author FlattestWhite * * Wrap adapter for one time token migration that returns data for wrapping RGT into TRIBE. * Note: RGT can not be unwrapped into TRIBE, because migration can not be reversed. From ed884bf26e1a740c0760ec56047c77620d661d4c Mon Sep 17 00:00:00 2001 From: Pranav Bhardwaj <84149824+pblivin0x@users.noreply.github.com> Date: Mon, 4 Apr 2022 19:14:16 -0400 Subject: [PATCH 15/16] remove TokenSwap export --- utils/contracts/index.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/utils/contracts/index.ts b/utils/contracts/index.ts index f31951f23..609d1d188 100644 --- a/utils/contracts/index.ts +++ b/utils/contracts/index.ts @@ -96,7 +96,6 @@ export { SynthetixExchangeAdapter } from "../../typechain/SynthetixExchangeAdapt export { SynthetixExchangerMock } from "../../typechain/SynthetixExchangerMock"; export { SynthMock } from "../../typechain/SynthMock"; export { TribePegExchangerMock } from "../../typechain/TribePegExchangerMock"; -export { TokenSwap } from "../../typechain/TokenSwap"; export { TradeModule } from "../../typechain/TradeModule"; export { TradeAdapterMock } from "../../typechain/TradeAdapterMock"; export { Uint256ArrayUtilsMock } from "../../typechain/Uint256ArrayUtilsMock"; @@ -124,4 +123,4 @@ export { WrapModuleV2 } from "../../typechain/WrapModuleV2"; export { YearnWrapV2Adapter } from "../../typechain/YearnWrapV2Adapter"; export { YearnStrategyMock } from "../../typechain/YearnStrategyMock"; export { ZeroExApiAdapter } from "../../typechain/ZeroExApiAdapter"; -export { ZeroExMock } from "../../typechain/ZeroExMock"; \ No newline at end of file +export { ZeroExMock } from "../../typechain/ZeroExMock"; From 3e6a8d2793bade488469d4f219fc4ffcb0c0ad03 Mon Sep 17 00:00:00 2001 From: Pranav Bhardwaj <84149824+pblivin0x@users.noreply.github.com> Date: Mon, 4 Apr 2022 21:01:06 -0400 Subject: [PATCH 16/16] nit: change test variable name --- .../protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts index 0a93ac2b6..7087b07d5 100644 --- a/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts +++ b/test/protocol/integration/wrap/rgtMigrationWrapAdapter.spec.ts @@ -55,9 +55,9 @@ describe("RgtMigrationWrapAdapter", () => { const deployRgtMigrationWrapAdapter = await subject(); const pegExchanger = await deployRgtMigrationWrapAdapter.pegExchanger(); - const expectedKncLegacyToken = subjectPegExchanger; + const expectedPegExchanger = subjectPegExchanger; - expect(pegExchanger).to.eq(expectedKncLegacyToken); + expect(pegExchanger).to.eq(expectedPegExchanger); }); });