Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 322 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create Collectio... | 10529370 | 1669 days ago | IN | 0 ETH | 0.06301848 | ||||
Create Collectio... | 10529342 | 1669 days ago | IN | 0 ETH | 0.0630128 | ||||
Create Collectio... | 10529342 | 1669 days ago | IN | 0 ETH | 0.06104969 | ||||
Create Collectio... | 10528794 | 1669 days ago | IN | 0 ETH | 0.05379983 | ||||
Create Collectio... | 10528550 | 1669 days ago | IN | 0 ETH | 0.05302553 | ||||
Create Collectio... | 10528435 | 1670 days ago | IN | 0 ETH | 0.06911996 | ||||
Create Collectio... | 10528429 | 1670 days ago | IN | 0 ETH | 0.06722959 | ||||
Create Collectio... | 10528424 | 1670 days ago | IN | 0 ETH | 0.07619329 | ||||
Create Collectio... | 10528416 | 1670 days ago | IN | 0 ETH | 0.07481292 | ||||
Create Collectio... | 10528408 | 1670 days ago | IN | 0 ETH | 0.07186909 | ||||
Create Collectio... | 10528364 | 1670 days ago | IN | 0 ETH | 0.07702948 | ||||
Create Collectio... | 10528330 | 1670 days ago | IN | 0 ETH | 0.07186147 | ||||
Create Collectio... | 10528329 | 1670 days ago | IN | 0 ETH | 0.07562685 | ||||
Create Collectio... | 10528321 | 1670 days ago | IN | 0 ETH | 0.0756276 | ||||
Create Collectio... | 10528304 | 1670 days ago | IN | 0 ETH | 0.07562332 | ||||
Create Collectio... | 10528302 | 1670 days ago | IN | 0 ETH | 0.07701683 | ||||
Create Collectio... | 10528293 | 1670 days ago | IN | 0 ETH | 0.07562313 | ||||
Create Collectio... | 10528289 | 1670 days ago | IN | 0 ETH | 0.07701683 | ||||
Create Collectio... | 10528270 | 1670 days ago | IN | 0 ETH | 0.07147877 | ||||
Create Collectio... | 10528270 | 1670 days ago | IN | 0 ETH | 0.07185496 | ||||
Create Collectio... | 10528254 | 1670 days ago | IN | 0 ETH | 0.07562667 | ||||
Create Collectio... | 10528241 | 1670 days ago | IN | 0 ETH | 0.07325721 | ||||
Create Collectio... | 10528241 | 1670 days ago | IN | 0 ETH | 0.07562685 | ||||
Create Collectio... | 10528233 | 1670 days ago | IN | 0 ETH | 0.07562574 | ||||
Create Collectio... | 10528226 | 1670 days ago | IN | 0 ETH | 0.07562574 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
CS2SwipeCollectionHelper
Compiler Version
v0.6.11+commit.5ef660b1
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-07-22 */ /* * Crypto stamp 2 Swipe Collection Helper * Helper contract to allow creating a Collection * and transfering a Crypto stamp into it in one transaction * * Developed by Capacity Blockchain Solutions GmbH <capacity.at> * for Österreichische Post AG <post.at> */ // File: @openzeppelin/contracts/introspection/IERC165.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/introspection/ERC165.sol pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts may inherit from this and call {_registerInterface} to declare * their support of an interface. */ contract ERC165 is IERC165 { /* * bytes4(keccak256('supportsInterface(bytes4)')) == 0x01ffc9a7 */ bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7; /** * @dev Mapping of interface ids to whether or not it's supported. */ mapping(bytes4 => bool) private _supportedInterfaces; constructor () internal { // Derived contracts need only register support for their own interfaces, // we register support for ERC165 itself here _registerInterface(_INTERFACE_ID_ERC165); } /** * @dev See {IERC165-supportsInterface}. * * Time complexity O(1), guaranteed to always use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) public view override returns (bool) { return _supportedInterfaces[interfaceId]; } /** * @dev Registers the contract as an implementer of the interface defined by * `interfaceId`. Support of the actual ERC165 interface is automatic and * registering its interface id is not required. * * See {IERC165-supportsInterface}. * * Requirements: * * - `interfaceId` cannot be the ERC165 invalid interface (`0xffffffff`). */ function _registerInterface(bytes4 interfaceId) internal virtual { require(interfaceId != 0xffffffff, "ERC165: invalid interface id"); _supportedInterfaces[interfaceId] = true; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.6.2; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transfered from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from`, `to` cannot be zero. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from`, `to` cannot be zero. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from`, `to` cannot be zero. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol pragma solidity ^0.6.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ abstract contract IERC721Receiver { /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a {IERC721-safeTransferFrom}. This function MUST return the function selector, * otherwise the caller will revert the transaction. The selector to be * returned can be obtained as `this.onERC721Received.selector`. This * function MAY throw to revert and reject the transfer. * Note: the ERC721 contract address is always the message sender. * @param operator The address which called `safeTransferFrom` function * @param from The address which previously owned the token * @param tokenId The NFT identifier which is being transferred * @param data Additional data with no specified format * @return bytes4 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))` */ function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data) public virtual returns (bytes4); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.6.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, 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) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * 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); uint256 c = a - b; return c; } /** * @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) { // 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 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts 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) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts 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) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message 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, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: contracts/ENSReverseRegistrarI.sol /* * Interfaces for ENS Reverse Registrar * See https://github.com/ensdomains/ens/blob/master/contracts/ReverseRegistrar.sol for full impl * Also see https://github.com/wealdtech/wealdtech-solidity/blob/master/contracts/ens/ENSReverseRegister.sol * * Use this as follows (registryAddress is the address of the ENS registry to use): * ----- * // This hex value is caclulated by namehash('addr.reverse') * bytes32 public constant ENS_ADDR_REVERSE_NODE = 0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2; * function registerReverseENS(address registryAddress, string memory calldata) external { * require(registryAddress != address(0), "need a valid registry"); * address reverseRegistrarAddress = ENSRegistryOwnerI(registryAddress).owner(ENS_ADDR_REVERSE_NODE) * require(reverseRegistrarAddress != address(0), "need a valid reverse registrar"); * ENSReverseRegistrarI(reverseRegistrarAddress).setName(name); * } * ----- * or * ----- * function registerReverseENS(address reverseRegistrarAddress, string memory calldata) external { * require(reverseRegistrarAddress != address(0), "need a valid reverse registrar"); * ENSReverseRegistrarI(reverseRegistrarAddress).setName(name); * } * ----- * ENS deployments can be found at https://docs.ens.domains/ens-deployments * E.g. Etherscan can be used to look up that owner on those contracts. * namehash.hash("addr.reverse") == "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" * Ropsten: ens.owner(namehash.hash("addr.reverse")) == "0x6F628b68b30Dc3c17f345c9dbBb1E483c2b7aE5c" * Mainnet: ens.owner(namehash.hash("addr.reverse")) == "0x084b1c3C81545d370f3634392De611CaaBFf8148" */ pragma solidity ^0.6.0; interface ENSRegistryOwnerI { function owner(bytes32 node) external view returns (address); } interface ENSReverseRegistrarI { function setName(string calldata name) external returns (bytes32 node); } // File: contracts/CollectionsI.sol pragma solidity ^0.6.0; /** * @dev Outward-facing interface of a Collections contract. */ interface CollectionsI is IERC721 { event NewCollection(address indexed owner, address collectionAddress); /** * @dev Creates a new Collection. */ function create(address _notificationContract, string calldata _ensName, string calldata _ensSubdomainName, address _ensSubdomainRegistrarAddress, address _ensReverseRegistrarAddress) external; /** * @dev Create a collection for a different owner. Only callable by a create controller role. */ function createFor(address payable _newOwner, address _notificationContract, string calldata _ensName, string calldata _ensSubdomainName, address _ensSubdomainRegistrarAddress, address _ensReverseRegistrarAddress) external payable; /** * @dev Removes (burns) an empty Collection. Only the Collection contract itself can call this. */ function burn(uint256 tokenId) external; /** * @dev Returns if a Collection NFT exists for the specified `tokenId`. */ function exists(uint256 tokenId) external view returns (bool); /** * @dev Returns whether the given spender can transfer a given `tokenId`. */ function isApprovedOrOwner(address spender, uint256 tokenId) external view returns (bool); /** * @dev Returns the Collection address for a token ID. */ function collectionAddress(uint256 tokenId) external view returns (address); /** * @dev Returns the token ID for a Collection address. */ function tokenIdForCollection(address collectionAddr) external view returns (uint256 tokenId); } // File: contracts/ERC721ExistsI.sol pragma solidity ^0.6.0; /** * @dev ERC721 compliant contract with an exists() function. */ abstract contract ERC721ExistsI is IERC721 { // Returns whether the specified token exists function exists(uint256 tokenId) public view virtual returns (bool); } // File: contracts/CS2SignedTransferI.sol pragma solidity ^0.6.0; /** * @dev ERC721 compliant contract with an exists() function. */ abstract contract CS2SignedTransferI is ERC721ExistsI { // Outward-facing function for signed transfer: assembles the expected data and then calls the internal function to do the rest. // Can called by anyone knowing about the right signature, but can only transfer to the given specific target. function signedTransfer(uint256 _tokenId, address _to, bytes memory _signature) external virtual; // Outward-facing function for operator-driven signed transfer: assembles the expected data and then calls the internal function to do the rest. // Can transfer to any target, but only be called by the trusted operator contained in the signature. function signedTransferWithOperator(uint256 _tokenId, address _to, bytes memory _signature) external virtual; // Mint token and transfer it in the same transaction. // Can called by anyone knowing about the right signature (and proof), but can only transfer to the given specific target. function signedTransferWithMintProof(bytes32 tokenData, address _to, bytes calldata _signature, bytes32[] calldata merkleProof) external virtual; // Mint token and transfer it in the same transaction. // Can transfer to any target, but only be called by the trusted operator contained in the signature. function signedTransferWithOperatorAndMintProof(bytes32 tokenData, address _to, bytes calldata _signature, bytes32[] calldata merkleProof) external virtual; } // File: contracts/CS2SwipeCollectionHelper.sol /* * Helper for CS2 contract connecting to Achievements */ pragma solidity ^0.6.0; contract CS2SwipeCollectionHelper is ERC165, IERC721Receiver { using SafeMath for uint256; bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; address public tokenAssignmentControl; CollectionsI public collections; uint256 public inFlightCollectionId; event TokenAssignmentControlTransferred(address indexed previousTokenAssignmentControl, address indexed newTokenAssignmentControl); // ERC721 event - never emitted in this contract but helpful for running our tests. event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); // CS2/CSGU and TestCS2 events - never emitted in this contract but helpful for running our tests. event TestMintedWithProof(address operator, uint256 indexed tokenId, address indexed owner); event SignedTransfer(address operator, address indexed from, address indexed to, uint256 indexed tokenId, uint256 signedTransferNonce); // Collections event - never emitted in this contract but helpful for running our tests. event NewCollection(address indexed owner, address collectionAddress); constructor(address _collectionsAddress, address _tokenAssignmentControl) public { _registerInterface(_ERC721_RECEIVED); collections = CollectionsI(_collectionsAddress); require(address(collections) != address(0x0), "You need to provide an actual Collections contract."); tokenAssignmentControl = _tokenAssignmentControl; require(tokenAssignmentControl != address(0), "tokenAssignmentControl cannot be the zero address."); } modifier onlyTokenAssignmentControl() { require(msg.sender == tokenAssignmentControl, "tokenAssignmentControl key required for this function."); _; } /*** Enable adjusting variables after deployment ***/ function transferTokenAssignmentControl(address _newTokenAssignmentControl) public onlyTokenAssignmentControl { require(_newTokenAssignmentControl != address(0), "tokenAssignmentControl cannot be the zero address."); emit TokenAssignmentControlTransferred(tokenAssignmentControl, _newTokenAssignmentControl); tokenAssignmentControl = _newTokenAssignmentControl; } /*** Helper for creating a new collection and fundedTransfer of CS2/CSGU in the same transaction ***/ function createCollectionWithToken( address _newOwner, address _notificationContract, string memory _ensName, string memory _ensSubdomainName, address _ensSubdomainRegistrarAddress, address _ensReverseRegistrarAddress, address _tokenContractAddress, uint256 _tokenId, bytes memory _signature ) public { require(address(_tokenContractAddress) != address(0x0), "You need to provide an actual Crypto stamp token contract."); CS2SignedTransferI cstoken = CS2SignedTransferI(_tokenContractAddress); address collectionAddress = _createCollection(_newOwner, _notificationContract, _ensName, _ensSubdomainName, _ensSubdomainRegistrarAddress, _ensReverseRegistrarAddress); cstoken.signedTransferWithOperator(_tokenId, collectionAddress, _signature); } function createCollectionWithTokenAndMintProof( address _newOwner, address _notificationContract, string memory _ensName, string memory _ensSubdomainName, address _ensSubdomainRegistrarAddress, address _ensReverseRegistrarAddress, address _tokenContractAddress, bytes32 tokenData, bytes calldata _signature, bytes32[] calldata merkleProof ) public { require(address(_tokenContractAddress) != address(0x0), "You need to provide an actual Crypto stamp token contract."); CS2SignedTransferI cstoken = CS2SignedTransferI(_tokenContractAddress); address collectionAddress = _createCollection(_newOwner, _notificationContract, _ensName, _ensSubdomainName, _ensSubdomainRegistrarAddress, _ensReverseRegistrarAddress); cstoken.signedTransferWithOperatorAndMintProof(tokenData, collectionAddress, _signature, merkleProof); } function _createCollection( address _newOwner, address _notificationContract, string memory _ensName, string memory _ensSubdomainName, address _ensSubdomainRegistrarAddress, address _ensReverseRegistrarAddress ) internal returns (address) { inFlightCollectionId = 0; collections.create(_notificationContract, _ensName, _ensSubdomainName, _ensSubdomainRegistrarAddress, _ensReverseRegistrarAddress); require(inFlightCollectionId > 0, "Temporary ID store did not work!"); address collection_address = collections.collectionAddress(inFlightCollectionId); // alternative without inFlightCollection hack: address collection_address = ens_resolver.addr(ens_node); collections.safeTransferFrom(address(this), _newOwner, inFlightCollectionId); inFlightCollectionId = 0; return collection_address; } // Only allow receiving when we are the operator ourselves. function onERC721Received(address _operator, address /*_from*/, uint256 _tokenId, bytes memory /*_data*/) public override returns (bytes4) { require(_operator == address(this), "onERC721Received operator needs to be ourselves!"); inFlightCollectionId = _tokenId; return this.onERC721Received.selector; } /*** Enable reverse ENS registration ***/ // Call this with the address of the reverse registrar for the respecitve network and the ENS name to register. // The reverse registrar can be found as the owner of 'addr.reverse' in the ENS system. // See https://docs.ens.domains/ens-deployments for address of ENS deployments, e.g. Etherscan can be used to look up that owner on those. // namehash.hash("addr.reverse") == "0x91d1777781884d03a6757a803996e38de2a42967fb37eeaca72729271025a9e2" // Ropsten: ens.owner(namehash.hash("addr.reverse")) == "0x6F628b68b30Dc3c17f345c9dbBb1E483c2b7aE5c" // Mainnet: ens.owner(namehash.hash("addr.reverse")) == "0x084b1c3C81545d370f3634392De611CaaBFf8148" function registerReverseENS(address _reverseRegistrarAddress, string calldata _name) external onlyTokenAssignmentControl { require(_reverseRegistrarAddress != address(0), "need a valid reverse registrar"); ENSReverseRegistrarI(_reverseRegistrarAddress).setName(_name); } /*** Make sure currency or NFT doesn't get stranded in this contract ***/ // If this contract gets a balance in some ERC20 contract after it's finished, then we can rescue it. function rescueToken(address _foreignToken, address _to) external onlyTokenAssignmentControl { IERC20 erc20Token = IERC20(_foreignToken); erc20Token.transfer(_to, erc20Token.balanceOf(address(this))); } // If this contract gets a balance in some ERC721 contract after it's finished, then we can rescue it. function approveNFTrescue(IERC721 _foreignNFT, address _to) external onlyTokenAssignmentControl { _foreignNFT.setApprovalForAll(_to, true); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_collectionsAddress","type":"address"},{"internalType":"address","name":"_tokenAssignmentControl","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address","name":"collectionAddress","type":"address"}],"name":"NewCollection","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"signedTransferNonce","type":"uint256"}],"name":"SignedTransfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"TestMintedWithProof","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousTokenAssignmentControl","type":"address"},{"indexed":true,"internalType":"address","name":"newTokenAssignmentControl","type":"address"}],"name":"TokenAssignmentControlTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"contract IERC721","name":"_foreignNFT","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"approveNFTrescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"collections","outputs":[{"internalType":"contract CollectionsI","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address","name":"_notificationContract","type":"address"},{"internalType":"string","name":"_ensName","type":"string"},{"internalType":"string","name":"_ensSubdomainName","type":"string"},{"internalType":"address","name":"_ensSubdomainRegistrarAddress","type":"address"},{"internalType":"address","name":"_ensReverseRegistrarAddress","type":"address"},{"internalType":"address","name":"_tokenContractAddress","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_signature","type":"bytes"}],"name":"createCollectionWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"},{"internalType":"address","name":"_notificationContract","type":"address"},{"internalType":"string","name":"_ensName","type":"string"},{"internalType":"string","name":"_ensSubdomainName","type":"string"},{"internalType":"address","name":"_ensSubdomainRegistrarAddress","type":"address"},{"internalType":"address","name":"_ensReverseRegistrarAddress","type":"address"},{"internalType":"address","name":"_tokenContractAddress","type":"address"},{"internalType":"bytes32","name":"tokenData","type":"bytes32"},{"internalType":"bytes","name":"_signature","type":"bytes"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"name":"createCollectionWithTokenAndMintProof","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"inFlightCollectionId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reverseRegistrarAddress","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"registerReverseENS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_foreignToken","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAssignmentControl","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newTokenAssignmentControl","type":"address"}],"name":"transferTokenAssignmentControl","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506040516114503803806114508339818101604052604081101561003357600080fd5b5080516020909101516100556301ffc9a760e01b6001600160e01b0361012f16565b61006e630a85bd0160e11b6001600160e01b0361012f16565b600280546001600160a01b0319166001600160a01b038481169190911791829055166100cb5760405162461bcd60e51b815260040180806020018281038252603381526020018061141d6033913960400191505060405180910390fd5b600180546001600160a01b0319166001600160a01b038381169190911791829055166101285760405162461bcd60e51b81526004018080602001828103825260328152602001806113eb6032913960400191505060405180910390fd5b50506101b3565b6001600160e01b0319808216141561018e576040805162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b611229806101c26000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80639bff6a38116100715780639bff6a3814610292578063a59729811461049a578063c8c2ed5414610688578063d0763c95146106ac578063dd48f774146106d2578063e562dfd614610700576100a9565b806301ffc9a7146100ae578063150b7a02146100e95780632c715332146101ca5780634707d000146101e45780638e8fa11f14610214575b600080fd5b6100d5600480360360208110156100c457600080fd5b50356001600160e01b031916610708565b604080519115158252519081900360200190f35b6101ad600480360360808110156100ff57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561013957600080fd5b82018360208201111561014b57600080fd5b803590602001918460018302840111600160201b8311171561016c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610727945050505050565b604080516001600160e01b03199092168252519081900360200190f35b6101d2610783565b60408051918252519081900360200190f35b610212600480360360408110156101fa57600080fd5b506001600160a01b0381358116916020013516610789565b005b6102126004803603604081101561022a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561025457600080fd5b82018360208201111561026657600080fd5b803590602001918460018302840111600160201b8311171561028757600080fd5b5090925090506108d0565b61021260048036036101408110156102a957600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102dc57600080fd5b8201836020820111156102ee57600080fd5b803590602001918460018302840111600160201b8311171561030f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036157600080fd5b82018360208201111561037357600080fd5b803590602001918460018302840111600160201b8311171561039457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135821696604081013590921695506060820135945091925060a081019060800135600160201b81111561040c57600080fd5b82018360208201111561041e57600080fd5b803590602001918460018302840111600160201b8311171561043f57600080fd5b919390929091602081019035600160201b81111561045c57600080fd5b82018360208201111561046e57600080fd5b803590602001918460208302840111600160201b8311171561048f57600080fd5b5090925090506109e8565b61021260048036036101208110156104b157600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156104e457600080fd5b8201836020820111156104f657600080fd5b803590602001918460018302840111600160201b8311171561051757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561056957600080fd5b82018360208201111561057b57600080fd5b803590602001918460018302840111600160201b8311171561059c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135821696604081013590921695506060820135945091925060a081019060800135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b2c945050505050565b610690610c73565b604080516001600160a01b039092168252519081900360200190f35b610212600480360360208110156106c257600080fd5b50356001600160a01b0316610c82565b610212600480360360408110156106e857600080fd5b506001600160a01b0381358116916020013516610d6c565b610690610e23565b6001600160e01b03191660009081526020819052604090205460ff1690565b60006001600160a01b03851630146107705760405162461bcd60e51b81526004018080602001828103825260308152602001806111226030913960400191505060405180910390fd5b505060035550630a85bd0160e11b919050565b60035481565b6001546001600160a01b031633146107d25760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905183916001600160a01b0383169163a9059cbb91859184916370a08231916024808301926020929190829003018186803b15801561082457600080fd5b505afa158015610838573d6000803e3d6000fd5b505050506040513d602081101561084e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561089f57600080fd5b505af11580156108b3573d6000803e3d6000fd5b505050506040513d60208110156108c957600080fd5b5050505050565b6001546001600160a01b031633146109195760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b6001600160a01b038316610974576040805162461bcd60e51b815260206004820152601e60248201527f6e65656420612076616c69642072657665727365207265676973747261720000604482015290519081900360640190fd5b60405163c47f002760e01b8152602060048201908152602482018390526001600160a01b0385169163c47f00279185918591908190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561089f57600080fd5b6001600160a01b038616610a2d5760405162461bcd60e51b815260040180806020018281038252603a815260200180611152603a913960400191505060405180910390fd5b856000610a3e8e8e8e8e8e8e610e32565b9050816001600160a01b031663d36febaa8883898989896040518763ffffffff1660e01b815260040180878152602001866001600160a01b03166001600160a01b0316815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b158015610b0457600080fd5b505af1158015610b18573d6000803e3d6000fd5b505050505050505050505050505050505050565b6001600160a01b038316610b715760405162461bcd60e51b815260040180806020018281038252603a815260200180611152603a913960400191505060405180910390fd5b826000610b828b8b8b8b8b8b610e32565b9050816001600160a01b0316630f5746258583866040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c00578181015183820152602001610be8565b50505050905090810190601f168015610c2d5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b031681565b6001546001600160a01b03163314610ccb5760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b6001600160a01b038116610d105760405162461bcd60e51b815260040180806020018281038252603281526020018061118c6032913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907fe74ad8e35ae0d7f4389ff1318666007250321a66dd644dca021b5e2e30fa2a5c90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610db55760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b6040805163a22cb46560e01b81526001600160a01b0383811660048301526001602483015291519184169163a22cb4659160448082019260009290919082900301818387803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050505050565b6002546001600160a01b031681565b600080600381905550600260009054906101000a90046001600160a01b03166001600160a01b0316635002919587878787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b031681526020018060200180602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001838103835287818151815260200191508051906020019080838360005b83811015610efc578181015183820152602001610ee4565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610f5c578181015183820152602001610f44565b50505050905090810190601f168015610f895780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015610fad57600080fd5b505af1158015610fc1573d6000803e3d6000fd5b5050505060006003541161101c576040805162461bcd60e51b815260206004820181905260248201527f54656d706f726172792049442073746f726520646964206e6f7420776f726b21604482015290519081900360640190fd5b60025460035460408051632f7c9af760e11b81526004810192909252516000926001600160a01b031691635ef935ee916024808301926020929190829003018186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b505160025460035460408051632142170760e11b81523060048201526001600160a01b038d81166024830152604482019390935290519394509116916342842e0e9160648082019260009290919082900301818387803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050600060035550909897505050505050505056fe6f6e4552433732315265636569766564206f70657261746f72206e6565647320746f206265206f757273656c76657321596f75206e65656420746f2070726f7669646520616e2061637475616c2043727970746f207374616d7020746f6b656e20636f6e74726163742e746f6b656e41737369676e6d656e74436f6e74726f6c2063616e6e6f7420626520746865207a65726f20616464726573732e746f6b656e41737369676e6d656e74436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2ea2646970667358221220900ecff43176befd1f39676f5bb994c215d7a198d7d2295e6e23f4c3ed2c48db64736f6c634300060b0033746f6b656e41737369676e6d656e74436f6e74726f6c2063616e6e6f7420626520746865207a65726f20616464726573732e596f75206e65656420746f2070726f7669646520616e2061637475616c20436f6c6c656374696f6e7320636f6e74726163742e000000000000000000000000574317b5167521d2e3e34469a6993102fbbd92ed000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80639bff6a38116100715780639bff6a3814610292578063a59729811461049a578063c8c2ed5414610688578063d0763c95146106ac578063dd48f774146106d2578063e562dfd614610700576100a9565b806301ffc9a7146100ae578063150b7a02146100e95780632c715332146101ca5780634707d000146101e45780638e8fa11f14610214575b600080fd5b6100d5600480360360208110156100c457600080fd5b50356001600160e01b031916610708565b604080519115158252519081900360200190f35b6101ad600480360360808110156100ff57600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b81111561013957600080fd5b82018360208201111561014b57600080fd5b803590602001918460018302840111600160201b8311171561016c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610727945050505050565b604080516001600160e01b03199092168252519081900360200190f35b6101d2610783565b60408051918252519081900360200190f35b610212600480360360408110156101fa57600080fd5b506001600160a01b0381358116916020013516610789565b005b6102126004803603604081101561022a57600080fd5b6001600160a01b038235169190810190604081016020820135600160201b81111561025457600080fd5b82018360208201111561026657600080fd5b803590602001918460018302840111600160201b8311171561028757600080fd5b5090925090506108d0565b61021260048036036101408110156102a957600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156102dc57600080fd5b8201836020820111156102ee57600080fd5b803590602001918460018302840111600160201b8311171561030f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036157600080fd5b82018360208201111561037357600080fd5b803590602001918460018302840111600160201b8311171561039457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135821696604081013590921695506060820135945091925060a081019060800135600160201b81111561040c57600080fd5b82018360208201111561041e57600080fd5b803590602001918460018302840111600160201b8311171561043f57600080fd5b919390929091602081019035600160201b81111561045c57600080fd5b82018360208201111561046e57600080fd5b803590602001918460208302840111600160201b8311171561048f57600080fd5b5090925090506109e8565b61021260048036036101208110156104b157600080fd5b6001600160a01b038235811692602081013590911691810190606081016040820135600160201b8111156104e457600080fd5b8201836020820111156104f657600080fd5b803590602001918460018302840111600160201b8311171561051757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561056957600080fd5b82018360208201111561057b57600080fd5b803590602001918460018302840111600160201b8311171561059c57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092956001600160a01b0385358116966020870135821696604081013590921695506060820135945091925060a081019060800135600160201b81111561061457600080fd5b82018360208201111561062657600080fd5b803590602001918460018302840111600160201b8311171561064757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610b2c945050505050565b610690610c73565b604080516001600160a01b039092168252519081900360200190f35b610212600480360360208110156106c257600080fd5b50356001600160a01b0316610c82565b610212600480360360408110156106e857600080fd5b506001600160a01b0381358116916020013516610d6c565b610690610e23565b6001600160e01b03191660009081526020819052604090205460ff1690565b60006001600160a01b03851630146107705760405162461bcd60e51b81526004018080602001828103825260308152602001806111226030913960400191505060405180910390fd5b505060035550630a85bd0160e11b919050565b60035481565b6001546001600160a01b031633146107d25760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b604080516370a0823160e01b8152306004820152905183916001600160a01b0383169163a9059cbb91859184916370a08231916024808301926020929190829003018186803b15801561082457600080fd5b505afa158015610838573d6000803e3d6000fd5b505050506040513d602081101561084e57600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b03909316600484015260248301919091525160448083019260209291908290030181600087803b15801561089f57600080fd5b505af11580156108b3573d6000803e3d6000fd5b505050506040513d60208110156108c957600080fd5b5050505050565b6001546001600160a01b031633146109195760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b6001600160a01b038316610974576040805162461bcd60e51b815260206004820152601e60248201527f6e65656420612076616c69642072657665727365207265676973747261720000604482015290519081900360640190fd5b60405163c47f002760e01b8152602060048201908152602482018390526001600160a01b0385169163c47f00279185918591908190604401848480828437600081840152601f19601f8201169050808301925050509350505050602060405180830381600087803b15801561089f57600080fd5b6001600160a01b038616610a2d5760405162461bcd60e51b815260040180806020018281038252603a815260200180611152603a913960400191505060405180910390fd5b856000610a3e8e8e8e8e8e8e610e32565b9050816001600160a01b031663d36febaa8883898989896040518763ffffffff1660e01b815260040180878152602001866001600160a01b03166001600160a01b0316815260200180602001806020018381038352878782818152602001925080828437600083820152601f01601f19169091018481038352858152602090810191508690860280828437600081840152601f19601f82011690508083019250505098505050505050505050600060405180830381600087803b158015610b0457600080fd5b505af1158015610b18573d6000803e3d6000fd5b505050505050505050505050505050505050565b6001600160a01b038316610b715760405162461bcd60e51b815260040180806020018281038252603a815260200180611152603a913960400191505060405180910390fd5b826000610b828b8b8b8b8b8b610e32565b9050816001600160a01b0316630f5746258583866040518463ffffffff1660e01b815260040180848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610c00578181015183820152602001610be8565b50505050905090810190601f168015610c2d5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b158015610c4e57600080fd5b505af1158015610c62573d6000803e3d6000fd5b505050505050505050505050505050565b6001546001600160a01b031681565b6001546001600160a01b03163314610ccb5760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b6001600160a01b038116610d105760405162461bcd60e51b815260040180806020018281038252603281526020018061118c6032913960400191505060405180910390fd5b6001546040516001600160a01b038084169216907fe74ad8e35ae0d7f4389ff1318666007250321a66dd644dca021b5e2e30fa2a5c90600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b03163314610db55760405162461bcd60e51b81526004018080602001828103825260368152602001806111be6036913960400191505060405180910390fd5b6040805163a22cb46560e01b81526001600160a01b0383811660048301526001602483015291519184169163a22cb4659160448082019260009290919082900301818387803b158015610e0757600080fd5b505af1158015610e1b573d6000803e3d6000fd5b505050505050565b6002546001600160a01b031681565b600080600381905550600260009054906101000a90046001600160a01b03166001600160a01b0316635002919587878787876040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b031681526020018060200180602001856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b03168152602001838103835287818151815260200191508051906020019080838360005b83811015610efc578181015183820152602001610ee4565b50505050905090810190601f168015610f295780820380516001836020036101000a031916815260200191505b50838103825286518152865160209182019188019080838360005b83811015610f5c578181015183820152602001610f44565b50505050905090810190601f168015610f895780820380516001836020036101000a031916815260200191505b50975050505050505050600060405180830381600087803b158015610fad57600080fd5b505af1158015610fc1573d6000803e3d6000fd5b5050505060006003541161101c576040805162461bcd60e51b815260206004820181905260248201527f54656d706f726172792049442073746f726520646964206e6f7420776f726b21604482015290519081900360640190fd5b60025460035460408051632f7c9af760e11b81526004810192909252516000926001600160a01b031691635ef935ee916024808301926020929190829003018186803b15801561106b57600080fd5b505afa15801561107f573d6000803e3d6000fd5b505050506040513d602081101561109557600080fd5b505160025460035460408051632142170760e11b81523060048201526001600160a01b038d81166024830152604482019390935290519394509116916342842e0e9160648082019260009290919082900301818387803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b5050600060035550909897505050505050505056fe6f6e4552433732315265636569766564206f70657261746f72206e6565647320746f206265206f757273656c76657321596f75206e65656420746f2070726f7669646520616e2061637475616c2043727970746f207374616d7020746f6b656e20636f6e74726163742e746f6b656e41737369676e6d656e74436f6e74726f6c2063616e6e6f7420626520746865207a65726f20616464726573732e746f6b656e41737369676e6d656e74436f6e74726f6c206b657920726571756972656420666f7220746869732066756e6374696f6e2ea2646970667358221220900ecff43176befd1f39676f5bb994c215d7a198d7d2295e6e23f4c3ed2c48db64736f6c634300060b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000574317b5167521d2e3e34469a6993102fbbd92ed000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
-----Decoded View---------------
Arg [0] : _collectionsAddress (address): 0x574317b5167521d2E3E34469a6993102FBbd92ed
Arg [1] : _tokenAssignmentControl (address): 0x596E620E175C2C37A5f35A41d9F2305A991fFc89
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000574317b5167521d2e3e34469a6993102fbbd92ed
Arg [1] : 000000000000000000000000596e620e175c2c37a5f35a41d9f2305a991ffc89
Deployed Bytecode Sourcemap
22986:7369:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2104:142;;;;;;;;;;;;;;;;-1:-1:-1;2104:142:0;-1:-1:-1;;;;;;2104:142:0;;:::i;:::-;;;;;;;;;;;;;;;;;;28239:350;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28239:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28239:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;28239:350:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28239:350:0;;-1:-1:-1;28239:350:0;;-1:-1:-1;;;;;28239:350:0:i;:::-;;;;-1:-1:-1;;;;;;28239:350:0;;;;;;;;;;;;;;23235:35;;;:::i;:::-;;;;;;;;;;;;;;;;29824:240;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29824:240:0;;;;;;;;;;:::i;:::-;;29322:306;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29322:306:0;;;;;;;;;;;;;;;-1:-1:-1;;;29322:306:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29322:306:0;;;;;;;;;;-1:-1:-1;29322:306:0;;-1:-1:-1;29322:306:0;-1:-1:-1;29322:306:0;:::i;26256:961::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26256:961:0;;;;;;;;-1:-1:-1;26256:961:0;;-1:-1:-1;;;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26256:961:0;;-1:-1:-1;;;;;26256:961:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26256:961:0;;;;;-1:-1:-1;26256:961:0;;-1:-1:-1;26256:961:0;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;26256:961:0;;;;;;;;;;-1:-1:-1;26256:961:0;;-1:-1:-1;26256:961:0;-1:-1:-1;26256:961:0;:::i;25369:879::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25369:879:0;;;;;;;;-1:-1:-1;25369:879:0;;-1:-1:-1;;;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25369:879:0;;-1:-1:-1;;;;;25369:879:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25369:879:0;;;;;-1:-1:-1;25369:879:0;;-1:-1:-1;25369:879:0;;;;;;;-1:-1:-1;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25369:879:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25369:879:0;;-1:-1:-1;25369:879:0;;-1:-1:-1;;;;;25369:879:0:i;23151:37::-;;;:::i;:::-;;;;-1:-1:-1;;;;;23151:37:0;;;;;;;;;;;;;;24841:410;;;;;;;;;;;;;;;;-1:-1:-1;24841:410:0;-1:-1:-1;;;;;24841:410:0;;:::i;30180:170::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30180:170:0;;;;;;;;;;:::i;23197:31::-;;;:::i;2104:142::-;-1:-1:-1;;;;;;2205:33:0;2181:4;2205:33;;;;;;;;;;;;;;2104:142::o;28239:350::-;28380:6;-1:-1:-1;;;;;28412:26:0;;28433:4;28412:26;28404:87;;;;-1:-1:-1;;;28404:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28502:20:0;:31;-1:-1:-1;;;;28551:30:0;28239:350;-1:-1:-1;28239:350:0:o;23235:35::-;;;;:::o;29824:240::-;24671:22;;-1:-1:-1;;;;;24671:22:0;24657:10;:36;24649:103;;;;-1:-1:-1;;;24649:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30020:35:::1;::::0;;-1:-1:-1;;;30020:35:0;;30049:4:::1;30020:35;::::0;::::1;::::0;;;29970:13;;-1:-1:-1;;;;;29995:19:0;::::1;::::0;::::1;::::0;30015:3;;29995:19;;30020:20:::1;::::0;:35;;;;;::::1;::::0;;;;;;;;29995:19;30020:35;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30020:35:0;29995:61:::1;::::0;;-1:-1:-1;;;;;;29995:61:0::1;::::0;;;;;;-1:-1:-1;;;;;29995:61:0;;::::1;;::::0;::::1;::::0;;;;;;;;;;;;;;30020:35:::1;::::0;29995:61;;;;;;;-1:-1:-1;29995:61:0;;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;;;;29824:240:0:o;29322:306::-;24671:22;;-1:-1:-1;;;;;24671:22:0;24657:10;:36;24649:103;;;;-1:-1:-1;;;24649:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29476:38:0;::::1;29468:81;;;::::0;;-1:-1:-1;;;29468:81:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29559:61;::::0;-1:-1:-1;;;29559:61:0;;::::1;;::::0;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;29559:54:0;::::1;::::0;::::1;::::0;29614:5;;;;29559:61;;;;;29614:5;;;;29559:61;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;26256:961:::0;-1:-1:-1;;;;;26728:46:0;;26720:117;;;;-1:-1:-1;;;26720:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26896:21;26848:26;26957:140;26975:9;26986:21;27009:8;27019:17;27038:29;27069:27;26957:17;:140::i;:::-;26929:168;;27108:7;-1:-1:-1;;;;;27108:46:0;;27155:9;27166:17;27185:10;;27197:11;;27108:101;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27108:101:0;-1:-1:-1;;;;;27108:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27108:101:0;;;;;;;;;;;;;;;;;-1:-1:-1;27108:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26256:961;;;;;;;;;;;;;;:::o;25369:879::-;-1:-1:-1;;;;;25785:46:0;;25777:117;;;;-1:-1:-1;;;25777:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25953:21;25905:26;26014:140;26032:9;26043:21;26066:8;26076:17;26095:29;26126:27;26014:17;:140::i;:::-;25986:168;;26165:7;-1:-1:-1;;;;;26165:34:0;;26200:8;26210:17;26229:10;26165:75;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26165:75:0;-1:-1:-1;;;;;26165:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25369:879;;;;;;;;;;;:::o;23151:37::-;;;-1:-1:-1;;;;;23151:37:0;;:::o;24841:410::-;24671:22;;-1:-1:-1;;;;;24671:22:0;24657:10;:36;24649:103;;;;-1:-1:-1;;;24649:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24985:40:0;::::1;24977:103;;;;-1:-1:-1::0;;;24977:103:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25130:22;::::0;25096:85:::1;::::0;-1:-1:-1;;;;;25096:85:0;;::::1;::::0;25130:22:::1;::::0;25096:85:::1;::::0;25130:22:::1;::::0;25096:85:::1;25192:22;:51:::0;;-1:-1:-1;;;;;;25192:51:0::1;-1:-1:-1::0;;;;;25192:51:0;;;::::1;::::0;;;::::1;::::0;;24841:410::o;30180:170::-;24671:22;;-1:-1:-1;;;;;24671:22:0;24657:10;:36;24649:103;;;;-1:-1:-1;;;24649:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30302:40:::1;::::0;;-1:-1:-1;;;30302:40:0;;-1:-1:-1;;;;;30302:40:0;;::::1;;::::0;::::1;::::0;30337:4:::1;30302:40:::0;;;;;;:29;;::::1;::::0;::::1;::::0;:40;;;;;-1:-1:-1;;30302:40:0;;;;;;;;-1:-1:-1;30302:29:0;:40;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30180:170:::0;;:::o;23197:31::-;;;-1:-1:-1;;;;;23197:31:0;;:::o;27225:941::-;27524:7;27572:1;27549:20;:24;;;;27584:11;;;;;;;;;-1:-1:-1;;;;;27584:11:0;-1:-1:-1;;;;;27584:18:0;;27603:21;27626:8;27636:17;27655:29;27686:27;27584:130;;;;;;;;;;;;;-1:-1:-1;;;;;27584:130:0;-1:-1:-1;;;;;27584:130:0;;;;;;;;;;;;-1:-1:-1;;;;;27584:130:0;-1:-1:-1;;;;;27584:130:0;;;;;;-1:-1:-1;;;;;27584:130:0;-1:-1:-1;;;;;27584:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27584:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27756:1;27733:20;;:24;27725:69;;;;;-1:-1:-1;;;27725:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27834:11;;27864:20;;27834:51;;;-1:-1:-1;;;27834:51:0;;;;;;;;;;27805:26;;-1:-1:-1;;;;;27834:11:0;;:29;;:51;;;;;;;;;;;;;;:11;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27834:51:0;28011:11;;28066:20;;28011:76;;;-1:-1:-1;;;28011:76:0;;28048:4;28011:76;;;;-1:-1:-1;;;;;28011:76:0;;;;;;;;;;;;;;;;27834:51;;-1:-1:-1;28011:11:0;;;:28;;:76;;;;;:11;;:76;;;;;;;;:11;;:76;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28121:1:0;28098:20;:24;-1:-1:-1;28140:18:0;;27225:941;-1:-1:-1;;;;;;;;27225:941:0:o
Swarm Source
ipfs://900ecff43176befd1f39676f5bb994c215d7a198d7d2295e6e23f4c3ed2c48db
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 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.