From 16436511248f592cfc9731d1d6964caf8c2e776c Mon Sep 17 00:00:00 2001 From: Andres Martin Aiello <50411235+andresaiello@users.noreply.github.com> Date: Tue, 31 Oct 2023 15:20:25 -0300 Subject: [PATCH] fix: Add nonReentrant to ERC20Custody (#93) --- contracts/evm/ERC20Custody.sol | 12 +- .../evm/erc20custody.sol/erc20custody.go | 2 +- .../reentrancyguard.sol/reentrancyguard.go | 181 ++++++++++++++++++ .../contracts/evm/ERC20Custody__factory.ts | 2 +- 4 files changed, 192 insertions(+), 5 deletions(-) create mode 100644 pkg/openzeppelin/contracts/security/reentrancyguard.sol/reentrancyguard.go diff --git a/contracts/evm/ERC20Custody.sol b/contracts/evm/ERC20Custody.sol index 59d6d73f..52c2d260 100644 --- a/contracts/evm/ERC20Custody.sol +++ b/contracts/evm/ERC20Custody.sol @@ -4,10 +4,11 @@ pragma solidity 0.8.7; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import "@openzeppelin/contracts/security/ReentrancyGuard.sol"; /// @title ERC20Custody. /// @notice ERC20Custody for depositing ERC20 assets into ZetaChain and making operations with them. -contract ERC20Custody { +contract ERC20Custody is ReentrancyGuard { using SafeERC20 for IERC20; error NotWhitelisted(); @@ -161,7 +162,12 @@ contract ERC20Custody { * @param amount, asset amount. * @param message, bytes message or encoded zetechain call. */ - function deposit(bytes calldata recipient, IERC20 asset, uint256 amount, bytes calldata message) external { + function deposit( + bytes calldata recipient, + IERC20 asset, + uint256 amount, + bytes calldata message + ) external nonReentrant { if (paused) { revert IsPaused(); } @@ -184,7 +190,7 @@ contract ERC20Custody { * @param asset, ERC20 asset. * @param amount, asset amount. */ - function withdraw(address recipient, IERC20 asset, uint256 amount) external onlyTSS { + function withdraw(address recipient, IERC20 asset, uint256 amount) external nonReentrant onlyTSS { if (paused) { revert IsPaused(); } diff --git a/pkg/contracts/evm/erc20custody.sol/erc20custody.go b/pkg/contracts/evm/erc20custody.sol/erc20custody.go index 397928e4..9fdd2495 100644 --- a/pkg/contracts/evm/erc20custody.sol/erc20custody.go +++ b/pkg/contracts/evm/erc20custody.sol/erc20custody.go @@ -32,7 +32,7 @@ var ( // ERC20CustodyMetaData contains all meta data concerning the ERC20Custody contract. var ERC20CustodyMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"TSSAddress_\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"TSSAddressUpdater_\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"zetaFee_\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"zetaMaxFee_\",\"type\":\"uint256\"},{\"internalType\":\"contractIERC20\",\"name\":\"zeta_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidSender\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTSSUpdater\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IsPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroFee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZetaMaxFeeExceeded\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Deposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"TSSAddressUpdater_\",\"type\":\"address\"}],\"name\":\"RenouncedTSSUpdater\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"Unwhitelisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"TSSAddress_\",\"type\":\"address\"}],\"name\":\"UpdatedTSSAddress\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"zetaFee_\",\"type\":\"uint256\"}],\"name\":\"UpdatedZetaFee\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"Whitelisted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawn\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"TSSAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TSSAddressUpdater\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"recipient\",\"type\":\"bytes\"},{\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"renounceTSSAddressUpdater\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"unwhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"TSSAddress_\",\"type\":\"address\"}],\"name\":\"updateTSSAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"zetaFee_\",\"type\":\"uint256\"}],\"name\":\"updateZetaFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"whitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"whitelisted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"contractIERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zeta\",\"outputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"zetaMaxFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60c06040523480156200001157600080fd5b50604051620021043803806200210483398181016040528101906200003791906200014f565b84600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826002819055508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050816080818152505050505050506200027c565b6000815190506200011b816200022e565b92915050565b600081519050620001328162000248565b92915050565b600081519050620001498162000262565b92915050565b600080600080600060a086880312156200016e576200016d62000229565b5b60006200017e888289016200010a565b955050602062000191888289016200010a565b9450506040620001a48882890162000138565b9350506060620001b78882890162000138565b9250506080620001ca8882890162000121565b9150509295509295909350565b6000620001e482620001ff565b9050919050565b6000620001f882620001d7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6200023981620001d7565b81146200024557600080fd5b50565b6200025381620001eb565b81146200025f57600080fd5b50565b6200026d816200021f565b81146200027957600080fd5b50565b60805160a05160601c611e4a620002ba60003960008181610dfd01528181610e66015261105a01526000818161042b0152610c6e0152611e4a6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639b19251a11610097578063e5408cfa11610066578063e5408cfa1461024d578063e609055e1461026b578063e8f9cb3a14610287578063ed11692b146102a557610100565b80639b19251a146101c9578063d936547e146101e5578063d9caed1214610215578063de2f6c5e1461023157610100565b80637bdaded3116100d35780637bdaded3146101695780638456cb5914610187578063950837aa146101915780639a590427146101ad57610100565b80633f4ba83a1461010557806353ee30a31461010f57806354b61e811461012d5780635c975abb1461014b575b600080fd5b61010d6102af565b005b6101176103cc565b60405161012491906119b8565b60405180910390f35b6101356103f2565b60405161014291906119b8565b60405180910390f35b610153610418565b6040516101609190611a33565b60405180910390f35b610171610429565b60405161017e9190611b34565b60405180910390f35b61018f61044d565b005b6101ab60048036038101906101a6919061168a565b6105f4565b005b6101c760048036038101906101c291906117de565b61075c565b005b6101e360048036038101906101de91906117de565b610881565b005b6101ff60048036038101906101fa91906117de565b6109a6565b60405161020c9190611a33565b60405180910390f35b61022f600480360381019061022a91906116b7565b6109c6565b005b61024b6004803603810190610246919061180b565b610baa565b005b610255610d07565b6040516102629190611b34565b60405180910390f35b61028560048036038101906102809190611737565b610d0d565b005b61028f611058565b60405161029c9190611a97565b60405180910390f35b6102ad61107c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610335576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900460ff16610379576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336040516103c291906119b8565b60405180910390a1565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104d3576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900460ff1615610518576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105a1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336040516105ea91906119b8565b60405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067a576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcd2958db8285a532edf298cbe1aa28ea3fb5ec82461253f9a8c1477924e299478160405161075191906119b8565b60405180910390a150565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107e3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da4679160405160405180910390a250565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610908576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a250565b60036020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900460ff1615610a92576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b15576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4083828473ffffffffffffffffffffffffffffffffffffffff166112279092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb83604051610b9d9190611b34565b60405180910390a3505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c31576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000811415610c6c576040517faf13986d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610cc6576040517fc1be451300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507f6d2d8e313fbaf76898bb9fa55e4b52525e49c7d7182d0874f97bd9076e81d52381604051610cfc9190611b34565b60405180910390a150565b60025481565b60008054906101000a900460ff1615610d52576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dd5576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025414158015610e355750600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b15610eac57610eab33600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112ad909392919063ffffffff16565b5b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ee791906119b8565b60206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190611838565b9050610f663330868873ffffffffffffffffffffffffffffffffffffffff166112ad909392919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff167f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae8888848973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fda91906119b8565b60206040518083038186803b158015610ff257600080fd5b505afa158015611006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102a9190611838565b6110349190611b92565b8787604051611047959493929190611a4e565b60405180910390a250505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611102576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561118b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f39ac266bfc011581be62c138d96e4e8782812013bb66fffb4cd207f4bfee37773360405161121d91906119b8565b60405180910390a1565b6112a88363a9059cbb60e01b8484604051602401611246929190611a0a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611336565b505050565b611330846323b872dd60e01b8585856040516024016112ce939291906119d3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611336565b50505050565b6000611398826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166113fd9092919063ffffffff16565b90506000815111156113f857808060200190518101906113b8919061170a565b6113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90611b14565b60405180910390fd5b5b505050565b606061140c8484600085611415565b90509392505050565b60608247101561145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190611ad4565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161148391906119a1565b60006040518083038185875af1925050503d80600081146114c0576040519150601f19603f3d011682016040523d82523d6000602084013e6114c5565b606091505b50915091506114d6878383876114e2565b92505050949350505050565b606083156115455760008351141561153d576114fd85611558565b61153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390611af4565b60405180910390fd5b5b829050611550565b61154f838361157b565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561158e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c29190611ab2565b60405180910390fd5b6000813590506115da81611db8565b92915050565b6000815190506115ef81611dcf565b92915050565b60008083601f84011261160b5761160a611ccc565b5b8235905067ffffffffffffffff81111561162857611627611cc7565b5b60208301915083600182028301111561164457611643611cd1565b5b9250929050565b60008135905061165a81611de6565b92915050565b60008135905061166f81611dfd565b92915050565b60008151905061168481611dfd565b92915050565b6000602082840312156116a05761169f611cdb565b5b60006116ae848285016115cb565b91505092915050565b6000806000606084860312156116d0576116cf611cdb565b5b60006116de868287016115cb565b93505060206116ef8682870161164b565b925050604061170086828701611660565b9150509250925092565b6000602082840312156117205761171f611cdb565b5b600061172e848285016115e0565b91505092915050565b6000806000806000806080878903121561175457611753611cdb565b5b600087013567ffffffffffffffff81111561177257611771611cd6565b5b61177e89828a016115f5565b9650965050602061179189828a0161164b565b94505060406117a289828a01611660565b935050606087013567ffffffffffffffff8111156117c3576117c2611cd6565b5b6117cf89828a016115f5565b92509250509295509295509295565b6000602082840312156117f4576117f3611cdb565b5b60006118028482850161164b565b91505092915050565b60006020828403121561182157611820611cdb565b5b600061182f84828501611660565b91505092915050565b60006020828403121561184e5761184d611cdb565b5b600061185c84828501611675565b91505092915050565b61186e81611bc6565b82525050565b61187d81611bd8565b82525050565b600061188f8385611b65565b935061189c838584611c56565b6118a583611ce0565b840190509392505050565b60006118bb82611b4f565b6118c58185611b76565b93506118d5818560208601611c65565b80840191505092915050565b6118ea81611c20565b82525050565b60006118fb82611b5a565b6119058185611b81565b9350611915818560208601611c65565b61191e81611ce0565b840191505092915050565b6000611936602683611b81565b915061194182611cf1565b604082019050919050565b6000611959601d83611b81565b915061196482611d40565b602082019050919050565b600061197c602a83611b81565b915061198782611d69565b604082019050919050565b61199b81611c16565b82525050565b60006119ad82846118b0565b915081905092915050565b60006020820190506119cd6000830184611865565b92915050565b60006060820190506119e86000830186611865565b6119f56020830185611865565b611a026040830184611992565b949350505050565b6000604082019050611a1f6000830185611865565b611a2c6020830184611992565b9392505050565b6000602082019050611a486000830184611874565b92915050565b60006060820190508181036000830152611a69818789611883565b9050611a786020830186611992565b8181036040830152611a8b818486611883565b90509695505050505050565b6000602082019050611aac60008301846118e1565b92915050565b60006020820190508181036000830152611acc81846118f0565b905092915050565b60006020820190508181036000830152611aed81611929565b9050919050565b60006020820190508181036000830152611b0d8161194c565b9050919050565b60006020820190508181036000830152611b2d8161196f565b9050919050565b6000602082019050611b496000830184611992565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611b9d82611c16565b9150611ba883611c16565b925082821015611bbb57611bba611c98565b5b828203905092915050565b6000611bd182611bf6565b9050919050565b60008115159050919050565b6000611bef82611bc6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611c2b82611c32565b9050919050565b6000611c3d82611c44565b9050919050565b6000611c4f82611bf6565b9050919050565b82818337600083830152505050565b60005b83811015611c83578082015181840152602081019050611c68565b83811115611c92576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b611dc181611bc6565b8114611dcc57600080fd5b50565b611dd881611bd8565b8114611de357600080fd5b50565b611def81611be4565b8114611dfa57600080fd5b50565b611e0681611c16565b8114611e1157600080fd5b5056fea26469706673582212206146a48df6487c8ffd47b2ee14a7124685ab8cfa6ca34eb6be52dca97f6f146164736f6c63430008070033", + Bin: "0x60c06040523480156200001157600080fd5b50604051620021e9380380620021e9833981810160405281019062000037919062000156565b6001600081905550846001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826003819055508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508160808181525050505050505062000283565b600081519050620001228162000235565b92915050565b60008151905062000139816200024f565b92915050565b600081519050620001508162000269565b92915050565b600080600080600060a0868803121562000175576200017462000230565b5b6000620001858882890162000111565b9550506020620001988882890162000111565b9450506040620001ab888289016200013f565b9350506060620001be888289016200013f565b9250506080620001d18882890162000128565b9150509295509295909350565b6000620001eb8262000206565b9050919050565b6000620001ff82620001de565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6200024081620001de565b81146200024c57600080fd5b50565b6200025a81620001f2565b81146200026657600080fd5b50565b620002748162000226565b81146200028057600080fd5b50565b60805160a05160601c611f28620002c160003960008181610e1301528181610e7a015261107601526000818161042e0152610c7a0152611f286000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639b19251a11610097578063e5408cfa11610066578063e5408cfa1461024d578063e609055e1461026b578063e8f9cb3a14610287578063ed11692b146102a557610100565b80639b19251a146101c9578063d936547e146101e5578063d9caed1214610215578063de2f6c5e1461023157610100565b80637bdaded3116100d35780637bdaded3146101695780638456cb5914610187578063950837aa146101915780639a590427146101ad57610100565b80633f4ba83a1461010557806353ee30a31461010f57806354b61e811461012d5780635c975abb1461014b575b600080fd5b61010d6102af565b005b6101176103cf565b6040516101249190611a4d565b60405180910390f35b6101356103f3565b6040516101429190611a4d565b60405180910390f35b610153610419565b6040516101609190611ac8565b60405180910390f35b61017161042c565b60405161017e9190611be9565b60405180910390f35b61018f610450565b005b6101ab60048036038101906101a691906116fc565b6105f7565b005b6101c760048036038101906101c29190611850565b61075e565b005b6101e360048036038101906101de9190611850565b610881565b005b6101ff60048036038101906101fa9190611850565b6109a4565b60405161020c9190611ac8565b60405180910390f35b61022f600480360381019061022a9190611729565b6109c4565b005b61024b6004803603810190610246919061187d565b610bb8565b005b610255610d13565b6040516102629190611be9565b60405180910390f35b610285600480360381019061028091906117a9565b610d19565b005b61028f611074565b60405161029c9190611b2c565b60405180910390f35b6102ad611098565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610335576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900460ff1661037b576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336040516103c59190611a4d565b60405180910390a1565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104d6576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900460ff161561051d576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105a4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018060006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336040516105ed9190611a4d565b60405180910390a1565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067d576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106e4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcd2958db8285a532edf298cbe1aa28ea3fb5ec82461253f9a8c1477924e29947816040516107539190611a4d565b60405180910390a150565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107e3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da4679160405160405180910390a250565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610906576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a250565b60046020528060005260406000206000915054906101000a900460ff1681565b6109cc61123f565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a51576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900460ff1615610a98576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b1b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4683828473ffffffffffffffffffffffffffffffffffffffff1661128f9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb83604051610ba39190611be9565b60405180910390a3610bb3611315565b505050565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000811415610c78576040517faf13986d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610cd2576040517fc1be451300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507f6d2d8e313fbaf76898bb9fa55e4b52525e49c7d7182d0874f97bd9076e81d52381604051610d089190611be9565b60405180910390a150565b60035481565b610d2161123f565b600160009054906101000a900460ff1615610d68576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610deb576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035414158015610e4b5750600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b15610ec057610ebf3360018054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661131f909392919063ffffffff16565b5b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610efb9190611a4d565b60206040518083038186803b158015610f1357600080fd5b505afa158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b91906118aa565b9050610f7a3330868873ffffffffffffffffffffffffffffffffffffffff1661131f909392919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff167f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae8888848973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fee9190611a4d565b60206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e91906118aa565b6110489190611c47565b878760405161105b959493929190611ae3565b60405180910390a25061106c611315565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111e576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f39ac266bfc011581be62c138d96e4e8782812013bb66fffb4cd207f4bfee3777336040516112359190611a4d565b60405180910390a1565b60026000541415611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90611bc9565b60405180910390fd5b6002600081905550565b6113108363a9059cbb60e01b84846040516024016112ae929190611a9f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113a8565b505050565b6001600081905550565b6113a2846323b872dd60e01b85858560405160240161134093929190611a68565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113a8565b50505050565b600061140a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661146f9092919063ffffffff16565b905060008151111561146a578080602001905181019061142a919061177c565b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090611ba9565b60405180910390fd5b5b505050565b606061147e8484600085611487565b90509392505050565b6060824710156114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390611b69565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114f59190611a36565b60006040518083038185875af1925050503d8060008114611532576040519150601f19603f3d011682016040523d82523d6000602084013e611537565b606091505b509150915061154887838387611554565b92505050949350505050565b606083156115b7576000835114156115af5761156f856115ca565b6115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590611b89565b60405180910390fd5b5b8290506115c2565b6115c183836115ed565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156116005781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349190611b47565b60405180910390fd5b60008135905061164c81611e96565b92915050565b60008151905061166181611ead565b92915050565b60008083601f84011261167d5761167c611d81565b5b8235905067ffffffffffffffff81111561169a57611699611d7c565b5b6020830191508360018202830111156116b6576116b5611d86565b5b9250929050565b6000813590506116cc81611ec4565b92915050565b6000813590506116e181611edb565b92915050565b6000815190506116f681611edb565b92915050565b60006020828403121561171257611711611d90565b5b60006117208482850161163d565b91505092915050565b60008060006060848603121561174257611741611d90565b5b60006117508682870161163d565b9350506020611761868287016116bd565b9250506040611772868287016116d2565b9150509250925092565b60006020828403121561179257611791611d90565b5b60006117a084828501611652565b91505092915050565b600080600080600080608087890312156117c6576117c5611d90565b5b600087013567ffffffffffffffff8111156117e4576117e3611d8b565b5b6117f089828a01611667565b9650965050602061180389828a016116bd565b945050604061181489828a016116d2565b935050606087013567ffffffffffffffff81111561183557611834611d8b565b5b61184189828a01611667565b92509250509295509295509295565b60006020828403121561186657611865611d90565b5b6000611874848285016116bd565b91505092915050565b60006020828403121561189357611892611d90565b5b60006118a1848285016116d2565b91505092915050565b6000602082840312156118c0576118bf611d90565b5b60006118ce848285016116e7565b91505092915050565b6118e081611c7b565b82525050565b6118ef81611c8d565b82525050565b60006119018385611c1a565b935061190e838584611d0b565b61191783611d95565b840190509392505050565b600061192d82611c04565b6119378185611c2b565b9350611947818560208601611d1a565b80840191505092915050565b61195c81611cd5565b82525050565b600061196d82611c0f565b6119778185611c36565b9350611987818560208601611d1a565b61199081611d95565b840191505092915050565b60006119a8602683611c36565b91506119b382611da6565b604082019050919050565b60006119cb601d83611c36565b91506119d682611df5565b602082019050919050565b60006119ee602a83611c36565b91506119f982611e1e565b604082019050919050565b6000611a11601f83611c36565b9150611a1c82611e6d565b602082019050919050565b611a3081611ccb565b82525050565b6000611a428284611922565b915081905092915050565b6000602082019050611a6260008301846118d7565b92915050565b6000606082019050611a7d60008301866118d7565b611a8a60208301856118d7565b611a976040830184611a27565b949350505050565b6000604082019050611ab460008301856118d7565b611ac16020830184611a27565b9392505050565b6000602082019050611add60008301846118e6565b92915050565b60006060820190508181036000830152611afe8187896118f5565b9050611b0d6020830186611a27565b8181036040830152611b208184866118f5565b90509695505050505050565b6000602082019050611b416000830184611953565b92915050565b60006020820190508181036000830152611b618184611962565b905092915050565b60006020820190508181036000830152611b828161199b565b9050919050565b60006020820190508181036000830152611ba2816119be565b9050919050565b60006020820190508181036000830152611bc2816119e1565b9050919050565b60006020820190508181036000830152611be281611a04565b9050919050565b6000602082019050611bfe6000830184611a27565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611c5282611ccb565b9150611c5d83611ccb565b925082821015611c7057611c6f611d4d565b5b828203905092915050565b6000611c8682611cab565b9050919050565b60008115159050919050565b6000611ca482611c7b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611ce082611ce7565b9050919050565b6000611cf282611cf9565b9050919050565b6000611d0482611cab565b9050919050565b82818337600083830152505050565b60005b83811015611d38578082015181840152602081019050611d1d565b83811115611d47576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b611e9f81611c7b565b8114611eaa57600080fd5b50565b611eb681611c8d565b8114611ec157600080fd5b50565b611ecd81611c99565b8114611ed857600080fd5b50565b611ee481611ccb565b8114611eef57600080fd5b5056fea26469706673582212205e3db0f8408347f6a8d41b88dee6d3aee78db90b629cce50ac838c21a061981164736f6c63430008070033", } // ERC20CustodyABI is the input ABI used to generate the binding from. diff --git a/pkg/openzeppelin/contracts/security/reentrancyguard.sol/reentrancyguard.go b/pkg/openzeppelin/contracts/security/reentrancyguard.sol/reentrancyguard.go new file mode 100644 index 00000000..e62fdc89 --- /dev/null +++ b/pkg/openzeppelin/contracts/security/reentrancyguard.sol/reentrancyguard.go @@ -0,0 +1,181 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package reentrancyguard + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// ReentrancyGuardMetaData contains all meta data concerning the ReentrancyGuard contract. +var ReentrancyGuardMetaData = &bind.MetaData{ + ABI: "[]", +} + +// ReentrancyGuardABI is the input ABI used to generate the binding from. +// Deprecated: Use ReentrancyGuardMetaData.ABI instead. +var ReentrancyGuardABI = ReentrancyGuardMetaData.ABI + +// ReentrancyGuard is an auto generated Go binding around an Ethereum contract. +type ReentrancyGuard struct { + ReentrancyGuardCaller // Read-only binding to the contract + ReentrancyGuardTransactor // Write-only binding to the contract + ReentrancyGuardFilterer // Log filterer for contract events +} + +// ReentrancyGuardCaller is an auto generated read-only Go binding around an Ethereum contract. +type ReentrancyGuardCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReentrancyGuardTransactor is an auto generated write-only Go binding around an Ethereum contract. +type ReentrancyGuardTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReentrancyGuardFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type ReentrancyGuardFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// ReentrancyGuardSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type ReentrancyGuardSession struct { + Contract *ReentrancyGuard // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ReentrancyGuardCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type ReentrancyGuardCallerSession struct { + Contract *ReentrancyGuardCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// ReentrancyGuardTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type ReentrancyGuardTransactorSession struct { + Contract *ReentrancyGuardTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// ReentrancyGuardRaw is an auto generated low-level Go binding around an Ethereum contract. +type ReentrancyGuardRaw struct { + Contract *ReentrancyGuard // Generic contract binding to access the raw methods on +} + +// ReentrancyGuardCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type ReentrancyGuardCallerRaw struct { + Contract *ReentrancyGuardCaller // Generic read-only contract binding to access the raw methods on +} + +// ReentrancyGuardTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type ReentrancyGuardTransactorRaw struct { + Contract *ReentrancyGuardTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewReentrancyGuard creates a new instance of ReentrancyGuard, bound to a specific deployed contract. +func NewReentrancyGuard(address common.Address, backend bind.ContractBackend) (*ReentrancyGuard, error) { + contract, err := bindReentrancyGuard(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &ReentrancyGuard{ReentrancyGuardCaller: ReentrancyGuardCaller{contract: contract}, ReentrancyGuardTransactor: ReentrancyGuardTransactor{contract: contract}, ReentrancyGuardFilterer: ReentrancyGuardFilterer{contract: contract}}, nil +} + +// NewReentrancyGuardCaller creates a new read-only instance of ReentrancyGuard, bound to a specific deployed contract. +func NewReentrancyGuardCaller(address common.Address, caller bind.ContractCaller) (*ReentrancyGuardCaller, error) { + contract, err := bindReentrancyGuard(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &ReentrancyGuardCaller{contract: contract}, nil +} + +// NewReentrancyGuardTransactor creates a new write-only instance of ReentrancyGuard, bound to a specific deployed contract. +func NewReentrancyGuardTransactor(address common.Address, transactor bind.ContractTransactor) (*ReentrancyGuardTransactor, error) { + contract, err := bindReentrancyGuard(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &ReentrancyGuardTransactor{contract: contract}, nil +} + +// NewReentrancyGuardFilterer creates a new log filterer instance of ReentrancyGuard, bound to a specific deployed contract. +func NewReentrancyGuardFilterer(address common.Address, filterer bind.ContractFilterer) (*ReentrancyGuardFilterer, error) { + contract, err := bindReentrancyGuard(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &ReentrancyGuardFilterer{contract: contract}, nil +} + +// bindReentrancyGuard binds a generic wrapper to an already deployed contract. +func bindReentrancyGuard(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := ReentrancyGuardMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ReentrancyGuard *ReentrancyGuardRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReentrancyGuard.Contract.ReentrancyGuardCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ReentrancyGuard *ReentrancyGuardRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReentrancyGuard.Contract.ReentrancyGuardTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ReentrancyGuard *ReentrancyGuardRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReentrancyGuard.Contract.ReentrancyGuardTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_ReentrancyGuard *ReentrancyGuardCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _ReentrancyGuard.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_ReentrancyGuard *ReentrancyGuardTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _ReentrancyGuard.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_ReentrancyGuard *ReentrancyGuardTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _ReentrancyGuard.Contract.contract.Transact(opts, method, params...) +} diff --git a/typechain-types/factories/contracts/evm/ERC20Custody__factory.ts b/typechain-types/factories/contracts/evm/ERC20Custody__factory.ts index 588787f1..571fce4d 100644 --- a/typechain-types/factories/contracts/evm/ERC20Custody__factory.ts +++ b/typechain-types/factories/contracts/evm/ERC20Custody__factory.ts @@ -459,7 +459,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60c06040523480156200001157600080fd5b50604051620021043803806200210483398181016040528101906200003791906200014f565b84600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826002819055508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b81525050816080818152505050505050506200027c565b6000815190506200011b816200022e565b92915050565b600081519050620001328162000248565b92915050565b600081519050620001498162000262565b92915050565b600080600080600060a086880312156200016e576200016d62000229565b5b60006200017e888289016200010a565b955050602062000191888289016200010a565b9450506040620001a48882890162000138565b9350506060620001b78882890162000138565b9250506080620001ca8882890162000121565b9150509295509295909350565b6000620001e482620001ff565b9050919050565b6000620001f882620001d7565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6200023981620001d7565b81146200024557600080fd5b50565b6200025381620001eb565b81146200025f57600080fd5b50565b6200026d816200021f565b81146200027957600080fd5b50565b60805160a05160601c611e4a620002ba60003960008181610dfd01528181610e66015261105a01526000818161042b0152610c6e0152611e4a6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639b19251a11610097578063e5408cfa11610066578063e5408cfa1461024d578063e609055e1461026b578063e8f9cb3a14610287578063ed11692b146102a557610100565b80639b19251a146101c9578063d936547e146101e5578063d9caed1214610215578063de2f6c5e1461023157610100565b80637bdaded3116100d35780637bdaded3146101695780638456cb5914610187578063950837aa146101915780639a590427146101ad57610100565b80633f4ba83a1461010557806353ee30a31461010f57806354b61e811461012d5780635c975abb1461014b575b600080fd5b61010d6102af565b005b6101176103cc565b60405161012491906119b8565b60405180910390f35b6101356103f2565b60405161014291906119b8565b60405180910390f35b610153610418565b6040516101609190611a33565b60405180910390f35b610171610429565b60405161017e9190611b34565b60405180910390f35b61018f61044d565b005b6101ab60048036038101906101a6919061168a565b6105f4565b005b6101c760048036038101906101c291906117de565b61075c565b005b6101e360048036038101906101de91906117de565b610881565b005b6101ff60048036038101906101fa91906117de565b6109a6565b60405161020c9190611a33565b60405180910390f35b61022f600480360381019061022a91906116b7565b6109c6565b005b61024b6004803603810190610246919061180b565b610baa565b005b610255610d07565b6040516102629190611b34565b60405180910390f35b61028560048036038101906102809190611737565b610d0d565b005b61028f611058565b60405161029c9190611a97565b60405180910390f35b6102ad61107c565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610335576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900460ff16610379576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336040516103c291906119b8565b60405180910390a1565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104d3576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900460ff1615610518576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105a1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000806101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336040516105ea91906119b8565b60405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067a576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106e1576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600060016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcd2958db8285a532edf298cbe1aa28ea3fb5ec82461253f9a8c1477924e299478160405161075191906119b8565b60405180910390a150565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107e3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da4679160405160405180910390a250565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610908576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a250565b60036020528060005260406000206000915054906101000a900460ff1681565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a4d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900460ff1615610a92576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b15576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4083828473ffffffffffffffffffffffffffffffffffffffff166112279092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb83604051610b9d9190611b34565b60405180910390a3505050565b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c31576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000811415610c6c576040517faf13986d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610cc6576040517fc1be451300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507f6d2d8e313fbaf76898bb9fa55e4b52525e49c7d7182d0874f97bd9076e81d52381604051610cfc9190611b34565b60405180910390a150565b60025481565b60008054906101000a900460ff1615610d52576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610dd5576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060025414158015610e355750600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b15610eac57610eab33600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166002547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166112ad909392919063ffffffff16565b5b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ee791906119b8565b60206040518083038186803b158015610eff57600080fd5b505afa158015610f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f379190611838565b9050610f663330868873ffffffffffffffffffffffffffffffffffffffff166112ad909392919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff167f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae8888848973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fda91906119b8565b60206040518083038186803b158015610ff257600080fd5b505afa158015611006573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061102a9190611838565b6110349190611b92565b8787604051611047959493929190611a4e565b60405180910390a250505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611102576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561118b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f39ac266bfc011581be62c138d96e4e8782812013bb66fffb4cd207f4bfee37773360405161121d91906119b8565b60405180910390a1565b6112a88363a9059cbb60e01b8484604051602401611246929190611a0a565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611336565b505050565b611330846323b872dd60e01b8585856040516024016112ce939291906119d3565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611336565b50505050565b6000611398826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166113fd9092919063ffffffff16565b90506000815111156113f857808060200190518101906113b8919061170a565b6113f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ee90611b14565b60405180910390fd5b5b505050565b606061140c8484600085611415565b90509392505050565b60608247101561145a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145190611ad4565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161148391906119a1565b60006040518083038185875af1925050503d80600081146114c0576040519150601f19603f3d011682016040523d82523d6000602084013e6114c5565b606091505b50915091506114d6878383876114e2565b92505050949350505050565b606083156115455760008351141561153d576114fd85611558565b61153c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153390611af4565b60405180910390fd5b5b829050611550565b61154f838361157b565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008251111561158e5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c29190611ab2565b60405180910390fd5b6000813590506115da81611db8565b92915050565b6000815190506115ef81611dcf565b92915050565b60008083601f84011261160b5761160a611ccc565b5b8235905067ffffffffffffffff81111561162857611627611cc7565b5b60208301915083600182028301111561164457611643611cd1565b5b9250929050565b60008135905061165a81611de6565b92915050565b60008135905061166f81611dfd565b92915050565b60008151905061168481611dfd565b92915050565b6000602082840312156116a05761169f611cdb565b5b60006116ae848285016115cb565b91505092915050565b6000806000606084860312156116d0576116cf611cdb565b5b60006116de868287016115cb565b93505060206116ef8682870161164b565b925050604061170086828701611660565b9150509250925092565b6000602082840312156117205761171f611cdb565b5b600061172e848285016115e0565b91505092915050565b6000806000806000806080878903121561175457611753611cdb565b5b600087013567ffffffffffffffff81111561177257611771611cd6565b5b61177e89828a016115f5565b9650965050602061179189828a0161164b565b94505060406117a289828a01611660565b935050606087013567ffffffffffffffff8111156117c3576117c2611cd6565b5b6117cf89828a016115f5565b92509250509295509295509295565b6000602082840312156117f4576117f3611cdb565b5b60006118028482850161164b565b91505092915050565b60006020828403121561182157611820611cdb565b5b600061182f84828501611660565b91505092915050565b60006020828403121561184e5761184d611cdb565b5b600061185c84828501611675565b91505092915050565b61186e81611bc6565b82525050565b61187d81611bd8565b82525050565b600061188f8385611b65565b935061189c838584611c56565b6118a583611ce0565b840190509392505050565b60006118bb82611b4f565b6118c58185611b76565b93506118d5818560208601611c65565b80840191505092915050565b6118ea81611c20565b82525050565b60006118fb82611b5a565b6119058185611b81565b9350611915818560208601611c65565b61191e81611ce0565b840191505092915050565b6000611936602683611b81565b915061194182611cf1565b604082019050919050565b6000611959601d83611b81565b915061196482611d40565b602082019050919050565b600061197c602a83611b81565b915061198782611d69565b604082019050919050565b61199b81611c16565b82525050565b60006119ad82846118b0565b915081905092915050565b60006020820190506119cd6000830184611865565b92915050565b60006060820190506119e86000830186611865565b6119f56020830185611865565b611a026040830184611992565b949350505050565b6000604082019050611a1f6000830185611865565b611a2c6020830184611992565b9392505050565b6000602082019050611a486000830184611874565b92915050565b60006060820190508181036000830152611a69818789611883565b9050611a786020830186611992565b8181036040830152611a8b818486611883565b90509695505050505050565b6000602082019050611aac60008301846118e1565b92915050565b60006020820190508181036000830152611acc81846118f0565b905092915050565b60006020820190508181036000830152611aed81611929565b9050919050565b60006020820190508181036000830152611b0d8161194c565b9050919050565b60006020820190508181036000830152611b2d8161196f565b9050919050565b6000602082019050611b496000830184611992565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611b9d82611c16565b9150611ba883611c16565b925082821015611bbb57611bba611c98565b5b828203905092915050565b6000611bd182611bf6565b9050919050565b60008115159050919050565b6000611bef82611bc6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611c2b82611c32565b9050919050565b6000611c3d82611c44565b9050919050565b6000611c4f82611bf6565b9050919050565b82818337600083830152505050565b60005b83811015611c83578082015181840152602081019050611c68565b83811115611c92576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b611dc181611bc6565b8114611dcc57600080fd5b50565b611dd881611bd8565b8114611de357600080fd5b50565b611def81611be4565b8114611dfa57600080fd5b50565b611e0681611c16565b8114611e1157600080fd5b5056fea26469706673582212206146a48df6487c8ffd47b2ee14a7124685ab8cfa6ca34eb6be52dca97f6f146164736f6c63430008070033"; + "0x60c06040523480156200001157600080fd5b50604051620021e9380380620021e9833981810160405281019062000037919062000156565b6001600081905550846001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826003819055508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508160808181525050505050505062000283565b600081519050620001228162000235565b92915050565b60008151905062000139816200024f565b92915050565b600081519050620001508162000269565b92915050565b600080600080600060a0868803121562000175576200017462000230565b5b6000620001858882890162000111565b9550506020620001988882890162000111565b9450506040620001ab888289016200013f565b9350506060620001be888289016200013f565b9250506080620001d18882890162000128565b9150509295509295909350565b6000620001eb8262000206565b9050919050565b6000620001ff82620001de565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600080fd5b6200024081620001de565b81146200024c57600080fd5b50565b6200025a81620001f2565b81146200026657600080fd5b50565b620002748162000226565b81146200028057600080fd5b50565b60805160a05160601c611f28620002c160003960008181610e1301528181610e7a015261107601526000818161042e0152610c7a0152611f286000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80639b19251a11610097578063e5408cfa11610066578063e5408cfa1461024d578063e609055e1461026b578063e8f9cb3a14610287578063ed11692b146102a557610100565b80639b19251a146101c9578063d936547e146101e5578063d9caed1214610215578063de2f6c5e1461023157610100565b80637bdaded3116100d35780637bdaded3146101695780638456cb5914610187578063950837aa146101915780639a590427146101ad57610100565b80633f4ba83a1461010557806353ee30a31461010f57806354b61e811461012d5780635c975abb1461014b575b600080fd5b61010d6102af565b005b6101176103cf565b6040516101249190611a4d565b60405180910390f35b6101356103f3565b6040516101429190611a4d565b60405180910390f35b610153610419565b6040516101609190611ac8565b60405180910390f35b61017161042c565b60405161017e9190611be9565b60405180910390f35b61018f610450565b005b6101ab60048036038101906101a691906116fc565b6105f7565b005b6101c760048036038101906101c29190611850565b61075e565b005b6101e360048036038101906101de9190611850565b610881565b005b6101ff60048036038101906101fa9190611850565b6109a4565b60405161020c9190611ac8565b60405180910390f35b61022f600480360381019061022a9190611729565b6109c4565b005b61024b6004803603810190610246919061187d565b610bb8565b005b610255610d13565b6040516102629190611be9565b60405180910390f35b610285600480360381019061028091906117a9565b610d19565b005b61028f611074565b60405161029c9190611b2c565b60405180910390f35b6102ad611098565b005b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610335576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900460ff1661037b576040517f6cd6020100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600160006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336040516103c59190611a4d565b60405180910390a1565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600160009054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104d6576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900460ff161561051d576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156105a4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018060006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258336040516105ed9190611a4d565b60405180910390a1565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067d576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156106e4576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fcd2958db8285a532edf298cbe1aa28ea3fb5ec82461253f9a8c1477924e29947816040516107539190611a4d565b60405180910390a150565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146107e3576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f51085ddf9ebdded84b76e829eb58c4078e4b5bdf97d9a94723f336039da4679160405160405180910390a250565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610906576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167faab7954e9d246b167ef88aeddad35209ca2489d95a8aeb59e288d9b19fae5a5460405160405180910390a250565b60046020528060005260406000206000915054906101000a900460ff1681565b6109cc61123f565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610a51576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160009054906101000a900460ff1615610a98576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610b1b576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4683828473ffffffffffffffffffffffffffffffffffffffff1661128f9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb83604051610ba39190611be9565b60405180910390a3610bb3611315565b505050565b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c3d576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000811415610c78576040517faf13986d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000000000000811115610cd2576040517fc1be451300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507f6d2d8e313fbaf76898bb9fa55e4b52525e49c7d7182d0874f97bd9076e81d52381604051610d089190611be9565b60405180910390a150565b60035481565b610d2161123f565b600160009054906101000a900460ff1615610d68576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610deb576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035414158015610e4b5750600073ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614155b15610ec057610ebf3360018054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661131f909392919063ffffffff16565b5b60008473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610efb9190611a4d565b60206040518083038186803b158015610f1357600080fd5b505afa158015610f27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4b91906118aa565b9050610f7a3330868873ffffffffffffffffffffffffffffffffffffffff1661131f909392919063ffffffff16565b8473ffffffffffffffffffffffffffffffffffffffff167f1dafa057cc5c3bccb5ad974129a2bccd3c74002d9dfd7062404ba9523b18d6ae8888848973ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610fee9190611a4d565b60206040518083038186803b15801561100657600080fd5b505afa15801561101a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103e91906118aa565b6110489190611c47565b878760405161105b959493929190611ae3565b60405180910390a25061106c611315565b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461111e576040517e611fa600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660018054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111a5576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f39ac266bfc011581be62c138d96e4e8782812013bb66fffb4cd207f4bfee3777336040516112359190611a4d565b60405180910390a1565b60026000541415611285576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127c90611bc9565b60405180910390fd5b6002600081905550565b6113108363a9059cbb60e01b84846040516024016112ae929190611a9f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113a8565b505050565b6001600081905550565b6113a2846323b872dd60e01b85858560405160240161134093929190611a68565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506113a8565b50505050565b600061140a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661146f9092919063ffffffff16565b905060008151111561146a578080602001905181019061142a919061177c565b611469576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146090611ba9565b60405180910390fd5b5b505050565b606061147e8484600085611487565b90509392505050565b6060824710156114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c390611b69565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516114f59190611a36565b60006040518083038185875af1925050503d8060008114611532576040519150601f19603f3d011682016040523d82523d6000602084013e611537565b606091505b509150915061154887838387611554565b92505050949350505050565b606083156115b7576000835114156115af5761156f856115ca565b6115ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a590611b89565b60405180910390fd5b5b8290506115c2565b6115c183836115ed565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156116005781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116349190611b47565b60405180910390fd5b60008135905061164c81611e96565b92915050565b60008151905061166181611ead565b92915050565b60008083601f84011261167d5761167c611d81565b5b8235905067ffffffffffffffff81111561169a57611699611d7c565b5b6020830191508360018202830111156116b6576116b5611d86565b5b9250929050565b6000813590506116cc81611ec4565b92915050565b6000813590506116e181611edb565b92915050565b6000815190506116f681611edb565b92915050565b60006020828403121561171257611711611d90565b5b60006117208482850161163d565b91505092915050565b60008060006060848603121561174257611741611d90565b5b60006117508682870161163d565b9350506020611761868287016116bd565b9250506040611772868287016116d2565b9150509250925092565b60006020828403121561179257611791611d90565b5b60006117a084828501611652565b91505092915050565b600080600080600080608087890312156117c6576117c5611d90565b5b600087013567ffffffffffffffff8111156117e4576117e3611d8b565b5b6117f089828a01611667565b9650965050602061180389828a016116bd565b945050604061181489828a016116d2565b935050606087013567ffffffffffffffff81111561183557611834611d8b565b5b61184189828a01611667565b92509250509295509295509295565b60006020828403121561186657611865611d90565b5b6000611874848285016116bd565b91505092915050565b60006020828403121561189357611892611d90565b5b60006118a1848285016116d2565b91505092915050565b6000602082840312156118c0576118bf611d90565b5b60006118ce848285016116e7565b91505092915050565b6118e081611c7b565b82525050565b6118ef81611c8d565b82525050565b60006119018385611c1a565b935061190e838584611d0b565b61191783611d95565b840190509392505050565b600061192d82611c04565b6119378185611c2b565b9350611947818560208601611d1a565b80840191505092915050565b61195c81611cd5565b82525050565b600061196d82611c0f565b6119778185611c36565b9350611987818560208601611d1a565b61199081611d95565b840191505092915050565b60006119a8602683611c36565b91506119b382611da6565b604082019050919050565b60006119cb601d83611c36565b91506119d682611df5565b602082019050919050565b60006119ee602a83611c36565b91506119f982611e1e565b604082019050919050565b6000611a11601f83611c36565b9150611a1c82611e6d565b602082019050919050565b611a3081611ccb565b82525050565b6000611a428284611922565b915081905092915050565b6000602082019050611a6260008301846118d7565b92915050565b6000606082019050611a7d60008301866118d7565b611a8a60208301856118d7565b611a976040830184611a27565b949350505050565b6000604082019050611ab460008301856118d7565b611ac16020830184611a27565b9392505050565b6000602082019050611add60008301846118e6565b92915050565b60006060820190508181036000830152611afe8187896118f5565b9050611b0d6020830186611a27565b8181036040830152611b208184866118f5565b90509695505050505050565b6000602082019050611b416000830184611953565b92915050565b60006020820190508181036000830152611b618184611962565b905092915050565b60006020820190508181036000830152611b828161199b565b9050919050565b60006020820190508181036000830152611ba2816119be565b9050919050565b60006020820190508181036000830152611bc2816119e1565b9050919050565b60006020820190508181036000830152611be281611a04565b9050919050565b6000602082019050611bfe6000830184611a27565b92915050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611c5282611ccb565b9150611c5d83611ccb565b925082821015611c7057611c6f611d4d565b5b828203905092915050565b6000611c8682611cab565b9050919050565b60008115159050919050565b6000611ca482611c7b565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000611ce082611ce7565b9050919050565b6000611cf282611cf9565b9050919050565b6000611d0482611cab565b9050919050565b82818337600083830152505050565b60005b83811015611d38578082015181840152602081019050611d1d565b83811115611d47576000848401525b50505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b611e9f81611c7b565b8114611eaa57600080fd5b50565b611eb681611c8d565b8114611ec157600080fd5b50565b611ecd81611c99565b8114611ed857600080fd5b50565b611ee481611ccb565b8114611eef57600080fd5b5056fea26469706673582212205e3db0f8408347f6a8d41b88dee6d3aee78db90b629cce50ac838c21a061981164736f6c63430008070033"; type ERC20CustodyConstructorParams = | [signer?: Signer]