Source Code
Overview
BTT Balance
0 BTT
More Info
ContractCreator
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
35090938 | 299 days ago | 1 wei |
Loading...
Loading
Contract Name:
RelayerMaster
Compiler Version
v0.6.6+commit.6c089d02
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.bttcscan.com on 2024-03-20 */ // Sources flattened with hardhat v2.22.1 https://hardhat.org // SPDX-License-Identifier: MIT pragma experimental ABIEncoderV2; // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File @openzeppelin/contracts/math/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File @openzeppelin/contracts/utils/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.2 <0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/[email protected] // Original license: SPDX_License_Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File contracts/child/ChildToken/ChildERC20Exit/RelayerMaster.sol pragma solidity 0.6.6; // Original pragma directive: pragma experimental ABIEncoderV2 contract RelayerMaster is Ownable{ using SafeERC20 for IERC20; address public childERC20Relay; address public childERC20RelayStake; event Recovered(address from, address token, uint256 amount); mapping(address => mapping(address => mapping(bytes32 => bool))) acl; constructor(address _childERC20Relay, address _ChildERC20RelayStake) public{ childERC20Relay = _childERC20Relay; childERC20RelayStake = _ChildERC20RelayStake; } receive() external payable { } fallback() external payable auth(childERC20Relay,msg.sig){ if(msg.sender != childERC20Relay){ forward(childERC20Relay, msg.data); } } function permit(address user, address target, bytes32 sig, bool allow) external onlyOwner { acl[user][target][sig] = allow; } function execute(bytes calldata _calldata) payable external auth(childERC20RelayStake,getSelector(_calldata)){ if(msg.sender != childERC20RelayStake){ forward(childERC20RelayStake, _calldata); } } function recoverBTT(address payable _to, uint256 _amount) external auth(address(this),msg.sig){ require(_to != address(0), "RelayerMaster: need non-zero value"); require(_amount > 0, "RelayerMaster: need non-zero value"); _to.transfer(_amount); emit Recovered(msg.sender, _to, _amount); } function recoverERC20(address tokenAddress, address to, uint256 tokenAmount) external auth(address(this),msg.sig) { IERC20(tokenAddress).safeTransfer(to, tokenAmount); emit Recovered(msg.sender, to, tokenAmount); } function canCall(address user, address target, bytes32 sig) public view returns (bool){ return acl[user][target][sig]; } modifier auth(address target, bytes4 selector){ require(acl[msg.sender][target][selector], "RelayerMaster: INSUFFICIENT_PERMISSIONS"); _; } function getSelector(bytes memory _calldata) internal pure returns(bytes4){ bytes4 selector; assembly { selector := mload(add(_calldata, 32)) } return selector; } function forward(address _dst, bytes memory _calldata) internal { // solium-disable-next-line security/no-inline-assembly assembly { let result := call( sub(gas(), 10000), _dst, callvalue(), add(_calldata, 0x20), mload(_calldata), 0, 0 ) let size := returndatasize() let ptr := mload(0x40) returndatacopy(ptr, 0, size) // revert instead of invalid() bc if the underlying call failed with invalid() it already wasted gas. // if the call returned error data, forward it switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } }
[{"inputs":[{"internalType":"address","name":"_childERC20Relay","type":"address"},{"internalType":"address","name":"_ChildERC20RelayStake","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"sig","type":"bytes32"}],"name":"canCall","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childERC20Relay","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"childERC20RelayStake","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"execute","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes32","name":"sig","type":"bytes32"},{"internalType":"bool","name":"allow","type":"bool"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverBTT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50604051610f42380380610f4283398101604081905261002f916100c1565b60006100426001600160e01b036100bd16565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600180546001600160a01b039384166001600160a01b03199182161790915560028054929093169116179055610112565b3390565b600080604083850312156100d3578182fd5b82516100de816100fa565b60208401519092506100ef816100fa565b809150509250929050565b6001600160a01b038116811461010f57600080fd5b50565b610e21806101216000396000f3fe6080604052600436106100955760003560e01c8063883e283b11610059578063883e283b14610202578063897f5318146102245780638da5cb5b14610239578063a2d3ebf61461024e578063f2fde38b1461026e5761009c565b806309c5eabe146101625780631171bda9146101775780631c49896b146101975780632f7df536146101b7578063715018a6146101ed5761009c565b3661009c57005b6001543360009081526003602090815260408083206001600160a01b039094168084529382528083206001600160e01b031984351680855292529091205460ff166101025760405162461bcd60e51b81526004016100f990610cd1565b60405180910390fd5b6001546001600160a01b0316331461015e5760015460408051602036601f810182900482028301820190935282825261015e936001600160a01b0316926000918190840183828082843760009201919091525061028e92505050565b5050005b610175610170366004610ab9565b6102b7565b005b34801561018357600080fd5b50610175610192366004610a89565b6103ba565b3480156101a357600080fd5b506101756101b2366004610a37565b610465565b3480156101c357600080fd5b506101d76101d23660046109f7565b6104e8565b6040516101e49190610b90565b60405180910390f35b3480156101f957600080fd5b50610175610521565b34801561020e57600080fd5b506102176105aa565b6040516101e49190610b3f565b34801561023057600080fd5b506102176105b9565b34801561024557600080fd5b506102176105c8565b34801561025a57600080fd5b506101756102693660046109cc565b6105d7565b34801561027a57600080fd5b506101756102893660046109b0565b6106e4565b60008082516020840134866127105a03f13d604051816000823e8280156102b3578282f35b8282fd5b600254604080516020601f85018190048102820181019092528381526001600160a01b03909216916103039185908590819084018382808284376000920191909152506107a492505050565b3360009081526003602090815260408083206001600160a01b038616845282528083206001600160e01b03198516845290915290205460ff166103585760405162461bcd60e51b81526004016100f990610cd1565b6002546001600160a01b031633146103b457600254604080516020601f87018190048102820181019092528581526103b4926001600160a01b031691879087908190840183828082843760009201919091525061028e92505050565b50505050565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166104095760405162461bcd60e51b81526004016100f990610cd1565b6104236001600160a01b038616858563ffffffff6107ab16565b7ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b64833858560405161045693929190610b53565b60405180910390a15050505050565b61046d610806565b6001600160a01b031661047e6105c8565b6001600160a01b0316146104a45760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0393841660009081526003602090815260408083209590961682529384528481209281529190925291909120805460ff1916911515919091179055565b6001600160a01b03808416600090815260036020908152604080832093861683529281528282208483529052205460ff165b9392505050565b610529610806565b6001600160a01b031661053a6105c8565b6001600160a01b0316146105605760405162461bcd60e51b81526004016100f990610c9c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002546001600160a01b031681565b6001546001600160a01b031681565b6000546001600160a01b031690565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166106265760405162461bcd60e51b81526004016100f990610cd1565b6001600160a01b03841661064c5760405162461bcd60e51b81526004016100f990610bce565b6000831161066c5760405162461bcd60e51b81526004016100f990610bce565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156106a2573d6000803e3d6000fd5b507ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6483385856040516106d693929190610b53565b60405180910390a150505050565b6106ec610806565b6001600160a01b03166106fd6105c8565b6001600160a01b0316146107235760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0381166107495760405162461bcd60e51b81526004016100f990610c10565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6020015190565b6108018363a9059cbb60e01b84846040516024016107ca929190610b77565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261080a565b505050565b3390565b606061085f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108999092919063ffffffff16565b805190915015610801578080602001905181019061087d9190610a9d565b6108015760405162461bcd60e51b81526004016100f990610d4f565b60606108a884846000856108b0565b949350505050565b6060824710156108d25760405162461bcd60e51b81526004016100f990610c56565b6108db85610971565b6108f75760405162461bcd60e51b81526004016100f990610d18565b60006060866001600160a01b031685876040516109149190610b23565b60006040518083038185875af1925050503d8060008114610951576040519150601f19603f3d011682016040523d82523d6000602084013e610956565b606091505b5091509150610966828286610977565b979650505050505050565b3b151590565b6060831561098657508161051a565b8251156109965782518084602001fd5b8160405162461bcd60e51b81526004016100f99190610b9b565b6000602082840312156109c1578081fd5b813561051a81610dc5565b600080604083850312156109de578081fd5b82356109e981610dc5565b946020939093013593505050565b600080600060608486031215610a0b578081fd5b8335610a1681610dc5565b92506020840135610a2681610dc5565b929592945050506040919091013590565b60008060008060808587031215610a4c578081fd5b8435610a5781610dc5565b93506020850135610a6781610dc5565b9250604085013591506060850135610a7e81610ddd565b939692955090935050565b600080600060608486031215610a0b578283fd5b600060208284031215610aae578081fd5b815161051a81610ddd565b60008060208385031215610acb578182fd5b823567ffffffffffffffff80821115610ae2578384fd5b81850186601f820112610af3578485fd5b8035925081831115610b03578485fd5b866020848301011115610b14578485fd5b60200196919550909350505050565b60008251610b35818460208701610d99565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082528251806020840152610bba816040850160208701610d99565b601f01601f19169190910160400192915050565b60208082526022908201527f52656c617965724d61737465723a206e656564206e6f6e2d7a65726f2076616c604082015261756560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f52656c617965724d61737465723a20494e53554646494349454e545f5045524d604082015266495353494f4e5360c81b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b83811015610db4578181015183820152602001610d9c565b838111156103b45750506000910152565b6001600160a01b0381168114610dda57600080fd5b50565b8015158114610dda57600080fdfea264697066735822122073f9f9f9c319e4bc000f0847a46e5a5bd1c016eced9a4314914940520357d99a64736f6c63430006060033000000000000000000000000a266189d8bc09b615e4ee4c3de75ce5c16192caa0000000000000000000000005fe27868bcad5c35759e9c2f7c6d3781f781012a
Deployed Bytecode
0x6080604052600436106100955760003560e01c8063883e283b11610059578063883e283b14610202578063897f5318146102245780638da5cb5b14610239578063a2d3ebf61461024e578063f2fde38b1461026e5761009c565b806309c5eabe146101625780631171bda9146101775780631c49896b146101975780632f7df536146101b7578063715018a6146101ed5761009c565b3661009c57005b6001543360009081526003602090815260408083206001600160a01b039094168084529382528083206001600160e01b031984351680855292529091205460ff166101025760405162461bcd60e51b81526004016100f990610cd1565b60405180910390fd5b6001546001600160a01b0316331461015e5760015460408051602036601f810182900482028301820190935282825261015e936001600160a01b0316926000918190840183828082843760009201919091525061028e92505050565b5050005b610175610170366004610ab9565b6102b7565b005b34801561018357600080fd5b50610175610192366004610a89565b6103ba565b3480156101a357600080fd5b506101756101b2366004610a37565b610465565b3480156101c357600080fd5b506101d76101d23660046109f7565b6104e8565b6040516101e49190610b90565b60405180910390f35b3480156101f957600080fd5b50610175610521565b34801561020e57600080fd5b506102176105aa565b6040516101e49190610b3f565b34801561023057600080fd5b506102176105b9565b34801561024557600080fd5b506102176105c8565b34801561025a57600080fd5b506101756102693660046109cc565b6105d7565b34801561027a57600080fd5b506101756102893660046109b0565b6106e4565b60008082516020840134866127105a03f13d604051816000823e8280156102b3578282f35b8282fd5b600254604080516020601f85018190048102820181019092528381526001600160a01b03909216916103039185908590819084018382808284376000920191909152506107a492505050565b3360009081526003602090815260408083206001600160a01b038616845282528083206001600160e01b03198516845290915290205460ff166103585760405162461bcd60e51b81526004016100f990610cd1565b6002546001600160a01b031633146103b457600254604080516020601f87018190048102820181019092528581526103b4926001600160a01b031691879087908190840183828082843760009201919091525061028e92505050565b50505050565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166104095760405162461bcd60e51b81526004016100f990610cd1565b6104236001600160a01b038616858563ffffffff6107ab16565b7ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b64833858560405161045693929190610b53565b60405180910390a15050505050565b61046d610806565b6001600160a01b031661047e6105c8565b6001600160a01b0316146104a45760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0393841660009081526003602090815260408083209590961682529384528481209281529190925291909120805460ff1916911515919091179055565b6001600160a01b03808416600090815260036020908152604080832093861683529281528282208483529052205460ff165b9392505050565b610529610806565b6001600160a01b031661053a6105c8565b6001600160a01b0316146105605760405162461bcd60e51b81526004016100f990610c9c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6002546001600160a01b031681565b6001546001600160a01b031681565b6000546001600160a01b031690565b336000908152600360209081526040808320308085529083528184206001600160e01b0319853516808652935292205460ff166106265760405162461bcd60e51b81526004016100f990610cd1565b6001600160a01b03841661064c5760405162461bcd60e51b81526004016100f990610bce565b6000831161066c5760405162461bcd60e51b81526004016100f990610bce565b6040516001600160a01b0385169084156108fc029085906000818181858888f193505050501580156106a2573d6000803e3d6000fd5b507ffff3b3844276f57024e0b42afec1a37f75db36511e43819a4f2a63ab7862b6483385856040516106d693929190610b53565b60405180910390a150505050565b6106ec610806565b6001600160a01b03166106fd6105c8565b6001600160a01b0316146107235760405162461bcd60e51b81526004016100f990610c9c565b6001600160a01b0381166107495760405162461bcd60e51b81526004016100f990610c10565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6020015190565b6108018363a9059cbb60e01b84846040516024016107ca929190610b77565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261080a565b505050565b3390565b606061085f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166108999092919063ffffffff16565b805190915015610801578080602001905181019061087d9190610a9d565b6108015760405162461bcd60e51b81526004016100f990610d4f565b60606108a884846000856108b0565b949350505050565b6060824710156108d25760405162461bcd60e51b81526004016100f990610c56565b6108db85610971565b6108f75760405162461bcd60e51b81526004016100f990610d18565b60006060866001600160a01b031685876040516109149190610b23565b60006040518083038185875af1925050503d8060008114610951576040519150601f19603f3d011682016040523d82523d6000602084013e610956565b606091505b5091509150610966828286610977565b979650505050505050565b3b151590565b6060831561098657508161051a565b8251156109965782518084602001fd5b8160405162461bcd60e51b81526004016100f99190610b9b565b6000602082840312156109c1578081fd5b813561051a81610dc5565b600080604083850312156109de578081fd5b82356109e981610dc5565b946020939093013593505050565b600080600060608486031215610a0b578081fd5b8335610a1681610dc5565b92506020840135610a2681610dc5565b929592945050506040919091013590565b60008060008060808587031215610a4c578081fd5b8435610a5781610dc5565b93506020850135610a6781610dc5565b9250604085013591506060850135610a7e81610ddd565b939692955090935050565b600080600060608486031215610a0b578283fd5b600060208284031215610aae578081fd5b815161051a81610ddd565b60008060208385031215610acb578182fd5b823567ffffffffffffffff80821115610ae2578384fd5b81850186601f820112610af3578485fd5b8035925081831115610b03578485fd5b866020848301011115610b14578485fd5b60200196919550909350505050565b60008251610b35818460208701610d99565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602082528251806020840152610bba816040850160208701610d99565b601f01601f19169190910160400192915050565b60208082526022908201527f52656c617965724d61737465723a206e656564206e6f6e2d7a65726f2076616c604082015261756560f01b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526026908201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6040820152651c8818d85b1b60d21b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526027908201527f52656c617965724d61737465723a20494e53554646494349454e545f5045524d604082015266495353494f4e5360c81b606082015260800190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b60005b83811015610db4578181015183820152602001610d9c565b838111156103b45750506000910152565b6001600160a01b0381168114610dda57600080fd5b50565b8015158114610dda57600080fdfea264697066735822122073f9f9f9c319e4bc000f0847a46e5a5bd1c016eced9a4314914940520357d99a64736f6c63430006060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a266189d8bc09b615e4ee4c3de75ce5c16192caa0000000000000000000000005fe27868bcad5c35759e9c2f7c6d3781f781012a
-----Decoded View---------------
Arg [0] : _childERC20Relay (address): 0xa266189D8BC09B615e4eE4C3de75CE5c16192caA
Arg [1] : _ChildERC20RelayStake (address): 0x5Fe27868bCaD5C35759e9c2f7c6D3781F781012a
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000a266189d8bc09b615e4ee4c3de75ce5c16192caa
Arg [1] : 0000000000000000000000005fe27868bcad5c35759e9c2f7c6d3781f781012a
Deployed Bytecode Sourcemap
25995:3086:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26562:15;;27886:10;26562:15;27882;;;:3;:15;;;;;;;;-1:-1:-1;;;;;26562:15:0;;;27882:23;;;;;;;;;-1:-1:-1;;;;;;26578:7:0;;;27882:33;;;;;;;;;;;27874:85;;;;-1:-1:-1;;;27874:85:0;;;;;;;;;;;;;;;;;26614:15:::1;::::0;-1:-1:-1;;;;;26614:15:0::1;26600:10;:29;26597:94;;26653:15;::::0;26645:34:::1;::::0;;::::1;26670:8;26645:34;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;26653:15:0::1;::::0;-1:-1:-1;;26670:8:0;;26645:34;::::1;-1:-1:-1::0;26670:8:0;;-1:-1:-1;26645:34:0;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26645:7:0::1;::::0;-1:-1:-1;;;26645:34:0:i:1;:::-;26529:169:::0;;25995:3086;26853:232;;;;;;;;;:::i;:::-;;27430:237;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27430:237:0;;;;;;;;:::i;26706:139::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;26706:139:0;;;;;;;;:::i;27675:134::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27675:134:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3001:148;;5:9:-1;2:2;;;27:1;24;17:12;2:2;3001:148:0;;;:::i;26105:35::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26105:35:0;;;:::i;:::-;;;;;;;;26068:30;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26068:30:0;;;:::i;2350:87::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;2350:87:0;;;:::i;27093:329::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;27093:329:0;;;;;;;;:::i;3304:244::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;-1:-1;3304:244:0;;;;;;;;:::i;28215:861::-;28571:1;28555;28530:9;28524:16;28504:4;28493:9;28489:20;28463:11;28444:4;28423:5;28416;28412:17;28393:194;28613:16;28662:4;28656:11;28704:4;28701:1;28696:3;28681:28;28907:6;28927:58;;;;29038:4;29033:3;29026:17;28927:58;28965:4;28960:3;28953:17;26853:232;26918:20;;26939:22;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26918:20:0;;;;26939:22;;26951:9;;;;;;26939:22;;26951:9;;;;26939:22;1:33:-1;99:1;81:16;;74:27;;;;-1:-1;26939:11:0;;-1:-1:-1;;;26939:22:0:i;:::-;27886:10;27882:15;;;;:3;:15;;;;;;;;-1:-1:-1;;;;;27882:23:0;;;;;;;;;-1:-1:-1;;;;;;27882:33:0;;;;;;;;;;;;27874:85;;;;-1:-1:-1;;;27874:85:0;;;;;;;;;26990:20:::1;::::0;-1:-1:-1;;;;;26990:20:0::1;26976:10;:34;26973:105;;27034:20;::::0;27026:40:::1;::::0;;::::1;;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;-1:-1:-1;;;;;27034:20:0::1;::::0;27056:9;;;;;;27026:40;::::1;27056:9:::0;;;;27026:40;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27026:7:0::1;::::0;-1:-1:-1;;;27026:40:0:i:1;:::-;26853:232:::0;;;;:::o;27430:237::-;27886:10;27535:7;27882:15;;;:3;:15;;;;;;;;27529:4;27882:23;;;;;;;;;-1:-1:-1;;;;;;27535:7:0;;;27882:33;;;;;;;;;;27874:85;;;;-1:-1:-1;;;27874:85:0;;;;;;;;;27555:50:::1;-1:-1:-1::0;;;;;27555:33:0;::::1;27589:2:::0;27593:11;27555:50:::1;:33;:50;:::i;:::-;27621:38;27631:10;27643:2;27647:11;27621:38;;;;;;;;;;;;;;;;;27430:237:::0;;;;;:::o;26706:139::-;2581:12;:10;:12::i;:::-;-1:-1:-1;;;;;2570:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2570:23:0;;2562:68;;;;-1:-1:-1;;;2562:68:0;;;;;;;;;-1:-1:-1;;;;;26807:9:0;;::::1;;::::0;;;:3:::1;:9;::::0;;;;;;;:17;;;::::1;::::0;;;;;;;;:22;;;;;;;;;;;:30;;-1:-1:-1;;26807:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26706:139::o;27675:134::-;-1:-1:-1;;;;;27779:9:0;;;27756:4;27779:9;;;:3;:9;;;;;;;;:17;;;;;;;;;;;:22;;;;;;;;;27675:134;;;;;;:::o;3001:148::-;2581:12;:10;:12::i;:::-;-1:-1:-1;;;;;2570:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2570:23:0;;2562:68;;;;-1:-1:-1;;;2562:68:0;;;;;;;;;3108:1:::1;3092:6:::0;;3071:40:::1;::::0;-1:-1:-1;;;;;3092:6:0;;::::1;::::0;3071:40:::1;::::0;3108:1;;3071:40:::1;3139:1;3122:19:::0;;-1:-1:-1;;;;;;3122:19:0::1;::::0;;3001:148::o;26105:35::-;;;-1:-1:-1;;;;;26105:35:0;;:::o;26068:30::-;;;-1:-1:-1;;;;;26068:30:0;;:::o;2350:87::-;2396:7;2423:6;-1:-1:-1;;;;;2423:6:0;2350:87;:::o;27093:329::-;27886:10;27179:7;27882:15;;;:3;:15;;;;;;;;27173:4;27882:23;;;;;;;;;-1:-1:-1;;;;;;27179:7:0;;;27882:33;;;;;;;;;;27874:85;;;;-1:-1:-1;;;27874:85:0;;;;;;;;;-1:-1:-1;;;;;27206:17:0;::::1;27198:64;;;;-1:-1:-1::0;;;27198:64:0::1;;;;;;;;;27291:1;27281:7;:11;27273:58;;;;-1:-1:-1::0;;;27273:58:0::1;;;;;;;;;27342:21;::::0;-1:-1:-1;;;;;27342:12:0;::::1;::::0;:21;::::1;;;::::0;27355:7;;27342:21:::1;::::0;;;27355:7;27342:12;:21;::::1;;;;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27342:21:0;27379:35;27389:10;27401:3;27406:7;27379:35;;;;;;;;;;;;;;;;;27093:329:::0;;;;:::o;3304:244::-;2581:12;:10;:12::i;:::-;-1:-1:-1;;;;;2570:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2570:23:0;;2562:68;;;;-1:-1:-1;;;2562:68:0;;;;;;;;;-1:-1:-1;;;;;3393:22:0;::::1;3385:73;;;;-1:-1:-1::0;;;3385:73:0::1;;;;;;;;;3495:6;::::0;;3474:38:::1;::::0;-1:-1:-1;;;;;3474:38:0;;::::1;::::0;3495:6;::::1;::::0;3474:38:::1;::::0;::::1;3523:6;:17:::0;;-1:-1:-1;;;;;;3523:17:0::1;-1:-1:-1::0;;;;;3523:17:0;;;::::1;::::0;;;::::1;::::0;;3304:244::o;27987:220::-;28159:2;28144:18;28138:25;;27987:220::o;22755:177::-;22838:86;22858:5;22888:23;;;22913:2;22917:5;22865:58;;;;;;;;;;;;;;-1:-1:-1;;26:21;;;22:32;6:49;;22865:58:0;;;49:4:-1;25:18;;61:17;;-1:-1;;;;;182:15;-1:-1;;;;;;22865:58:0;;;179:29:-1;;;;160:49;;;22838:19:0;:86::i;:::-;22755:177;;;:::o;828:106::-;916:10;828:106;:::o;25060:761::-;25484:23;25510:69;25538:4;25510:69;;;;;;;;;;;;;;;;;25518:5;-1:-1:-1;;;;;25510:27:0;;;:69;;;;;:::i;:::-;25594:17;;25484:95;;-1:-1:-1;25594:21:0;25590:224;;25736:10;25725:30;;;;;;;;;;;;;;25717:85;;;;-1:-1:-1;;;25717:85:0;;;;;;;;17693:195;17796:12;17828:52;17850:6;17858:4;17864:1;17867:12;17828:21;:52::i;:::-;17821:59;17693:195;-1:-1:-1;;;;17693:195:0:o;18745:530::-;18872:12;18930:5;18905:21;:30;;18897:81;;;;-1:-1:-1;;;18897:81:0;;;;;;;;;18997:18;19008:6;18997:10;:18::i;:::-;18989:60;;;;-1:-1:-1;;;18989:60:0;;;;;;;;;19123:12;19137:23;19164:6;-1:-1:-1;;;;;19164:11:0;19184:5;19192:4;19164:33;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;19122:75:0;;;;19215:52;19233:7;19242:10;19254:12;19215:17;:52::i;:::-;19208:59;18745:530;-1:-1:-1;;;;;;;18745:530:0:o;14775:422::-;15142:20;15181:8;;;14775:422::o;21285:742::-;21400:12;21429:7;21425:595;;;-1:-1:-1;21460:10:0;21453:17;;21425:595;21574:17;;:21;21570:439;;21837:10;21831:17;21898:15;21885:10;21881:2;21877:19;21870:44;21785:148;21980:12;21973:20;;-1:-1:-1;;;21973:20:0;;;;;;;;;1193:241:-1;;1297:2;1285:9;1276:7;1272:23;1268:32;1265:2;;;-1:-1;;1303:12;1265:2;85:6;72:20;97:33;124:5;97:33;;1441:382;;;1570:2;1558:9;1549:7;1545:23;1541:32;1538:2;;;-1:-1;;1576:12;1538:2;230:6;217:20;242:41;277:5;242:41;;;1628:71;1736:2;1775:22;;;;1123:20;;-1:-1;;;1532:291;1830:491;;;;1968:2;1956:9;1947:7;1943:23;1939:32;1936:2;;;-1:-1;;1974:12;1936:2;85:6;72:20;97:33;124:5;97:33;;;2026:63;-1:-1;2126:2;2165:22;;72:20;97:33;72:20;97:33;;;1930:391;;2134:63;;-1:-1;;;2234:2;2273:22;;;;628:20;;1930:391;2328:611;;;;;2480:3;2468:9;2459:7;2455:23;2451:33;2448:2;;;-1:-1;;2487:12;2448:2;85:6;72:20;97:33;124:5;97:33;;;2539:63;-1:-1;2639:2;2678:22;;72:20;97:33;72:20;97:33;;;2647:63;-1:-1;2747:2;2786:22;;628:20;;-1:-1;2855:2;2891:22;;359:20;384:30;359:20;384:30;;;2442:497;;;;-1:-1;2442:497;;-1:-1;;2442:497;2946:491;;;;3084:2;3072:9;3063:7;3059:23;3055:32;3052:2;;;-1:-1;;3090:12;3444:257;;3556:2;3544:9;3535:7;3531:23;3527:32;3524:2;;;-1:-1;;3562:12;3524:2;507:6;501:13;519:30;543:5;519:30;;3708:365;;;3831:2;3819:9;3810:7;3806:23;3802:32;3799:2;;;-1:-1;;3837:12;3799:2;3895:17;3882:31;3933:18;;3925:6;3922:30;3919:2;;;-1:-1;;3955:12;3919:2;4040:6;4029:9;4025:22;826:3;819:4;811:6;807:17;803:27;793:2;;-1:-1;;834:12;793:2;877:6;864:20;854:30;;3933:18;896:6;893:30;890:2;;;-1:-1;;926:12;890:2;1021:3;3831:2;1001:17;962:6;987:32;;984:41;981:2;;;-1:-1;;1028:12;981:2;3831;958:17;;3983:74;;-1:-1;3793:280;;-1:-1;;;;3793:280;7897:262;;4620:5;13150:12;4731:52;4776:6;4771:3;4764:4;4757:5;4753:16;4731:52;;;4795:16;;;;;8022:137;-1:-1;;8022:137;8166:213;-1:-1;;;;;14082:54;;;;4300:37;;8284:2;8269:18;;8255:124;8386:467;-1:-1;;;;;14082:54;;;4159:58;;14082:54;;;;8756:2;8741:18;;4159:58;8839:2;8824:18;;7848:37;;;;8576:2;8561:18;;8547:306;9318:324;-1:-1;;;;;14082:54;;;;4300:37;;9628:2;9613:18;;7848:37;9464:2;9449:18;;9435:207;9649:201;13915:13;;13908:21;4414:34;;9761:2;9746:18;;9732:118;9857:301;;9995:2;10016:17;10009:47;4968:5;13150:12;13589:6;9995:2;9984:9;9980:18;13577:19;5062:52;5107:6;13617:14;9984:9;13617:14;9995:2;5088:5;5084:16;5062:52;;;14967:7;14951:14;-1:-1;;14947:28;5126:39;;;;13617:14;5126:39;;9966:192;-1:-1;;9966:192;10165:407;10356:2;10370:47;;;5402:2;10341:18;;;13577:19;5438:34;13617:14;;;5418:55;-1:-1;;;5493:12;;;5486:26;5531:12;;;10327:245;10579:407;10770:2;10784:47;;;5782:2;10755:18;;;13577:19;5818:34;13617:14;;;5798:55;-1:-1;;;5873:12;;;5866:30;5915:12;;;10741:245;10993:407;11184:2;11198:47;;;6166:2;11169:18;;;13577:19;6202:34;13617:14;;;6182:55;-1:-1;;;6257:12;;;6250:30;6299:12;;;11155:245;11407:407;11598:2;11612:47;;;11583:18;;;13577:19;6586:34;13617:14;;;6566:55;6640:12;;;11569:245;11821:407;12012:2;12026:47;;;6891:2;11997:18;;;13577:19;6927:34;13617:14;;;6907:55;-1:-1;;;6982:12;;;6975:31;7025:12;;;11983:245;12235:407;12426:2;12440:47;;;7276:2;12411:18;;;13577:19;7312:31;13617:14;;;7292:52;7363:12;;;12397:245;12649:407;12840:2;12854:47;;;7614:2;12825:18;;;13577:19;7650:34;13617:14;;;7630:55;-1:-1;;;7705:12;;;7698:34;7751:12;;;12811:245;14607:268;14672:1;14679:101;14693:6;14690:1;14687:13;14679:101;;;14760:11;;;14754:18;14741:11;;;14734:39;14715:2;14708:10;14679:101;;;14795:6;14792:1;14789:13;14786:2;;;-1:-1;;14672:1;14842:16;;14835:27;14656:219;14988:117;-1:-1;;;;;14082:54;;15047:35;;15037:2;;15096:1;;15086:12;15037:2;15031:74;;15252:111;15333:5;13915:13;13908:21;15311:5;15308:32;15298:2;;15354:1;;15344:12
Swarm Source
ipfs://73f9f9f9c319e4bc000f0847a46e5a5bd1c016eced9a4314914940520357d99a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.