Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
Latest 25 from a total of 1,589 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 16506145 | 683 days ago | IN | 0 ETH | 0.00140177 | ||||
Mint | 16326616 | 708 days ago | IN | 0 ETH | 0.00115653 | ||||
Mint | 16038285 | 748 days ago | IN | 0 ETH | 0.00052979 | ||||
Mint | 16038282 | 748 days ago | IN | 0 ETH | 0.0012115 | ||||
Mint | 15886184 | 769 days ago | IN | 0 ETH | 0.0014698 | ||||
Mint | 15877201 | 771 days ago | IN | 0 ETH | 0.00132283 | ||||
Mint | 15732480 | 791 days ago | IN | 0 ETH | 0.00168809 | ||||
Mint | 15644056 | 803 days ago | IN | 0 ETH | 0.00037165 | ||||
Mint | 15638335 | 804 days ago | IN | 0 ETH | 0.00024925 | ||||
Mint | 15584386 | 812 days ago | IN | 0 ETH | 0.0027559 | ||||
Mint | 15521858 | 821 days ago | IN | 0 ETH | 0.00217532 | ||||
Mint | 15452235 | 832 days ago | IN | 0 ETH | 0.00112987 | ||||
Mint | 15425704 | 836 days ago | IN | 0 ETH | 0.00052929 | ||||
Mint | 15409289 | 839 days ago | IN | 0 ETH | 0.00106469 | ||||
Mint | 15400539 | 840 days ago | IN | 0 ETH | 0.0006552 | ||||
Mint | 15295831 | 857 days ago | IN | 0 ETH | 0.00060742 | ||||
Mint | 15283762 | 859 days ago | IN | 0 ETH | 0.00139814 | ||||
Mint | 15205230 | 871 days ago | IN | 0 ETH | 0.00090469 | ||||
Mint | 15188389 | 874 days ago | IN | 0 ETH | 0.00050511 | ||||
Mint | 15188386 | 874 days ago | IN | 0 ETH | 0.00128235 | ||||
Mint | 15178051 | 875 days ago | IN | 0 ETH | 0.00159924 | ||||
Mint | 15161231 | 878 days ago | IN | 0 ETH | 0.00122163 | ||||
Mint | 15158230 | 878 days ago | IN | 0 ETH | 0.0006866 | ||||
Mint | 15156026 | 879 days ago | IN | 0 ETH | 0.00153386 | ||||
Mint | 15155234 | 879 days ago | IN | 0 ETH | 0.00566487 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ComicDrop
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity ^0.8.9; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/security/Pausable.sol"; import "../utils/SignedAllowanceWithData.sol"; interface IKitBag { function mint(address to, uint256 id, uint256 amount, bytes memory data) external; function balanceOf(address account, uint256 id) external view returns (uint256); } contract ComicDrop is Ownable, Pausable, SignedAllowanceWithData { IKitBag public kitBag; event Drop(address recipient, uint256[] odds, uint256 comic); constructor( address _kitBag ) { kitBag = IKitBag(_kitBag); } function allowancesSigner() public view override returns (address) { return owner(); } function createComicMessage(address account, uint256 index, uint256[] calldata odds) public view returns (bytes32) { return createMessage(account, index, abi.encode(odds[0], odds[1])); } function pickComic(uint256 pseudoRandom, uint256[] calldata odds) internal pure returns(uint256) { if(pseudoRandom < odds[0]) { return 1; } else if (pseudoRandom < odds[1]) { return 2; } else { return 3; } } function mint(uint256 index, uint256[] calldata odds, bytes calldata signature) public whenNotPaused { _useAllowance(index, abi.encode(odds[0], odds[1]), signature); uint256 pseudoRandom = uint256(keccak256(abi.encode(blockhash(block.number-1), blockhash(block.number-5), odds[0], odds[1], msg.sender))); uint256 comic = pickComic(pseudoRandom & 0xFF, odds); kitBag.mint(msg.sender, comic, 1, "0x"); emit Drop(msg.sender, odds, comic); } function setPaused(bool _bPaused) external onlyOwner { if (_bPaused) _pause(); else _unpause(); } function comicBalance(address _user) public view returns(uint256) { return kitBag.balanceOf(_user, 1) + kitBag.balanceOf(_user, 2) + kitBag.balanceOf(_user, 3); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (security/Pausable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; import "../Strings.sol"; /** * @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 = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 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 Message, created from `s`. 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(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @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.9; import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol'; import "@openzeppelin/contracts/utils/Context.sol"; /// @title SignedAllowance with claimedBitMap & extra data /// @author Simon Fremaux (@dievardump) / Adam Fuller (@azf20) /// Original: https://github.com/dievardump/signed-minting/blob/main/contracts/SignedAllowance.sol contract SignedAllowanceWithData is Context { using ECDSA for bytes32; // event to track claims event Claimed(uint256 index, address account, bytes data); // This is a packed array of booleans to track claims mapping(uint256 => uint256) public claimedBitMap; /// @notice Helper to check if an index has been claimed /// @param index the index function isClaimed(uint256 index) public view returns (bool) { uint256 claimedWordIndex = index / 256; uint256 claimedBitIndex = index % 256; uint256 claimedWord = claimedBitMap[claimedWordIndex]; uint256 mask = (1 << claimedBitIndex); return claimedWord & mask == mask; } /// @notice Internal function to set an index as claimed /// @param index the index function _setClaimed(uint256 index) private { uint256 claimedWordIndex = index / 256; uint256 claimedBitIndex = index % 256; claimedBitMap[claimedWordIndex] = claimedBitMap[claimedWordIndex] | (1 << claimedBitIndex); } // address used to sign the allowances address private _allowancesSigner; /// @notice Helper to know allowancesSigner address /// @return the allowance signer address function allowancesSigner() public view virtual returns (address) { return _allowancesSigner; } /// @notice Helper that creates the message that signer needs to sign to allow a mint /// this is usually also used when creating the allowances, to ensure "message" /// is the same /// @param account the account to allow /// @param index the index /// @return the message to sign function createMessage(address account, uint256 index, bytes memory data) public view returns (bytes32) { return keccak256(abi.encode(address(this), account, index, data)); } /// @notice Helper that creates a list of messages that signer needs to sign to allow mintings /// @param accounts the accounts to allow /// @param indexes the corresponding indexes /// @return messages the messages to sign function createMessages(address[] memory accounts, uint256[] memory indexes, bytes[] memory data) external view returns (bytes32[] memory messages) { require(accounts.length == indexes.length && accounts.length == data.length, '!LENGTH_MISMATCH!'); messages = new bytes32[](accounts.length); for (uint256 i; i < accounts.length; i++) { messages[i] = createMessage(accounts[i], indexes[i], data[i]); } } /// @notice This function verifies that the current request is valid /// @dev It ensures that _allowancesSigner signed a message containing (account, index, address(this)) /// and that this message was not already used /// @param account the account the allowance is associated to /// @param index the index associated to this allowance /// @param data any additional data as bytes /// @param signature the signature by the allowance signer wallet /// @return the message to mark as used function validateSignature( address account, uint256 index, bytes memory data, bytes memory signature ) public view returns (bytes32) { return _validateSignature(account, index, data, signature, allowancesSigner()); } /// @dev It ensures that signer signed a message containing (account, index, address(this)) /// and that this message was not already used /// @param account the account the allowance is associated to /// @param index the index associated to this allowance /// @param signature the signature by the allowance signer wallet /// @param signer the signer /// @return the message to mark as used function _validateSignature( address account, uint256 index, bytes memory data, bytes memory signature, address signer ) internal view returns (bytes32) { bytes32 message = createMessage(account, index, data) .toEthSignedMessageHash(); // verifies that the sha3(address(this), account, index, data) has been signed by signer require(message.recover(signature) == signer, '!INVALID_SIGNATURE!'); // verifies that the allowances was not already used require(isClaimed(index) == false, '!ALREADY_USED!'); return message; } /// @notice internal function that verifies an allowance and marks it as used /// this function throws if signature is wrong or this index for this user has already been used /// @param index the index /// @param signature the signature by the allowance wallet function _useAllowance( uint256 index, bytes memory data, bytes memory signature ) internal { validateSignature(_msgSender(), index, data, signature); _setClaimed(index); emit Claimed(index, _msgSender(), data); } /// @notice Allows to change the allowance signer. This can be used to revoke any signed allowance not already used /// @param newSigner the new signer address function _setAllowancesSigner(address newSigner) internal { _allowancesSigner = newSigner; } }
{ "evmVersion": "london", "libraries": {}, "metadata": { "bytecodeHash": "ipfs", "useLiteralContent": true }, "optimizer": { "enabled": true, "runs": 200 }, "remappings": [], "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_kitBag","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"index","type":"uint256"},{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"odds","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"comic","type":"uint256"}],"name":"Drop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"allowancesSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedBitMap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"comicBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256[]","name":"odds","type":"uint256[]"}],"name":"createComicMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"createMessage","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"indexes","type":"uint256[]"},{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"createMessages","outputs":[{"internalType":"bytes32[]","name":"messages","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kitBag","outputs":[{"internalType":"contract IKitBag","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"uint256[]","name":"odds","type":"uint256[]"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_bPaused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"validateSignature","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b5060405161194938038061194983398101604081905261002f916100ba565b6100383361006a565b6000805460ff60a01b19169055600380546001600160a01b0319166001600160a01b03929092169190911790556100ea565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100cc57600080fd5b81516001600160a01b03811681146100e357600080fd5b9392505050565b611850806100f96000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639e34070f11610097578063e697ca1e11610066578063e697ca1e146101fd578063e8b3018f14610210578063ee25560b14610223578063f2fde38b1461024357600080fd5b80639e34070f146101a4578063a083dd67146101b7578063a2928a6d146101d7578063d3200a79146101ea57600080fd5b80637aadb921116100d35780637aadb9211461013a5780638838b5c31461015b5780638da5cb5b1461018057806395c1d9191461019157600080fd5b806316c38b3c146100fa5780635c975abb1461010f578063715018a614610132575b600080fd5b61010d610108366004611093565b610256565b005b600054600160a01b900460ff165b60405190151581526020015b60405180910390f35b61010d6102a2565b61014d610148366004611116565b6102d8565b604051908152602001610129565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b6000546001600160a01b0316610168565b61010d61019f366004611170565b61034a565b61011d6101b2366004611214565b61059b565b6101ca6101c53660046113f3565b6105dc565b60405161012991906114d7565b61014d6101e536600461151b565b61070f565b61014d6101f8366004611536565b6108b4565b600354610168906001600160a01b031681565b61014d61021e366004611583565b6108ed565b61014d610231366004611214565b60016020526000908152604090205481565b61010d61025136600461151b565b61090d565b6000546001600160a01b031633146102895760405162461bcd60e51b815260040161028090611601565b60405180910390fd5b801561029a576102976109a5565b50565b610297610a4a565b6000546001600160a01b031633146102cc5760405162461bcd60e51b815260040161028090611601565b6102d66000610ace565b565b60006103418585858560008181106102f2576102f2611636565b905060200201358686600181811061030c5761030c611636565b9050602002013560405160200161032d929190918252602082015260400190565b6040516020818303038152906040526108b4565b95945050505050565b600054600160a01b900460ff16156103975760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610280565b61042d85858560008181106103ae576103ae611636565b90506020020135868660018181106103c8576103c8611636565b905060200201356040516020016103e9929190918252602082015260400190565b60408051601f198184030181526020601f870181900481028401810190925285835291908690869081908401838280828437600092019190915250610b1e92505050565b600061043a600143611662565b40610446600543611662565b408686600081811061045a5761045a611636565b905060200201358787600181811061047457610474611636565b604080516020808201989098529081019590955260608501939093525092029091013560808201523360a082015260c0016040516020818303038152906040528051906020012060001c905060006104d08260ff168787610b74565b60035460405163731133e960e01b81523360048201526024810183905260016044820152608060648201526002608482015261060f60f31b60a48201529192506001600160a01b03169063731133e99060c401600060405180830381600087803b15801561053d57600080fd5b505af1158015610551573d6000803e3d6000fd5b505050507f62ab748a8577df782da69171c3fe9ffe95c359260ca489be7f7761d9f2b696953387878460405161058a9493929190611679565b60405180910390a150505050505050565b6000806105aa610100846116e6565b905060006105ba610100856116fa565b60009283526001602081905260409093205492901b9182169091149392505050565b6060825184511480156105f0575081518451145b6106305760405162461bcd60e51b8152602060048201526011602482015270214c454e4754485f4d49534d415443482160781b6044820152606401610280565b835167ffffffffffffffff81111561064a5761064a61122d565b604051908082528060200260200182016040528015610673578160200160208202803683370190505b50905060005b8451811015610707576106d885828151811061069757610697611636565b60200260200101518583815181106106b1576106b1611636565b60200260200101518584815181106106cb576106cb611636565b60200260200101516108b4565b8282815181106106ea576106ea611636565b6020908102919091010152806106ff8161170e565b915050610679565b509392505050565b60038054604051627eeac760e11b81526001600160a01b03848116600483015260248201939093526000929091169062fdd58e9060440160206040518083038186803b15801561075e57600080fd5b505afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107969190611729565b600354604051627eeac760e11b81526001600160a01b038581166004830152600260248301529091169062fdd58e9060440160206040518083038186803b1580156107e057600080fd5b505afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190611729565b600354604051627eeac760e11b81526001600160a01b038681166004830152600160248301529091169062fdd58e9060440160206040518083038186803b15801561086257600080fd5b505afa158015610876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089a9190611729565b6108a49190611742565b6108ae9190611742565b92915050565b6000308484846040516020016108cd94939291906117a7565b6040516020818303038152906040528051906020012090505b9392505050565b6000610341858585856109086000546001600160a01b031690565b610bd0565b6000546001600160a01b031633146109375760405162461bcd60e51b815260040161028090611601565b6001600160a01b03811661099c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610280565b61029781610ace565b600054600160a01b900460ff16156109f25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610280565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a2d3390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16610a9a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610280565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610a2d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b2a338484846108ed565b50610b3483610ce7565b7fcfbcab25fb579162038cc2ac66471e14262f52498648a95410a8f9a9ba31492d833384604051610b67939291906117da565b60405180910390a1505050565b600082826000818110610b8957610b89611636565b90506020020135841015610b9f575060016108e6565b82826001818110610bb257610bb2611636565b90506020020135841015610bc8575060026108e6565b5060036108e6565b600080610c34610be18888886108b4565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506001600160a01b038316610c4a8286610d26565b6001600160a01b031614610c965760405162461bcd60e51b815260206004820152601360248201527221494e56414c49445f5349474e41545552452160681b6044820152606401610280565b610c9f8661059b565b15610cdd5760405162461bcd60e51b815260206004820152600e60248201526d21414c52454144595f555345442160901b6044820152606401610280565b9695505050505050565b6000610cf5610100836116e6565b90506000610d05610100846116fa565b600092835260016020819052604090932080549390911b9092179091555050565b6000806000610d358585610d42565b9150915061070781610db2565b600080825160411415610d795760208301516040840151606085015160001a610d6d87828585610f6d565b94509450505050610dab565b825160401415610da35760208301516040840151610d9886838361105a565b935093505050610dab565b506000905060025b9250929050565b6000816004811115610dc657610dc6611804565b1415610dcf5750565b6001816004811115610de357610de3611804565b1415610e315760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610280565b6002816004811115610e4557610e45611804565b1415610e935760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610280565b6003816004811115610ea757610ea7611804565b1415610f005760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610280565b6004816004811115610f1457610f14611804565b14156102975760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610280565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610fa45750600090506003611051565b8460ff16601b14158015610fbc57508460ff16601c14155b15610fcd5750600090506004611051565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611021573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661104a57600060019250925050611051565b9150600090505b94509492505050565b6000806001600160ff1b0383168161107760ff86901c601b611742565b905061108587828885610f6d565b935093505050935093915050565b6000602082840312156110a557600080fd5b813580151581146108e657600080fd5b80356001600160a01b03811681146110cc57600080fd5b919050565b60008083601f8401126110e357600080fd5b50813567ffffffffffffffff8111156110fb57600080fd5b6020830191508360208260051b8501011115610dab57600080fd5b6000806000806060858703121561112c57600080fd5b611135856110b5565b935060208501359250604085013567ffffffffffffffff81111561115857600080fd5b611164878288016110d1565b95989497509550505050565b60008060008060006060868803121561118857600080fd5b85359450602086013567ffffffffffffffff808211156111a757600080fd5b6111b389838a016110d1565b909650945060408801359150808211156111cc57600080fd5b818801915088601f8301126111e057600080fd5b8135818111156111ef57600080fd5b89602082850101111561120157600080fd5b9699959850939650602001949392505050565b60006020828403121561122657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561126c5761126c61122d565b604052919050565b600067ffffffffffffffff82111561128e5761128e61122d565b5060051b60200190565b600082601f8301126112a957600080fd5b813560206112be6112b983611274565b611243565b82815260059290921b840181019181810190868411156112dd57600080fd5b8286015b848110156112f857803583529183019183016112e1565b509695505050505050565b600082601f83011261131457600080fd5b813567ffffffffffffffff81111561132e5761132e61122d565b611341601f8201601f1916602001611243565b81815284602083860101111561135657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261138457600080fd5b813560206113946112b983611274565b82815260059290921b840181019181810190868411156113b357600080fd5b8286015b848110156112f857803567ffffffffffffffff8111156113d75760008081fd5b6113e58986838b0101611303565b8452509183019183016113b7565b60008060006060848603121561140857600080fd5b833567ffffffffffffffff8082111561142057600080fd5b818601915086601f83011261143457600080fd5b813560206114446112b983611274565b82815260059290921b8401810191818101908a84111561146357600080fd5b948201945b8386101561148857611479866110b5565b82529482019490820190611468565b9750508701359250508082111561149e57600080fd5b6114aa87838801611298565b935060408601359150808211156114c057600080fd5b506114cd86828701611373565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561150f578351835292840192918401916001016114f3565b50909695505050505050565b60006020828403121561152d57600080fd5b6108e6826110b5565b60008060006060848603121561154b57600080fd5b611554846110b5565b925060208401359150604084013567ffffffffffffffff81111561157757600080fd5b6114cd86828701611303565b6000806000806080858703121561159957600080fd5b6115a2856110b5565b935060208501359250604085013567ffffffffffffffff808211156115c657600080fd5b6115d288838901611303565b935060608701359150808211156115e857600080fd5b506115f587828801611303565b91505092959194509250565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156116745761167461164c565b500390565b6001600160a01b0385168152606060208201819052810183905260006001600160fb1b038411156116a957600080fd5b8360051b808660808501376000908301608001908152604090920192909252949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826116f5576116f56116d0565b500490565b600082611709576117096116d0565b500690565b60006000198214156117225761172261164c565b5060010190565b60006020828403121561173b57600080fd5b5051919050565b600082198211156117555761175561164c565b500190565b6000815180845260005b8181101561178057602081850181015186830182015201611764565b81811115611792576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610cdd9083018461175a565b8381526001600160a01b03831660208201526060604082018190526000906103419083018461175a565b634e487b7160e01b600052602160045260246000fdfea26469706673582212205ea3a0cf0adce847666f8eca335ee89e2b2b6d713ef2deceb1e759dbad9d8d0664736f6c63430008090033000000000000000000000000cdd5a1cacd12ad5f44e3a673b7900498237eb37c
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639e34070f11610097578063e697ca1e11610066578063e697ca1e146101fd578063e8b3018f14610210578063ee25560b14610223578063f2fde38b1461024357600080fd5b80639e34070f146101a4578063a083dd67146101b7578063a2928a6d146101d7578063d3200a79146101ea57600080fd5b80637aadb921116100d35780637aadb9211461013a5780638838b5c31461015b5780638da5cb5b1461018057806395c1d9191461019157600080fd5b806316c38b3c146100fa5780635c975abb1461010f578063715018a614610132575b600080fd5b61010d610108366004611093565b610256565b005b600054600160a01b900460ff165b60405190151581526020015b60405180910390f35b61010d6102a2565b61014d610148366004611116565b6102d8565b604051908152602001610129565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610129565b6000546001600160a01b0316610168565b61010d61019f366004611170565b61034a565b61011d6101b2366004611214565b61059b565b6101ca6101c53660046113f3565b6105dc565b60405161012991906114d7565b61014d6101e536600461151b565b61070f565b61014d6101f8366004611536565b6108b4565b600354610168906001600160a01b031681565b61014d61021e366004611583565b6108ed565b61014d610231366004611214565b60016020526000908152604090205481565b61010d61025136600461151b565b61090d565b6000546001600160a01b031633146102895760405162461bcd60e51b815260040161028090611601565b60405180910390fd5b801561029a576102976109a5565b50565b610297610a4a565b6000546001600160a01b031633146102cc5760405162461bcd60e51b815260040161028090611601565b6102d66000610ace565b565b60006103418585858560008181106102f2576102f2611636565b905060200201358686600181811061030c5761030c611636565b9050602002013560405160200161032d929190918252602082015260400190565b6040516020818303038152906040526108b4565b95945050505050565b600054600160a01b900460ff16156103975760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610280565b61042d85858560008181106103ae576103ae611636565b90506020020135868660018181106103c8576103c8611636565b905060200201356040516020016103e9929190918252602082015260400190565b60408051601f198184030181526020601f870181900481028401810190925285835291908690869081908401838280828437600092019190915250610b1e92505050565b600061043a600143611662565b40610446600543611662565b408686600081811061045a5761045a611636565b905060200201358787600181811061047457610474611636565b604080516020808201989098529081019590955260608501939093525092029091013560808201523360a082015260c0016040516020818303038152906040528051906020012060001c905060006104d08260ff168787610b74565b60035460405163731133e960e01b81523360048201526024810183905260016044820152608060648201526002608482015261060f60f31b60a48201529192506001600160a01b03169063731133e99060c401600060405180830381600087803b15801561053d57600080fd5b505af1158015610551573d6000803e3d6000fd5b505050507f62ab748a8577df782da69171c3fe9ffe95c359260ca489be7f7761d9f2b696953387878460405161058a9493929190611679565b60405180910390a150505050505050565b6000806105aa610100846116e6565b905060006105ba610100856116fa565b60009283526001602081905260409093205492901b9182169091149392505050565b6060825184511480156105f0575081518451145b6106305760405162461bcd60e51b8152602060048201526011602482015270214c454e4754485f4d49534d415443482160781b6044820152606401610280565b835167ffffffffffffffff81111561064a5761064a61122d565b604051908082528060200260200182016040528015610673578160200160208202803683370190505b50905060005b8451811015610707576106d885828151811061069757610697611636565b60200260200101518583815181106106b1576106b1611636565b60200260200101518584815181106106cb576106cb611636565b60200260200101516108b4565b8282815181106106ea576106ea611636565b6020908102919091010152806106ff8161170e565b915050610679565b509392505050565b60038054604051627eeac760e11b81526001600160a01b03848116600483015260248201939093526000929091169062fdd58e9060440160206040518083038186803b15801561075e57600080fd5b505afa158015610772573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107969190611729565b600354604051627eeac760e11b81526001600160a01b038581166004830152600260248301529091169062fdd58e9060440160206040518083038186803b1580156107e057600080fd5b505afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190611729565b600354604051627eeac760e11b81526001600160a01b038681166004830152600160248301529091169062fdd58e9060440160206040518083038186803b15801561086257600080fd5b505afa158015610876573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089a9190611729565b6108a49190611742565b6108ae9190611742565b92915050565b6000308484846040516020016108cd94939291906117a7565b6040516020818303038152906040528051906020012090505b9392505050565b6000610341858585856109086000546001600160a01b031690565b610bd0565b6000546001600160a01b031633146109375760405162461bcd60e51b815260040161028090611601565b6001600160a01b03811661099c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610280565b61029781610ace565b600054600160a01b900460ff16156109f25760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610280565b6000805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a2d3390565b6040516001600160a01b03909116815260200160405180910390a1565b600054600160a01b900460ff16610a9a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610280565b6000805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33610a2d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b610b2a338484846108ed565b50610b3483610ce7565b7fcfbcab25fb579162038cc2ac66471e14262f52498648a95410a8f9a9ba31492d833384604051610b67939291906117da565b60405180910390a1505050565b600082826000818110610b8957610b89611636565b90506020020135841015610b9f575060016108e6565b82826001818110610bb257610bb2611636565b90506020020135841015610bc8575060026108e6565b5060036108e6565b600080610c34610be18888886108b4565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01604051602081830303815290604052805190602001209050919050565b90506001600160a01b038316610c4a8286610d26565b6001600160a01b031614610c965760405162461bcd60e51b815260206004820152601360248201527221494e56414c49445f5349474e41545552452160681b6044820152606401610280565b610c9f8661059b565b15610cdd5760405162461bcd60e51b815260206004820152600e60248201526d21414c52454144595f555345442160901b6044820152606401610280565b9695505050505050565b6000610cf5610100836116e6565b90506000610d05610100846116fa565b600092835260016020819052604090932080549390911b9092179091555050565b6000806000610d358585610d42565b9150915061070781610db2565b600080825160411415610d795760208301516040840151606085015160001a610d6d87828585610f6d565b94509450505050610dab565b825160401415610da35760208301516040840151610d9886838361105a565b935093505050610dab565b506000905060025b9250929050565b6000816004811115610dc657610dc6611804565b1415610dcf5750565b6001816004811115610de357610de3611804565b1415610e315760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401610280565b6002816004811115610e4557610e45611804565b1415610e935760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401610280565b6003816004811115610ea757610ea7611804565b1415610f005760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401610280565b6004816004811115610f1457610f14611804565b14156102975760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401610280565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115610fa45750600090506003611051565b8460ff16601b14158015610fbc57508460ff16601c14155b15610fcd5750600090506004611051565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015611021573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661104a57600060019250925050611051565b9150600090505b94509492505050565b6000806001600160ff1b0383168161107760ff86901c601b611742565b905061108587828885610f6d565b935093505050935093915050565b6000602082840312156110a557600080fd5b813580151581146108e657600080fd5b80356001600160a01b03811681146110cc57600080fd5b919050565b60008083601f8401126110e357600080fd5b50813567ffffffffffffffff8111156110fb57600080fd5b6020830191508360208260051b8501011115610dab57600080fd5b6000806000806060858703121561112c57600080fd5b611135856110b5565b935060208501359250604085013567ffffffffffffffff81111561115857600080fd5b611164878288016110d1565b95989497509550505050565b60008060008060006060868803121561118857600080fd5b85359450602086013567ffffffffffffffff808211156111a757600080fd5b6111b389838a016110d1565b909650945060408801359150808211156111cc57600080fd5b818801915088601f8301126111e057600080fd5b8135818111156111ef57600080fd5b89602082850101111561120157600080fd5b9699959850939650602001949392505050565b60006020828403121561122657600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561126c5761126c61122d565b604052919050565b600067ffffffffffffffff82111561128e5761128e61122d565b5060051b60200190565b600082601f8301126112a957600080fd5b813560206112be6112b983611274565b611243565b82815260059290921b840181019181810190868411156112dd57600080fd5b8286015b848110156112f857803583529183019183016112e1565b509695505050505050565b600082601f83011261131457600080fd5b813567ffffffffffffffff81111561132e5761132e61122d565b611341601f8201601f1916602001611243565b81815284602083860101111561135657600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261138457600080fd5b813560206113946112b983611274565b82815260059290921b840181019181810190868411156113b357600080fd5b8286015b848110156112f857803567ffffffffffffffff8111156113d75760008081fd5b6113e58986838b0101611303565b8452509183019183016113b7565b60008060006060848603121561140857600080fd5b833567ffffffffffffffff8082111561142057600080fd5b818601915086601f83011261143457600080fd5b813560206114446112b983611274565b82815260059290921b8401810191818101908a84111561146357600080fd5b948201945b8386101561148857611479866110b5565b82529482019490820190611468565b9750508701359250508082111561149e57600080fd5b6114aa87838801611298565b935060408601359150808211156114c057600080fd5b506114cd86828701611373565b9150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561150f578351835292840192918401916001016114f3565b50909695505050505050565b60006020828403121561152d57600080fd5b6108e6826110b5565b60008060006060848603121561154b57600080fd5b611554846110b5565b925060208401359150604084013567ffffffffffffffff81111561157757600080fd5b6114cd86828701611303565b6000806000806080858703121561159957600080fd5b6115a2856110b5565b935060208501359250604085013567ffffffffffffffff808211156115c657600080fd5b6115d288838901611303565b935060608701359150808211156115e857600080fd5b506115f587828801611303565b91505092959194509250565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156116745761167461164c565b500390565b6001600160a01b0385168152606060208201819052810183905260006001600160fb1b038411156116a957600080fd5b8360051b808660808501376000908301608001908152604090920192909252949350505050565b634e487b7160e01b600052601260045260246000fd5b6000826116f5576116f56116d0565b500490565b600082611709576117096116d0565b500690565b60006000198214156117225761172261164c565b5060010190565b60006020828403121561173b57600080fd5b5051919050565b600082198211156117555761175561164c565b500190565b6000815180845260005b8181101561178057602081850181015186830182015201611764565b81811115611792576000602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090610cdd9083018461175a565b8381526001600160a01b03831660208201526060604082018190526000906103419083018461175a565b634e487b7160e01b600052602160045260246000fdfea26469706673582212205ea3a0cf0adce847666f8eca335ee89e2b2b6d713ef2deceb1e759dbad9d8d0664736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000cdd5a1cacd12ad5f44e3a673b7900498237eb37c
-----Decoded View---------------
Arg [0] : _kitBag (address): 0xCdd5A1CACD12aD5F44E3a673B7900498237EB37c
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000cdd5a1cacd12ad5f44e3a673b7900498237eb37c
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.