Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 1,184 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Execute | 21313417 | 25 days ago | IN | 0 ETH | 0.00077376 | ||||
Execute | 21303649 | 27 days ago | IN | 0 ETH | 0.00179631 | ||||
Execute | 20525149 | 135 days ago | IN | 0 ETH | 0.00025978 | ||||
Execute | 20495263 | 140 days ago | IN | 0 ETH | 0.00020395 | ||||
Execute | 20491644 | 140 days ago | IN | 0 ETH | 0.00068339 | ||||
Execute | 20490181 | 140 days ago | IN | 0 ETH | 0.00045934 | ||||
Execute | 20490145 | 140 days ago | IN | 0 ETH | 0.00043151 | ||||
Execute | 20490022 | 140 days ago | IN | 0 ETH | 0.00050878 | ||||
Execute | 20489251 | 140 days ago | IN | 0 ETH | 0.00022774 | ||||
Execute | 20489227 | 140 days ago | IN | 0 ETH | 0.00021111 | ||||
Execute | 20489190 | 140 days ago | IN | 0 ETH | 0.00026232 | ||||
Execute | 20314945 | 165 days ago | IN | 0 ETH | 0.00076104 | ||||
Execute | 19823892 | 233 days ago | IN | 0 ETH | 0.00048438 | ||||
Execute | 19823775 | 233 days ago | IN | 0 ETH | 0.00044384 | ||||
Execute | 19823720 | 233 days ago | IN | 0 ETH | 0.00048335 | ||||
Execute | 19823689 | 233 days ago | IN | 0 ETH | 0.00050762 | ||||
Execute | 19823533 | 233 days ago | IN | 0 ETH | 0.00050889 | ||||
Execute | 19823494 | 233 days ago | IN | 0 ETH | 0.00045953 | ||||
Execute | 19823455 | 233 days ago | IN | 0 ETH | 0.00048095 | ||||
Execute | 19820301 | 234 days ago | IN | 0 ETH | 0.00073802 | ||||
Execute | 19793301 | 238 days ago | IN | 0 ETH | 0.00062052 | ||||
Execute | 19687306 | 253 days ago | IN | 0 ETH | 0.00079719 | ||||
Execute | 19687250 | 253 days ago | IN | 0 ETH | 0.00080644 | ||||
Execute | 19687199 | 253 days ago | IN | 0 ETH | 0.00083093 | ||||
Execute | 19687057 | 253 days ago | IN | 0 ETH | 0.00080753 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Forwarder
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 700 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/cryptography/ECDSA.sol"; import "@openzeppelin/contracts/utils/cryptography/draft-EIP712.sol"; /* * @dev Minimal forwarder for GSNv2 */ contract Forwarder is EIP712 { using ECDSA for bytes32; struct ForwardRequest { address from; address to; uint256 value; uint256 gas; uint256 nonce; bytes data; } bytes32 private constant TYPEHASH = keccak256("ForwardRequest(address from,address to,uint256 value,uint256 gas,uint256 nonce,bytes data)"); mapping(address => uint256) private _nonces; constructor() EIP712("GSNv2 Forwarder", "0.0.1") {} function getNonce(address from) public view returns (uint256) { return _nonces[from]; } function verify(ForwardRequest calldata req, bytes calldata signature) public view returns (bool) { address signer = _hashTypedDataV4( keccak256(abi.encode(TYPEHASH, req.from, req.to, req.value, req.gas, req.nonce, keccak256(req.data))) ).recover(signature); return _nonces[req.from] == req.nonce && signer == req.from; } function execute(ForwardRequest calldata req, bytes calldata signature) public payable returns (bool, bytes memory) { require(verify(req, signature), "MinimalForwarder: signature does not match request"); _nonces[req.from] = req.nonce + 1; // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory result) = req.to.call{ gas: req.gas, value: req.value }( abi.encodePacked(req.data, req.from) ); if (!success) { // Next 5 lines from https://ethereum.stackexchange.com/a/83577 if (result.length < 68) revert("Transaction reverted silently"); assembly { result := add(result, 0x04) } revert(abi.decode(result, (string))); } // Check gas: https://ronan.eth.link/blog/ethereum-gas-dangers/ assert(gasleft() > req.gas / 63); return (success, result); } }
// SPDX-License-Identifier: MIT pragma solidity ^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 { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } else if (error == RecoverError.InvalidSignatureV) { revert("ECDSA: invalid signature 'v' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. 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. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { // Check the signature length // - case 65: r,s,v signature (standard) // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._ if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else if (signature.length == 64) { bytes32 r; bytes32 vs; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. assembly { r := mload(add(signature, 0x20)) vs := mload(add(signature, 0x40)) } return tryRecover(hash, r, vs); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @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) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address, RecoverError) { bytes32 s; uint8 v; assembly { s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) v := add(shr(255, vs), 27) } return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover( bytes32 hash, bytes32 r, bytes32 vs ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address, RecoverError) { // 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 (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): 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. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } if (v != 27 && v != 28) { return (address(0), RecoverError.InvalidSignatureV); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover( bytes32 hash, uint8 v, bytes32 r, bytes32 s ) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * 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)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./ECDSA.sol"; /** * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data. * * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible, * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding * they need in their contracts using a combination of `abi.encode` and `keccak256`. * * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA * ({_hashTypedDataV4}). * * The implementation of the domain separator was designed to be as efficient as possible while still properly updating * the chain id to protect against replay attacks on an eventual fork of the chain. * * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask]. * * _Available since v3.4._ */ abstract contract EIP712 { /* solhint-disable var-name-mixedcase */ // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to // invalidate the cached domain separator if the chain id changes. bytes32 private immutable _CACHED_DOMAIN_SEPARATOR; uint256 private immutable _CACHED_CHAIN_ID; bytes32 private immutable _HASHED_NAME; bytes32 private immutable _HASHED_VERSION; bytes32 private immutable _TYPE_HASH; /* solhint-enable var-name-mixedcase */ /** * @dev Initializes the domain separator and parameter caches. * * The meaning of `name` and `version` is specified in * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]: * * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol. * - `version`: the current major version of the signing domain. * * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart * contract upgrade]. */ constructor(string memory name, string memory version) { bytes32 hashedName = keccak256(bytes(name)); bytes32 hashedVersion = keccak256(bytes(version)); bytes32 typeHash = keccak256( "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)" ); _HASHED_NAME = hashedName; _HASHED_VERSION = hashedVersion; _CACHED_CHAIN_ID = block.chainid; _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion); _TYPE_HASH = typeHash; } /** * @dev Returns the domain separator for the current chain. */ function _domainSeparatorV4() internal view returns (bytes32) { if (block.chainid == _CACHED_CHAIN_ID) { return _CACHED_DOMAIN_SEPARATOR; } else { return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION); } } function _buildDomainSeparator( bytes32 typeHash, bytes32 nameHash, bytes32 versionHash ) private view returns (bytes32) { return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, address(this))); } /** * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this * function returns the hash of the fully encoded EIP712 message for this domain. * * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example: * * ```solidity * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode( * keccak256("Mail(address to,string contents)"), * mailTo, * keccak256(bytes(mailContents)) * ))); * address signer = ECDSA.recover(digest, signature); * ``` */ function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) { return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash); } }
{ "metadata": { "bytecodeHash": "none" }, "optimizer": { "enabled": true, "runs": 700 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Forwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"execute","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"getNonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct Forwarder.ForwardRequest","name":"req","type":"tuple"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"verify","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
61012060405234801561001157600080fd5b50604080518082018252600f81526e23a9a73b19102337b93bb0b93232b960891b602080830191825283518085019094526005845264302e302e3160d81b908401528151902060c08190527fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc19916381188560e08190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6100b58184846100c6565b608052610100525061012c92505050565b600083838346306040516020016100e1959493929190610100565b6040516020818303038152906040528051906020012090509392505050565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b60805160a05160c05160e05161010051610d53610170600039600061047b015260006104bd0152600061049c01526000610429015260006104520152610d536000f3fe6080604052600436106100345760003560e01c80632d0335ab1461003957806347153f821461006f578063bf5d3bdb14610090575b600080fd5b34801561004557600080fd5b5061005961005436600461081c565b6100bd565b6040516100669190610c6e565b60405180910390f35b61008261007d3660046108ed565b6100d8565b604051610066929190610a2c565b34801561009c57600080fd5b506100b06100ab3660046108ed565b610297565b6040516100669190610a21565b6001600160a01b031660009081526020819052604090205490565b600060606100e7858585610297565b61010c5760405162461bcd60e51b815260040161010390610b1f565b60405180910390fd5b61011b60808601356001610cbc565b60008061012b602089018961081c565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080866020016020810190610165919061081c565b6001600160a01b03166060880135604089013561018560a08b018b610c77565b61019260208d018d61081c565b6040516020016101a4939291906109c1565b60408051601f19818403018152908290526101be916109ea565b600060405180830381858888f193505050503d80600081146101fc576040519150601f19603f3d011682016040523d82523d6000602084013e610201565b606091505b5091509150816102605760448151101561022d5760405162461bcd60e51b815260040161010390610c37565b60048101905080806020019051810190610247919061084a565b60405162461bcd60e51b81526004016101039190610ad5565b61026f603f6060890135610ce0565b5a1161028b57634e487b7160e01b600052600160045260246000fd5b90969095509350505050565b60008061037d84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061037792507fdd8f4b70b0f4393e889bd39128a30628a78b61816a9eb8199759e7a349657e489150610307905060208a018a61081c565b61031760408b0160208c0161081c565b60408b013560608c013560808d013561033360a08f018f610c77565b6040516103419291906109b1565b60405190819003812061035c97969594939291602001610a4f565b604051602081830303815290604052805190602001206103e8565b90610401565b90506080850135600080610394602089018961081c565b6001600160a01b03166001600160a01b03168152602001908152602001600020541480156103df57506103ca602086018661081c565b6001600160a01b0316816001600160a01b0316145b95945050505050565b60006103fb6103f5610425565b836104e7565b92915050565b6000806000610410858561051a565b9150915061041d8161058a565b509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000046141561047657507f00000000000000000000000000000000000000000000000000000000000000006104e4565b6104e17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006106ba565b90505b90565b600082826040516020016104fc929190610a06565b60405160208183030381529060405280519060200120905092915050565b6000808251604114156105515760208301516040840151606085015160001a610545878285856106f4565b94509450505050610583565b82516040141561057b57602083015160408401516105708683836107d4565b935093505050610583565b506000905060025b9250929050565b60008160048111156105ac57634e487b7160e01b600052602160045260246000fd5b14156105b7576106b7565b60018160048111156105d957634e487b7160e01b600052602160045260246000fd5b14156105f75760405162461bcd60e51b815260040161010390610ae8565b600281600481111561061957634e487b7160e01b600052602160045260246000fd5b14156106375760405162461bcd60e51b815260040161010390610b7c565b600381600481111561065957634e487b7160e01b600052602160045260246000fd5b14156106775760405162461bcd60e51b815260040161010390610bb3565b600481600481111561069957634e487b7160e01b600052602160045260246000fd5b14156106b75760405162461bcd60e51b815260040161010390610bf5565b50565b600083838346306040516020016106d5959493929190610a8b565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561072b57506000905060036107cb565b8460ff16601b1415801561074357508460ff16601c14155b1561075457506000905060046107cb565b6000600187878787604051600081526020016040526040516107799493929190610ab7565b6020604051602081039080840390855afa15801561079b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107c4576000600192509250506107cb565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b0161080e878288856106f4565b935093505050935093915050565b60006020828403121561082d578081fd5b81356001600160a01b0381168114610843578182fd5b9392505050565b60006020828403121561085b578081fd5b815167ffffffffffffffff80821115610872578283fd5b818401915084601f830112610885578283fd5b81518181111561089757610897610d30565b604051601f8201601f1916810160200183811182821017156108bb576108bb610d30565b6040528181528382016020018710156108d2578485fd5b6108e3826020830160208701610d00565b9695505050505050565b600080600060408486031215610901578182fd5b833567ffffffffffffffff80821115610918578384fd5b9085019060c0828803121561092b578384fd5b90935060208501359080821115610940578384fd5b818601915086601f830112610953578384fd5b813581811115610961578485fd5b876020828501011115610972578485fd5b6020830194508093505050509250925092565b6000815180845261099d816020860160208601610d00565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6000838583375060609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516109fc818460208701610d00565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b901515815260200190565b6000831515825260406020830152610a476040830184610985565b949350505050565b9687526001600160a01b0395861660208801529390941660408601526060850191909152608084015260a083019190915260c082015260e00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526108436020830184610985565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526032908201527f4d696e696d616c466f727761726465723a207369676e617475726520646f657360408201527f206e6f74206d6174636820726571756573740000000000000000000000000000606082015260800190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601d908201527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000604082015260600190565b90815260200190565b6000808335601e19843603018112610c8d578283fd5b83018035915067ffffffffffffffff821115610ca7578283fd5b60200191503681900382131561058357600080fd5b60008219821115610cdb57634e487b7160e01b81526011600452602481fd5b500190565b600082610cfb57634e487b7160e01b81526012600452602481fd5b500490565b60005b83811015610d1b578181015183820152602001610d03565b83811115610d2a576000848401525b50505050565b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000800000a
Deployed Bytecode
0x6080604052600436106100345760003560e01c80632d0335ab1461003957806347153f821461006f578063bf5d3bdb14610090575b600080fd5b34801561004557600080fd5b5061005961005436600461081c565b6100bd565b6040516100669190610c6e565b60405180910390f35b61008261007d3660046108ed565b6100d8565b604051610066929190610a2c565b34801561009c57600080fd5b506100b06100ab3660046108ed565b610297565b6040516100669190610a21565b6001600160a01b031660009081526020819052604090205490565b600060606100e7858585610297565b61010c5760405162461bcd60e51b815260040161010390610b1f565b60405180910390fd5b61011b60808601356001610cbc565b60008061012b602089018961081c565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600080866020016020810190610165919061081c565b6001600160a01b03166060880135604089013561018560a08b018b610c77565b61019260208d018d61081c565b6040516020016101a4939291906109c1565b60408051601f19818403018152908290526101be916109ea565b600060405180830381858888f193505050503d80600081146101fc576040519150601f19603f3d011682016040523d82523d6000602084013e610201565b606091505b5091509150816102605760448151101561022d5760405162461bcd60e51b815260040161010390610c37565b60048101905080806020019051810190610247919061084a565b60405162461bcd60e51b81526004016101039190610ad5565b61026f603f6060890135610ce0565b5a1161028b57634e487b7160e01b600052600160045260246000fd5b90969095509350505050565b60008061037d84848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061037792507fdd8f4b70b0f4393e889bd39128a30628a78b61816a9eb8199759e7a349657e489150610307905060208a018a61081c565b61031760408b0160208c0161081c565b60408b013560608c013560808d013561033360a08f018f610c77565b6040516103419291906109b1565b60405190819003812061035c97969594939291602001610a4f565b604051602081830303815290604052805190602001206103e8565b90610401565b90506080850135600080610394602089018961081c565b6001600160a01b03166001600160a01b03168152602001908152602001600020541480156103df57506103ca602086018661081c565b6001600160a01b0316816001600160a01b0316145b95945050505050565b60006103fb6103f5610425565b836104e7565b92915050565b6000806000610410858561051a565b9150915061041d8161058a565b509392505050565b60007f000000000000000000000000000000000000000000000000000000000000000146141561047657507f7ce8d495cdbd0e4deb3abed5528be0aca8dae1c9f4172364ceec32c5051da6b86104e4565b6104e17f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f2c9c579ca0d993f7c2d25818372353ab1d6abb72d19f803687d19c75043ce92a7fae209a0b48f21c054280f2455d32cf309387644879d9acbd8ffc1991638118856106ba565b90505b90565b600082826040516020016104fc929190610a06565b60405160208183030381529060405280519060200120905092915050565b6000808251604114156105515760208301516040840151606085015160001a610545878285856106f4565b94509450505050610583565b82516040141561057b57602083015160408401516105708683836107d4565b935093505050610583565b506000905060025b9250929050565b60008160048111156105ac57634e487b7160e01b600052602160045260246000fd5b14156105b7576106b7565b60018160048111156105d957634e487b7160e01b600052602160045260246000fd5b14156105f75760405162461bcd60e51b815260040161010390610ae8565b600281600481111561061957634e487b7160e01b600052602160045260246000fd5b14156106375760405162461bcd60e51b815260040161010390610b7c565b600381600481111561065957634e487b7160e01b600052602160045260246000fd5b14156106775760405162461bcd60e51b815260040161010390610bb3565b600481600481111561069957634e487b7160e01b600052602160045260246000fd5b14156106b75760405162461bcd60e51b815260040161010390610bf5565b50565b600083838346306040516020016106d5959493929190610a8b565b6040516020818303038152906040528051906020012090509392505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561072b57506000905060036107cb565b8460ff16601b1415801561074357508460ff16601c14155b1561075457506000905060046107cb565b6000600187878787604051600081526020016040526040516107799493929190610ab7565b6020604051602081039080840390855afa15801561079b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166107c4576000600192509250506107cb565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831660ff84901c601b0161080e878288856106f4565b935093505050935093915050565b60006020828403121561082d578081fd5b81356001600160a01b0381168114610843578182fd5b9392505050565b60006020828403121561085b578081fd5b815167ffffffffffffffff80821115610872578283fd5b818401915084601f830112610885578283fd5b81518181111561089757610897610d30565b604051601f8201601f1916810160200183811182821017156108bb576108bb610d30565b6040528181528382016020018710156108d2578485fd5b6108e3826020830160208701610d00565b9695505050505050565b600080600060408486031215610901578182fd5b833567ffffffffffffffff80821115610918578384fd5b9085019060c0828803121561092b578384fd5b90935060208501359080821115610940578384fd5b818601915086601f830112610953578384fd5b813581811115610961578485fd5b876020828501011115610972578485fd5b6020830194508093505050509250925092565b6000815180845261099d816020860160208601610d00565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6000838583375060609190911b6bffffffffffffffffffffffff19169101908152601401919050565b600082516109fc818460208701610d00565b9190910192915050565b61190160f01b81526002810192909252602282015260420190565b901515815260200190565b6000831515825260406020830152610a476040830184610985565b949350505050565b9687526001600160a01b0395861660208801529390941660408601526060850191909152608084015260a083019190915260c082015260e00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526108436020830184610985565b60208082526018908201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604082015260600190565b60208082526032908201527f4d696e696d616c466f727761726465723a207369676e617475726520646f657360408201527f206e6f74206d6174636820726571756573740000000000000000000000000000606082015260800190565b6020808252601f908201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604082015260600190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604082015261756560f01b606082015260800190565b60208082526022908201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604082015261756560f01b606082015260800190565b6020808252601d908201527f5472616e73616374696f6e2072657665727465642073696c656e746c79000000604082015260600190565b90815260200190565b6000808335601e19843603018112610c8d578283fd5b83018035915067ffffffffffffffff821115610ca7578283fd5b60200191503681900382131561058357600080fd5b60008219821115610cdb57634e487b7160e01b81526011600452602481fd5b500190565b600082610cfb57634e487b7160e01b81526012600452602481fd5b500490565b60005b83811015610d1b578181015183820152602001610d03565b83811115610d2a576000848401525b50505050565b634e487b7160e01b600052604160045260246000fdfea164736f6c6343000800000a
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.