@keep-network/tbtc-v2 0.1.1-dev.86 → 0.1.1-dev.87
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/artifacts/Bank.json +3 -3
- package/artifacts/Bridge.json +5 -5
- package/artifacts/Deposit.json +2 -2
- package/artifacts/DepositSweep.json +2 -2
- package/artifacts/EcdsaDkgValidator.json +1 -1
- package/artifacts/EcdsaInactivity.json +1 -1
- package/artifacts/EcdsaSortitionPool.json +2 -2
- package/artifacts/Fraud.json +2 -2
- package/artifacts/KeepRegistry.json +1 -1
- package/artifacts/KeepStake.json +2 -2
- package/artifacts/KeepToken.json +2 -2
- package/artifacts/KeepTokenStaking.json +1 -1
- package/artifacts/MovingFunds.json +2 -2
- package/artifacts/NuCypherStakingEscrow.json +1 -1
- package/artifacts/NuCypherToken.json +2 -2
- package/artifacts/RandomBeaconStub.json +1 -1
- package/artifacts/Redemption.json +2 -2
- package/artifacts/ReimbursementPool.json +2 -2
- package/artifacts/Relay.json +2 -2
- package/artifacts/T.json +2 -2
- package/artifacts/TBTC.json +3 -3
- package/artifacts/TBTCToken.json +3 -3
- package/artifacts/TBTCVault.json +87 -15
- package/artifacts/TokenStaking.json +1 -1
- package/artifacts/TokenholderGovernor.json +9 -9
- package/artifacts/TokenholderTimelock.json +8 -8
- package/artifacts/VendingMachine.json +3 -3
- package/artifacts/VendingMachineKeep.json +1 -1
- package/artifacts/VendingMachineNuCypher.json +1 -1
- package/artifacts/WalletRegistry.json +5 -5
- package/artifacts/WalletRegistryGovernance.json +2 -2
- package/artifacts/Wallets.json +2 -2
- package/artifacts/solcInputs/{6371edede0c121e15ead18cf51551442.json → b91d5d2f63dffec051f14a2922c0abf4.json} +1 -1
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bank/IReceiveBalanceApproval.sol/IReceiveBalanceApproval.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/DepositSweep.sol/DepositSweep.dbg.json +1 -1
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
- package/build/contracts/bridge/Heartbeat.sol/Heartbeat.dbg.json +1 -1
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +1 -1
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +1 -1
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/vault/DonationVault.sol/DonationVault.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.json +53 -2
- package/contracts/vault/TBTCVault.sol +60 -28
- package/export.json +51 -0
- package/package.json +1 -1
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"
|
|
18
18
|
},
|
|
19
19
|
"contracts/vault/TBTCVault.sol": {
|
|
20
|
-
"content": "// SPDX-License-Identifier: MIT\n\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n\npragma solidity ^0.8.9;\n\nimport \"@keep-network/random-beacon/contracts/Governable.sol\";\n\nimport \"./IVault.sol\";\nimport \"../bank/Bank.sol\";\nimport \"../token/TBTC.sol\";\nimport \"../GovernanceUtils.sol\";\n\n/// @title TBTC application vault\n/// @notice TBTC is a fully Bitcoin-backed ERC-20 token pegged to the price of\n/// Bitcoin. It facilitates Bitcoin holders to act on the Ethereum\n/// blockchain and access the decentralized finance (DeFi) ecosystem.\n/// TBTC Vault mints and unmints TBTC based on Bitcoin balances in the\n/// Bank.\n/// @dev TBTC Vault is the owner of TBTC token contract and is the only contract\n/// minting the token.\ncontract TBTCVault is IVault, Governable {\n /// @notice The time delay that needs to pass between initializing and\n /// finalizing upgrade to a new vault. The time delay forces the\n /// upgrading party to reflect on the vault address it is upgrading\n /// to and lets all TBTC holders notice the planned\n /// upgrade.\n uint256 public constant UPGRADE_GOVERNANCE_DELAY = 24 hours;\n\n Bank public bank;\n TBTC public tbtcToken;\n\n /// @notice The address of a new TBTC vault. Set only when the upgrade\n /// process is pending. Once the upgrade gets finalized, the new\n /// TBTC vault will become an owner of TBTC token.\n address public newVault;\n /// @notice The timestamp at which an upgrade to a new TBTC vault was\n /// initiated. Set only when the upgrade process is pending.\n uint256 public upgradeInitiatedTimestamp;\n\n event Minted(address indexed to, uint256 amount);\n event Unminted(address indexed from, uint256 amount);\n\n event UpgradeInitiated(address newVault, uint256 timestamp);\n event UpgradeFinalized(address newVault);\n\n modifier onlyBank() {\n require(msg.sender == address(bank), \"Caller is not the Bank\");\n _;\n }\n\n modifier onlyAfterUpgradeGovernanceDelay() {\n GovernanceUtils.onlyAfterGovernanceDelay(\n upgradeInitiatedTimestamp,\n UPGRADE_GOVERNANCE_DELAY\n );\n _;\n }\n\n constructor(Bank _bank, TBTC _tbtcToken) {\n require(\n address(_bank) != address(0),\n \"Bank can not be the zero address\"\n );\n\n require(\n address(_tbtcToken) != address(0),\n \"TBTC token can not be the zero address\"\n );\n\n bank = _bank;\n tbtcToken = _tbtcToken;\n\n _transferGovernance(msg.sender);\n }\n\n /// @notice Allows the governance of the TBTCVault to recover any ERC20\n /// token sent mistakenly to the TBTC token contract address.\n /// @param token Address of the recovered ERC20 token contract.\n /// @param recipient Address the recovered token should be sent to.\n /// @param amount Recovered amount.\n function recoverERC20(\n IERC20 token,\n address recipient,\n uint256 amount\n ) external onlyGovernance {\n tbtcToken.recoverERC20(token, recipient, amount);\n }\n\n /// @notice Allows the governance of the TBTCVault to recover any ERC721\n /// token sent mistakenly to the TBTC token contract address.\n /// @param token Address of the recovered ERC721 token contract.\n /// @param recipient Address the recovered token should be sent to.\n /// @param tokenId Identifier of the recovered token.\n /// @param data Additional data.\n function recoverERC721(\n IERC721 token,\n address recipient,\n uint256 tokenId,\n bytes calldata data\n ) external onlyGovernance {\n tbtcToken.recoverERC721(token, recipient, tokenId, data);\n }\n\n /// @notice Transfers the given `amount` of the Bank balance from caller\n /// to TBTC Vault, and mints `amount` of TBTC to the caller.\n /// @dev TBTC Vault must have an allowance for caller's balance in the Bank\n /// for at least `amount`.\n /// @param amount Amount of TBTC to mint.\n function mint(uint256 amount) external {\n address minter = msg.sender;\n require(\n bank.balanceOf(minter) >= amount,\n \"Amount exceeds balance in the bank\"\n );\n _mint(minter, amount);\n bank.transferBalanceFrom(minter, address(this), amount);\n }\n\n /// @notice Transfers the given `amount` of the Bank balance from the caller\n /// to TBTC Vault and mints `amount` of TBTC to the caller.\n /// @dev Can only be called by the Bank via `approveBalanceAndCall`.\n /// @param owner The owner who approved their Bank balance.\n /// @param amount Amount of TBTC to mint.\n function receiveBalanceApproval(\n address owner,\n uint256 amount,\n bytes calldata\n ) external override onlyBank {\n require(\n bank.balanceOf(owner) >= amount,\n \"Amount exceeds balance in the bank\"\n );\n _mint(owner, amount);\n bank.transferBalanceFrom(owner, address(this), amount);\n }\n\n /// @notice Mints the same amount of TBTC as the deposited amount for each\n /// depositor in the array. Can only be called by the Bank after the\n /// Bridge swept deposits and Bank increased balance for the\n /// vault.\n /// @dev Fails if `depositors` array is empty. Expects the length of\n /// `depositors` and `depositedAmounts` is the same.\n function receiveBalanceIncrease(\n address[] calldata depositors,\n uint256[] calldata depositedAmounts\n ) external override onlyBank {\n require(depositors.length != 0, \"No depositors specified\");\n for (uint256 i = 0; i < depositors.length; i++) {\n _mint(depositors[i], depositedAmounts[i]);\n }\n }\n\n /// @notice Burns `amount` of TBTC from the caller's balance and transfers\n /// `amount` back to the caller's balance in the Bank.\n /// @dev Caller must have at least `amount` of TBTC approved to\n /// TBTC Vault.\n /// @param amount Amount of TBTC to unmint.\n function unmint(uint256 amount) external {\n _unmint(msg.sender, amount);\n }\n\n /// @notice Burns `amount` of TBTC from the caller's balance and transfers\n /// `amount` of Bank balance to the Bridge requesting redemption\n /// based on the provided `redemptionData`.\n /// @dev Caller must have at least `amount` of TBTC approved to\n /// TBTC Vault.\n /// @param amount Amount of TBTC to unmint and request to redeem in Bridge.\n /// @param redemptionData Redemption data in a format expected from\n /// `redemptionData` parameter of Bridge's `receiveBalanceApproval`\n /// function.\n function unmintAndRedeem(uint256 amount, bytes calldata redemptionData)\n external\n {\n _unmintAndRedeem(msg.sender, amount, redemptionData);\n }\n\n /// @notice Burns `amount` of TBTC from the caller's balance. If `extraData`\n /// is empty, transfers `amount` back to the caller's balance in the\n /// Bank. If `extraData` is not empty, requests redemption in the\n /// Bridge using the `extraData` as a `redemptionData` parameter to\n /// Bridge's `receiveBalanceApproval` function.\n /// @dev This function is doing the same as `unmint` or `unmintAndRedeem`\n /// (depending on `extraData` parameter) but it allows to execute\n /// unminting without a separate approval transaction. The function can\n /// be called only via `approveAndCall` of TBTC token.\n /// @param from TBTC token holder executing unminting.\n /// @param amount Amount of TBTC to unmint.\n /// @param token TBTC token address.\n /// @param extraData Redemption data in a format expected from\n /// `redemptionData` parameter of Bridge's `receiveBalanceApproval`\n /// function. If empty, `receiveApproval` is not requesting a\n /// redemption of Bank balance but is instead performing just TBTC\n /// unminting to a Bank balance.\n function receiveApproval(\n address from,\n uint256 amount,\n address token,\n bytes calldata extraData\n ) external {\n require(token == address(tbtcToken), \"Token is not TBTC\");\n require(msg.sender == token, \"Only TBTC caller allowed\");\n if (extraData.length == 0) {\n _unmint(from, amount);\n } else {\n _unmintAndRedeem(from, amount, extraData);\n }\n }\n\n /// @notice Initiates vault upgrade process. The upgrade process needs to be\n /// finalized with a call to `finalizeUpgrade` function after the\n /// `UPGRADE_GOVERNANCE_DELAY` passes. Only the governance can\n /// initiate the upgrade.\n /// @param _newVault The new vault address.\n function initiateUpgrade(address _newVault) external onlyGovernance {\n require(_newVault != address(0), \"New vault address cannot be zero\");\n /* solhint-disable-next-line not-rely-on-time */\n emit UpgradeInitiated(_newVault, block.timestamp);\n /* solhint-disable-next-line not-rely-on-time */\n upgradeInitiatedTimestamp = block.timestamp;\n newVault = _newVault;\n }\n\n /// @notice Allows the governance to finalize vault upgrade process. The\n /// upgrade process needs to be first initiated with a call to\n /// `initiateUpgrade` and the `UPGRADE_GOVERNANCE_DELAY` needs to\n /// pass. Once the upgrade is finalized, the new vault will become\n /// an owner of TBTC token.\n function finalizeUpgrade()\n external\n onlyGovernance\n onlyAfterUpgradeGovernanceDelay\n {\n emit UpgradeFinalized(newVault);\n // slither-disable-next-line reentrancy-no-eth\n tbtcToken.transferOwnership(newVault);\n newVault = address(0);\n upgradeInitiatedTimestamp = 0;\n }\n\n // slither-disable-next-line calls-loop\n function _mint(address minter, uint256 amount) internal {\n emit Minted(minter, amount);\n tbtcToken.mint(minter, amount);\n }\n\n function _unmint(address unminter, uint256 amount) internal {\n emit Unminted(unminter, amount);\n tbtcToken.burnFrom(unminter, amount);\n bank.transferBalance(unminter, amount);\n }\n\n function _unmintAndRedeem(\n address redeemer,\n uint256 amount,\n bytes calldata redemptionData\n ) internal {\n emit Unminted(redeemer, amount);\n tbtcToken.burnFrom(redeemer, amount);\n bank.approveBalanceAndCall(bank.bridge(), amount, redemptionData);\n }\n}\n"
|
|
20
|
+
"content": "// SPDX-License-Identifier: MIT\n\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ██████████████ ▐████▌ ██████████████\n// ██████████████ ▐████▌ ██████████████\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n// ▐████▌ ▐████▌\n\npragma solidity ^0.8.9;\n\nimport \"@keep-network/random-beacon/contracts/Governable.sol\";\n\nimport \"./IVault.sol\";\nimport \"../bank/Bank.sol\";\nimport \"../token/TBTC.sol\";\nimport \"../GovernanceUtils.sol\";\n\n/// @title TBTC application vault\n/// @notice TBTC is a fully Bitcoin-backed ERC-20 token pegged to the price of\n/// Bitcoin. It facilitates Bitcoin holders to act on the Ethereum\n/// blockchain and access the decentralized finance (DeFi) ecosystem.\n/// TBTC Vault mints and unmints TBTC based on Bitcoin balances in the\n/// Bank.\n/// @dev TBTC Vault is the owner of TBTC token contract and is the only contract\n/// minting the token.\ncontract TBTCVault is IVault, Governable {\n using SafeERC20 for IERC20;\n\n /// @notice The time delay that needs to pass between initializing and\n /// finalizing upgrade to a new vault. The time delay forces the\n /// upgrading party to reflect on the vault address it is upgrading\n /// to and lets all TBTC holders notice the planned\n /// upgrade.\n uint256 public constant UPGRADE_GOVERNANCE_DELAY = 24 hours;\n\n Bank public bank;\n TBTC public tbtcToken;\n\n /// @notice The address of a new TBTC vault. Set only when the upgrade\n /// process is pending. Once the upgrade gets finalized, the new\n /// TBTC vault will become an owner of TBTC token.\n address public newVault;\n /// @notice The timestamp at which an upgrade to a new TBTC vault was\n /// initiated. Set only when the upgrade process is pending.\n uint256 public upgradeInitiatedTimestamp;\n\n event Minted(address indexed to, uint256 amount);\n event Unminted(address indexed from, uint256 amount);\n\n event UpgradeInitiated(address newVault, uint256 timestamp);\n event UpgradeFinalized(address newVault);\n\n modifier onlyBank() {\n require(msg.sender == address(bank), \"Caller is not the Bank\");\n _;\n }\n\n modifier onlyAfterUpgradeGovernanceDelay() {\n GovernanceUtils.onlyAfterGovernanceDelay(\n upgradeInitiatedTimestamp,\n UPGRADE_GOVERNANCE_DELAY\n );\n _;\n }\n\n constructor(Bank _bank, TBTC _tbtcToken) {\n require(\n address(_bank) != address(0),\n \"Bank can not be the zero address\"\n );\n\n require(\n address(_tbtcToken) != address(0),\n \"TBTC token can not be the zero address\"\n );\n\n bank = _bank;\n tbtcToken = _tbtcToken;\n\n _transferGovernance(msg.sender);\n }\n\n /// @notice Transfers the given `amount` of the Bank balance from caller\n /// to TBTC Vault, and mints `amount` of TBTC to the caller.\n /// @dev TBTC Vault must have an allowance for caller's balance in the Bank\n /// for at least `amount`.\n /// @param amount Amount of TBTC to mint.\n function mint(uint256 amount) external {\n address minter = msg.sender;\n require(\n bank.balanceOf(minter) >= amount,\n \"Amount exceeds balance in the bank\"\n );\n _mint(minter, amount);\n bank.transferBalanceFrom(minter, address(this), amount);\n }\n\n /// @notice Transfers the given `amount` of the Bank balance from the caller\n /// to TBTC Vault and mints `amount` of TBTC to the caller.\n /// @dev Can only be called by the Bank via `approveBalanceAndCall`.\n /// @param owner The owner who approved their Bank balance.\n /// @param amount Amount of TBTC to mint.\n function receiveBalanceApproval(\n address owner,\n uint256 amount,\n bytes calldata\n ) external override onlyBank {\n require(\n bank.balanceOf(owner) >= amount,\n \"Amount exceeds balance in the bank\"\n );\n _mint(owner, amount);\n bank.transferBalanceFrom(owner, address(this), amount);\n }\n\n /// @notice Mints the same amount of TBTC as the deposited amount for each\n /// depositor in the array. Can only be called by the Bank after the\n /// Bridge swept deposits and Bank increased balance for the\n /// vault.\n /// @dev Fails if `depositors` array is empty. Expects the length of\n /// `depositors` and `depositedAmounts` is the same.\n function receiveBalanceIncrease(\n address[] calldata depositors,\n uint256[] calldata depositedAmounts\n ) external override onlyBank {\n require(depositors.length != 0, \"No depositors specified\");\n for (uint256 i = 0; i < depositors.length; i++) {\n _mint(depositors[i], depositedAmounts[i]);\n }\n }\n\n /// @notice Burns `amount` of TBTC from the caller's balance and transfers\n /// `amount` back to the caller's balance in the Bank.\n /// @dev Caller must have at least `amount` of TBTC approved to\n /// TBTC Vault.\n /// @param amount Amount of TBTC to unmint.\n function unmint(uint256 amount) external {\n _unmint(msg.sender, amount);\n }\n\n /// @notice Burns `amount` of TBTC from the caller's balance and transfers\n /// `amount` of Bank balance to the Bridge requesting redemption\n /// based on the provided `redemptionData`.\n /// @dev Caller must have at least `amount` of TBTC approved to\n /// TBTC Vault.\n /// @param amount Amount of TBTC to unmint and request to redeem in Bridge.\n /// @param redemptionData Redemption data in a format expected from\n /// `redemptionData` parameter of Bridge's `receiveBalanceApproval`\n /// function.\n function unmintAndRedeem(uint256 amount, bytes calldata redemptionData)\n external\n {\n _unmintAndRedeem(msg.sender, amount, redemptionData);\n }\n\n /// @notice Burns `amount` of TBTC from the caller's balance. If `extraData`\n /// is empty, transfers `amount` back to the caller's balance in the\n /// Bank. If `extraData` is not empty, requests redemption in the\n /// Bridge using the `extraData` as a `redemptionData` parameter to\n /// Bridge's `receiveBalanceApproval` function.\n /// @dev This function is doing the same as `unmint` or `unmintAndRedeem`\n /// (depending on `extraData` parameter) but it allows to execute\n /// unminting without a separate approval transaction. The function can\n /// be called only via `approveAndCall` of TBTC token.\n /// @param from TBTC token holder executing unminting.\n /// @param amount Amount of TBTC to unmint.\n /// @param token TBTC token address.\n /// @param extraData Redemption data in a format expected from\n /// `redemptionData` parameter of Bridge's `receiveBalanceApproval`\n /// function. If empty, `receiveApproval` is not requesting a\n /// redemption of Bank balance but is instead performing just TBTC\n /// unminting to a Bank balance.\n function receiveApproval(\n address from,\n uint256 amount,\n address token,\n bytes calldata extraData\n ) external {\n require(token == address(tbtcToken), \"Token is not TBTC\");\n require(msg.sender == token, \"Only TBTC caller allowed\");\n if (extraData.length == 0) {\n _unmint(from, amount);\n } else {\n _unmintAndRedeem(from, amount, extraData);\n }\n }\n\n /// @notice Initiates vault upgrade process. The upgrade process needs to be\n /// finalized with a call to `finalizeUpgrade` function after the\n /// `UPGRADE_GOVERNANCE_DELAY` passes. Only the governance can\n /// initiate the upgrade.\n /// @param _newVault The new vault address.\n function initiateUpgrade(address _newVault) external onlyGovernance {\n require(_newVault != address(0), \"New vault address cannot be zero\");\n /* solhint-disable-next-line not-rely-on-time */\n emit UpgradeInitiated(_newVault, block.timestamp);\n /* solhint-disable-next-line not-rely-on-time */\n upgradeInitiatedTimestamp = block.timestamp;\n newVault = _newVault;\n }\n\n /// @notice Allows the governance to finalize vault upgrade process. The\n /// upgrade process needs to be first initiated with a call to\n /// `initiateUpgrade` and the `UPGRADE_GOVERNANCE_DELAY` needs to\n /// pass. Once the upgrade is finalized, the new vault will become\n /// an owner of TBTC token.\n function finalizeUpgrade()\n external\n onlyGovernance\n onlyAfterUpgradeGovernanceDelay\n {\n emit UpgradeFinalized(newVault);\n // slither-disable-next-line reentrancy-no-eth\n tbtcToken.transferOwnership(newVault);\n newVault = address(0);\n upgradeInitiatedTimestamp = 0;\n }\n\n /// @notice Allows the governance of the TBTCVault to recover any ERC20\n /// token sent mistakenly to the TBTC token contract address.\n /// @param token Address of the recovered ERC20 token contract.\n /// @param recipient Address the recovered token should be sent to.\n /// @param amount Recovered amount.\n function recoverERC20FromToken(\n IERC20 token,\n address recipient,\n uint256 amount\n ) external onlyGovernance {\n tbtcToken.recoverERC20(token, recipient, amount);\n }\n\n /// @notice Allows the governance of the TBTCVault to recover any ERC721\n /// token sent mistakenly to the TBTC token contract address.\n /// @param token Address of the recovered ERC721 token contract.\n /// @param recipient Address the recovered token should be sent to.\n /// @param tokenId Identifier of the recovered token.\n /// @param data Additional data.\n function recoverERC721FromToken(\n IERC721 token,\n address recipient,\n uint256 tokenId,\n bytes calldata data\n ) external onlyGovernance {\n tbtcToken.recoverERC721(token, recipient, tokenId, data);\n }\n\n /// @notice Allows the governance of the TBTCVault to recover any ERC20\n /// token sent - mistakenly or not - to the vault address. This\n /// function should be used to withdraw TBTC v1 tokens transferred\n /// to TBTCVault as a result of VendingMachine > TBTCVault upgrade.\n /// @param token Address of the recovered ERC20 token contract.\n /// @param recipient Address the recovered token should be sent to.\n /// @param amount Recovered amount.\n function recoverERC20(\n IERC20 token,\n address recipient,\n uint256 amount\n ) external onlyGovernance {\n token.safeTransfer(recipient, amount);\n }\n\n /// @notice Allows the governance of the TBTCVault to recover any ERC721\n /// token sent mistakenly to the vault address.\n /// @param token Address of the recovered ERC721 token contract.\n /// @param recipient Address the recovered token should be sent to.\n /// @param tokenId Identifier of the recovered token.\n /// @param data Additional data.\n function recoverERC721(\n IERC721 token,\n address recipient,\n uint256 tokenId,\n bytes calldata data\n ) external onlyGovernance {\n token.safeTransferFrom(address(this), recipient, tokenId, data);\n }\n\n // slither-disable-next-line calls-loop\n function _mint(address minter, uint256 amount) internal {\n emit Minted(minter, amount);\n tbtcToken.mint(minter, amount);\n }\n\n function _unmint(address unminter, uint256 amount) internal {\n emit Unminted(unminter, amount);\n tbtcToken.burnFrom(unminter, amount);\n bank.transferBalance(unminter, amount);\n }\n\n function _unmintAndRedeem(\n address redeemer,\n uint256 amount,\n bytes calldata redemptionData\n ) internal {\n emit Unminted(redeemer, amount);\n tbtcToken.burnFrom(redeemer, amount);\n bank.approveBalanceAndCall(bank.bridge(), amount, redemptionData);\n }\n}\n"
|
|
21
21
|
},
|
|
22
22
|
"@keep-network/random-beacon/contracts/Governable.sol": {
|
|
23
23
|
"content": "// SPDX-License-Identifier: MIT\n//\n// ▓▓▌ ▓▓ ▐▓▓ ▓▓▓▓▓▓▓▓▓▓▌▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▄\n// ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▌▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n// ▓▓▓▓▓▓ ▓▓▓▓▓▓▓▀ ▐▓▓▓▓▓▓ ▐▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓ ▐▓▓▓▓▓▌ ▐▓▓▓▓▓▓\n// ▓▓▓▓▓▓▄▄▓▓▓▓▓▓▓▀ ▐▓▓▓▓▓▓▄▄▄▄ ▓▓▓▓▓▓▄▄▄▄ ▐▓▓▓▓▓▌ ▐▓▓▓▓▓▓\n// ▓▓▓▓▓▓▓▓▓▓▓▓▓▀ ▐▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓\n// ▓▓▓▓▓▓▀▀▓▓▓▓▓▓▄ ▐▓▓▓▓▓▓▀▀▀▀ ▓▓▓▓▓▓▀▀▀▀ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▀\n// ▓▓▓▓▓▓ ▀▓▓▓▓▓▓▄ ▐▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓ ▐▓▓▓▓▓▌\n// ▓▓▓▓▓▓▓▓▓▓ █▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓\n// ▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓ ▐▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓\n//\n// Trust math, not hardware.\n\npragma solidity ^0.8.9;\n\n/// @notice Governable contract.\n/// @dev A constructor is not defined, which makes the contract compatible with\n/// upgradable proxies. This requires calling explicitly `_transferGovernance`\n/// function in a child contract.\nabstract contract Governable {\n // Governance of the contract\n // The variable should be initialized by the implementing contract.\n // slither-disable-next-line uninitialized-state\n address public governance;\n\n // Reserved storage space in case we need to add more variables,\n // since there are upgradeable contracts that inherit from this one.\n // See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n // slither-disable-next-line unused-state\n uint256[49] private __gap;\n\n event GovernanceTransferred(address oldGovernance, address newGovernance);\n\n modifier onlyGovernance() virtual {\n require(governance == msg.sender, \"Caller is not the governance\");\n _;\n }\n\n /// @notice Transfers governance of the contract to `newGovernance`.\n function transferGovernance(address newGovernance)\n external\n virtual\n onlyGovernance\n {\n require(\n newGovernance != address(0),\n \"New governance is the zero address\"\n );\n _transferGovernance(newGovernance);\n }\n\n function _transferGovernance(address newGovernance) internal virtual {\n address oldGovernance = governance;\n governance = newGovernance;\n emit GovernanceTransferred(oldGovernance, newGovernance);\n }\n}\n"
|
|
@@ -285,6 +285,29 @@
|
|
|
285
285
|
"stateMutability": "nonpayable",
|
|
286
286
|
"type": "function"
|
|
287
287
|
},
|
|
288
|
+
{
|
|
289
|
+
"inputs": [
|
|
290
|
+
{
|
|
291
|
+
"internalType": "contract IERC20",
|
|
292
|
+
"name": "token",
|
|
293
|
+
"type": "address"
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
"internalType": "address",
|
|
297
|
+
"name": "recipient",
|
|
298
|
+
"type": "address"
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
"internalType": "uint256",
|
|
302
|
+
"name": "amount",
|
|
303
|
+
"type": "uint256"
|
|
304
|
+
}
|
|
305
|
+
],
|
|
306
|
+
"name": "recoverERC20FromToken",
|
|
307
|
+
"outputs": [],
|
|
308
|
+
"stateMutability": "nonpayable",
|
|
309
|
+
"type": "function"
|
|
310
|
+
},
|
|
288
311
|
{
|
|
289
312
|
"inputs": [
|
|
290
313
|
{
|
|
@@ -313,6 +336,34 @@
|
|
|
313
336
|
"stateMutability": "nonpayable",
|
|
314
337
|
"type": "function"
|
|
315
338
|
},
|
|
339
|
+
{
|
|
340
|
+
"inputs": [
|
|
341
|
+
{
|
|
342
|
+
"internalType": "contract IERC721",
|
|
343
|
+
"name": "token",
|
|
344
|
+
"type": "address"
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
"internalType": "address",
|
|
348
|
+
"name": "recipient",
|
|
349
|
+
"type": "address"
|
|
350
|
+
},
|
|
351
|
+
{
|
|
352
|
+
"internalType": "uint256",
|
|
353
|
+
"name": "tokenId",
|
|
354
|
+
"type": "uint256"
|
|
355
|
+
},
|
|
356
|
+
{
|
|
357
|
+
"internalType": "bytes",
|
|
358
|
+
"name": "data",
|
|
359
|
+
"type": "bytes"
|
|
360
|
+
}
|
|
361
|
+
],
|
|
362
|
+
"name": "recoverERC721FromToken",
|
|
363
|
+
"outputs": [],
|
|
364
|
+
"stateMutability": "nonpayable",
|
|
365
|
+
"type": "function"
|
|
366
|
+
},
|
|
316
367
|
{
|
|
317
368
|
"inputs": [],
|
|
318
369
|
"name": "tbtcToken",
|
|
@@ -384,8 +435,8 @@
|
|
|
384
435
|
"type": "function"
|
|
385
436
|
}
|
|
386
437
|
],
|
|
387
|
-
"bytecode": "0x60806040523480156200001157600080fd5b50604051620016ff380380620016ff8339810160408190526200003491620001b4565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b606482015260840162000087565b603280546001600160a01b038085166001600160a01b031992831617909255603380549284169290911691909117905562000132336200013a565b5050620001f3565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b0381168114620001b157600080fd5b50565b60008060408385031215620001c857600080fd5b8251620001d5816200019b565b6020840151909250620001e8816200019b565b809150509250929050565b6114fc80620002036000396000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c806388aaf0c8116100b2578063a0712d6811610081578063d38bfff411610066578063d38bfff414610239578063e5d3d7141461024c578063fc4e51f61461025f57600080fd5b8063a0712d681461021c578063cfce08161461022f57600080fd5b806388aaf0c8146101d75780638f4ffcb1146101ea57806395131526146101fd5780639a508c8e1461021457600080fd5b806353dce4df116100ee57806353dce4df1461016e5780635aa6e6751461018157806364e779b1146101b157806376cdb03b146101c457600080fd5b80631171bda914610120578063461c637314610135578063475d057014610148578063479aa9271461015b575b600080fd5b61013361012e3660046110bb565b610272565b005b610133610143366004611148565b61035d565b6101336101563660046111f6565b610470565b610133610169366004611246565b61061d565b61013361017c36600461126a565b610741565b600054610194906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101336101bf3660046112b6565b610752565b603254610194906001600160a01b031681565b603454610194906001600160a01b031681565b6101336101f83660046112cf565b61075f565b61020660355481565b6040519081526020016101a8565b610133610834565b61013361022a3660046112b6565b61097b565b6102066201518081565b610133610247366004611246565b610acf565b603354610194906001600160a01b031681565b61013361026d366004611342565b610bae565b6000546001600160a01b031633146102d15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b15801561034057600080fd5b505af1158015610354573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b031633146103b75760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b826104045760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016102c8565b60005b838110156104695761045785858381811061042457610424611398565b90506020020160208101906104399190611246565b84848481811061044b5761044b611398565b90506020020135610c92565b80610461816113c4565b915050610407565b5050505050565b6032546001600160a01b031633146104ca5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b15801561050f57600080fd5b505afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054791906113df565b10156105a05760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b6105aa8484610c92565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146106775760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b0381166106cd5760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016102c8565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61074d33848484610d27565b505050565b61075c3382610e90565b50565b6033546001600160a01b038481169116146107bc5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016102c8565b336001600160a01b038416146108145760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016102c8565b80610828576108238585610e90565b610469565b61046985858484610d27565b6000546001600160a01b0316331461088e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b61089d60355462015180610f8b565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156109c357600080fd5b505afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb91906113df565b1015610a545760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b610a5e8183610c92565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610b295760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b038116610ba55760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102c8565b61075c81611038565b6000546001600160a01b03163314610c085760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f690610c599088908890889088908890600401611421565b600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b505050505050505050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ccd91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610a99565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610d6291815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b158015610e3657600080fd5b505afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e919061145f565b8585856040518563ffffffff1660e01b81526004016105e5949392919061147c565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051610ecb91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610a99565b60008211610fdb5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016102c8565b80610fe683426114af565b10156110345760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016102c8565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b038116811461075c57600080fd5b6000806000606084860312156110d057600080fd5b83356110db816110a6565b925060208401356110eb816110a6565b929592945050506040919091013590565b60008083601f84011261110e57600080fd5b50813567ffffffffffffffff81111561112657600080fd5b6020830191508360208260051b850101111561114157600080fd5b9250929050565b6000806000806040858703121561115e57600080fd5b843567ffffffffffffffff8082111561117657600080fd5b611182888389016110fc565b9096509450602087013591508082111561119b57600080fd5b506111a8878288016110fc565b95989497509550505050565b60008083601f8401126111c657600080fd5b50813567ffffffffffffffff8111156111de57600080fd5b60208301915083602082850101111561114157600080fd5b6000806000806060858703121561120c57600080fd5b8435611217816110a6565b935060208501359250604085013567ffffffffffffffff81111561123a57600080fd5b6111a8878288016111b4565b60006020828403121561125857600080fd5b8135611263816110a6565b9392505050565b60008060006040848603121561127f57600080fd5b83359250602084013567ffffffffffffffff81111561129d57600080fd5b6112a9868287016111b4565b9497909650939450505050565b6000602082840312156112c857600080fd5b5035919050565b6000806000806000608086880312156112e757600080fd5b85356112f2816110a6565b9450602086013593506040860135611309816110a6565b9250606086013567ffffffffffffffff81111561132557600080fd5b611331888289016111b4565b969995985093965092949392505050565b60008060008060006080868803121561135a57600080fd5b8535611365816110a6565b94506020860135611375816110a6565b935060408601359250606086013567ffffffffffffffff81111561132557600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113d8576113d86113ae565b5060010190565b6000602082840312156113f157600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114546080830184866113f8565b979650505050505050565b60006020828403121561147157600080fd5b8151611263816110a6565b6001600160a01b03851681528360208201526060604082015260006114a56060830184866113f8565b9695505050505050565b6000828210156114c1576114c16113ae565b50039056fea26469706673582212200f8bfa37abf07fe0f0b7d0c4323b017b9f180f7d5bce06dac02be2e3b3db907264736f6c63430008090033",
|
|
388
|
-
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011b5760003560e01c806388aaf0c8116100b2578063a0712d6811610081578063d38bfff411610066578063d38bfff414610239578063e5d3d7141461024c578063fc4e51f61461025f57600080fd5b8063a0712d681461021c578063cfce08161461022f57600080fd5b806388aaf0c8146101d75780638f4ffcb1146101ea57806395131526146101fd5780639a508c8e1461021457600080fd5b806353dce4df116100ee57806353dce4df1461016e5780635aa6e6751461018157806364e779b1146101b157806376cdb03b146101c457600080fd5b80631171bda914610120578063461c637314610135578063475d057014610148578063479aa9271461015b575b600080fd5b61013361012e3660046110bb565b610272565b005b610133610143366004611148565b61035d565b6101336101563660046111f6565b610470565b610133610169366004611246565b61061d565b61013361017c36600461126a565b610741565b600054610194906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101336101bf3660046112b6565b610752565b603254610194906001600160a01b031681565b603454610194906001600160a01b031681565b6101336101f83660046112cf565b61075f565b61020660355481565b6040519081526020016101a8565b610133610834565b61013361022a3660046112b6565b61097b565b6102066201518081565b610133610247366004611246565b610acf565b603354610194906001600160a01b031681565b61013361026d366004611342565b610bae565b6000546001600160a01b031633146102d15760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b15801561034057600080fd5b505af1158015610354573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b031633146103b75760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b826104045760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f72732073706563696669656400000000000000000060448201526064016102c8565b60005b838110156104695761045785858381811061042457610424611398565b90506020020160208101906104399190611246565b84848481811061044b5761044b611398565b90506020020135610c92565b80610461816113c4565b915050610407565b5050505050565b6032546001600160a01b031633146104ca5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b0000000000000000000060448201526064016102c8565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b15801561050f57600080fd5b505afa158015610523573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061054791906113df565b10156105a05760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b6105aa8484610c92565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156105ff57600080fd5b505af1158015610613573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b031633146106775760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b0381166106cd5760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f60448201526064016102c8565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61074d33848484610d27565b505050565b61075c3382610e90565b50565b6033546001600160a01b038481169116146107bc5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f74205442544300000000000000000000000000000060448201526064016102c8565b336001600160a01b038416146108145760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f776564000000000000000060448201526064016102c8565b80610828576108238585610e90565b610469565b61046985858484610d27565b6000546001600160a01b0316331461088e5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b61089d60355462015180610f8b565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b15801561093f57600080fd5b505af1158015610953573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b1580156109c357600080fd5b505afa1580156109d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109fb91906113df565b1015610a545760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b60648201526084016102c8565b610a5e8183610c92565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610ab357600080fd5b505af1158015610ac7573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610b295760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6001600160a01b038116610ba55760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f737300000000000000000000000000000000000000000000000000000000000060648201526084016102c8565b61075c81611038565b6000546001600160a01b03163314610c085760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064016102c8565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f690610c599088908890889088908890600401611421565b600060405180830381600087803b158015610c7357600080fd5b505af1158015610c87573d6000803e3d6000fd5b505050505050505050565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ccd91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610a99565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610d6291815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610db857600080fd5b505af1158015610dcc573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b158015610e3657600080fd5b505afa158015610e4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6e919061145f565b8585856040518563ffffffff1660e01b81526004016105e5949392919061147c565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b882604051610ecb91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b158015610f2157600080fd5b505af1158015610f35573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610a99565b60008211610fdb5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e6974696174656400000000000000000000000060448201526064016102c8565b80610fe683426114af565b10156110345760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c617073656460448201526064016102c8565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b038116811461075c57600080fd5b6000806000606084860312156110d057600080fd5b83356110db816110a6565b925060208401356110eb816110a6565b929592945050506040919091013590565b60008083601f84011261110e57600080fd5b50813567ffffffffffffffff81111561112657600080fd5b6020830191508360208260051b850101111561114157600080fd5b9250929050565b6000806000806040858703121561115e57600080fd5b843567ffffffffffffffff8082111561117657600080fd5b611182888389016110fc565b9096509450602087013591508082111561119b57600080fd5b506111a8878288016110fc565b95989497509550505050565b60008083601f8401126111c657600080fd5b50813567ffffffffffffffff8111156111de57600080fd5b60208301915083602082850101111561114157600080fd5b6000806000806060858703121561120c57600080fd5b8435611217816110a6565b935060208501359250604085013567ffffffffffffffff81111561123a57600080fd5b6111a8878288016111b4565b60006020828403121561125857600080fd5b8135611263816110a6565b9392505050565b60008060006040848603121561127f57600080fd5b83359250602084013567ffffffffffffffff81111561129d57600080fd5b6112a9868287016111b4565b9497909650939450505050565b6000602082840312156112c857600080fd5b5035919050565b6000806000806000608086880312156112e757600080fd5b85356112f2816110a6565b9450602086013593506040860135611309816110a6565b9250606086013567ffffffffffffffff81111561132557600080fd5b611331888289016111b4565b969995985093965092949392505050565b60008060008060006080868803121561135a57600080fd5b8535611365816110a6565b94506020860135611375816110a6565b935060408601359250606086013567ffffffffffffffff81111561132557600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156113d8576113d86113ae565b5060010190565b6000602082840312156113f157600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114546080830184866113f8565b979650505050505050565b60006020828403121561147157600080fd5b8151611263816110a6565b6001600160a01b03851681528360208201526060604082015260006114a56060830184866113f8565b9695505050505050565b6000828210156114c1576114c16113ae565b50039056fea26469706673582212200f8bfa37abf07fe0f0b7d0c4323b017b9f180f7d5bce06dac02be2e3b3db907264736f6c63430008090033",
|
|
438
|
+
"bytecode": "0x60806040523480156200001157600080fd5b5060405162001bfe38038062001bfe8339810160408190526200003491620001b4565b6001600160a01b038216620000905760405162461bcd60e51b815260206004820181905260248201527f42616e6b2063616e206e6f7420626520746865207a65726f206164647265737360448201526064015b60405180910390fd5b6001600160a01b038116620000f75760405162461bcd60e51b815260206004820152602660248201527f5442544320746f6b656e2063616e206e6f7420626520746865207a65726f206160448201526564647265737360d01b606482015260840162000087565b603280546001600160a01b038085166001600160a01b031992831617909255603380549284169290911691909117905562000132336200013a565b5050620001f3565b600080546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b6001600160a01b0381168114620001b157600080fd5b50565b60008060408385031215620001c857600080fd5b8251620001d5816200019b565b6020840151909250620001e8816200019b565b809150509250929050565b6119fb80620002036000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806376cdb03b116100cd578063a0712d6811610081578063d38bfff411610066578063d38bfff414610295578063e5d3d714146102a8578063fc4e51f6146102bb57600080fd5b8063a0712d6814610278578063cfce08161461028b57600080fd5b80638f4ffcb1116100b25780638f4ffcb11461024657806395131526146102595780639a508c8e1461027057600080fd5b806376cdb03b1461022057806388aaf0c81461023357600080fd5b8063475d05701161012457806353dce4df1161010957806353dce4df146101ca5780635aa6e675146101dd57806364e779b11461020d57600080fd5b8063475d0570146101a4578063479aa927146101b757600080fd5b80631171bda9146101565780632e73e3981461016b578063317dfa761461017e578063461c637314610191575b600080fd5b61016961016436600461152b565b6102ce565b005b6101696101793660046115b5565b610346565b61016961018c36600461152b565b61042a565b61016961019f36600461166d565b610510565b6101696101b23660046116d9565b610623565b6101696101c5366004611729565b6107d0565b6101696101d8366004611746565b6108f4565b6000546101f0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61016961021b366004611792565b610900565b6032546101f0906001600160a01b031681565b6034546101f0906001600160a01b031681565b6101696102543660046117ab565b61090d565b61026260355481565b604051908152602001610204565b6101696109e2565b610169610286366004611792565b610b29565b6102626201518081565b6101696102a3366004611729565b610c7d565b6033546101f0906001600160a01b031681565b6101696102c93660046115b5565b610d5c565b6000546001600160a01b0316331461032d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6103416001600160a01b0384168383610e03565b505050565b6000546001600160a01b031633146103a05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f6906103f1908890889088908890889060040161182a565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146104845760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b826105b75760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610324565b60005b8381101561061c5761060a8585838181106105d7576105d761185d565b90506020020160208101906105ec9190611729565b8484848181106105fe576105fe61185d565b90506020020135610e83565b8061061481611889565b9150506105ba565b5050505050565b6032546001600160a01b0316331461067d5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa91906118a4565b10156107535760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b61075d8484610e83565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461082a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b0381166108805760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f6044820152606401610324565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61034133848484610f18565b61090a3382611081565b50565b6033546001600160a01b0384811691161461096a5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610324565b336001600160a01b038416146109c25760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610324565b806109d6576109d18585611081565b61061c565b61061c85858484610f18565b6000546001600160a01b03163314610a3c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b610a4b6035546201518061117c565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b7157600080fd5b505afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba991906118a4565b1015610c025760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b610c0c8183610e83565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610c6157600080fd5b505af1158015610c75573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cd75760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b038116610d535760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610324565b61090a81611229565b6000546001600160a01b03163314610db65760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906103f1903090889088908890889060040161182a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610341908490611297565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ebe91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610c47565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610f5391815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b15801561102757600080fd5b505afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906118bd565b8585856040518563ffffffff1660e01b815260040161079894939291906118da565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b8826040516110bc91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610c47565b600082116111cc5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e697469617465640000000000000000000000006044820152606401610324565b806111d7834261190d565b10156112255760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c61707365646044820152606401610324565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b60006112ec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661137c9092919063ffffffff16565b805190915015610341578080602001905181019061130a9190611924565b6103415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610324565b606061138b8484600085611395565b90505b9392505050565b60608247101561140d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610324565b6001600160a01b0385163b6114645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610324565b600080866001600160a01b031685876040516114809190611976565b60006040518083038185875af1925050503d80600081146114bd576040519150601f19603f3d011682016040523d82523d6000602084013e6114c2565b606091505b50915091506114d28282866114dd565b979650505050505050565b606083156114ec57508161138e565b8251156114fc5782518084602001fd5b8160405162461bcd60e51b81526004016103249190611992565b6001600160a01b038116811461090a57600080fd5b60008060006060848603121561154057600080fd5b833561154b81611516565b9250602084013561155b81611516565b929592945050506040919091013590565b60008083601f84011261157e57600080fd5b50813567ffffffffffffffff81111561159657600080fd5b6020830191508360208285010111156115ae57600080fd5b9250929050565b6000806000806000608086880312156115cd57600080fd5b85356115d881611516565b945060208601356115e881611516565b935060408601359250606086013567ffffffffffffffff81111561160b57600080fd5b6116178882890161156c565b969995985093965092949392505050565b60008083601f84011261163a57600080fd5b50813567ffffffffffffffff81111561165257600080fd5b6020830191508360208260051b85010111156115ae57600080fd5b6000806000806040858703121561168357600080fd5b843567ffffffffffffffff8082111561169b57600080fd5b6116a788838901611628565b909650945060208701359150808211156116c057600080fd5b506116cd87828801611628565b95989497509550505050565b600080600080606085870312156116ef57600080fd5b84356116fa81611516565b935060208501359250604085013567ffffffffffffffff81111561171d57600080fd5b6116cd8782880161156c565b60006020828403121561173b57600080fd5b813561138e81611516565b60008060006040848603121561175b57600080fd5b83359250602084013567ffffffffffffffff81111561177957600080fd5b6117858682870161156c565b9497909650939450505050565b6000602082840312156117a457600080fd5b5035919050565b6000806000806000608086880312156117c357600080fd5b85356117ce81611516565b94506020860135935060408601356117e581611516565b9250606086013567ffffffffffffffff81111561160b57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114d2608083018486611801565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561189d5761189d611873565b5060010190565b6000602082840312156118b657600080fd5b5051919050565b6000602082840312156118cf57600080fd5b815161138e81611516565b6001600160a01b0385168152836020820152606060408201526000611903606083018486611801565b9695505050505050565b60008282101561191f5761191f611873565b500390565b60006020828403121561193657600080fd5b8151801515811461138e57600080fd5b60005b83811015611961578181015183820152602001611949565b83811115611970576000848401525b50505050565b60008251611988818460208701611946565b9190910192915050565b60208152600082518060208401526119b1816040850160208701611946565b601f01601f1916919091016040019291505056fea26469706673582212205692253d56e7fc2993692b0fd45e0ab57941febf26f3611ea580b7c2a226784d64736f6c63430008090033",
|
|
439
|
+
"deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101515760003560e01c806376cdb03b116100cd578063a0712d6811610081578063d38bfff411610066578063d38bfff414610295578063e5d3d714146102a8578063fc4e51f6146102bb57600080fd5b8063a0712d6814610278578063cfce08161461028b57600080fd5b80638f4ffcb1116100b25780638f4ffcb11461024657806395131526146102595780639a508c8e1461027057600080fd5b806376cdb03b1461022057806388aaf0c81461023357600080fd5b8063475d05701161012457806353dce4df1161010957806353dce4df146101ca5780635aa6e675146101dd57806364e779b11461020d57600080fd5b8063475d0570146101a4578063479aa927146101b757600080fd5b80631171bda9146101565780632e73e3981461016b578063317dfa761461017e578063461c637314610191575b600080fd5b61016961016436600461152b565b6102ce565b005b6101696101793660046115b5565b610346565b61016961018c36600461152b565b61042a565b61016961019f36600461166d565b610510565b6101696101b23660046116d9565b610623565b6101696101c5366004611729565b6107d0565b6101696101d8366004611746565b6108f4565b6000546101f0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61016961021b366004611792565b610900565b6032546101f0906001600160a01b031681565b6034546101f0906001600160a01b031681565b6101696102543660046117ab565b61090d565b61026260355481565b604051908152602001610204565b6101696109e2565b610169610286366004611792565b610b29565b6102626201518081565b6101696102a3366004611729565b610c7d565b6033546101f0906001600160a01b031681565b6101696102c93660046115b5565b610d5c565b6000546001600160a01b0316331461032d5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e63650000000060448201526064015b60405180910390fd5b6103416001600160a01b0384168383610e03565b505050565b6000546001600160a01b031633146103a05760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517ffc4e51f60000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063fc4e51f6906103f1908890889088908890889060040161182a565b600060405180830381600087803b15801561040b57600080fd5b505af115801561041f573d6000803e3d6000fd5b505050505050505050565b6000546001600160a01b031633146104845760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6033546040517f1171bda90000000000000000000000000000000000000000000000000000000081526001600160a01b03858116600483015284811660248301526044820184905290911690631171bda990606401600060405180830381600087803b1580156104f357600080fd5b505af1158015610507573d6000803e3d6000fd5b50505050505050565b6032546001600160a01b0316331461056a5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b826105b75760405162461bcd60e51b815260206004820152601760248201527f4e6f206465706f7369746f7273207370656369666965640000000000000000006044820152606401610324565b60005b8381101561061c5761060a8585838181106105d7576105d761185d565b90506020020160208101906105ec9190611729565b8484848181106105fe576105fe61185d565b90506020020135610e83565b8061061481611889565b9150506105ba565b5050505050565b6032546001600160a01b0316331461067d5760405162461bcd60e51b815260206004820152601660248201527f43616c6c6572206973206e6f74207468652042616e6b000000000000000000006044820152606401610324565b6032546040516370a0823160e01b81526001600160a01b038681166004830152859216906370a082319060240160206040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106fa91906118a4565b10156107535760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b61075d8484610e83565b603254604051631f1b6d2760e21b81526001600160a01b0386811660048301523060248301526044820186905290911690637c6db49c906064015b600060405180830381600087803b1580156107b257600080fd5b505af11580156107c6573d6000803e3d6000fd5b5050505050505050565b6000546001600160a01b0316331461082a5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b0381166108805760405162461bcd60e51b815260206004820181905260248201527f4e6577207661756c7420616464726573732063616e6e6f74206265207a65726f6044820152606401610324565b604080516001600160a01b03831681524260208201527f5cc842cab066489e13292128663547c68705dbf476f0131e0107f155719c6124910160405180910390a1426035556034805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61034133848484610f18565b61090a3382611081565b50565b6033546001600160a01b0384811691161461096a5760405162461bcd60e51b815260206004820152601160248201527f546f6b656e206973206e6f7420544254430000000000000000000000000000006044820152606401610324565b336001600160a01b038416146109c25760405162461bcd60e51b815260206004820152601860248201527f4f6e6c7920544254432063616c6c657220616c6c6f77656400000000000000006044820152606401610324565b806109d6576109d18585611081565b61061c565b61061c85858484610f18565b6000546001600160a01b03163314610a3c5760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b610a4b6035546201518061117c565b6034546040516001600160a01b0390911681527f81a9bb8030ed4116b405800280e065110a37afb57b69948e714c97fab23475ec9060200160405180910390a16033546034546040517ff2fde38b0000000000000000000000000000000000000000000000000000000081526001600160a01b03918216600482015291169063f2fde38b90602401600060405180830381600087803b158015610aed57600080fd5b505af1158015610b01573d6000803e3d6000fd5b50506034805473ffffffffffffffffffffffffffffffffffffffff1916905550506000603555565b6032546040516370a0823160e01b815233600482018190529183916001600160a01b03909116906370a082319060240160206040518083038186803b158015610b7157600080fd5b505afa158015610b85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba991906118a4565b1015610c025760405162461bcd60e51b815260206004820152602260248201527f416d6f756e7420657863656564732062616c616e636520696e207468652062616044820152616e6b60f01b6064820152608401610324565b610c0c8183610e83565b603254604051631f1b6d2760e21b81526001600160a01b0383811660048301523060248301526044820185905290911690637c6db49c906064015b600060405180830381600087803b158015610c6157600080fd5b505af1158015610c75573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610cd75760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6001600160a01b038116610d535760405162461bcd60e51b815260206004820152602260248201527f4e657720676f7665726e616e636520697320746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152608401610324565b61090a81611229565b6000546001600160a01b03163314610db65760405162461bcd60e51b815260206004820152601c60248201527f43616c6c6572206973206e6f742074686520676f7665726e616e6365000000006044820152606401610324565b6040517fb88d4fde0000000000000000000000000000000000000000000000000000000081526001600160a01b0386169063b88d4fde906103f1903090889088908890889060040161182a565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610341908490611297565b816001600160a01b03167f30385c845b448a36257a6a1716e6ad2e1bc2cbe333cde1e69fe849ad6511adfe82604051610ebe91815260200190565b60405180910390a26033546040517f40c10f190000000000000000000000000000000000000000000000000000000081526001600160a01b03848116600483015260248201849052909116906340c10f1990604401610c47565b836001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b884604051610f5391815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03868116600483015260248201869052909116906379cc679090604401600060405180830381600087803b158015610fa957600080fd5b505af1158015610fbd573d6000803e3d6000fd5b5050603254604080517fe78cea9200000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169350634a38757e9250839163e78cea9291600480820192602092909190829003018186803b15801561102757600080fd5b505afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906118bd565b8585856040518563ffffffff1660e01b815260040161079894939291906118da565b816001600160a01b03167f68751a4c3821398cb63d11609eca2440742ef19446f0c0261bfa8a13dd0748b8826040516110bc91815260200190565b60405180910390a260335460405163079cc67960e41b81526001600160a01b03848116600483015260248201849052909116906379cc679090604401600060405180830381600087803b15801561111257600080fd5b505af1158015611126573d6000803e3d6000fd5b50506032546040517f56a6d9ef0000000000000000000000000000000000000000000000000000000081526001600160a01b0386811660048301526024820186905290911692506356a6d9ef9150604401610c47565b600082116111cc5760405162461bcd60e51b815260206004820152601460248201527f4368616e6765206e6f7420696e697469617465640000000000000000000000006044820152606401610324565b806111d7834261190d565b10156112255760405162461bcd60e51b815260206004820181905260248201527f476f7665726e616e63652064656c617920686173206e6f7420656c61707365646044820152606401610324565b5050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff1983168117909355604080519190921680825260208201939093527f5f56bee8cffbe9a78652a74a60705edede02af10b0bbb888ca44b79a0d42ce80910160405180910390a15050565b60006112ec826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661137c9092919063ffffffff16565b805190915015610341578080602001905181019061130a9190611924565b6103415760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610324565b606061138b8484600085611395565b90505b9392505050565b60608247101561140d5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c00000000000000000000000000000000000000000000000000006064820152608401610324565b6001600160a01b0385163b6114645760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610324565b600080866001600160a01b031685876040516114809190611976565b60006040518083038185875af1925050503d80600081146114bd576040519150601f19603f3d011682016040523d82523d6000602084013e6114c2565b606091505b50915091506114d28282866114dd565b979650505050505050565b606083156114ec57508161138e565b8251156114fc5782518084602001fd5b8160405162461bcd60e51b81526004016103249190611992565b6001600160a01b038116811461090a57600080fd5b60008060006060848603121561154057600080fd5b833561154b81611516565b9250602084013561155b81611516565b929592945050506040919091013590565b60008083601f84011261157e57600080fd5b50813567ffffffffffffffff81111561159657600080fd5b6020830191508360208285010111156115ae57600080fd5b9250929050565b6000806000806000608086880312156115cd57600080fd5b85356115d881611516565b945060208601356115e881611516565b935060408601359250606086013567ffffffffffffffff81111561160b57600080fd5b6116178882890161156c565b969995985093965092949392505050565b60008083601f84011261163a57600080fd5b50813567ffffffffffffffff81111561165257600080fd5b6020830191508360208260051b85010111156115ae57600080fd5b6000806000806040858703121561168357600080fd5b843567ffffffffffffffff8082111561169b57600080fd5b6116a788838901611628565b909650945060208701359150808211156116c057600080fd5b506116cd87828801611628565b95989497509550505050565b600080600080606085870312156116ef57600080fd5b84356116fa81611516565b935060208501359250604085013567ffffffffffffffff81111561171d57600080fd5b6116cd8782880161156c565b60006020828403121561173b57600080fd5b813561138e81611516565b60008060006040848603121561175b57600080fd5b83359250602084013567ffffffffffffffff81111561177957600080fd5b6117858682870161156c565b9497909650939450505050565b6000602082840312156117a457600080fd5b5035919050565b6000806000806000608086880312156117c357600080fd5b85356117ce81611516565b94506020860135935060408601356117e581611516565b9250606086013567ffffffffffffffff81111561160b57600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006001600160a01b038088168352808716602084015250846040830152608060608301526114d2608083018486611801565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561189d5761189d611873565b5060010190565b6000602082840312156118b657600080fd5b5051919050565b6000602082840312156118cf57600080fd5b815161138e81611516565b6001600160a01b0385168152836020820152606060408201526000611903606083018486611801565b9695505050505050565b60008282101561191f5761191f611873565b500390565b60006020828403121561193657600080fd5b8151801515811461138e57600080fd5b60005b83811015611961578181015183820152602001611949565b83811115611970576000848401525b50505050565b60008251611988818460208701611946565b9190910192915050565b60208152600082518060208401526119b1816040850160208701611946565b601f01601f1916919091016040019291505056fea26469706673582212205692253d56e7fc2993692b0fd45e0ab57941febf26f3611ea580b7c2a226784d64736f6c63430008090033",
|
|
389
440
|
"linkReferences": {},
|
|
390
441
|
"deployedLinkReferences": {}
|
|
391
442
|
}
|
|
@@ -31,6 +31,8 @@ import "../GovernanceUtils.sol";
|
|
|
31
31
|
/// @dev TBTC Vault is the owner of TBTC token contract and is the only contract
|
|
32
32
|
/// minting the token.
|
|
33
33
|
contract TBTCVault is IVault, Governable {
|
|
34
|
+
using SafeERC20 for IERC20;
|
|
35
|
+
|
|
34
36
|
/// @notice The time delay that needs to pass between initializing and
|
|
35
37
|
/// finalizing upgrade to a new vault. The time delay forces the
|
|
36
38
|
/// upgrading party to reflect on the vault address it is upgrading
|
|
@@ -85,34 +87,6 @@ contract TBTCVault is IVault, Governable {
|
|
|
85
87
|
_transferGovernance(msg.sender);
|
|
86
88
|
}
|
|
87
89
|
|
|
88
|
-
/// @notice Allows the governance of the TBTCVault to recover any ERC20
|
|
89
|
-
/// token sent mistakenly to the TBTC token contract address.
|
|
90
|
-
/// @param token Address of the recovered ERC20 token contract.
|
|
91
|
-
/// @param recipient Address the recovered token should be sent to.
|
|
92
|
-
/// @param amount Recovered amount.
|
|
93
|
-
function recoverERC20(
|
|
94
|
-
IERC20 token,
|
|
95
|
-
address recipient,
|
|
96
|
-
uint256 amount
|
|
97
|
-
) external onlyGovernance {
|
|
98
|
-
tbtcToken.recoverERC20(token, recipient, amount);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/// @notice Allows the governance of the TBTCVault to recover any ERC721
|
|
102
|
-
/// token sent mistakenly to the TBTC token contract address.
|
|
103
|
-
/// @param token Address of the recovered ERC721 token contract.
|
|
104
|
-
/// @param recipient Address the recovered token should be sent to.
|
|
105
|
-
/// @param tokenId Identifier of the recovered token.
|
|
106
|
-
/// @param data Additional data.
|
|
107
|
-
function recoverERC721(
|
|
108
|
-
IERC721 token,
|
|
109
|
-
address recipient,
|
|
110
|
-
uint256 tokenId,
|
|
111
|
-
bytes calldata data
|
|
112
|
-
) external onlyGovernance {
|
|
113
|
-
tbtcToken.recoverERC721(token, recipient, tokenId, data);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
90
|
/// @notice Transfers the given `amount` of the Bank balance from caller
|
|
117
91
|
/// to TBTC Vault, and mints `amount` of TBTC to the caller.
|
|
118
92
|
/// @dev TBTC Vault must have an allowance for caller's balance in the Bank
|
|
@@ -249,6 +223,64 @@ contract TBTCVault is IVault, Governable {
|
|
|
249
223
|
upgradeInitiatedTimestamp = 0;
|
|
250
224
|
}
|
|
251
225
|
|
|
226
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC20
|
|
227
|
+
/// token sent mistakenly to the TBTC token contract address.
|
|
228
|
+
/// @param token Address of the recovered ERC20 token contract.
|
|
229
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
230
|
+
/// @param amount Recovered amount.
|
|
231
|
+
function recoverERC20FromToken(
|
|
232
|
+
IERC20 token,
|
|
233
|
+
address recipient,
|
|
234
|
+
uint256 amount
|
|
235
|
+
) external onlyGovernance {
|
|
236
|
+
tbtcToken.recoverERC20(token, recipient, amount);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC721
|
|
240
|
+
/// token sent mistakenly to the TBTC token contract address.
|
|
241
|
+
/// @param token Address of the recovered ERC721 token contract.
|
|
242
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
243
|
+
/// @param tokenId Identifier of the recovered token.
|
|
244
|
+
/// @param data Additional data.
|
|
245
|
+
function recoverERC721FromToken(
|
|
246
|
+
IERC721 token,
|
|
247
|
+
address recipient,
|
|
248
|
+
uint256 tokenId,
|
|
249
|
+
bytes calldata data
|
|
250
|
+
) external onlyGovernance {
|
|
251
|
+
tbtcToken.recoverERC721(token, recipient, tokenId, data);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC20
|
|
255
|
+
/// token sent - mistakenly or not - to the vault address. This
|
|
256
|
+
/// function should be used to withdraw TBTC v1 tokens transferred
|
|
257
|
+
/// to TBTCVault as a result of VendingMachine > TBTCVault upgrade.
|
|
258
|
+
/// @param token Address of the recovered ERC20 token contract.
|
|
259
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
260
|
+
/// @param amount Recovered amount.
|
|
261
|
+
function recoverERC20(
|
|
262
|
+
IERC20 token,
|
|
263
|
+
address recipient,
|
|
264
|
+
uint256 amount
|
|
265
|
+
) external onlyGovernance {
|
|
266
|
+
token.safeTransfer(recipient, amount);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/// @notice Allows the governance of the TBTCVault to recover any ERC721
|
|
270
|
+
/// token sent mistakenly to the vault address.
|
|
271
|
+
/// @param token Address of the recovered ERC721 token contract.
|
|
272
|
+
/// @param recipient Address the recovered token should be sent to.
|
|
273
|
+
/// @param tokenId Identifier of the recovered token.
|
|
274
|
+
/// @param data Additional data.
|
|
275
|
+
function recoverERC721(
|
|
276
|
+
IERC721 token,
|
|
277
|
+
address recipient,
|
|
278
|
+
uint256 tokenId,
|
|
279
|
+
bytes calldata data
|
|
280
|
+
) external onlyGovernance {
|
|
281
|
+
token.safeTransferFrom(address(this), recipient, tokenId, data);
|
|
282
|
+
}
|
|
283
|
+
|
|
252
284
|
// slither-disable-next-line calls-loop
|
|
253
285
|
function _mint(address minter, uint256 amount) internal {
|
|
254
286
|
emit Minted(minter, amount);
|
package/export.json
CHANGED
|
@@ -17092,6 +17092,29 @@
|
|
|
17092
17092
|
"stateMutability": "nonpayable",
|
|
17093
17093
|
"type": "function"
|
|
17094
17094
|
},
|
|
17095
|
+
{
|
|
17096
|
+
"inputs": [
|
|
17097
|
+
{
|
|
17098
|
+
"internalType": "contract IERC20",
|
|
17099
|
+
"name": "token",
|
|
17100
|
+
"type": "address"
|
|
17101
|
+
},
|
|
17102
|
+
{
|
|
17103
|
+
"internalType": "address",
|
|
17104
|
+
"name": "recipient",
|
|
17105
|
+
"type": "address"
|
|
17106
|
+
},
|
|
17107
|
+
{
|
|
17108
|
+
"internalType": "uint256",
|
|
17109
|
+
"name": "amount",
|
|
17110
|
+
"type": "uint256"
|
|
17111
|
+
}
|
|
17112
|
+
],
|
|
17113
|
+
"name": "recoverERC20FromToken",
|
|
17114
|
+
"outputs": [],
|
|
17115
|
+
"stateMutability": "nonpayable",
|
|
17116
|
+
"type": "function"
|
|
17117
|
+
},
|
|
17095
17118
|
{
|
|
17096
17119
|
"inputs": [
|
|
17097
17120
|
{
|
|
@@ -17120,6 +17143,34 @@
|
|
|
17120
17143
|
"stateMutability": "nonpayable",
|
|
17121
17144
|
"type": "function"
|
|
17122
17145
|
},
|
|
17146
|
+
{
|
|
17147
|
+
"inputs": [
|
|
17148
|
+
{
|
|
17149
|
+
"internalType": "contract IERC721",
|
|
17150
|
+
"name": "token",
|
|
17151
|
+
"type": "address"
|
|
17152
|
+
},
|
|
17153
|
+
{
|
|
17154
|
+
"internalType": "address",
|
|
17155
|
+
"name": "recipient",
|
|
17156
|
+
"type": "address"
|
|
17157
|
+
},
|
|
17158
|
+
{
|
|
17159
|
+
"internalType": "uint256",
|
|
17160
|
+
"name": "tokenId",
|
|
17161
|
+
"type": "uint256"
|
|
17162
|
+
},
|
|
17163
|
+
{
|
|
17164
|
+
"internalType": "bytes",
|
|
17165
|
+
"name": "data",
|
|
17166
|
+
"type": "bytes"
|
|
17167
|
+
}
|
|
17168
|
+
],
|
|
17169
|
+
"name": "recoverERC721FromToken",
|
|
17170
|
+
"outputs": [],
|
|
17171
|
+
"stateMutability": "nonpayable",
|
|
17172
|
+
"type": "function"
|
|
17173
|
+
},
|
|
17123
17174
|
{
|
|
17124
17175
|
"inputs": [],
|
|
17125
17176
|
"name": "tbtcToken",
|