Ready to simplify your web3 experience? Try the all-in-one web3 app trusted by millions worldwide.
Purchase 100+ cryptocurrencies instantly, with Visa/Mastercard, Google/Apple Pay, and a variety of other funding methods.
Everyday giveaways up to 100 ETH, Lucky Spins. Deposit BONUS 300% and Cashbacks!
9 years old Licensed Crypto Casino, Instant Withdraw 24/7, 6000+ Slots available, Paypal Deposit, Instant Live Support 24/7, 30% Rakeback.
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
5000+ Slots & Live Casino Games, 50+cryptos. Register with Etherscan and get 760% deposit bonus. Win Big$, withdraw it fast.
Play 100s of games anonymously with all major cryptos. Join CryptoWins & start winning!
Anonymous play on awesome games - sign up now for 25 free jackpot spins - worth $100s!
Overview
ETH Balance
Eth Value
$0.00Token Holdings
Could not find any matches!
- ERC-20 Tokens (65)34.2811895 AAVEAave Token (AAVE)$5,337.58@155.70300,010 ALEPHaleph.im v2 (ALEPH)$50,806.09@0.1693228.19180001 LEOBitfinex LEO... (LEO)$1,350.90@5.92402.0041 CELCelsius (CEL)$133.04@0.33094,955.59937835 LINKChainLink To... (LINK)$59,566.30@12.0285,262.66170132 CROCronos Coin (CRO)$7,210.75@0.0846562.77672844 EURAEURA (previo... (EURA)$630.31@1.1230.00966773 FTX TokenFTT (FTX To...)$62.72@2.0959.69946791 HTHuobiToken (HT)$33.17@0.55563,483.97372116 HUSDHUSD (HUSD)$94.53@0.027142.16632738 OKBOKB (OKB)$1,738.10@41.220.13332314 PAXGPaxos Gold (PAXG)$351.10@2,633.48281.18229492 SUSHISushiToken (SUSHI)$236.02@0.83940.00000565 TKXTokenize Emb... (TKX)$0.00@9.0126925.05649365 UNIUniswap (UNI)$6,882.42@7.4431,000.1205677 BUSDBUSD (BUSD)$30,331.48@0.97847.7982992 COMPCompound (COMP)$369.95@47.4419,897.04094572 DAIDai Stableco... (DAI)$19,897.04@1.000.84123021 MKRMaker (MKR)$1,349.22@1,603.8627,887.15410795 MATICMatic Token (MATIC)$11,348.99@0.4072,458.90066044 USDPPax Dollar (USDP)$2,458.90@1.0039,968.452872 USDTTether USD (USDT)$39,968.45@1.0082,334.568028 USDCUSDC (USDC)$82,334.57@1.006.45810234 WBTCWrapped BTC (WBTC)$409,876.38@63,467.0076.52728549 WETHWrapped Ethe... (WETH)$199,772.25@2,610.4709750 $stLink rewards on stlink.fi! stlink.fi ($stLin...)4,000 Earn $UNI airdrops at https://www.uniswaplabs.com# uniswaplab... (Earn $...)30,000 $ Evmosia.com$ Evmosia.c... ($ Evm...)48,000 Earn $TUSD airdrops at https://www.tenorusd.org$ tenorusd.o... (Earn $...)4.75ERC20 ***5,000 FTTv2.ioFTTv2.io (FTTv2....)5 SWAPPSwapp Token99,999,536.1174751 WRAPWrap Governa... (WRAP)1 TIKChronoBase$0.28@0.2783128 EGAMEEVERY GAME$0.00@0.001.2 TokenERC-20 TOKEN*[Suspicious]30 TokenERC-20 TOKEN*[Suspicious]30 TokenERC-20 TOKEN*[Suspicious]5,000 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]1.5 TokenERC-20 TOKEN*[Suspicious]1.4 TokenERC-20 TOKEN*[Suspicious]3,999.99 TokenERC-20 TOKEN*[Suspicious]0.7 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]245.44 TokenERC-20 TOKEN*[Suspicious]5,000 TokenERC-20 TOKEN*[Suspicious]800 TokenERC-20 TOKEN*[Suspicious]100,000 TokenERC-20 TOKEN*[Suspicious]4,214 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]7,000 TokenERC-20 TOKEN*[Suspicious]350 TokenERC-20 TOKEN*[Suspicious]2,500,000 TokenERC-20 TOKEN*[Suspicious]777 TokenERC-20 TOKEN*[Suspicious]620 TokenERC-20 TOKEN*[Unsafe]7,000 TokenERC-20 TOKEN*[Unsafe]7,000 TokenERC-20 TOKEN*[Unsafe]5,555 TokenERC-20 TOKEN*[Unsafe]132.84 TokenERC-20 TOKEN*[Spam]7,000 TokenERC-20 TOKEN*[Spam]50,000 TokenERC-20 TOKEN*[Spam]5,555 TokenERC-20 TOKEN*[Spam]1 TokenERC-20 TOKEN*[Spam]5,555 TokenERC-20 TOKEN*[Spam]NFT Tokens (71)SUPRSuperRarex2ERC-721aave-token.netAave Mysterybox NFTERC-1155claim rewards on apylink.comapylink.comERC-1155claim rewards on apyusd.netapyusd.netERC-1155CCBCCRAYON CLUB X BAYCERC-721nft-dai.comDAI Mysterybox NFTERC-1155EtherHeadEtherHeadERC-1155MPMegaParkERC-721NativePunks OfficialsNativePunks OfficialsERC-1155Reward Club [u7tnbbSX]Reward Club [SuJHhMBq]ERC-1155SeoulStarsSeoulStarsERC-1155Spinal FoxesSpinal FoxesERC-1155claim rewards on univ4labs.orguniv4labs.orgERC-1155Let's Go!🎁ERC-1155ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-721 TOKEN*[Suspicious]ERC-721 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-721 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-721 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Suspicious]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-1155 TOKEN*[Spam]ERC-721 TOKEN*[Spam]ERC-721 TOKEN*[Spam]
More Info
Private Name Tags
ContractCreator
- Transactions
- Internal Transactions
- Token Transfers (ERC-20)
- NFT Transfers
- Contract
- Events
- Analytics
- Multichain Portfolio
Advanced Filter- Filter by Tx Type:
- Tx
- Internal Tx
- ERC-20
- NFTs
Latest 25 from a total of 13,664 transactions
Transaction Hash MethodBlockFromToExec Transaction 20721755 2024-09-10 17:39:23 19 days ago 1725989963 IN 0 ETH$0.00 0.00037599 3.36784492 Exec Transaction 20721743 2024-09-10 17:36:59 19 days ago 1725989819 IN 0 ETH$0.00 0.00035199 3.21776144 Wrap ERC20 20715515 2024-09-09 20:43:23 20 days ago 1725914603 IN 0 ETH$0.00 0.00014589 3.78296013 Wrap ERC20 20688807 2024-09-06 3:16:35 24 days ago 1725592595 IN 0 ETH$0.00 0.0000537 1.23796492 Wrap ERC20 20640273 2024-08-30 8:42:59 31 days ago 1725007379 IN 0 ETH$0.00 0.00005565 1.20592795 Exec Transaction 20625782 2024-08-28 8:06:11 33 days ago 1724832371 IN 0 ETH$0.00 0.00018774 1.68168148 Exec Transaction 20603599 2024-08-25 5:43:59 36 days ago 1724564639 IN 0 ETH$0.00 0.00008546 0.90065878 Exec Transaction 20603547 2024-08-25 5:33:23 36 days ago 1724564003 IN 0 ETH$0.00 0.00008479 0.82522601 Exec Transaction 20603516 2024-08-25 5:27:11 36 days ago 1724563631 IN 0 ETH$0.00 0.00007547 0.79548939 Exec Transaction 20603451 2024-08-25 5:13:59 36 days ago 1724562839 IN 0 ETH$0.00 0.00009101 0.88590639 Exec Transaction 20603433 2024-08-25 5:10:23 36 days ago 1724562623 IN 0 ETH$0.00 0.00010318 0.86104086 Wrap ERC20 20566549 2024-08-20 1:27:35 41 days ago 1724117255 IN 0 ETH$0.00 0.00010641 2.57328984 Exec Transaction 20565083 2024-08-19 20:33:23 41 days ago 1724099603 IN 0 ETH$0.00 0.00021306 1.95080869 Exec Transaction 20563225 2024-08-19 14:19:23 41 days ago 1724077163 IN 0 ETH$0.00 0.00057055 4.76120487 Exec Transaction 20536356 2024-08-15 20:16:47 45 days ago 1723753007 IN 0 ETH$0.00 0.00086068 6.94354053 Exec Transaction 20521022 2024-08-13 16:53:35 47 days ago 1723568015 IN 0 ETH$0.00 0.00079361 6.56451187 Wrap ERC20 20475400 2024-08-07 8:07:59 54 days ago 1723018079 IN 0 ETH$0.00 0.00008116 2.10514981 Wrap ERC20 20319275 2024-07-16 13:09:11 75 days ago 1721135351 IN 0 ETH$0.00 0.00033885 8.19208885 Wrap ERC20 20283057 2024-07-11 11:46:47 80 days ago 1720698407 IN 0 ETH$0.00 0.00022782 4.60889983 Wrap ERC20 20241692 2024-07-05 17:07:11 86 days ago 1720199231 IN 0 ETH$0.00 0.00027568 7.14610926 Exec Transaction 20234679 2024-07-04 17:36:23 87 days ago 1720114583 IN 0 ETH$0.00 0.00140211 13.50487989 Exec Transaction 20223041 2024-07-03 2:36:35 89 days ago 1719974195 IN 0 ETH$0.00 0.00038172 3.49613363 Exec Transaction 20173079 2024-06-26 3:09:23 96 days ago 1719371363 IN 0 ETH$0.00 0.00048472 4.04401771 Exec Transaction 20173060 2024-06-26 3:05:35 96 days ago 1719371135 IN 0 ETH$0.00 0.00047734 3.98294602 Exec Transaction 20157084 2024-06-23 21:30:59 98 days ago 1719178259 IN 0 ETH$0.00 0.00028544 2.77813666 View more zero value Internal Transactions in Advanced View mode
Advanced mode:Loading...LoadingContract Name:WrapMultisig
Compiler Versionv0.7.6+commit.7338295f
Optimization Enabled:Yes with 1000000 runs
Other Settings:default evmVersionContract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity >=0.7.0 <0.8.0; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/cryptography/ECDSA.sol"; import "./base/WrapManager.sol"; import "./interfaces/ERC721TokenReceiver.sol"; /// @title Wrap protocol locking contract, based on Gnosis Safe contract work contract WrapMultisig is MultisigManager, ERC721TokenReceiver { using SafeMath for uint256; using ECDSA for bytes32; string public constant NAME = "Wrap multisig"; string public constant VERSION = "1.0.0"; bytes4 private constant ERC20_TRANSFER_SELECTOR = bytes4(keccak256(bytes("transferFrom(address,address,uint256)"))); bytes4 private constant ERC721_SAFE_TRANSFER_SELECTOR = bytes4(keccak256(bytes("safeTransferFrom(address,address,uint256)"))); //keccak256( // "EIP712Domain(address verifyingContract)" //); bytes32 private constant DOMAIN_SEPARATOR_TYPEHASH = 0x035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749; //keccak256( // "WrapTx(address to,uint256 value,bytes data,string tezosOperation)" //); bytes32 private constant UNWRAP_TX_TYPEHASH = 0x987804e036e2c4c5e32f45ccae87d65fb92de3f7d16998a7fa3910a01da2ab53; mapping(string => bool) internal tezosOperations; event ExecutionFailure(bytes32 txHash); event ExecutionSuccess(bytes32 txHash); event ERC20WrapAsked( address user, address token, uint256 amount, string tezosDestinationAddress ); event ERC721WrapAsked( address user, address token, uint256 tokenId, string tezosDestinationAddress ); bytes32 public domainSeparator; /// @notice The administrator will be allowed to modify multisig members and quorum /// @param _administrator Administrator of the multisig constructor(address _administrator) { require( _administrator != address(0), "WRAP: INVALID_ADMINISTRATOR_PROVIDED" ); administrator = _administrator; } /// @notice Initialize multisig members and threshold /// @dev This function can only be called once and set the domain separator /// @param owners Initial members of the multisig /// @param threshold Threshold of the multisig function setup(address[] calldata owners, uint256 threshold) external authorized { require(domainSeparator == 0, "WRAP: DOMAIN_SEPARATOR_ALREADY_SET"); domainSeparator = keccak256( abi.encode(DOMAIN_SEPARATOR_TYPEHASH, this) ); _setup(owners, threshold); } /// @notice Transfer ERC20 tokens to the custody on behalf of the user /// @param token Token contract address /// @param amount Amount to put in custody /// @param tezosAddress Destination address of the wrap on Tezos blockchain function wrapERC20( address token, uint256 amount, string calldata tezosAddress ) external returns (bool success) { require(amount > 0, "WRAP: INVALID_AMOUNT"); _erc20SafeTransferFrom(token, msg.sender, address(this), amount); emit ERC20WrapAsked(msg.sender, token, amount, tezosAddress); return true; } function _erc20SafeTransferFrom( address token, address from, address to, uint256 value ) private { (bool success, bytes memory data) = token.call( abi.encodeWithSelector(ERC20_TRANSFER_SELECTOR, from, to, value) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "WRAP: ERC20_TRANSFER_FAILED" ); } /// @notice Transfer ERC721 tokens to the custody on behalf of the user /// @param token Token contract address /// @param tokenId Id of the NFT to transfer /// @param tezosAddress Destination address of the wrap on Tezos blockchain function wrapERC721( address token, uint256 tokenId, string calldata tezosAddress ) external returns (bool success) { _erc721SafeTransferFrom(token, msg.sender, address(this), tokenId); emit ERC721WrapAsked(msg.sender, token, tokenId, tezosAddress); return true; } function _erc721SafeTransferFrom( address token, address from, address to, uint256 tokenId ) private { (bool success, bytes memory data) = token.call( abi.encodeWithSelector( ERC721_SAFE_TRANSFER_SELECTOR, from, to, tokenId ) ); require( success && (data.length == 0 || abi.decode(data, (bool))), "WRAP: ERC721_TRANSFER_FAILED" ); } /// @notice Allow to execute an unwrap transaction signed by multisig members /// @dev tezosOperation is used as a nonce to protect against replay attacks /// @param to Destination address of the transaction /// @param value Ether value /// @param data Data paylaod /// @param tezosOperation Identifier of the tezos operation used to burn corresponding wrapped assets /// @param signatures Packed signature data function execTransaction( address to, uint256 value, bytes calldata data, string calldata tezosOperation, bytes calldata signatures ) external returns (bool success) { require( tezosOperations[tezosOperation] == false, "WRAP: TRANSACTION_ALREADY_PROCESSED" ); tezosOperations[tezosOperation] = true; bytes memory txHashData = encodeTransactionData(to, value, data, tezosOperation); bytes32 txHash = keccak256(txHashData); _checkSignatures(txHash, signatures); success = _execute(to, value, data, gasleft()); if (success) emit ExecutionSuccess(txHash); else emit ExecutionFailure(txHash); } function _execute( address to, uint256 value, bytes memory data, uint256 txGas ) internal returns (bool success) { assembly { success := call( txGas, to, value, add(data, 0x20), mload(data), 0, 0 ) } } /// @dev divides bytes signature into `uint8 v, bytes32 r, bytes32 s` /// @notice Make sure to perform a bounds check for @param pos, to avoid out of bounds access on @param signatures /// @param pos which signature to read. A prior bounds check of this parameter should be performed, to avoid out of bounds access /// @param signatures concatenated rsv signatures /// @return v v /// @return r r /// @return s s function _signatureSplit(bytes memory signatures, uint256 pos) internal pure returns ( uint8 v, bytes32 r, bytes32 s ) { // The signature format is a compact form of: // {bytes32 r}{bytes32 s}{uint8 v} // Compact means, uint8 is not padded to 32 bytes. assembly { let signaturePos := mul(0x41, pos) r := mload(add(signatures, add(signaturePos, 0x20))) s := mload(add(signatures, add(signaturePos, 0x40))) // Here we are loading the last 32 bytes, including 31 bytes // of 's'. There is no 'mload8' to do this. // // 'byte' is not working due to the Solidity parser, so lets // use the second best option, 'and' v := and(mload(add(signatures, add(signaturePos, 0x41))), 0xff) } } /// @dev Checks whether the signature provided is valid for the provided hash. Will revert otherwise. /// @param dataHash Hash of the data /// @param signatures Signature data that should be verified. function _checkSignatures(bytes32 dataHash, bytes memory signatures) internal view { uint256 _threshold = threshold; require(_threshold > 0, "WRAP: THRESHOLD_NOT_DEFINED"); require( signatures.length >= _threshold.mul(65), "WRAP: SIGNATURES_DATA_TOO_SHORT" ); address lastOwner = address(0); address currentOwner; uint8 v; bytes32 r; bytes32 s; uint256 i; for (i = 0; i < _threshold; i++) { (v, r, s) = _signatureSplit(signatures, i); currentOwner = dataHash.toEthSignedMessageHash().recover(v, r, s); require( currentOwner > lastOwner && owners[currentOwner] != address(0) && currentOwner != SENTINEL_OWNERS, "WRAP: INVALID_OWNER_PROVIDED" ); lastOwner = currentOwner; } } /// @notice Returns the bytes that are hashed to be signed by owners /// @param to Destination address /// @param value Ether value /// @param data Data payload /// @param tezosOperation Identifier of the tezos operation used to burn corresponding wrapped assets /// @return Transaction hash bytes function encodeTransactionData( address to, uint256 value, bytes memory data, string memory tezosOperation ) public view returns (bytes memory) { bytes32 wrapTxHash = keccak256( abi.encode( UNWRAP_TX_TYPEHASH, to, value, keccak256(data), tezosOperation ) ); return abi.encodePacked( bytes1(0x19), bytes1(0x01), domainSeparator, wrapTxHash ); } /// @notice Returns hash to be signed by owners /// @param to Destination address /// @param value Ether value /// @param data Data payload /// @param tezosOperation Identifier of the tezos operation used to burn corresponding wrapped assets /// @return Transaction hash function getTransactionHash( address to, uint256 value, bytes memory data, string memory tezosOperation ) public view returns (bytes32) { return keccak256(encodeTransactionData(to, value, data, tezosOperation)); } /// @notice Check if an unwrap were already processed /// @param tezosOperation Identifier to check /// @return true if already processed, false otherwise function isTezosOperationProcessed(string memory tezosOperation) public view returns (bool) { return tezosOperations[tezosOperation]; } /// @notice Allow ERC721 safe transfers function onERC721Received( address, address, uint256, bytes calldata ) external pure override returns (bytes4) { return 0x150b7a02; } }
// 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; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { // Check the signature length if (signature.length != 65) { revert("ECDSA: invalid signature length"); } // Divide the signature in r, s and v variables bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. // solhint-disable-next-line no-inline-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return recover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover-bytes32-bytes-} that receives the `v`, * `r` and `s` signature fields separately. */ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value"); require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value"); // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); require(signer != address(0), "ECDSA: invalid signature"); return signer; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * replicates the behavior of the * https://github.com/ethereum/wiki/wiki/JSON-RPC#eth_sign[`eth_sign`] * JSON-RPC method. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { // 32 is the length in bytes of hash, // enforced by the type signature above return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)); } }
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity >=0.7.0 <0.8.0; /// @title MultisigManager - Manages a set of owners and a threshold to perform actions /// @notice Owners and threshold is managed by the administrator contract MultisigManager { event AddedOwner(address owner); event RemovedOwner(address owner); event ChangedThreshold(uint256 threshold); address internal constant SENTINEL_OWNERS = address(0x1); address administrator; mapping(address => address) internal owners; uint256 ownerCount; uint256 internal threshold; modifier authorized() { require( msg.sender == administrator, "WRAP: METHOD_CAN_ONLY_BE_CALLED_BY_ADMINISTRATOR" ); _; } /// @dev Setup function sets initial storage of contract /// @param _owners List of owners /// @param _threshold Number of required confirmations for a Wrap transaction function _setup(address[] memory _owners, uint256 _threshold) internal { require(threshold == 0, "WRAP: CONTRACT_ALREADY_SETUP"); require( _threshold <= _owners.length, "WRAP: THRESHOLD_CANNOT_EXCEED_OWNER_COUNT" ); require(_threshold >= 1, "WRAP: THRESHOLD_NEEED_TO_BE_GREETER_THAN_0"); address currentOwner = SENTINEL_OWNERS; for (uint256 i = 0; i < _owners.length; i++) { address owner = _owners[i]; require( owner != address(0) && owner != SENTINEL_OWNERS, "WRAP: INVALID_OWNER_PROVIDED" ); require( owners[owner] == address(0), "WRAP: DUPLICATE_OWNER_ADDRESS_PROVIDED" ); owners[currentOwner] = owner; currentOwner = owner; } owners[currentOwner] = SENTINEL_OWNERS; ownerCount = _owners.length; threshold = _threshold; } /// @dev Allows to add a new owner and update the threshold at the same time /// @notice Adds the owner `owner` and updates the threshold to `_threshold` /// @param owner New owner address /// @param _threshold New threshold function addOwnerWithThreshold(address owner, uint256 _threshold) public authorized { require( owner != address(0) && owner != SENTINEL_OWNERS, "WRAP: INVALID_OWNER_ADDRESS_PROVIDED" ); require( owners[owner] == address(0), "WRAP: ADDRESS_IS_ALREADY_AN_OWNER" ); owners[owner] = owners[SENTINEL_OWNERS]; owners[SENTINEL_OWNERS] = owner; ownerCount++; emit AddedOwner(owner); if (threshold != _threshold) changeThreshold(_threshold); } /// @dev Allows to remove an owner and update the threshold at the same time /// @notice Removes the owner `owner` and updates the threshold to `_threshold` /// @param prevOwner Owner that pointed to the owner to be removed in the linked list /// @param owner Owner address to be removed /// @param _threshold New threshold function removeOwner( address prevOwner, address owner, uint256 _threshold ) public authorized { require( ownerCount - 1 >= _threshold, "WRAP: NEW_OWNER_COUNT_NEEDS_TO_BE_LONGER_THAN_THRESHOLD" ); require( owner != address(0) && owner != SENTINEL_OWNERS, "WRAP: INVALID_OWNER_ADDRESS_PROVIDED" ); require( owners[prevOwner] == owner, "WRAP: INVALID_PREV_OWNER_OWNER_PAIR_PROVIDED" ); owners[prevOwner] = owners[owner]; owners[owner] = address(0); ownerCount--; emit RemovedOwner(owner); if (threshold != _threshold) changeThreshold(_threshold); } /// @dev Allows to swap/replace an owner with another address /// @notice Replaces the owner `oldOwner` with `newOwner` /// @param prevOwner Owner that pointed to the owner to be replaced in the linked list /// @param oldOwner Owner address to be replaced /// @param newOwner New owner address function swapOwner( address prevOwner, address oldOwner, address newOwner ) public authorized { require( newOwner != address(0) && newOwner != SENTINEL_OWNERS, "WRAP: INVALID_OWNER_ADDRESS_PROVIDED" ); require( owners[newOwner] == address(0), "WRAP: ADDRESS_IS_ALREADY_AN_OWNER" ); require( oldOwner != address(0) && oldOwner != SENTINEL_OWNERS, "WRAP: INVALID_OWNER_ADDRESS_PROVIDED" ); require( owners[prevOwner] == oldOwner, "WRAP: INVALID_PREV_OWNER_OWNER_PAIR_PROVIDED" ); owners[newOwner] = owners[oldOwner]; owners[prevOwner] = newOwner; owners[oldOwner] = address(0); emit RemovedOwner(oldOwner); emit AddedOwner(newOwner); } /// @dev Allows to update the number of required confirmations /// @notice Changes the threshold to `_threshold` /// @param _threshold New threshold function changeThreshold(uint256 _threshold) public authorized { require( _threshold <= ownerCount, "WRAP: THRESHOLD_CANNOT_EXCEED_OWNER_COUNT" ); require(_threshold >= 1, "WRAP: THRESHOLD_NEEED_TO_BE_GREETER_THAN_0"); threshold = _threshold; emit ChangedThreshold(threshold); } /// @notice Get multisig threshold /// @return Threshold function getThreshold() public view returns (uint256) { return threshold; } /// @notice Allow to check if an address is owner of the multisig /// @return True if owner, false otherwise function isOwner(address owner) public view returns (bool) { return owner != SENTINEL_OWNERS && owners[owner] != address(0); } /// @notice Get multisig members /// @return Owners list function getOwners() public view returns (address[] memory) { address[] memory array = new address[](ownerCount); uint256 index = 0; address currentOwner = owners[SENTINEL_OWNERS]; while (currentOwner != SENTINEL_OWNERS) { array[index] = currentOwner; currentOwner = owners[currentOwner]; index++; } return array; } /// @notice Get current multisig administrator /// @return Administrator address function getAdministrator() public view returns (address) { return administrator; } }
// SPDX-License-Identifier: LGPL-3.0-only pragma solidity >=0.7.0 <0.8.0; interface ERC721TokenReceiver { function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external returns (bytes4); }
{ "optimizer": { "enabled": true, "runs": 1000000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "metadata": { "useLiteralContent": true }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
[{"inputs":[{"internalType":"address","name":"_administrator","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"AddedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"ChangedThreshold","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"tezosDestinationAddress","type":"string"}],"name":"ERC20WrapAsked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"string","name":"tezosDestinationAddress","type":"string"}],"name":"ERC721WrapAsked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"ExecutionFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes32","name":"txHash","type":"bytes32"}],"name":"ExecutionSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"RemovedOwner","type":"event"},{"inputs":[],"name":"NAME","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VERSION","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"addOwnerWithThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"changeThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"domainSeparator","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"string","name":"tezosOperation","type":"string"}],"name":"encodeTransactionData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"string","name":"tezosOperation","type":"string"},{"internalType":"bytes","name":"signatures","type":"bytes"}],"name":"execTransaction","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAdministrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"string","name":"tezosOperation","type":"string"}],"name":"getTransactionHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"tezosOperation","type":"string"}],"name":"isTezosOperationProcessed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"_threshold","type":"uint256"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners","type":"address[]"},{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"prevOwner","type":"address"},{"internalType":"address","name":"oldOwner","type":"address"},{"internalType":"address","name":"newOwner","type":"address"}],"name":"swapOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"string","name":"tezosAddress","type":"string"}],"name":"wrapERC20","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"tezosAddress","type":"string"}],"name":"wrapERC721","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405162002eb738038062002eb78339818101604052602081101561003557600080fd5b50516001600160a01b03811661007d5760405162461bcd60e51b815260040180806020018281038252602481526020018062002e936024913960400191505060405180910390fd5b600080546001600160a01b039092166001600160a01b0319909216919091179055612de580620000ae6000396000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c8063931a2256116100cd578063e75235b811610081578063f698da2511610066578063f698da2514610a3a578063f8dc5dd914610a42578063ffa1ad7414610a8557610151565b8063e75235b8146108d1578063eed53e9f146108eb57610151565b8063a3f4df7e116100b2578063a3f4df7e146106c0578063c8d3e9801461073d578063e318b52b1461088c57610151565b8063931a2256146105d6578063a0e67e2b1461066857610151565b80632f54bf6e1161012457806345426b9b1161010957806345426b9b146104135780634ab8842714610549578063694e80c3146105b957610151565b80632f54bf6e1461033a57806339c691d51461036d57610151565b8063090a3282146101565780630d582f13146101fc578063150b7a02146102375780631696740714610309575b600080fd5b6101e86004803603606081101561016c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156101a957600080fd5b8201836020820111156101bb57600080fd5b803590602001918460018302840111640100000000831117156101dd57600080fd5b509092509050610a8d565b604080519115158252519081900360200190f35b6102356004803603604081101561021257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b68565b005b6102d46004803603608081101561024d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111640100000000831117156102c957600080fd5b509092509050610dbf565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b610311610de9565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e86004803603602081101561035057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e05565b6101e86004803603602081101561038357600080fd5b81019060208101813564010000000081111561039e57600080fd5b8201836020820111156103b057600080fd5b803590602001918460018302840111640100000000831117156103d257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e5a945050505050565b6101e8600480360360a081101561042957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561046657600080fd5b82018360208201111561047857600080fd5b8035906020019184600183028401116401000000008311171561049a57600080fd5b9193909290916020810190356401000000008111156104b857600080fd5b8201836020820111156104ca57600080fd5b803590602001918460018302840111640100000000831117156104ec57600080fd5b91939092909160208101903564010000000081111561050a57600080fd5b82018360208201111561051c57600080fd5b8035906020019184600183028401116401000000008311171561053e57600080fd5b509092509050610f01565b6102356004803603604081101561055f57600080fd5b81019060208101813564010000000081111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111640100000000831117156105ae57600080fd5b91935091503561115e565b610235600480360360208110156105cf57600080fd5b50356112b6565b6101e8600480360360608110156105ec57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561062957600080fd5b82018360208201111561063b57600080fd5b8035906020019184600183028401116401000000008311171561065d57600080fd5b509092509050611416565b61067061155f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106ac578181015183820152602001610694565b505050509050019250505060405180910390f35b6106c8611669565b6040805160208082528351818301528351919283929083019185019080838360005b838110156107025781810151838201526020016106ea565b50505050905090810190601f16801561072f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106c86004803603608081101561075357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561079057600080fd5b8201836020820111156107a257600080fd5b803590602001918460018302840111640100000000831117156107c457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561081757600080fd5b82018360208201111561082957600080fd5b8035906020019184600183028401116401000000008311171561084b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116a2945050505050565b610235600480360360608110156108a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101358216916040909101351661182b565b6108d9611bbb565b60408051918252519081900360200190f35b6108d96004803603608081101561090157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561093e57600080fd5b82018360208201111561095057600080fd5b8035906020019184600183028401116401000000008311171561097257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156109c557600080fd5b8201836020820111156109d757600080fd5b803590602001918460018302840111640100000000831117156109f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611bc1945050505050565b6108d9611be0565b61023560048036036060811015610a5857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611be6565b6106c8611ea0565b6000610a9b85333087611ed9565b7f2e616d24cb14cc7a22d0efef037ff9c8dc13ee53c172ca5fef2185c5f5ad28e03386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a1506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615801590610c14575073ffffffffffffffffffffffffffffffffffffffff8216600114155b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c776021913960400191505060405180910390fd5b600160208181527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805473ffffffffffffffffffffffffffffffffffffffff868116600081815260408082208054949095167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558690528354909116811790925560028054909401909355825190815291517f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269281900390910190a18060035414610dbb57610dbb816112b6565b5050565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600073ffffffffffffffffffffffffffffffffffffffff8216600114801590610e54575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615155b92915050565b60006004826040518082805190602001908083835b60208310610eac57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e6f565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205460ff16949350505050565b60006004858560405180838380828437919091019485525050604051928390036020019092205460ff16159150610f859050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b676023913960400191505060405180910390fd5b60016004868660405180838380828437919091019485525050604080516020948190038501812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001696151596909617909555601f8b018490048402850184019052505087825260009161104d918c918c918c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506116a292505050565b905060008180519060200120905061109b8186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120f292505050565b6110dc8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505a61231e565b9250821561111c576040805182815290517fdc29884a71d2bb98d3c53dc09718be05c7bfd142b7773a5c5cf2517629290ac09181900360200190a1611150565b6040805182815290517fdbe42d02a4e07d7eeff2874efe172540c93b297d206f6d691c9782a257323e329181900360200190a15b505098975050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b60055415611227576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c556022913960400191505060405180910390fd5b604080517f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749602080830191909152308284015282518083038401815260608301808552815191830191909120600555608091860280840183019094528581526112b19390928792879283929190910190849080828437600092019190915250859250612336915050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b600254811115611381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180612d076029913960400191505060405180910390fd5b60018110156113db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612d30602a913960400191505060405180910390fd5b60038190556040805182815290517f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c939181900360200190a150565b600080841161148657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f575241503a20494e56414c49445f414d4f554e54000000000000000000000000604482015290519081900360640190fd5b61149285333087612675565b7f4f4dff159c274e50aaa8650afd371620db5c679e96bde2a4133cf626384ba0463386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a1506001949350505050565b6060600060025467ffffffffffffffff8111801561157c57600080fd5b506040519080825280602002602001820160405280156115a6578160200160208202803683370190505b50600160008181526020919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f549192509073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8116600114611661578083838151811061161c57fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152918116600090815260019283905260409020549290910191166115f1565b509091505090565b6040518060400160405280600d81526020017f57726170206d756c74697369670000000000000000000000000000000000000081525081565b606060007f987804e036e2c4c5e32f45ccae87d65fb92de3f7d16998a7fa3910a01da2ab5360001b8686868051906020012086604051602001808681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561174357818101518382015260200161172b565b50505050905090810190601f1680156117705780820380516001836020036101000a031916815260200191505b50604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206005547f1900000000000000000000000000000000000000000000000000000000000000928501929092527f01000000000000000000000000000000000000000000000000000000000000006021850152602284019190915260428084019190915281518084039091018152606290920190529d9c50505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461189b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116158015906118d7575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604090205416156119aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c776021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216158015906119e6575073ffffffffffffffffffffffffffffffffffffffff8216600114155b611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600090815260016020526040902054811690831614611abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612cdb602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600160209081526040808320805487871680865283862080549289167fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179055968a16855282852080548216909717909655928490528254909416909155825191825291517ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf929181900390910190a16040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269181900360200190a1505050565b60035490565b6000611bcf858585856116a2565b805190602001209050949350505050565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff163314611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b806001600254031015611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180612bfc6037913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615801590611cf0575073ffffffffffffffffffffffffffffffffffffffff8216600114155b611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600090815260016020526040902054811690831614611dc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612cdb602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600160209081526040808320805489871685528285208054919097167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909655928490528254909416909155600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055825191825291517ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf929181900390910190a180600354146112b1576112b1816112b6565b6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6000808573ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060298152602001612bd36029913980516020918201206040805173ffffffffffffffffffffffffffffffffffffffff808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092178252518251909182918083835b60208310611fea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611fad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461204c576040519150601f19603f3d011682016040523d82523d6000602084013e612051565b606091505b509150915081801561207f57508051158061207f575080806020019051602081101561207c57600080fd5b50515b6120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a204552433732315f5452414e534645525f4641494c454400000000604482015290519081900360640190fd5b505050505050565b6003548061216157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f575241503a205448524553484f4c445f4e4f545f444546494e45440000000000604482015290519081900360640190fd5b61216c816041612886565b825110156121db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f575241503a205349474e4154555245535f444154415f544f4f5f53484f525400604482015290519081900360640190fd5b6000808060008060005b86811015612313576121f78882612900565b9195509350915061221584848461220d8d61291e565b92919061296f565b94508573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16118015612278575073ffffffffffffffffffffffffffffffffffffffff8581166000908152600160205260409020541615155b801561229b575073ffffffffffffffffffffffffffffffffffffffff8516600114155b61230657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a20494e56414c49445f4f574e45525f50524f564944454400000000604482015290519081900360640190fd5b93945084936001016121e5565b505050505050505050565b6000806000845160208601878987f195945050505050565b600354156123a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a20434f4e54524143545f414c52454144595f534554555000000000604482015290519081900360640190fd5b81518111156123ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180612d076029913960400191505060405180910390fd5b6001811015612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612d30602a913960400191505060405180910390fd5b600160005b835181101561261a57600084828151811061247557fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156124d3575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61253e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a20494e56414c49445f4f574e45525f50524f564944454400000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604090205416156125bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d8a6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff928316600090815260016020819052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001694831694909417909355910161245e565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790559051600255600355565b6000808573ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060258152602001612b8a6025913980516020918201206040805173ffffffffffffffffffffffffffffffffffffffff808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092178252518251909182918083835b6020831061278657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612749565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146127e8576040519150601f19603f3d011682016040523d82523d6000602084013e6127ed565b606091505b509150915081801561281b57508051158061281b575080806020019051602081101561281857600080fd5b50515b6120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f575241503a2045524332305f5452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b60008261289557506000610e54565b828202828482816128a257fe5b04146128f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612cba6021913960400191505060405180910390fd5b9392505050565b60419081029190910160208101516040820151919092015160ff1692565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156129ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c336022913960400191505060405180910390fd5b8360ff16601b14806129ff57508360ff16601c145b612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c986022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ab0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe575241503a205452414e53414354494f4e5f414c52454144595f50524f4345535345447472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629575241503a20494e56414c49445f4f574e45525f414444524553535f50524f5649444544736166655472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629575241503a204e45575f4f574e45525f434f554e545f4e454544535f544f5f42455f4c4f4e4745525f5448414e5f5448524553484f4c4445434453413a20696e76616c6964207369676e6174757265202773272076616c7565575241503a20444f4d41494e5f534550415241544f525f414c52454144595f534554575241503a20414444524553535f49535f414c52454144595f414e5f4f574e455245434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77575241503a20494e56414c49445f505245565f4f574e45525f4f574e45525f504149525f50524f5649444544575241503a205448524553484f4c445f43414e4e4f545f4558434545445f4f574e45525f434f554e54575241503a205448524553484f4c445f4e454545445f544f5f42455f475245455445525f5448414e5f30575241503a204d4554484f445f43414e5f4f4e4c595f42455f43414c4c45445f42595f41444d494e4953545241544f52575241503a204455504c49434154455f4f574e45525f414444524553535f50524f5649444544a264697066735822122070f702fc78d19ccd35e78eca00de9cbc7d60f5ef86f32619d098ec80dc7b77e764736f6c63430007060033575241503a20494e56414c49445f41444d494e4953545241544f525f50524f56494445440000000000000000000000005b64d8b8459b37e3d1e8ae59d4a6d4fd6d207698Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101515760003560e01c8063931a2256116100cd578063e75235b811610081578063f698da2511610066578063f698da2514610a3a578063f8dc5dd914610a42578063ffa1ad7414610a8557610151565b8063e75235b8146108d1578063eed53e9f146108eb57610151565b8063a3f4df7e116100b2578063a3f4df7e146106c0578063c8d3e9801461073d578063e318b52b1461088c57610151565b8063931a2256146105d6578063a0e67e2b1461066857610151565b80632f54bf6e1161012457806345426b9b1161010957806345426b9b146104135780634ab8842714610549578063694e80c3146105b957610151565b80632f54bf6e1461033a57806339c691d51461036d57610151565b8063090a3282146101565780630d582f13146101fc578063150b7a02146102375780631696740714610309575b600080fd5b6101e86004803603606081101561016c57600080fd5b73ffffffffffffffffffffffffffffffffffffffff823516916020810135918101906060810160408201356401000000008111156101a957600080fd5b8201836020820111156101bb57600080fd5b803590602001918460018302840111640100000000831117156101dd57600080fd5b509092509050610a8d565b604080519115158252519081900360200190f35b6102356004803603604081101561021257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610b68565b005b6102d46004803603608081101561024d57600080fd5b73ffffffffffffffffffffffffffffffffffffffff82358116926020810135909116916040820135919081019060808101606082013564010000000081111561029557600080fd5b8201836020820111156102a757600080fd5b803590602001918460018302840111640100000000831117156102c957600080fd5b509092509050610dbf565b604080517fffffffff000000000000000000000000000000000000000000000000000000009092168252519081900360200190f35b610311610de9565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6101e86004803603602081101561035057600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e05565b6101e86004803603602081101561038357600080fd5b81019060208101813564010000000081111561039e57600080fd5b8201836020820111156103b057600080fd5b803590602001918460018302840111640100000000831117156103d257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610e5a945050505050565b6101e8600480360360a081101561042957600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561046657600080fd5b82018360208201111561047857600080fd5b8035906020019184600183028401116401000000008311171561049a57600080fd5b9193909290916020810190356401000000008111156104b857600080fd5b8201836020820111156104ca57600080fd5b803590602001918460018302840111640100000000831117156104ec57600080fd5b91939092909160208101903564010000000081111561050a57600080fd5b82018360208201111561051c57600080fd5b8035906020019184600183028401116401000000008311171561053e57600080fd5b509092509050610f01565b6102356004803603604081101561055f57600080fd5b81019060208101813564010000000081111561057a57600080fd5b82018360208201111561058c57600080fd5b803590602001918460208302840111640100000000831117156105ae57600080fd5b91935091503561115e565b610235600480360360208110156105cf57600080fd5b50356112b6565b6101e8600480360360608110156105ec57600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561062957600080fd5b82018360208201111561063b57600080fd5b8035906020019184600183028401116401000000008311171561065d57600080fd5b509092509050611416565b61067061155f565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156106ac578181015183820152602001610694565b505050509050019250505060405180910390f35b6106c8611669565b6040805160208082528351818301528351919283929083019185019080838360005b838110156107025781810151838201526020016106ea565b50505050905090810190601f16801561072f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6106c86004803603608081101561075357600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561079057600080fd5b8201836020820111156107a257600080fd5b803590602001918460018302840111640100000000831117156107c457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929594936020810193503591505064010000000081111561081757600080fd5b82018360208201111561082957600080fd5b8035906020019184600183028401116401000000008311171561084b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506116a2945050505050565b610235600480360360608110156108a257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101358216916040909101351661182b565b6108d9611bbb565b60408051918252519081900360200190f35b6108d96004803603608081101561090157600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359181019060608101604082013564010000000081111561093e57600080fd5b82018360208201111561095057600080fd5b8035906020019184600183028401116401000000008311171561097257600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092959493602081019350359150506401000000008111156109c557600080fd5b8201836020820111156109d757600080fd5b803590602001918460018302840111640100000000831117156109f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611bc1945050505050565b6108d9611be0565b61023560048036036060811015610a5857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135611be6565b6106c8611ea0565b6000610a9b85333087611ed9565b7f2e616d24cb14cc7a22d0efef037ff9c8dc13ee53c172ca5fef2185c5f5ad28e03386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a1506001949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615801590610c14575073ffffffffffffffffffffffffffffffffffffffff8216600114155b610c69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c776021913960400191505060405180910390fd5b600160208181527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f805473ffffffffffffffffffffffffffffffffffffffff868116600081815260408082208054949095167fffffffffffffffffffffffff0000000000000000000000000000000000000000948516179094558690528354909116811790925560028054909401909355825190815291517f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269281900390910190a18060035414610dbb57610dbb816112b6565b5050565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1690565b600073ffffffffffffffffffffffffffffffffffffffff8216600114801590610e54575073ffffffffffffffffffffffffffffffffffffffff8281166000908152600160205260409020541615155b92915050565b60006004826040518082805190602001908083835b60208310610eac57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101610e6f565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018019909216911617905292019485525060405193849003019092205460ff16949350505050565b60006004858560405180838380828437919091019485525050604051928390036020019092205460ff16159150610f859050576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180612b676023913960400191505060405180910390fd5b60016004868660405180838380828437919091019485525050604080516020948190038501812080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001696151596909617909555601f8b018490048402850184019052505087825260009161104d918c918c918c908c908190840183828082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152506116a292505050565b905060008180519060200120905061109b8186868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506120f292505050565b6110dc8b8b8b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050505a61231e565b9250821561111c576040805182815290517fdc29884a71d2bb98d3c53dc09718be05c7bfd142b7773a5c5cf2517629290ac09181900360200190a1611150565b6040805182815290517fdbe42d02a4e07d7eeff2874efe172540c93b297d206f6d691c9782a257323e329181900360200190a15b505098975050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b60055415611227576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c556022913960400191505060405180910390fd5b604080517f035aff83d86937d35b32e04f0ddc6ff469290eef2f1b692d8a815c89404d4749602080830191909152308284015282518083038401815260608301808552815191830191909120600555608091860280840183019094528581526112b19390928792879283929190910190849080828437600092019190915250859250612336915050565b505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611326576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b600254811115611381576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180612d076029913960400191505060405180910390fd5b60018110156113db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612d30602a913960400191505060405180910390fd5b60038190556040805182815290517f610f7ff2b304ae8903c3de74c60c6ab1f7d6226b3f52c5161905bb5ad4039c939181900360200190a150565b600080841161148657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f575241503a20494e56414c49445f414d4f554e54000000000000000000000000604482015290519081900360640190fd5b61149285333087612675565b7f4f4dff159c274e50aaa8650afd371620db5c679e96bde2a4133cf626384ba0463386868686604051808673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001848152602001806020018281038252848482818152602001925080828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039850909650505050505050a1506001949350505050565b6060600060025467ffffffffffffffff8111801561157c57600080fd5b506040519080825280602002602001820160405280156115a6578160200160208202803683370190505b50600160008181526020919091527fcc69885fda6bcc1a4ace058b4a62bf5e179ea78fd58a1ccd71c22cc9b688792f549192509073ffffffffffffffffffffffffffffffffffffffff165b73ffffffffffffffffffffffffffffffffffffffff8116600114611661578083838151811061161c57fe5b73ffffffffffffffffffffffffffffffffffffffff928316602091820292909201810191909152918116600090815260019283905260409020549290910191166115f1565b509091505090565b6040518060400160405280600d81526020017f57726170206d756c74697369670000000000000000000000000000000000000081525081565b606060007f987804e036e2c4c5e32f45ccae87d65fb92de3f7d16998a7fa3910a01da2ab5360001b8686868051906020012086604051602001808681526020018573ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561174357818101518382015260200161172b565b50505050905090810190601f1680156117705780820380516001836020036101000a031916815260200191505b50604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201206005547f1900000000000000000000000000000000000000000000000000000000000000928501929092527f01000000000000000000000000000000000000000000000000000000000000006021850152602284019190915260428084019190915281518084039091018152606290920190529d9c50505050505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461189b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116158015906118d7575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61192c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604090205416156119aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612c776021913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216158015906119e6575073ffffffffffffffffffffffffffffffffffffffff8216600114155b611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600090815260016020526040902054811690831614611abd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612cdb602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600160209081526040808320805487871680865283862080549289167fffffffffffffffffffffffff0000000000000000000000000000000000000000938416179055968a16855282852080548216909717909655928490528254909416909155825191825291517ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf929181900390910190a16040805173ffffffffffffffffffffffffffffffffffffffff8316815290517f9465fa0c962cc76958e6373a993326400c1c94f8be2fe3a952adfa7f60b2ea269181900360200190a1505050565b60035490565b6000611bcf858585856116a2565b805190602001209050949350505050565b60055481565b60005473ffffffffffffffffffffffffffffffffffffffff163314611c56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526030815260200180612d5a6030913960400191505060405180910390fd5b806001600254031015611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180612bfc6037913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615801590611cf0575073ffffffffffffffffffffffffffffffffffffffff8216600114155b611d45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180612baf6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff838116600090815260016020526040902054811690831614611dc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180612cdb602c913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281166000818152600160209081526040808320805489871685528285208054919097167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909655928490528254909416909155600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019055825191825291517ff8d49fc529812e9a7c5c50e69c20f0dccc0db8fa95c98bc58cc9a4f1c1299eaf929181900390910190a180600354146112b1576112b1816112b6565b6040518060400160405280600581526020017f312e302e3000000000000000000000000000000000000000000000000000000081525081565b6000808573ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060298152602001612bd36029913980516020918201206040805173ffffffffffffffffffffffffffffffffffffffff808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092178252518251909182918083835b60208310611fea57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611fad565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461204c576040519150601f19603f3d011682016040523d82523d6000602084013e612051565b606091505b509150915081801561207f57508051158061207f575080806020019051602081101561207c57600080fd5b50515b6120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a204552433732315f5452414e534645525f4641494c454400000000604482015290519081900360640190fd5b505050505050565b6003548061216157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f575241503a205448524553484f4c445f4e4f545f444546494e45440000000000604482015290519081900360640190fd5b61216c816041612886565b825110156121db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f575241503a205349474e4154555245535f444154415f544f4f5f53484f525400604482015290519081900360640190fd5b6000808060008060005b86811015612313576121f78882612900565b9195509350915061221584848461220d8d61291e565b92919061296f565b94508573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16118015612278575073ffffffffffffffffffffffffffffffffffffffff8581166000908152600160205260409020541615155b801561229b575073ffffffffffffffffffffffffffffffffffffffff8516600114155b61230657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a20494e56414c49445f4f574e45525f50524f564944454400000000604482015290519081900360640190fd5b93945084936001016121e5565b505050505050505050565b6000806000845160208601878987f195945050505050565b600354156123a557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a20434f4e54524143545f414c52454144595f534554555000000000604482015290519081900360640190fd5b81518111156123ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526029815260200180612d076029913960400191505060405180910390fd5b6001811015612459576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612d30602a913960400191505060405180910390fd5b600160005b835181101561261a57600084828151811061247557fe5b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156124d3575073ffffffffffffffffffffffffffffffffffffffff8116600114155b61253e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f575241503a20494e56414c49445f4f574e45525f50524f564944454400000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81811660009081526001602052604090205416156125bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612d8a6026913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff928316600090815260016020819052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001694831694909417909355910161245e565b5073ffffffffffffffffffffffffffffffffffffffff16600090815260016020819052604090912080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790559051600255600355565b6000808573ffffffffffffffffffffffffffffffffffffffff16604051806060016040528060258152602001612b8a6025913980516020918201206040805173ffffffffffffffffffffffffffffffffffffffff808b166024830152891660448201526064808201899052825180830390910181526084909101825292830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092178252518251909182918083835b6020831061278657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612749565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146127e8576040519150601f19603f3d011682016040523d82523d6000602084013e6127ed565b606091505b509150915081801561281b57508051158061281b575080806020019051602081101561281857600080fd5b50515b6120ea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f575241503a2045524332305f5452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b60008261289557506000610e54565b828202828482816128a257fe5b04146128f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612cba6021913960400191505060405180910390fd5b9392505050565b60419081029190910160208101516040820151919092015160ff1692565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08211156129ea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c336022913960400191505060405180910390fd5b8360ff16601b14806129ff57508360ff16601c145b612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612c986022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ab0573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b5d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b9594505050505056fe575241503a205452414e53414354494f4e5f414c52454144595f50524f4345535345447472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629575241503a20494e56414c49445f4f574e45525f414444524553535f50524f5649444544736166655472616e7366657246726f6d28616464726573732c616464726573732c75696e7432353629575241503a204e45575f4f574e45525f434f554e545f4e454544535f544f5f42455f4c4f4e4745525f5448414e5f5448524553484f4c4445434453413a20696e76616c6964207369676e6174757265202773272076616c7565575241503a20444f4d41494e5f534550415241544f525f414c52454144595f534554575241503a20414444524553535f49535f414c52454144595f414e5f4f574e455245434453413a20696e76616c6964207369676e6174757265202776272076616c7565536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77575241503a20494e56414c49445f505245565f4f574e45525f4f574e45525f504149525f50524f5649444544575241503a205448524553484f4c445f43414e4e4f545f4558434545445f4f574e45525f434f554e54575241503a205448524553484f4c445f4e454545445f544f5f42455f475245455445525f5448414e5f30575241503a204d4554484f445f43414e5f4f4e4c595f42455f43414c4c45445f42595f41444d494e4953545241544f52575241503a204455504c49434154455f4f574e45525f414444524553535f50524f5649444544a264697066735822122070f702fc78d19ccd35e78eca00de9cbc7d60f5ef86f32619d098ec80dc7b77e764736f6c63430007060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005b64d8b8459b37e3d1e8ae59d4a6d4fd6d207698
-----Decoded View---------------
Arg [0] : _administrator (address): 0x5b64d8B8459b37e3d1E8AE59D4a6D4fd6d207698
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005b64d8b8459b37e3d1e8ae59d4a6d4fd6d207698Loading...LoadingLoading...Loading
Loading...Loading
Loading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingLoading...LoadingMultichain Portfolio | 27 Chains
Chain Token Portfolio % Price Amount Value ETH 43.97% $63,467 6.4581 $409,876.38 ETH 21.43% $2,610.47 76.5273 $199,772.25 ETH 8.83% $1 82,334.568 $82,334.57 ETH 6.39% $12.02 4,955.5994 $59,566.3 ETH 5.45% $0.169348 300,010 $50,806.09 ETH 4.29% $1 39,968.4529 $39,968.45 ETH 3.25% $0.978431 31,000.1206 $30,331.48 ETH 2.13% $1 19,897.0409 $19,897.04 ETH 1.22% $0.406961 27,887.1541 $11,348.99 ETH 0.77% $0.084571 85,262.6617 $7,210.75 ETH 0.74% $7.44 925.0565 $6,882.42 ETH 0.57% $155.7 34.2812 $5,337.58 ETH 0.26% $1 2,458.9007 $2,458.9 ETH 0.19% $41.22 42.1663 $1,738.1 ETH 0.14% $5.92 228.1918 $1,350.9 ETH 0.14% $1,603.86 0.8412 $1,349.22 ETH 0.07% $1.12 562.7767 $630.31 ETH 0.04% $47.44 7.7983 $369.95 ETH 0.04% $2,633.48 0.1333 $351.1 ETH 0.03% $0.8394 281.1823 $236.02 ETH 0.01% $0.330948 402.0041 $133.04 ETH 0.01% $0.027134 3,483.9737 $94.53 ETH <0.01% $2.09 30.0097 $62.72 ETH <0.01% $0.555564 59.6995 $33.17 ETH <0.01% $0.278275 1 $0.2782 Loading...Loading[ 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.
Address QR Code
My Address - Private Name Tag or Note
My Name Tag:
Private Name Tags (up to 35 characters) can be used for easy identification of addressesPrivate Note:
A private note (up to 500 characters) can be attached to this address.
Please DO NOT store any passwords or private keys here.Compiler specific version warnings:
The compiled contract might be susceptible to FullInlinerNonExpressionSplitArgumentEvaluationOrder (low-severity), MissingSideEffectsOnSelectorAccess (low-severity), AbiReencodingHeadOverflowWithStaticArrayCleanup (medium-severity), DirtyBytesArrayToStorage (low-severity), DataLocationChangeInInternalOverride (very low-severity), NestedCalldataArrayAbiReencodingSizeValidation (very low-severity), SignedImmutables (very low-severity), ABIDecodeTwoDimensionalArrayMemory (very low-severity), KeccakCaching (medium-severity) Solidity Compiler Bugs.
Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Connect a Wallet
Connecting wallet for read function is optional, useful if you want to call certain functions or simply use your wallet's node.Address Cards
To use this feature, please login to your Etherscan account and return to this page.Before You Copy
This website uses cookies to improve your experience. By continuing to use this website, you agree to its Terms and Privacy Policy.