Overview
ETH Balance
0 ETH
Eth Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 142 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Call | 20767095 | 14 days ago | IN | 0 ETH | 0.00016145 | ||||
Transfer | 20767091 | 14 days ago | IN | 39.9988 ETH | 0.00008023 | ||||
Call | 20759726 | 15 days ago | IN | 0 ETH | 0.00016667 | ||||
Call | 20625841 | 34 days ago | IN | 0 ETH | 0.00015631 | ||||
Transfer | 20625835 | 34 days ago | IN | 39.9987 ETH | 0.00007746 | ||||
Call | 20488437 | 53 days ago | IN | 0 ETH | 0.00015125 | ||||
Transfer | 20488359 | 53 days ago | IN | 19.9987 ETH | 0.00007345 | ||||
Call | 20242958 | 87 days ago | IN | 0 ETH | 0.00023889 | ||||
Transfer | 20242948 | 87 days ago | IN | 19.9985 ETH | 0.00011465 | ||||
Call | 20187317 | 95 days ago | IN | 0 ETH | 0.00055341 | ||||
Transfer | 20187313 | 95 days ago | IN | 29.9985 ETH | 0.00019826 | ||||
Call | 20115537 | 105 days ago | IN | 0 ETH | 0.00639855 | ||||
Call | 20075970 | 110 days ago | IN | 0 ETH | 0.00360957 | ||||
Call | 20055076 | 113 days ago | IN | 0 ETH | 0.00158326 | ||||
Transfer | 20055020 | 113 days ago | IN | 49.9983 ETH | 0.00030278 | ||||
Call | 19947011 | 128 days ago | IN | 0 ETH | 0.00065097 | ||||
Call | 19930360 | 131 days ago | IN | 0 ETH | 0.00044924 | ||||
Call | 19896879 | 135 days ago | IN | 0 ETH | 0.00034168 | ||||
Call | 19790129 | 150 days ago | IN | 0 ETH | 0.00102268 | ||||
Transfer | 19776036 | 152 days ago | IN | 29.9982 ETH | 0.00026332 | ||||
Call | 19651938 | 170 days ago | IN | 0 ETH | 0.00111434 | ||||
Call | 19362752 | 210 days ago | IN | 0 ETH | 0.01080177 | ||||
Call | 19297604 | 219 days ago | IN | 0 ETH | 0.00264891 | ||||
Call | 19203634 | 233 days ago | IN | 0 ETH | 0.00326454 | ||||
Call | 18808742 | 288 days ago | IN | 0 ETH | 0.00383728 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
20767095 | 14 days ago | 39.9988 ETH | ||||
20625841 | 34 days ago | 39.9987 ETH | ||||
20488437 | 53 days ago | 19.9987 ETH | ||||
20242958 | 87 days ago | 19.9985 ETH | ||||
20187317 | 95 days ago | 29.9985 ETH | ||||
20055076 | 113 days ago | 49.9983 ETH | ||||
19790129 | 150 days ago | 29.9982 ETH | ||||
17312169 | 498 days ago | 1.0059823 ETH | ||||
16933609 | 551 days ago | 69.58452069 ETH | ||||
16933596 | 551 days ago | 69.58452069 ETH | ||||
16405550 | 625 days ago | 74.27007717 ETH | ||||
16405487 | 625 days ago | 74.27007717 ETH | ||||
16376730 | 629 days ago | 70.75333382 ETH | ||||
16376722 | 629 days ago | 70.75333382 ETH | ||||
16366163 | 631 days ago | 66.17987361 ETH | ||||
16366142 | 631 days ago | 66.17987361 ETH | ||||
16361752 | 632 days ago | 66.65474769 ETH | ||||
16361275 | 632 days ago | 66.65474769 ETH | ||||
16289098 | 642 days ago | 91.681 ETH | ||||
16289088 | 642 days ago | 91.681 ETH | ||||
16205860 | 653 days ago | 82.675 ETH | ||||
16205856 | 653 days ago | 82.675 ETH | ||||
16199046 | 654 days ago | 116.7717675 ETH | ||||
16199031 | 654 days ago | 116.7717675 ETH | ||||
16198761 | 654 days ago | 80.794 ETH |
Loading...
Loading
Contract Name:
StakingBridge
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: Apache-2.0 pragma solidity ^0.8.0; import "./lib/OwnerManagable.sol"; import "./lib/BytesUtil.sol"; import "./lib/Drainable.sol"; import "./lib/ApprovalCheck.sol"; import "./thirdparty/erc165/IERC165.sol"; import "./thirdparty/erc1155/ERC1155Holder.sol"; import "./thirdparty/erc721/ERC721Holder.sol"; contract StakingBridge is OwnerManagable, Drainable, IERC165, ERC721Holder, ERC1155Holder, ApprovalCheck { using BytesUtil for bytes; mapping(address => mapping(bytes4 => bool)) public authorized; event CallSucceeded(uint callId, address target, bytes4 method); event CallReverted(uint callId, address target, bytes4 method); modifier withAccess(address target, bytes4 selector) { require(authorized[target][selector], "UNAUTHORIZED_CALLE"); _; } receive() external payable { } function authorizeCall(address target, bytes4 selector) external onlyOwner { authorized[target][selector] = true; } function unauthorizeCall(address target, bytes4 selector) external onlyOwner { delete authorized[target][selector]; } function setApproveSpender(address target, bool allowed) external onlyOwner { _setApproveSpender(target, allowed); } function call(uint callId, address target, bytes calldata data, uint ethAmount) payable external onlyManager(msg.sender) withAccess(target, data.toBytes4(0)) isApprovalAllowed(data) { (bool success, /*bytes memory returnData*/) = target .call{value: ethAmount}(data); if (success) { emit CallSucceeded(callId, target, data.toBytes4(0)); } else { emit CallReverted(callId, target, data.toBytes4(0)); } } function canDrain(address drainer, address /*token*/) public view override returns (bool) { return drainer == owner; } // ERC165 function supportsInterface( bytes4 interfaceId ) external pure override returns (bool) { return interfaceId == type(IERC165).interfaceId || interfaceId == type(IERC721Receiver).interfaceId || interfaceId == type(IERC1155Receiver).interfaceId; } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; import "./AddressSet.sol"; import "./Claimable.sol"; contract OwnerManagable is Claimable, AddressSet { bytes32 internal constant MANAGER = keccak256("__MANAGED__"); event ManagerAdded (address indexed manager); event ManagerRemoved(address indexed manager); modifier onlyManager(address addr) { require(isManager(addr), "NOT_MANAGER"); _; } modifier onlyFromManager { require(isManager(msg.sender), "NOT_MANAGER"); _; } modifier onlyOwnerOrManager { require(msg.sender == owner || isManager(msg.sender), "NOT_OWNER_OR_MANAGER"); _; } constructor() Claimable() {} /// @dev Gets the managers. /// @return The list of managers. function managers() public view returns (address[] memory) { return addressesInSet(MANAGER); } /// @dev Gets the number of managers. /// @return The numer of managers. function numManagers() public view returns (uint) { return numAddressesInSet(MANAGER); } /// @dev Checks if an address is a manger. /// @param addr The address to check. /// @return True if the address is a manager, False otherwise. function isManager(address addr) public view returns (bool) { return isAddressInSet(MANAGER, addr); } /// @dev Adds a new manager. /// @param manager The new address to add. function addManager(address manager) public virtual onlyOwner { addManagerInternal(manager); } /// @dev Removes a manager. /// @param manager The manager to remove. function removeManager(address manager) public virtual onlyOwner { removeAddressFromSet(MANAGER, manager); emit ManagerRemoved(manager); } function addManagerInternal(address manager) internal { addAddressToSet(MANAGER, manager, true); emit ManagerAdded(manager); } }
// SPDX-License-Identifier: UNLICENSED //Mainly taken from https://github.com/GNSPS/solidity-bytes-utils/blob/master/contracts/BytesLib.sol pragma solidity ^0.8.0; library BytesUtil { function toBytes4(bytes memory _bytes, uint _start) internal pure returns (bytes4) { require(_bytes.length >= (_start + 4)); bytes4 tempBytes4; assembly { tempBytes4 := mload(add(add(_bytes, 0x20), _start)) } return tempBytes4; } function toAddress(bytes memory _bytes, uint _start) internal pure returns (address) { require(_bytes.length >= (_start + 20)); address tempAddress; assembly { tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) } return tempAddress; } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; import "./ERC20.sol"; import "./ERC20SafeTransfer.sol"; import "./AddressUtil.sol"; /// @title Drainable /// @author Brecht Devos - <[email protected]> /// @dev Standard functionality to allow draining funds from a contract. abstract contract Drainable { using AddressUtil for address; using ERC20SafeTransfer for address; event Drained( address to, address token, uint amount ); function drain( address to, address token ) public returns (uint amount) { require(canDrain(msg.sender, token), "UNAUTHORIZED"); if (token == address(0)) { amount = address(this).balance; to.sendETHAndVerify(amount, gasleft()); // ETH } else { amount = ERC20(token).balanceOf(address(this)); token.safeTransferAndVerify(to, amount); // ERC20 token } emit Drained(to, token, amount); } // Needs to return if the address is authorized to call drain. function canDrain(address drainer, address token) public virtual view returns (bool); }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; import "./ERC20.sol"; import "./BytesUtil.sol"; /// @title ApprovalCheck /// @author Kongliang Zhong - <[email protected]> /// @dev check ERC20 approve calls, only allowed when to address is whitelisted. abstract contract ApprovalCheck { using BytesUtil for bytes; bytes4 public constant Erc20ApproveSelector = ERC20.approve.selector; mapping (address => bool) public allowedSpender; modifier isApprovalAllowed(bytes memory data) { if (data.toBytes4(0) == Erc20ApproveSelector) { address spender = data.toAddress(4 + 12); require(allowedSpender[spender], "APPROVAL_SPENDER_NOW_ALLOWED"); } _; } function _setApproveSpender(address target, bool allowed) internal { require(target != address(0), "ZERO_ADDRESS"); allowedSpender[target] = allowed; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC1155Receiver.sol"; /** * @dev _Available since v3.1._ */ contract ERC1155Holder is IERC1155Receiver { function onERC1155Received(address, address, uint256, uint256, bytes memory) public virtual override pure returns (bytes4) { return this.onERC1155Received.selector; } function onERC1155BatchReceived(address, address, uint256[] memory, uint256[] memory, bytes memory) public virtual override pure returns (bytes4) { return this.onERC1155BatchReceived.selector; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC721Receiver.sol"; /** * @dev Implementation of the {IERC721Receiver} interface. * * Accepts all token transfers. * Make sure the contract is able to use its token with {IERC721-safeTransferFrom}, {IERC721-approve} or {IERC721-setApprovalForAll}. */ contract ERC721Holder is IERC721Receiver { /** * @dev See {IERC721Receiver-onERC721Received}. * * Always returns `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received(address, address, uint256, bytes memory) public virtual override pure returns (bytes4) { return this.onERC721Received.selector; } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; /// @title AddressSet /// @author Daniel Wang - <[email protected]> contract AddressSet { struct Set { address[] addresses; mapping (address => uint) positions; uint count; } mapping (bytes32 => Set) private sets; function addAddressToSet( bytes32 key, address addr, bool maintainList ) internal { Set storage set = sets[key]; require(set.positions[addr] == 0, "ALREADY_IN_SET"); if (maintainList) { require(set.addresses.length == set.count, "PREVIOUSLY_NOT_MAINTAILED"); set.addresses.push(addr); } else { require(set.addresses.length == 0, "MUST_MAINTAIN"); } set.count += 1; set.positions[addr] = set.count; } function removeAddressFromSet( bytes32 key, address addr ) internal { Set storage set = sets[key]; uint pos = set.positions[addr]; require(pos != 0, "NOT_IN_SET"); delete set.positions[addr]; set.count -= 1; if (set.addresses.length > 0) { address lastAddr = set.addresses[set.count]; if (lastAddr != addr) { set.addresses[pos - 1] = lastAddr; set.positions[lastAddr] = pos; } set.addresses.pop(); } } function removeSet(bytes32 key) internal { delete sets[key]; } function isAddressInSet( bytes32 key, address addr ) internal view returns (bool) { return sets[key].positions[addr] != 0; } function numAddressesInSet(bytes32 key) internal view returns (uint) { Set storage set = sets[key]; return set.count; } function addressesInSet(bytes32 key) internal view returns (address[] memory) { Set storage set = sets[key]; require(set.count == set.addresses.length, "NOT_MAINTAINED"); return sets[key].addresses; } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; import "./Ownable.sol"; /// @title Claimable /// @author Brecht Devos - <[email protected]> /// @dev Extension for the Ownable contract, where the ownership needs /// to be claimed. This allows the new owner to accept the transfer. contract Claimable is Ownable { address public pendingOwner; /// @dev Modifier throws if called by any account other than the pendingOwner. modifier onlyPendingOwner() { require(msg.sender == pendingOwner, "UNAUTHORIZED"); _; } /// @dev Allows the current owner to set the pendingOwner address. /// @param newOwner The address to transfer ownership to. function transferOwnership( address newOwner ) public override onlyOwner { require(newOwner != address(0) && newOwner != owner, "INVALID_ADDRESS"); pendingOwner = newOwner; } /// @dev Allows the pendingOwner address to finalize the transfer. function claimOwnership() public onlyPendingOwner { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; /// @title Ownable /// @author Brecht Devos - <[email protected]> /// @dev The Ownable contract has an owner address, and provides basic /// authorization control functions, this simplifies the implementation of /// "user permissions". contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /// @dev The Ownable constructor sets the original `owner` of the contract /// to the sender. constructor() { owner = msg.sender; } /// @dev Throws if called by any account other than the owner. modifier onlyOwner() { require(msg.sender == owner, "UNAUTHORIZED"); _; } /// @dev Allows the current owner to transfer control of the contract to a /// new owner. /// @param newOwner The address to transfer ownership to. function transferOwnership( address newOwner ) public virtual onlyOwner { require(newOwner != address(0), "ZERO_ADDRESS"); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function renounceOwnership() public onlyOwner { emit OwnershipTransferred(owner, address(0)); owner = address(0); } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; /// @title ERC20 Token Interface /// @dev see https://github.com/ethereum/EIPs/issues/20 /// @author Daniel Wang - <[email protected]> abstract contract ERC20 { function totalSupply() public virtual view returns (uint); function balanceOf( address who ) public virtual view returns (uint); function allowance( address owner, address spender ) public virtual view returns (uint); function transfer( address to, uint value ) public virtual returns (bool); function transferFrom( address from, address to, uint value ) public virtual returns (bool); function approve( address spender, uint value ) public virtual returns (bool); }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; /// @title ERC20 safe transfer /// @dev see https://github.com/sec-bit/badERC20Fix /// @author Brecht Devos - <[email protected]> library ERC20SafeTransfer { function safeTransferAndVerify( address token, address to, uint value ) internal { safeTransferWithGasLimitAndVerify( token, to, value, gasleft() ); } function safeTransfer( address token, address to, uint value ) internal returns (bool) { return safeTransferWithGasLimit( token, to, value, gasleft() ); } function safeTransferWithGasLimitAndVerify( address token, address to, uint value, uint gasLimit ) internal { require( safeTransferWithGasLimit(token, to, value, gasLimit), "TRANSFER_FAILURE" ); } function safeTransferWithGasLimit( address token, address to, uint value, uint gasLimit ) internal returns (bool) { // A transfer is successful when 'call' is successful and depending on the token: // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) // - A single boolean is returned: this boolean needs to be true (non-zero) // bytes4(keccak256("transfer(address,uint256)")) = 0xa9059cbb bytes memory callData = abi.encodeWithSelector( bytes4(0xa9059cbb), to, value ); (bool success, ) = token.call{gas: gasLimit}(callData); return checkReturnValue(success); } function safeTransferFromAndVerify( address token, address from, address to, uint value ) internal { safeTransferFromWithGasLimitAndVerify( token, from, to, value, gasleft() ); } function safeTransferFrom( address token, address from, address to, uint value ) internal returns (bool) { return safeTransferFromWithGasLimit( token, from, to, value, gasleft() ); } function safeTransferFromWithGasLimitAndVerify( address token, address from, address to, uint value, uint gasLimit ) internal { bool result = safeTransferFromWithGasLimit( token, from, to, value, gasLimit ); require(result, "TRANSFER_FAILURE"); } function safeTransferFromWithGasLimit( address token, address from, address to, uint value, uint gasLimit ) internal returns (bool) { // A transferFrom is successful when 'call' is successful and depending on the token: // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) // - A single boolean is returned: this boolean needs to be true (non-zero) // bytes4(keccak256("transferFrom(address,address,uint256)")) = 0x23b872dd bytes memory callData = abi.encodeWithSelector( bytes4(0x23b872dd), from, to, value ); (bool success, ) = token.call{gas: gasLimit}(callData); return checkReturnValue(success); } function checkReturnValue( bool success ) internal pure returns (bool) { // A transfer/transferFrom is successful when 'call' is successful and depending on the token: // - No value is returned: we assume a revert when the transfer failed (i.e. 'call' returns false) // - A single boolean is returned: this boolean needs to be true (non-zero) if (success) { assembly { switch returndatasize() // Non-standard ERC20: nothing is returned so if 'call' was successful we assume the transfer succeeded case 0 { success := 1 } // Standard ERC20: a single boolean value is returned which needs to be true case 32 { returndatacopy(0, 0, 32) success := mload(0) } // None of the above: not successful default { success := 0 } } } return success; } }
// SPDX-License-Identifier: Apache-2.0 // Copyright 2017 Loopring Technology Limited. pragma solidity ^0.8.0; /// @title Utility Functions for addresses /// @author Daniel Wang - <[email protected]> /// @author Brecht Devos - <[email protected]> library AddressUtil { using AddressUtil for *; function isContract( address addr ) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(addr) } return (codehash != 0x0 && codehash != 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470); } function toPayable( address addr ) internal pure returns (address payable) { return payable(addr); } // Works like address.send but with a customizable gas limit // Make sure your code is safe for reentrancy when using this function! function sendETH( address to, uint amount, uint gasLimit ) internal returns (bool success) { if (amount == 0) { return true; } address payable recipient = to.toPayable(); /* solium-disable-next-line */ (success, ) = recipient.call{value: amount, gas: gasLimit}(""); } // Works like address.transfer but with a customizable gas limit // Make sure your code is safe for reentrancy when using this function! function sendETHAndVerify( address to, uint amount, uint gasLimit ) internal returns (bool success) { success = to.sendETH(amount, gasLimit); require(success, "TRANSFER_FAILURE"); } // Works like call but is slightly more efficient when data // needs to be copied from memory to do the call. function fastCall( address to, uint gasLimit, uint value, bytes memory data ) internal returns (bool success, bytes memory returnData) { if (to != address(0)) { assembly { // Do the call success := call(gasLimit, to, value, add(data, 32), mload(data), 0, 0) // Copy the return data let size := returndatasize() returnData := mload(0x40) mstore(returnData, size) returndatacopy(add(returnData, 32), 0, size) // Update free memory pointer mstore(0x40, add(returnData, add(32, size))) } } } // Like fastCall, but throws when the call is unsuccessful. function fastCallAndVerify( address to, uint gasLimit, uint value, bytes memory data ) internal returns (bytes memory returnData) { bool success; (success, returnData) = fastCall(to, gasLimit, value, data); if (!success) { assembly { revert(add(returnData, 32), mload(returnData)) } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * _Available since v3.1._ */ interface IERC1155Receiver { /** @dev Handles the receipt of a single ERC1155 token type. This function is called at the end of a `safeTransferFrom` after the balance has been updated. To accept the transfer, this must return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` (i.e. 0xf23a6e61, or its own function selector). @param operator The address which initiated the transfer (i.e. msg.sender) @param from The address which previously owned the token @param id The ID of the token being transferred @param value The amount of tokens being transferred @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns(bytes4); /** @dev Handles the receipt of a multiple ERC1155 token types. This function is called at the end of a `safeBatchTransferFrom` after the balances have been updated. To accept the transfer(s), this must return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` (i.e. 0xbc197c81, or its own function selector). @param operator The address which initiated the batch transfer (i.e. msg.sender) @param from The address which previously owned the token @param ids An array containing ids of each token being transferred (order and length must match values array) @param values An array containing amounts of each token being transferred (order and length must match ids array) @param data Additional data with no specified format @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns(bytes4); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); }
{ "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"callId","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes4","name":"method","type":"bytes4"}],"name":"CallReverted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"callId","type":"uint256"},{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bytes4","name":"method","type":"bytes4"}],"name":"CallSucceeded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Drained","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"manager","type":"address"}],"name":"ManagerRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"Erc20ApproveSelector","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"addManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"allowedSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"authorizeCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"bytes4","name":"","type":"bytes4"}],"name":"authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"callId","type":"uint256"},{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"call","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"drainer","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"canDrain","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"address","name":"token","type":"address"}],"name":"drain","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"managers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numManagers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155BatchReceived","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC1155Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"manager","type":"address"}],"name":"removeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setApproveSpender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bytes4","name":"selector","type":"bytes4"}],"name":"unauthorizeCall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50600080546001600160a01b0319163317905561209d806100326000396000f3fe6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc197c811161007f578063f23a6e6111610059578063f23a6e6114610532578063f2fde38b14610577578063f3ae24151461059757600080fd5b8063bc197c8114610470578063e30c3978146104b5578063e68777d7146104d557600080fd5b8063a6e977d0116100b0578063a6e977d01461041d578063a8c1e9c11461043d578063ac18de431461045057600080fd5b80638da5cb5b146103955780638ef369ba146103cd578063907d985b146103ed57600080fd5b8063715018a6116101385780637b977ec4116101125780637b977ec4146103035780637eaf312114610337578063837971e41461036757600080fd5b8063715018a61461029157806371b87298146102a657806372311705146102e157600080fd5b8063150b7a0211610169578063150b7a02146101e75780632d06177a1461025c5780634e71e0c81461027c57600080fd5b806301ffc9a7146101905780630e5fa4cd146101c557600080fd5b3661018b57005b600080fd5b34801561019c57600080fd5b506101b06101ab366004611e45565b6105b7565b60405190151581526020015b60405180910390f35b3480156101d157600080fd5b506101e56101e0366004611e1c565b61069c565b005b3480156101f357600080fd5b5061022b610202366004611d19565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101bc565b34801561026857600080fd5b506101e5610277366004611c27565b610769565b34801561028857600080fd5b506101e56107cf565b34801561029d57600080fd5b506101e56108a5565b3480156102b257600080fd5b506101b06102c1366004611e1c565b600460209081526000928352604080842090915290825290205460ff1681565b3480156102ed57600080fd5b506102f6610961565b6040516101bc9190611f4a565b34801561030f57600080fd5b5061022b7f095ea7b30000000000000000000000000000000000000000000000000000000081565b34801561034357600080fd5b506101b0610352366004611c27565b60036020526000908152604090205460ff1681565b34801561037357600080fd5b50610387610382366004611c41565b610991565b6040519081526020016101bc565b3480156103a157600080fd5b506000546103b5906001600160a01b031681565b6040516001600160a01b0390911681526020016101bc565b3480156103d957600080fd5b506101e56103e8366004611e1c565b610b0f565b3480156103f957600080fd5b506101b0610408366004611c41565b506000546001600160a01b0390811691161490565b34801561042957600080fd5b506101e5610438366004611de2565b610bda565b6101e561044b366004611e77565b610c42565b34801561045c57600080fd5b506101e561046b366004611c27565b61104f565b34801561047c57600080fd5b5061022b61048b366004611c73565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b3480156104c157600080fd5b506001546103b5906001600160a01b031681565b3480156104e157600080fd5b507fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f860005260026020527fcb12253ebf62631b6bd57b44a6063538cd5b38bb493f10fcea7a14477e41e7a854610387565b34801561053e57600080fd5b5061022b61054d366004611d7f565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b34801561058357600080fd5b506101e5610592366004611c27565b61110a565b3480156105a357600080fd5b506101b06105b2366004611c27565b611210565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061064a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061069657507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b92915050565b6000546001600160a01b031633146106fb5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0390911660009081526004602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000546001600160a01b031633146107c35760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6107cc8161124f565b50565b6001546001600160a01b031633146108295760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b6000546001600160a01b031633146108ff5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b606061098c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f86112b2565b905090565b600080546001600160a01b031633146109ec5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b038216610a18575047610a12815a6001600160a01b0386169190611384565b50610abe565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a082319060240160206040518083038186803b158015610a7057600080fd5b505afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa89190611e5f565b9050610abe6001600160a01b03831684836113f0565b604080516001600160a01b038086168252841660208201529081018290527fbfd2431e6c719bec0308db4f4ed0afc39712d368867354c711a1ea1e384fa7819060600160405180910390a192915050565b6000546001600160a01b03163314610b695760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b0390911660009081526004602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000546001600160a01b03163314610c345760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b610c3e8282611401565b5050565b33610c4c81611210565b610c985760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f4d414e4147455200000000000000000000000000000000000000000060448201526064016106f2565b84610cdd600086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a09050565b6001600160a01b03821660009081526004602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915290205460ff16610d725760405162461bcd60e51b815260206004820152601260248201527f554e415554484f52495a45445f43414c4c45000000000000000000000000000060448201526064016106f2565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052507f095ea7b3000000000000000000000000000000000000000000000000000000009350610dd492508491506114a0565b7fffffffff00000000000000000000000000000000000000000000000000000000161415610e76576000610e098260106114c3565b6001600160a01b03811660009081526003602052604090205490915060ff16610e745760405162461bcd60e51b815260206004820152601c60248201527f415050524f56414c5f5350454e4445525f4e4f575f414c4c4f5745440000000060448201526064016106f2565b505b6000886001600160a01b0316868989604051610e93929190611f01565b60006040518083038185875af1925050503d8060008114610ed0576040519150601f19603f3d011682016040523d82523d6000602084013e610ed5565b606091505b505090508015610f93577fae8e3cedf7fc44ab393da64789fd4a4c8d85259cbc55a795a9fb630b893a55378a8a610f4660008c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a09050565b604080519384526001600160a01b0390921660208401527fffffffff00000000000000000000000000000000000000000000000000000000169082015260600160405180910390a1611043565b7f7af015e7613a8a9cf091f9a299aec7409798cb347db8e4b33807dc08e01afbcb8a8a610ffa60008c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a09050565b604080519384526001600160a01b0390921660208401527fffffffff00000000000000000000000000000000000000000000000000000000169082015260600160405180910390a15b50505050505050505050565b6000546001600160a01b031633146110a95760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6110d37fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8826114f6565b6040516001600160a01b038216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b6000546001600160a01b031633146111645760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b0381161580159061118a57506000546001600160a01b03828116911614155b6111d65760405162461bcd60e51b815260206004820152600f60248201527f494e56414c49445f41444452455353000000000000000000000000000000000060448201526064016106f2565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b03811660009081527fcb12253ebf62631b6bd57b44a6063538cd5b38bb493f10fcea7a14477e41e7a760205260408120541515610696565b61127b7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882600161173d565b6040516001600160a01b038216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b6000818152600260208190526040909120805491810154606092146113195760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f4d41494e5441494e454400000000000000000000000000000000000060448201526064016106f2565b6000838152600260209081526040918290208054835181840281018401909452808452909183018282801561137757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611359575b5050505050915050919050565b600061139a6001600160a01b03851684846118e6565b9050806113e95760405162461bcd60e51b815260206004820152601060248201527f5452414e534645525f4641494c5552450000000000000000000000000000000060448201526064016106f2565b9392505050565b6113fc8383835a611954565b505050565b6001600160a01b0382166114575760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f41444452455353000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b0391909116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60006114ad826004611fda565b835110156114ba57600080fd5b50016020015190565b60006114d0826014611fda565b835110156114dd57600080fd5b5001602001516c01000000000000000000000000900490565b60008281526002602090815260408083206001600160a01b038516845260018101909252909120548061156b5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f494e5f5345540000000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b03831660009081526001808401602052604082208290556002840180549192909161159e908490611ff2565b9091555050815415611737576000826000018360020154815481106115ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546001600160a01b039081169150841681146116a557808361161a600185611ff2565b81548110611651577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03948516179055918316815260018501909152604090208290555b82548390806116dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b60008381526002602090815260408083206001600160a01b03861684526001810190925290912054156117b25760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f494e5f53455400000000000000000000000000000000000060448201526064016106f2565b811561185457600281015481541461180c5760405162461bcd60e51b815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c45440000000000000060448201526064016106f2565b80546001810182556000828152602090200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385161790556118a3565b8054156118a35760405162461bcd60e51b815260206004820152600d60248201527f4d5553545f4d41494e5441494e0000000000000000000000000000000000000060448201526064016106f2565b60018160020160008282546118b89190611fda565b909155505060028101546001600160a01b039093166000908152600190910160205260409020919091555050565b6000826118f5575060016113e9565b6040516001600160a01b038516908190849086906000818181858888f193505050503d8060008114611943576040519150601f19603f3d011682016040523d82523d6000602084013e611948565b606091505b50909695505050505050565b611960848484846119ac565b6117375760405162461bcd60e51b815260206004820152601060248201527f5452414e534645525f4641494c5552450000000000000000000000000000000060448201526064016106f2565b604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928391908816908590611a39908590611f11565b60006040518083038160008787f1925050503d8060008114611a77576040519150601f19603f3d011682016040523d82523d6000602084013e611a7c565b606091505b50509050611a8981611a94565b979650505050505050565b60008115611acb573d8015611ab45760208114611abd5760009250611ac9565b60019250611ac9565b60206000803e60005192505b505b5090565b80356001600160a01b0381168114611ae657600080fd5b919050565b600082601f830112611afb578081fd5b8135602067ffffffffffffffff821115611b1757611b17612038565b8160051b611b26828201611f8b565b838152828101908684018388018501891015611b40578687fd5b8693505b85841015611b62578035835260019390930192918401918401611b44565b50979650505050505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ae657600080fd5b600082601f830112611bae578081fd5b813567ffffffffffffffff811115611bc857611bc8612038565b611bf960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611f8b565b818152846020838601011115611c0d578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611c38578081fd5b6113e982611acf565b60008060408385031215611c53578081fd5b611c5c83611acf565b9150611c6a60208401611acf565b90509250929050565b600080600080600060a08688031215611c8a578081fd5b611c9386611acf565b9450611ca160208701611acf565b9350604086013567ffffffffffffffff80821115611cbd578283fd5b611cc989838a01611aeb565b94506060880135915080821115611cde578283fd5b611cea89838a01611aeb565b93506080880135915080821115611cff578283fd5b50611d0c88828901611b9e565b9150509295509295909350565b60008060008060808587031215611d2e578384fd5b611d3785611acf565b9350611d4560208601611acf565b925060408501359150606085013567ffffffffffffffff811115611d67578182fd5b611d7387828801611b9e565b91505092959194509250565b600080600080600060a08688031215611d96578081fd5b611d9f86611acf565b9450611dad60208701611acf565b93506040860135925060608601359150608086013567ffffffffffffffff811115611dd6578182fd5b611d0c88828901611b9e565b60008060408385031215611df4578182fd5b611dfd83611acf565b915060208301358015158114611e11578182fd5b809150509250929050565b60008060408385031215611e2e578182fd5b611e3783611acf565b9150611c6a60208401611b6e565b600060208284031215611e56578081fd5b6113e982611b6e565b600060208284031215611e70578081fd5b5051919050565b600080600080600060808688031215611e8e578081fd5b85359450611e9e60208701611acf565b9350604086013567ffffffffffffffff80821115611eba578283fd5b818801915088601f830112611ecd578283fd5b813581811115611edb578384fd5b896020828501011115611eec578384fd5b96999598505060200195606001359392505050565b8183823760009101908152919050565b60008251815b81811015611f315760208186018101518583015201611f17565b81811115611f3f5782828501525b509190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156119485783516001600160a01b031683529284019291840191600101611f66565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611fd257611fd2612038565b604052919050565b60008219821115611fed57611fed612009565b500190565b60008282101561200457612004612009565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220e4a76fc9c7411e572a5b534cffb4a8fa57bc7cc2903d24b0dbd2c10da76f3ddd64736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101845760003560e01c80638da5cb5b116100d6578063bc197c811161007f578063f23a6e6111610059578063f23a6e6114610532578063f2fde38b14610577578063f3ae24151461059757600080fd5b8063bc197c8114610470578063e30c3978146104b5578063e68777d7146104d557600080fd5b8063a6e977d0116100b0578063a6e977d01461041d578063a8c1e9c11461043d578063ac18de431461045057600080fd5b80638da5cb5b146103955780638ef369ba146103cd578063907d985b146103ed57600080fd5b8063715018a6116101385780637b977ec4116101125780637b977ec4146103035780637eaf312114610337578063837971e41461036757600080fd5b8063715018a61461029157806371b87298146102a657806372311705146102e157600080fd5b8063150b7a0211610169578063150b7a02146101e75780632d06177a1461025c5780634e71e0c81461027c57600080fd5b806301ffc9a7146101905780630e5fa4cd146101c557600080fd5b3661018b57005b600080fd5b34801561019c57600080fd5b506101b06101ab366004611e45565b6105b7565b60405190151581526020015b60405180910390f35b3480156101d157600080fd5b506101e56101e0366004611e1c565b61069c565b005b3480156101f357600080fd5b5061022b610202366004611d19565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101bc565b34801561026857600080fd5b506101e5610277366004611c27565b610769565b34801561028857600080fd5b506101e56107cf565b34801561029d57600080fd5b506101e56108a5565b3480156102b257600080fd5b506101b06102c1366004611e1c565b600460209081526000928352604080842090915290825290205460ff1681565b3480156102ed57600080fd5b506102f6610961565b6040516101bc9190611f4a565b34801561030f57600080fd5b5061022b7f095ea7b30000000000000000000000000000000000000000000000000000000081565b34801561034357600080fd5b506101b0610352366004611c27565b60036020526000908152604090205460ff1681565b34801561037357600080fd5b50610387610382366004611c41565b610991565b6040519081526020016101bc565b3480156103a157600080fd5b506000546103b5906001600160a01b031681565b6040516001600160a01b0390911681526020016101bc565b3480156103d957600080fd5b506101e56103e8366004611e1c565b610b0f565b3480156103f957600080fd5b506101b0610408366004611c41565b506000546001600160a01b0390811691161490565b34801561042957600080fd5b506101e5610438366004611de2565b610bda565b6101e561044b366004611e77565b610c42565b34801561045c57600080fd5b506101e561046b366004611c27565b61104f565b34801561047c57600080fd5b5061022b61048b366004611c73565b7fbc197c810000000000000000000000000000000000000000000000000000000095945050505050565b3480156104c157600080fd5b506001546103b5906001600160a01b031681565b3480156104e157600080fd5b507fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f860005260026020527fcb12253ebf62631b6bd57b44a6063538cd5b38bb493f10fcea7a14477e41e7a854610387565b34801561053e57600080fd5b5061022b61054d366004611d7f565b7ff23a6e610000000000000000000000000000000000000000000000000000000095945050505050565b34801561058357600080fd5b506101e5610592366004611c27565b61110a565b3480156105a357600080fd5b506101b06105b2366004611c27565b611210565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000148061064a57507fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a0200000000000000000000000000000000000000000000000000000000145b8061069657507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b92915050565b6000546001600160a01b031633146106fb5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b6001600160a01b0390911660009081526004602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000546001600160a01b031633146107c35760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6107cc8161124f565b50565b6001546001600160a01b031633146108295760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b600154600080546040516001600160a01b0393841693909116917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a360018054600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081166001600160a01b03841617909155169055565b6000546001600160a01b031633146108ff5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b606061098c7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f86112b2565b905090565b600080546001600160a01b031633146109ec5760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b038216610a18575047610a12815a6001600160a01b0386169190611384565b50610abe565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a082319060240160206040518083038186803b158015610a7057600080fd5b505afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa89190611e5f565b9050610abe6001600160a01b03831684836113f0565b604080516001600160a01b038086168252841660208201529081018290527fbfd2431e6c719bec0308db4f4ed0afc39712d368867354c711a1ea1e384fa7819060600160405180910390a192915050565b6000546001600160a01b03163314610b695760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b0390911660009081526004602090815260408083207fffffffff0000000000000000000000000000000000000000000000000000000090941683529290522080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055565b6000546001600160a01b03163314610c345760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b610c3e8282611401565b5050565b33610c4c81611210565b610c985760405162461bcd60e51b815260206004820152600b60248201527f4e4f545f4d414e4147455200000000000000000000000000000000000000000060448201526064016106f2565b84610cdd600086868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a09050565b6001600160a01b03821660009081526004602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008516845290915290205460ff16610d725760405162461bcd60e51b815260206004820152601260248201527f554e415554484f52495a45445f43414c4c45000000000000000000000000000060448201526064016106f2565b85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052507f095ea7b3000000000000000000000000000000000000000000000000000000009350610dd492508491506114a0565b7fffffffff00000000000000000000000000000000000000000000000000000000161415610e76576000610e098260106114c3565b6001600160a01b03811660009081526003602052604090205490915060ff16610e745760405162461bcd60e51b815260206004820152601c60248201527f415050524f56414c5f5350454e4445525f4e4f575f414c4c4f5745440000000060448201526064016106f2565b505b6000886001600160a01b0316868989604051610e93929190611f01565b60006040518083038185875af1925050503d8060008114610ed0576040519150601f19603f3d011682016040523d82523d6000602084013e610ed5565b606091505b505090508015610f93577fae8e3cedf7fc44ab393da64789fd4a4c8d85259cbc55a795a9fb630b893a55378a8a610f4660008c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a09050565b604080519384526001600160a01b0390921660208401527fffffffff00000000000000000000000000000000000000000000000000000000169082015260600160405180910390a1611043565b7f7af015e7613a8a9cf091f9a299aec7409798cb347db8e4b33807dc08e01afbcb8a8a610ffa60008c8c8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092939250506114a09050565b604080519384526001600160a01b0390921660208401527fffffffff00000000000000000000000000000000000000000000000000000000169082015260600160405180910390a15b50505050505050505050565b6000546001600160a01b031633146110a95760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6110d37fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f8826114f6565b6040516001600160a01b038216907fef69f7d97228658c92417be1b16b19058315de71fecb435d07b7d23728b6bd3190600090a250565b6000546001600160a01b031633146111645760405162461bcd60e51b815260206004820152600c60248201527f554e415554484f52495a4544000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b0381161580159061118a57506000546001600160a01b03828116911614155b6111d65760405162461bcd60e51b815260206004820152600f60248201527f494e56414c49445f41444452455353000000000000000000000000000000000060448201526064016106f2565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6001600160a01b03811660009081527fcb12253ebf62631b6bd57b44a6063538cd5b38bb493f10fcea7a14477e41e7a760205260408120541515610696565b61127b7fae79206ff8d89355a31a27bc7df0c55f5fe15ce3ae94530629cd19b6712ea1f882600161173d565b6040516001600160a01b038216907f3b4a40cccf2058c593542587329dd385be4f0b588db5471fbd9598e56dd7093a90600090a250565b6000818152600260208190526040909120805491810154606092146113195760405162461bcd60e51b815260206004820152600e60248201527f4e4f545f4d41494e5441494e454400000000000000000000000000000000000060448201526064016106f2565b6000838152600260209081526040918290208054835181840281018401909452808452909183018282801561137757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611359575b5050505050915050919050565b600061139a6001600160a01b03851684846118e6565b9050806113e95760405162461bcd60e51b815260206004820152601060248201527f5452414e534645525f4641494c5552450000000000000000000000000000000060448201526064016106f2565b9392505050565b6113fc8383835a611954565b505050565b6001600160a01b0382166114575760405162461bcd60e51b815260206004820152600c60248201527f5a45524f5f41444452455353000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b0391909116600090815260036020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b60006114ad826004611fda565b835110156114ba57600080fd5b50016020015190565b60006114d0826014611fda565b835110156114dd57600080fd5b5001602001516c01000000000000000000000000900490565b60008281526002602090815260408083206001600160a01b038516845260018101909252909120548061156b5760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f494e5f5345540000000000000000000000000000000000000000000060448201526064016106f2565b6001600160a01b03831660009081526001808401602052604082208290556002840180549192909161159e908490611ff2565b9091555050815415611737576000826000018360020154815481106115ec577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000918252602090912001546001600160a01b039081169150841681146116a557808361161a600185611ff2565b81548110611651577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600091825260208083209190910180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03948516179055918316815260018501909152604090208290555b82548390806116dd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008281526020902081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90810180547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055019055505b50505050565b60008381526002602090815260408083206001600160a01b03861684526001810190925290912054156117b25760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f494e5f53455400000000000000000000000000000000000060448201526064016106f2565b811561185457600281015481541461180c5760405162461bcd60e51b815260206004820152601960248201527f50524556494f55534c595f4e4f545f4d41494e5441494c45440000000000000060448201526064016106f2565b80546001810182556000828152602090200180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0385161790556118a3565b8054156118a35760405162461bcd60e51b815260206004820152600d60248201527f4d5553545f4d41494e5441494e0000000000000000000000000000000000000060448201526064016106f2565b60018160020160008282546118b89190611fda565b909155505060028101546001600160a01b039093166000908152600190910160205260409020919091555050565b6000826118f5575060016113e9565b6040516001600160a01b038516908190849086906000818181858888f193505050503d8060008114611943576040519150601f19603f3d011682016040523d82523d6000602084013e611948565b606091505b50909695505050505050565b611960848484846119ac565b6117375760405162461bcd60e51b815260206004820152601060248201527f5452414e534645525f4641494c5552450000000000000000000000000000000060448201526064016106f2565b604080516001600160a01b038581166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928391908816908590611a39908590611f11565b60006040518083038160008787f1925050503d8060008114611a77576040519150601f19603f3d011682016040523d82523d6000602084013e611a7c565b606091505b50509050611a8981611a94565b979650505050505050565b60008115611acb573d8015611ab45760208114611abd5760009250611ac9565b60019250611ac9565b60206000803e60005192505b505b5090565b80356001600160a01b0381168114611ae657600080fd5b919050565b600082601f830112611afb578081fd5b8135602067ffffffffffffffff821115611b1757611b17612038565b8160051b611b26828201611f8b565b838152828101908684018388018501891015611b40578687fd5b8693505b85841015611b62578035835260019390930192918401918401611b44565b50979650505050505050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114611ae657600080fd5b600082601f830112611bae578081fd5b813567ffffffffffffffff811115611bc857611bc8612038565b611bf960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611f8b565b818152846020838601011115611c0d578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611c38578081fd5b6113e982611acf565b60008060408385031215611c53578081fd5b611c5c83611acf565b9150611c6a60208401611acf565b90509250929050565b600080600080600060a08688031215611c8a578081fd5b611c9386611acf565b9450611ca160208701611acf565b9350604086013567ffffffffffffffff80821115611cbd578283fd5b611cc989838a01611aeb565b94506060880135915080821115611cde578283fd5b611cea89838a01611aeb565b93506080880135915080821115611cff578283fd5b50611d0c88828901611b9e565b9150509295509295909350565b60008060008060808587031215611d2e578384fd5b611d3785611acf565b9350611d4560208601611acf565b925060408501359150606085013567ffffffffffffffff811115611d67578182fd5b611d7387828801611b9e565b91505092959194509250565b600080600080600060a08688031215611d96578081fd5b611d9f86611acf565b9450611dad60208701611acf565b93506040860135925060608601359150608086013567ffffffffffffffff811115611dd6578182fd5b611d0c88828901611b9e565b60008060408385031215611df4578182fd5b611dfd83611acf565b915060208301358015158114611e11578182fd5b809150509250929050565b60008060408385031215611e2e578182fd5b611e3783611acf565b9150611c6a60208401611b6e565b600060208284031215611e56578081fd5b6113e982611b6e565b600060208284031215611e70578081fd5b5051919050565b600080600080600060808688031215611e8e578081fd5b85359450611e9e60208701611acf565b9350604086013567ffffffffffffffff80821115611eba578283fd5b818801915088601f830112611ecd578283fd5b813581811115611edb578384fd5b896020828501011115611eec578384fd5b96999598505060200195606001359392505050565b8183823760009101908152919050565b60008251815b81811015611f315760208186018101518583015201611f17565b81811115611f3f5782828501525b509190910192915050565b6020808252825182820181905260009190848201906040850190845b818110156119485783516001600160a01b031683529284019291840191600101611f66565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611fd257611fd2612038565b604052919050565b60008219821115611fed57611fed612009565b500190565b60008282101561200457612004612009565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea2646970667358221220e4a76fc9c7411e572a5b534cffb4a8fa57bc7cc2903d24b0dbd2c10da76f3ddd64736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.