Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
Marketplace
Compiler Version
v0.4.24+commit.e67f0147
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2018-10-23 */ pragma solidity ^0.4.24; // File: zos-lib/contracts/migrations/Migratable.sol /** * @title Migratable * Helper contract to support intialization and migration schemes between * different implementations of a contract in the context of upgradeability. * To use it, replace the constructor with a function that has the * `isInitializer` modifier starting with `"0"` as `migrationId`. * When you want to apply some migration code during an upgrade, increase * the `migrationId`. Or, if the migration code must be applied only after * another migration has been already applied, use the `isMigration` modifier. * This helper supports multiple inheritance. * WARNING: It is the developer's responsibility to ensure that migrations are * applied in a correct order, or that they are run at all. * See `Initializable` for a simpler version. */ contract Migratable { /** * @dev Emitted when the contract applies a migration. * @param contractName Name of the Contract. * @param migrationId Identifier of the migration applied. */ event Migrated(string contractName, string migrationId); /** * @dev Mapping of the already applied migrations. * (contractName => (migrationId => bool)) */ mapping (string => mapping (string => bool)) internal migrated; /** * @dev Internal migration id used to specify that a contract has already been initialized. */ string constant private INITIALIZED_ID = "initialized"; /** * @dev Modifier to use in the initialization function of a contract. * @param contractName Name of the contract. * @param migrationId Identifier of the migration. */ modifier isInitializer(string contractName, string migrationId) { validateMigrationIsPending(contractName, INITIALIZED_ID); validateMigrationIsPending(contractName, migrationId); _; emit Migrated(contractName, migrationId); migrated[contractName][migrationId] = true; migrated[contractName][INITIALIZED_ID] = true; } /** * @dev Modifier to use in the migration of a contract. * @param contractName Name of the contract. * @param requiredMigrationId Identifier of the previous migration, required * to apply new one. * @param newMigrationId Identifier of the new migration to be applied. */ modifier isMigration(string contractName, string requiredMigrationId, string newMigrationId) { require(isMigrated(contractName, requiredMigrationId), "Prerequisite migration ID has not been run yet"); validateMigrationIsPending(contractName, newMigrationId); _; emit Migrated(contractName, newMigrationId); migrated[contractName][newMigrationId] = true; } /** * @dev Returns true if the contract migration was applied. * @param contractName Name of the contract. * @param migrationId Identifier of the migration. * @return true if the contract migration was applied, false otherwise. */ function isMigrated(string contractName, string migrationId) public view returns(bool) { return migrated[contractName][migrationId]; } /** * @dev Initializer that marks the contract as initialized. * It is important to run this if you had deployed a previous version of a Migratable contract. * For more information see https://github.com/zeppelinos/zos-lib/issues/158. */ function initialize() isInitializer("Migratable", "1.2.1") public { } /** * @dev Reverts if the requested migration was already executed. * @param contractName Name of the contract. * @param migrationId Identifier of the migration. */ function validateMigrationIsPending(string contractName, string migrationId) private view { require(!isMigrated(contractName, migrationId), "Requested target migration ID has already been run"); } } // File: openzeppelin-zos/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of "user permissions". */ contract Ownable is Migratable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function initialize(address _sender) public isInitializer("Ownable", "1.9.0") { owner = _sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: openzeppelin-zos/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Migratable, Ownable { event Pause(); event Unpause(); bool public paused = false; function initialize(address _sender) isInitializer("Pausable", "1.9.0") public { Ownable.initialize(_sender); } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } // File: openzeppelin-zos/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-zos/contracts/AddressUtils.sol /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. assembly { size := extcodesize(addr) } // solium-disable-line security/no-inline-assembly return size > 0; } } // File: contracts/marketplace/MarketplaceStorage.sol /** * @title Interface for contracts conforming to ERC-20 */ contract ERC20Interface { function transferFrom(address from, address to, uint tokens) public returns (bool success); } /** * @title Interface for contracts conforming to ERC-721 */ contract ERC721Interface { function ownerOf(uint256 _tokenId) public view returns (address _owner); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address); function isApprovedForAll(address _owner, address _operator) public view returns (bool); function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function supportsInterface(bytes4) public view returns (bool); } contract ERC721Verifiable is ERC721Interface { function verifyFingerprint(uint256, bytes) public view returns (bool); } contract MarketplaceStorage { ERC20Interface public acceptedToken; struct Order { // Order ID bytes32 id; // Owner of the NFT address seller; // NFT registry address address nftAddress; // Price (in wei) for the published item uint256 price; // Time when this sale ends uint256 expiresAt; } // From ERC721 registry assetId to Order (to avoid asset collision) mapping (address => mapping(uint256 => Order)) public orderByAssetId; uint256 public ownerCutPerMillion; uint256 public publicationFeeInWei; address public legacyNFTAddress; bytes4 public constant InterfaceId_ValidateFingerprint = bytes4( keccak256("verifyFingerprint(uint256,bytes)") ); bytes4 public constant ERC721_Interface = bytes4(0x80ac58cd); // EVENTS event OrderCreated( bytes32 id, uint256 indexed assetId, address indexed seller, address nftAddress, uint256 priceInWei, uint256 expiresAt ); event OrderSuccessful( bytes32 id, uint256 indexed assetId, address indexed seller, address nftAddress, uint256 totalPrice, address indexed buyer ); event OrderCancelled( bytes32 id, uint256 indexed assetId, address indexed seller, address nftAddress ); event ChangedPublicationFee(uint256 publicationFee); event ChangedOwnerCutPerMillion(uint256 ownerCutPerMillion); event ChangeLegacyNFTAddress(address indexed legacyNFTAddress); // [LEGACY] Auction events event AuctionCreated( bytes32 id, uint256 indexed assetId, address indexed seller, uint256 priceInWei, uint256 expiresAt ); event AuctionSuccessful( bytes32 id, uint256 indexed assetId, address indexed seller, uint256 totalPrice, address indexed winner ); event AuctionCancelled( bytes32 id, uint256 indexed assetId, address indexed seller ); } // File: contracts/marketplace/Marketplace.sol contract Marketplace is Migratable, Ownable, Pausable, MarketplaceStorage { using SafeMath for uint256; using AddressUtils for address; /** * @dev Sets the publication fee that's charged to users to publish items * @param _publicationFee - Fee amount in wei this contract charges to publish an item */ function setPublicationFee(uint256 _publicationFee) external onlyOwner { publicationFeeInWei = _publicationFee; emit ChangedPublicationFee(publicationFeeInWei); } /** * @dev Sets the share cut for the owner of the contract that's * charged to the seller on a successful sale * @param _ownerCutPerMillion - Share amount, from 0 to 999,999 */ function setOwnerCutPerMillion(uint256 _ownerCutPerMillion) external onlyOwner { require(_ownerCutPerMillion < 1000000, "The owner cut should be between 0 and 999,999"); ownerCutPerMillion = _ownerCutPerMillion; emit ChangedOwnerCutPerMillion(ownerCutPerMillion); } /** * @dev Sets the legacy NFT address to be used * @param _legacyNFTAddress - Address of the NFT address used for legacy methods that don't have nftAddress as parameter */ function setLegacyNFTAddress(address _legacyNFTAddress) external onlyOwner { _requireERC721(_legacyNFTAddress); legacyNFTAddress = _legacyNFTAddress; emit ChangeLegacyNFTAddress(legacyNFTAddress); } /** * @dev Initialize this contract. Acts as a constructor * @param _acceptedToken - Address of the ERC20 accepted for this marketplace * @param _legacyNFTAddress - Address of the NFT address used for legacy methods that don't have nftAddress as parameter */ function initialize( address _acceptedToken, address _legacyNFTAddress, address _owner ) public isInitializer("Marketplace", "0.0.1") { // msg.sender is the App contract not the real owner. Calls ownable behind the scenes...sigh require(_owner != address(0), "Invalid owner"); Pausable.initialize(_owner); require(_acceptedToken.isContract(), "The accepted token address must be a deployed contract"); acceptedToken = ERC20Interface(_acceptedToken); _requireERC721(_legacyNFTAddress); legacyNFTAddress = _legacyNFTAddress; } /** * @dev Creates a new order * @param nftAddress - Non fungible registry address * @param assetId - ID of the published NFT * @param priceInWei - Price in Wei for the supported coin * @param expiresAt - Duration of the order (in hours) */ function createOrder( address nftAddress, uint256 assetId, uint256 priceInWei, uint256 expiresAt ) public whenNotPaused { _createOrder( nftAddress, assetId, priceInWei, expiresAt ); } /** * @dev [LEGACY] Creates a new order * @param assetId - ID of the published NFT * @param priceInWei - Price in Wei for the supported coin * @param expiresAt - Duration of the order (in hours) */ function createOrder( uint256 assetId, uint256 priceInWei, uint256 expiresAt ) public whenNotPaused { _createOrder( legacyNFTAddress, assetId, priceInWei, expiresAt ); Order memory order = orderByAssetId[legacyNFTAddress][assetId]; emit AuctionCreated( order.id, assetId, order.seller, order.price, order.expiresAt ); } /** * @dev Cancel an already published order * can only be canceled by seller or the contract owner * @param nftAddress - Address of the NFT registry * @param assetId - ID of the published NFT */ function cancelOrder(address nftAddress, uint256 assetId) public whenNotPaused { _cancelOrder(nftAddress, assetId); } /** * @dev [LEGACY] Cancel an already published order * can only be canceled by seller or the contract owner * @param assetId - ID of the published NFT */ function cancelOrder(uint256 assetId) public whenNotPaused { Order memory order = _cancelOrder(legacyNFTAddress, assetId); emit AuctionCancelled( order.id, assetId, order.seller ); } /** * @dev Executes the sale for a published NFT and checks for the asset fingerprint * @param nftAddress - Address of the NFT registry * @param assetId - ID of the published NFT * @param price - Order price * @param fingerprint - Verification info for the asset */ function safeExecuteOrder( address nftAddress, uint256 assetId, uint256 price, bytes fingerprint ) public whenNotPaused { _executeOrder( nftAddress, assetId, price, fingerprint ); } /** * @dev Executes the sale for a published NFT * @param nftAddress - Address of the NFT registry * @param assetId - ID of the published NFT * @param price - Order price */ function executeOrder( address nftAddress, uint256 assetId, uint256 price ) public whenNotPaused { _executeOrder( nftAddress, assetId, price, "" ); } /** * @dev [LEGACY] Executes the sale for a published NFT * @param assetId - ID of the published NFT * @param price - Order price */ function executeOrder( uint256 assetId, uint256 price ) public whenNotPaused { Order memory order = _executeOrder( legacyNFTAddress, assetId, price, "" ); emit AuctionSuccessful( order.id, assetId, order.seller, price, msg.sender ); } /** * @dev [LEGACY] Gets an order using the legacy NFT address. * @dev It's equivalent to orderByAssetId[legacyNFTAddress][assetId] but returns same structure as the old Auction * @param assetId - ID of the published NFT */ function auctionByAssetId( uint256 assetId ) public view returns (bytes32, address, uint256, uint256) { Order memory order = orderByAssetId[legacyNFTAddress][assetId]; return (order.id, order.seller, order.price, order.expiresAt); } /** * @dev Creates a new order * @param nftAddress - Non fungible registry address * @param assetId - ID of the published NFT * @param priceInWei - Price in Wei for the supported coin * @param expiresAt - Duration of the order (in hours) */ function _createOrder( address nftAddress, uint256 assetId, uint256 priceInWei, uint256 expiresAt ) internal { _requireERC721(nftAddress); ERC721Interface nftRegistry = ERC721Interface(nftAddress); address assetOwner = nftRegistry.ownerOf(assetId); require(msg.sender == assetOwner, "Only the owner can create orders"); require( nftRegistry.getApproved(assetId) == address(this) || nftRegistry.isApprovedForAll(assetOwner, address(this)), "The contract is not authorized to manage the asset" ); require(priceInWei > 0, "Price should be bigger than 0"); require(expiresAt > block.timestamp.add(1 minutes), "Publication should be more than 1 minute in the future"); bytes32 orderId = keccak256( abi.encodePacked( block.timestamp, assetOwner, assetId, nftAddress, priceInWei ) ); orderByAssetId[nftAddress][assetId] = Order({ id: orderId, seller: assetOwner, nftAddress: nftAddress, price: priceInWei, expiresAt: expiresAt }); // Check if there's a publication fee and // transfer the amount to marketplace owner if (publicationFeeInWei > 0) { require( acceptedToken.transferFrom(msg.sender, owner, publicationFeeInWei), "Transfering the publication fee to the Marketplace owner failed" ); } emit OrderCreated( orderId, assetId, assetOwner, nftAddress, priceInWei, expiresAt ); } /** * @dev Cancel an already published order * can only be canceled by seller or the contract owner * @param nftAddress - Address of the NFT registry * @param assetId - ID of the published NFT */ function _cancelOrder(address nftAddress, uint256 assetId) internal returns (Order) { Order memory order = orderByAssetId[nftAddress][assetId]; require(order.id != 0, "Asset not published"); require(order.seller == msg.sender || msg.sender == owner, "Unauthorized user"); bytes32 orderId = order.id; address orderSeller = order.seller; address orderNftAddress = order.nftAddress; delete orderByAssetId[nftAddress][assetId]; emit OrderCancelled( orderId, assetId, orderSeller, orderNftAddress ); return order; } /** * @dev Executes the sale for a published NFT * @param nftAddress - Address of the NFT registry * @param assetId - ID of the published NFT * @param price - Order price * @param fingerprint - Verification info for the asset */ function _executeOrder( address nftAddress, uint256 assetId, uint256 price, bytes fingerprint ) internal returns (Order) { _requireERC721(nftAddress); ERC721Verifiable nftRegistry = ERC721Verifiable(nftAddress); if (nftRegistry.supportsInterface(InterfaceId_ValidateFingerprint)) { require( nftRegistry.verifyFingerprint(assetId, fingerprint), "The asset fingerprint is not valid" ); } Order memory order = orderByAssetId[nftAddress][assetId]; require(order.id != 0, "Asset not published"); address seller = order.seller; require(seller != address(0), "Invalid address"); require(seller != msg.sender, "Unauthorized user"); require(order.price == price, "The price is not correct"); require(block.timestamp < order.expiresAt, "The order expired"); require(seller == nftRegistry.ownerOf(assetId), "The seller is no longer the owner"); uint saleShareAmount = 0; bytes32 orderId = order.id; delete orderByAssetId[nftAddress][assetId]; if (ownerCutPerMillion > 0) { // Calculate sale share saleShareAmount = price.mul(ownerCutPerMillion).div(1000000); // Transfer share amount for marketplace Owner require( acceptedToken.transferFrom(msg.sender, owner, saleShareAmount), "Transfering the cut to the Marketplace owner failed" ); } // Transfer sale amount to seller require( acceptedToken.transferFrom(msg.sender, seller, price.sub(saleShareAmount)), "Transfering the sale amount to the seller failed" ); // Transfer asset owner nftRegistry.safeTransferFrom( seller, msg.sender, assetId ); emit OrderSuccessful( orderId, assetId, seller, nftAddress, price, msg.sender ); return order; } function _requireERC721(address nftAddress) internal view { require(nftAddress.isContract(), "The NFT Address should be a contract"); ERC721Interface nftRegistry = ERC721Interface(nftAddress); require( nftRegistry.supportsInterface(ERC721_Interface), "The NFT contract has an invalid ERC721 implementation" ); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"_ownerCutPerMillion","type":"uint256"}],"name":"setOwnerCutPerMillion","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_legacyNFTAddress","type":"address"}],"name":"setLegacyNFTAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ERC721_Interface","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"InterfaceId_ValidateFingerprint","outputs":[{"name":"","type":"bytes4"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"acceptedToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint256"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nftAddress","type":"address"},{"name":"assetId","type":"uint256"}],"name":"cancelOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"nftAddress","type":"address"},{"name":"assetId","type":"uint256"},{"name":"priceInWei","type":"uint256"},{"name":"expiresAt","type":"uint256"}],"name":"createOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nftAddress","type":"address"},{"name":"assetId","type":"uint256"},{"name":"price","type":"uint256"},{"name":"fingerprint","type":"bytes"}],"name":"safeExecuteOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"ownerCutPerMillion","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint256"},{"name":"priceInWei","type":"uint256"},{"name":"expiresAt","type":"uint256"}],"name":"createOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"publicationFeeInWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"nftAddress","type":"address"},{"name":"assetId","type":"uint256"},{"name":"price","type":"uint256"}],"name":"executeOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_publicationFee","type":"uint256"}],"name":"setPublicationFee","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"contractName","type":"string"},{"name":"migrationId","type":"string"}],"name":"isMigrated","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_acceptedToken","type":"address"},{"name":"_legacyNFTAddress","type":"address"},{"name":"_owner","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_sender","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"legacyNFTAddress","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"assetId","type":"uint256"}],"name":"auctionByAssetId","outputs":[{"name":"","type":"bytes32"},{"name":"","type":"address"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"uint256"}],"name":"orderByAssetId","outputs":[{"name":"id","type":"bytes32"},{"name":"seller","type":"address"},{"name":"nftAddress","type":"address"},{"name":"price","type":"uint256"},{"name":"expiresAt","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"assetId","type":"uint256"},{"name":"price","type":"uint256"}],"name":"executeOrder","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"assetId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"nftAddress","type":"address"},{"indexed":false,"name":"priceInWei","type":"uint256"},{"indexed":false,"name":"expiresAt","type":"uint256"}],"name":"OrderCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"assetId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"nftAddress","type":"address"},{"indexed":false,"name":"totalPrice","type":"uint256"},{"indexed":true,"name":"buyer","type":"address"}],"name":"OrderSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"assetId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"nftAddress","type":"address"}],"name":"OrderCancelled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"publicationFee","type":"uint256"}],"name":"ChangedPublicationFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"ownerCutPerMillion","type":"uint256"}],"name":"ChangedOwnerCutPerMillion","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"legacyNFTAddress","type":"address"}],"name":"ChangeLegacyNFTAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"assetId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"priceInWei","type":"uint256"},{"indexed":false,"name":"expiresAt","type":"uint256"}],"name":"AuctionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"assetId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"},{"indexed":false,"name":"totalPrice","type":"uint256"},{"indexed":true,"name":"winner","type":"address"}],"name":"AuctionSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"id","type":"bytes32"},{"indexed":true,"name":"assetId","type":"uint256"},{"indexed":true,"name":"seller","type":"address"}],"name":"AuctionCancelled","type":"event"},{"anonymous":false,"inputs":[],"name":"Pause","type":"event"},{"anonymous":false,"inputs":[],"name":"Unpause","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"contractName","type":"string"},{"indexed":false,"name":"migrationId","type":"string"}],"name":"Migrated","type":"event"}]
Contract Creation Code
60806040526001805460a060020a60ff021916905534801561002057600080fd5b50612f4a806100306000396000f3006080604052600436106101455763ffffffff60e060020a60003504166319dad16d811461014a5780631b357750146101645780632b4c32be1461018557806337f82f37146101cc5780633f4ba83a146101e1578063451c3d80146101f6578063514fcac7146102275780635c975abb1461023f5780636a206137146102685780636f652e1a1461028c5780638129fc1c146102b65780638456cb59146102cb5780638da5cb5b146102e05780639b214f77146102f5578063a01f79d414610361578063a1ba444d14610388578063ae4f1198146103a6578063ae7b0333146103bb578063af8996f1146103e2578063c0bac1a8146103fa578063c0c53b8b14610491578063c4d66de8146104be578063d6b26813146104df578063d7b40107146104f4578063e61f38511461053a578063ef46e0ca14610595578063f2fde38b146105b0575b600080fd5b34801561015657600080fd5b506101626004356105d1565b005b34801561017057600080fd5b50610162600160a060020a03600435166106a3565b34801561019157600080fd5b5061019a610713565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b3480156101d857600080fd5b5061019a610737565b3480156101ed57600080fd5b5061016261076c565b34801561020257600080fd5b5061020b6107e4565b60408051600160a060020a039092168252519081900360200190f35b34801561023357600080fd5b506101626004356107f3565b34801561024b57600080fd5b50610254610875565b604080519115158252519081900360200190f35b34801561027457600080fd5b50610162600160a060020a0360043516602435610885565b34801561029857600080fd5b50610162600160a060020a03600435166024356044356064356108ab565b3480156102c257600080fd5b506101626108d4565b3480156102d757600080fd5b50610162610c21565b3480156102ec57600080fd5b5061020b610c9e565b34801561030157600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261016294600160a060020a038135169460248035956044359536956084949301918190840183828082843750949750610cad9650505050505050565b34801561036d57600080fd5b50610376610cd7565b60408051918252519081900360200190f35b34801561039457600080fd5b50610162600435602435604435610cdd565b3480156103b257600080fd5b50610376610dc4565b3480156103c757600080fd5b50610162600160a060020a0360043516602435604435610dca565b3480156103ee57600080fd5b50610162600435610dfd565b34801561040657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025494369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610e4f9650505050505050565b34801561049d57600080fd5b50610162600160a060020a0360043581169060243581169060443516610f18565b3480156104ca57600080fd5b50610162600160a060020a03600435166113a1565b3480156104eb57600080fd5b5061020b6116f8565b34801561050057600080fd5b5061050c600435611707565b60408051948552600160a060020a039093166020850152838301919091526060830152519081900360800190f35b34801561054657600080fd5b5061055e600160a060020a036004351660243561178f565b60408051958652600160a060020a039485166020870152929093168483015260608401526080830191909152519081900360a00190f35b3480156105a157600080fd5b506101626004356024356117d2565b3480156105bc57600080fd5b50610162600160a060020a0360043516611873565b600154600160a060020a031633146105e857600080fd5b620f42408110610668576040805160e560020a62461bcd02815260206004820152602d60248201527f546865206f776e6572206375742073686f756c64206265206265747765656e2060448201527f3020616e64203939392c39393900000000000000000000000000000000000000606482015290519081900360840190fd5b60048190556040805182815290517ffa406a120a9e7f2b332bfb7a43d3bf1c3f079262202907a6b69c94b2821a02c69181900360200190a150565b600154600160a060020a031633146106ba57600080fd5b6106c3816118fb565b60068054600160a060020a031916600160a060020a0383811691909117918290556040519116907f6e65d1b616d558dd96db7a58e31a954d28d47d57d568e7d7fc7819803878928f90600090a250565b7f80ac58cd0000000000000000000000000000000000000000000000000000000081565b604080517f76657269667946696e6765727072696e742875696e743235362c6279746573298152905190819003602001902081565b600154600160a060020a0316331461078357600080fd5b60015460a060020a900460ff16151561079b57600080fd5b6001805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600254600160a060020a031681565b6107fb612eb0565b60015460a060020a900460ff161561081257600080fd5b60065461082890600160a060020a031683611abb565b60208082015182516040805191825251939450600160a060020a039091169285927f88bd2ba46f3dc2567144331c35bd4c5ced3d547d8828638a152ddd9591c137a6928290030190a35050565b60015460a060020a900460ff1681565b60015460a060020a900460ff161561089c57600080fd5b6108a68282611abb565b505050565b60015460a060020a900460ff16156108c257600080fd5b6108ce84848484611cb2565b50505050565b6040805190810160405280600a81526020017f4d696772617461626c65000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e322e3100000000000000000000000000000000000000000000000000000081525061096d826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b6109778282612358565b600080516020612edf8339815191528282604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156109c95781810151838201526020016109b1565b50505050905090810190601f1680156109f65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610a29578181015183820152602001610a11565b50505050905090810190601f168015610a565780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b60208310610a995780518252601f199092019160209182019101610a7a565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310610af55780518252601f199092019160209182019101610ad6565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b60208310610b675780518252601f199092019160209182019101610b48565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b808752600080516020612eff83398151915293870193845291519095945092508291908083835b60208310610be05780518252601f199092019160209182019101610bc1565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050565b600154600160a060020a03163314610c3857600080fd5b60015460a060020a900460ff1615610c4f57600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600154600160a060020a031681565b60015460a060020a900460ff1615610cc457600080fd5b610cd0848484846123dd565b5050505050565b60045481565b610ce5612eb0565b60015460a060020a900460ff1615610cfc57600080fd5b600654610d1490600160a060020a0316858585611cb2565b50600654600160a060020a039081166000908152600360208181526040808420888552825292839020835160a0810185528154808252600183015487168285018190526002840154909716828701529382015460608083018290526004909301546080830181905286519586529385015283850192909252925190939287927f9493ae82b9872af74473effb9d302efba34e0df360a99cc5e577cd3f28e3cab2929081900390910190a350505050565b60055481565b60015460a060020a900460ff1615610de157600080fd5b6108ce83838360206040519081016040528060008152506123dd565b600154600160a060020a03163314610e1457600080fd5b60058190556040805182815290517fe7fa8737293f41b5dfa0d5c3e552860a06275bed7015581b083c7be7003308ba9181900360200190a150565b600080836040518082805190602001908083835b60208310610e825780518252601f199092019160209182019101610e63565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310610ede5780518252601f199092019160209182019101610ebf565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16925050505b92915050565b6040805190810160405280600b81526020017f4d61726b6574706c6163650000000000000000000000000000000000000000008152506040805190810160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250610fb1826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b610fbb8282612358565b600160a060020a038316151561101b576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b611024836113a1565b61103685600160a060020a0316612d39565b15156110b2576040805160e560020a62461bcd02815260206004820152603660248201527f54686520616363657074656420746f6b656e2061646472657373206d7573742060448201527f62652061206465706c6f79656420636f6e747261637400000000000000000000606482015290519081900360840190fd5b60028054600160a060020a031916600160a060020a0387161790556110d6846118fb565b60068054600160a060020a031916600160a060020a038616179055604080518181528351918101919091528251600080516020612edf8339815191529184918491908190602080830191606084019187019080838360005b8381101561114657818101518382015260200161112e565b50505050905090810190601f1680156111735780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156111a657818101518382015260200161118e565b50505050905090810190601f1680156111d35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b602083106112165780518252601f1990920191602091820191016111f7565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b602083106112725780518252601f199092019160209182019101611253565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b602083106112e45780518252601f1990920191602091820191016112c5565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b808752600080516020612eff83398151915293870193845291519095945092508291908083835b6020831061135d5780518252601f19909201916020918201910161133e565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050505050565b6040805190810160405280600881526020017f5061757361626c650000000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e392e3000000000000000000000000000000000000000000000000000000081525061143a826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b6114448282612358565b61144d83612d41565b600080516020612edf8339815191528282604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561149f578181015183820152602001611487565b50505050905090810190601f1680156114cc5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156114ff5781810151838201526020016114e7565b50505050905090810190601f16801561152c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b6020831061156f5780518252601f199092019160209182019101611550565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b602083106115cb5780518252601f1990920191602091820191016115ac565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b6020831061163d5780518252601f19909201916020918201910161161e565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b808752600080516020612eff83398151915293870193845291519095945092508291908083835b602083106116b65780518252601f199092019160209182019101611697565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff1916931515939093179092555050505050565b600654600160a060020a031681565b600080600080611715612eb0565b5050600654600160a060020a039081166000908152600360208181526040808420898552825292839020835160a08101855281548082526001830154871693820184905260028301549096169481019490945291820154606084018190526004909201546080840181905293965094509250509193509193565b60036020818152600093845260408085209091529183529120805460018201546002830154938301546004909301549193600160a060020a039182169391169185565b6117da612eb0565b60015460a060020a900460ff16156117f157600080fd5b60065460408051602081019091526000815261181a91600160a060020a031690859085906123dd565b60208181015182516040805191825292810186905282519394503393600160a060020a039092169287927fedcc7e1c269bc295dc24e74dc46b129c8449e6b0544af73b57c4201b78d119db9281900390910190a4505050565b600154600160a060020a0316331461188a57600080fd5b600160a060020a038116151561189f57600080fd5b600154604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360018054600160a060020a031916600160a060020a0392909216919091179055565b600061190f82600160a060020a0316612d39565b151561198a576040805160e560020a62461bcd028152602060048201526024808201527f546865204e465420416464726573732073686f756c64206265206120636f6e7460448201527f7261637400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd00000000000000000000000000000000000000000000000000000000600482015290518291600160a060020a038316916301ffc9a7916024808201926020929091908290030181600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b505050506040513d6020811015611a3957600080fd5b50511515611ab7576040805160e560020a62461bcd02815260206004820152603560248201527f546865204e465420636f6e74726163742068617320616e20696e76616c69642060448201527f45524337323120696d706c656d656e746174696f6e0000000000000000000000606482015290519081900360840190fd5b5050565b611ac3612eb0565b611acb612eb0565b50600160a060020a0380841660009081526003602081815260408084208785528252808420815160a081018352815480825260018301548816948201949094526002820154909616918601919091529182015460608501526004909101546080840152819081901515611b88576040805160e560020a62461bcd02815260206004820152601360248201527f4173736574206e6f74207075626c697368656400000000000000000000000000604482015290519081900360640190fd5b6020840151600160a060020a0316331480611bad5750600154600160a060020a031633145b1515611c03576040805160e560020a62461bcd02815260206004820152601160248201527f556e617574686f72697a65642075736572000000000000000000000000000000604482015290519081900360640190fd5b50508151602080840151604080860151600160a060020a03808b16600090815260038087528482208c83528752848220828155600181018054600160a060020a03199081169091556002820180549091169055908101829055600401558251868152818316958101959095528251959650929490939285169289927f0325426328de5b91ae4ad8462ad4076de4bcaf4551e81556185cacde5a425c6b92918290030190a3509195945050505050565b6000806000611cc0876118fb565b86925082600160a060020a0316636352211e876040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611d0c57600080fd5b505af1158015611d20573d6000803e3d6000fd5b505050506040513d6020811015611d3657600080fd5b5051915033600160a060020a03831614611d9a576040805160e560020a62461bcd02815260206004820181905260248201527f4f6e6c7920746865206f776e65722063616e20637265617465206f7264657273604482015290519081900360640190fd5b30600160a060020a031683600160a060020a031663081812fc886040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b505050506040513d6020811015611e1757600080fd5b5051600160a060020a03161480611ec15750604080517fe985e9c5000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015230602483015291519185169163e985e9c5916044808201926020929091908290030181600087803b158015611e9457600080fd5b505af1158015611ea8573d6000803e3d6000fd5b505050506040513d6020811015611ebe57600080fd5b50515b1515611f3d576040805160e560020a62461bcd02815260206004820152603260248201527f54686520636f6e7472616374206973206e6f7420617574686f72697a6564207460448201527f6f206d616e616765207468652061737365740000000000000000000000000000606482015290519081900360840190fd5b60008511611f95576040805160e560020a62461bcd02815260206004820152601d60248201527f50726963652073686f756c6420626520626967676572207468616e2030000000604482015290519081900360640190fd5b611fa642603c63ffffffff612e5316565b8411612022576040805160e560020a62461bcd02815260206004820152603660248201527f5075626c69636174696f6e2073686f756c64206265206d6f7265207468616e2060448201527f31206d696e75746520696e207468652066757475726500000000000000000000606482015290519081900360840190fd5b60408051426020808301919091526c01000000000000000000000000600160a060020a03808716820284860152605484018b90528b1602607483015260888083018990528351808403909101815260a890920192839052815191929182918401908083835b602083106120a65780518252601f199092019160209182019101612087565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060a0604051908101604052808260001916815260200183600160a060020a0316815260200188600160a060020a03168152602001868152602001858152506003600089600160a060020a0316600160a060020a0316815260200190815260200160002060008881526020019081526020016000206000820151816000019060001916905560208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020160006101000a815481600160a060020a030219169083600160a060020a031602179055506060820151816003015560808201518160040155905050600060055411156122f857600254600154600554604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909216916323b872dd9160648083019260209291908290030181600087803b15801561225057600080fd5b505af1158015612264573d6000803e3d6000fd5b505050506040513d602081101561227a57600080fd5b505115156122f8576040805160e560020a62461bcd02815260206004820152603f60248201527f5472616e73666572696e6720746865207075626c69636174696f6e206665652060448201527f746f20746865204d61726b6574706c616365206f776e6572206661696c656400606482015290519081900360840190fd5b60408051828152600160a060020a0389811660208301528183018890526060820187905291519184169188917f84c66c3f7ba4b390e20e8e8233e2a516f3ce34a72749e4f12bd010dfba238039919081900360800190a350505050505050565b6123628282610e4f565b15611ab7576040805160e560020a62461bcd02815260206004820152603260248201527f52657175657374656420746172676574206d6967726174696f6e20494420686160448201527f7320616c7265616479206265656e2072756e0000000000000000000000000000606482015290519081900360840190fd5b6123e5612eb0565b60006123ef612eb0565b60008060006123fd8a6118fb565b604080517f76657269667946696e6765727072696e742875696e743235362c6279746573298152815190819003602090810182207f01ffc9a70000000000000000000000000000000000000000000000000000000083527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600483015291518c9750600160a060020a038816926301ffc9a792602480820193918290030181600087803b1580156124ab57600080fd5b505af11580156124bf573d6000803e3d6000fd5b505050506040513d60208110156124d557600080fd5b50511561264e57604080517f8f9f4b63000000000000000000000000000000000000000000000000000000008152600481018b815260248201928352895160448301528951600160a060020a03891693638f9f4b63938e938d9390929160640190602085019080838360005b83811015612559578181015183820152602001612541565b50505050905090810190601f1680156125865780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156125a657600080fd5b505af11580156125ba573d6000803e3d6000fd5b505050506040513d60208110156125d057600080fd5b5051151561264e576040805160e560020a62461bcd02815260206004820152602260248201527f5468652061737365742066696e6765727072696e74206973206e6f742076616c60448201527f6964000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03808b1660009081526003602081815260408084208e8552825292839020835160a081018552815480825260018301548716938201939093526002820154909516938501939093529082015460608401526004909101546080830152909450151561270a576040805160e560020a62461bcd02815260206004820152601360248201527f4173736574206e6f74207075626c697368656400000000000000000000000000604482015290519081900360640190fd5b60208401519250600160a060020a0383161515612771576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383163314156127d2576040805160e560020a62461bcd02815260206004820152601160248201527f556e617574686f72697a65642075736572000000000000000000000000000000604482015290519081900360640190fd5b6060840151881461282d576040805160e560020a62461bcd02815260206004820152601860248201527f546865207072696365206973206e6f7420636f72726563740000000000000000604482015290519081900360640190fd5b60808401514210612888576040805160e560020a62461bcd02815260206004820152601160248201527f546865206f726465722065787069726564000000000000000000000000000000604482015290519081900360640190fd5b84600160a060020a0316636352211e8a6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156128d157600080fd5b505af11580156128e5573d6000803e3d6000fd5b505050506040513d60208110156128fb57600080fd5b5051600160a060020a03848116911614612985576040805160e560020a62461bcd02815260206004820152602160248201527f5468652073656c6c6572206973206e6f206c6f6e67657220746865206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50508151600160a060020a03891660009081526003602081815260408084208c85529091528220828155600181018054600160a060020a03199081169091556002820180549091169055908101829055600490810182905554909190821015612b3257612a10620f4240612a046004548b612e6090919063ffffffff16565b9063ffffffff612e8916565b600254600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0392831660248201526044810185905290519395509116916323b872dd916064808201926020929091908290030181600087803b158015612a8a57600080fd5b505af1158015612a9e573d6000803e3d6000fd5b505050506040513d6020811015612ab457600080fd5b50511515612b32576040805160e560020a62461bcd02815260206004820152603360248201527f5472616e73666572696e67207468652063757420746f20746865204d61726b6560448201527f74706c616365206f776e6572206661696c656400000000000000000000000000606482015290519081900360840190fd5b600254600160a060020a03166323b872dd3385612b558c8763ffffffff612e9e16565b6040805160e060020a63ffffffff8716028152600160a060020a0394851660048201529290931660248301526044820152905160648083019260209291908290030181600087803b158015612ba957600080fd5b505af1158015612bbd573d6000803e3d6000fd5b505050506040513d6020811015612bd357600080fd5b50511515612c51576040805160e560020a62461bcd02815260206004820152603060248201527f5472616e73666572696e67207468652073616c6520616d6f756e7420746f207460448201527f68652073656c6c6572206661696c656400000000000000000000000000000000606482015290519081900360840190fd5b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152336024830152604482018c90529151918716916342842e0e9160648082019260009290919082900301818387803b158015612cc257600080fd5b505af1158015612cd6573d6000803e3d6000fd5b505060408051848152600160a060020a038e811660208301528183018d9052915133945091871692508c917f695ec315e8a642a74d450a4505eeea53df699b47a7378c7d752e97d5b16eb9bb9181900360600190a4509198975050505050505050565b6000903b1190565b6040805190810160405280600781526020017f4f776e61626c65000000000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e392e30000000000000000000000000000000000000000000000000000000815250612dda826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b612de48282612358565b60018054600160a060020a031916600160a060020a038516179055604080518181528351918101919091528251600080516020612edf8339815191529184918491908190602080830191606084019187019080838360008381101561149f578181015183820152602001611487565b81810182811015610f1257fe5b6000821515612e7157506000610f12565b50818102818382811515612e8157fe5b0414610f1257fe5b60008183811515612e9657fe5b049392505050565b600082821115612eaa57fe5b50900390565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600dd117a11c22118c9dee4b5a67ce578bc44529dce21ee0ccc439588fbb9fb4ea3696e697469616c697a6564000000000000000000000000000000000000000000a165627a7a7230582036c7967ac0c58341581c36bf16c11cd79c9ae1b889c361b79c7bd26edae38f2f0029
Deployed Bytecode
0x6080604052600436106101455763ffffffff60e060020a60003504166319dad16d811461014a5780631b357750146101645780632b4c32be1461018557806337f82f37146101cc5780633f4ba83a146101e1578063451c3d80146101f6578063514fcac7146102275780635c975abb1461023f5780636a206137146102685780636f652e1a1461028c5780638129fc1c146102b65780638456cb59146102cb5780638da5cb5b146102e05780639b214f77146102f5578063a01f79d414610361578063a1ba444d14610388578063ae4f1198146103a6578063ae7b0333146103bb578063af8996f1146103e2578063c0bac1a8146103fa578063c0c53b8b14610491578063c4d66de8146104be578063d6b26813146104df578063d7b40107146104f4578063e61f38511461053a578063ef46e0ca14610595578063f2fde38b146105b0575b600080fd5b34801561015657600080fd5b506101626004356105d1565b005b34801561017057600080fd5b50610162600160a060020a03600435166106a3565b34801561019157600080fd5b5061019a610713565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff199092168252519081900360200190f35b3480156101d857600080fd5b5061019a610737565b3480156101ed57600080fd5b5061016261076c565b34801561020257600080fd5b5061020b6107e4565b60408051600160a060020a039092168252519081900360200190f35b34801561023357600080fd5b506101626004356107f3565b34801561024b57600080fd5b50610254610875565b604080519115158252519081900360200190f35b34801561027457600080fd5b50610162600160a060020a0360043516602435610885565b34801561029857600080fd5b50610162600160a060020a03600435166024356044356064356108ab565b3480156102c257600080fd5b506101626108d4565b3480156102d757600080fd5b50610162610c21565b3480156102ec57600080fd5b5061020b610c9e565b34801561030157600080fd5b50604080516020601f60643560048181013592830184900484028501840190955281845261016294600160a060020a038135169460248035956044359536956084949301918190840183828082843750949750610cad9650505050505050565b34801561036d57600080fd5b50610376610cd7565b60408051918252519081900360200190f35b34801561039457600080fd5b50610162600435602435604435610cdd565b3480156103b257600080fd5b50610376610dc4565b3480156103c757600080fd5b50610162600160a060020a0360043516602435604435610dca565b3480156103ee57600080fd5b50610162600435610dfd565b34801561040657600080fd5b506040805160206004803580820135601f810184900484028501840190955284845261025494369492936024939284019190819084018382808284375050604080516020601f89358b018035918201839004830284018301909452808352979a999881019791965091820194509250829150840183828082843750949750610e4f9650505050505050565b34801561049d57600080fd5b50610162600160a060020a0360043581169060243581169060443516610f18565b3480156104ca57600080fd5b50610162600160a060020a03600435166113a1565b3480156104eb57600080fd5b5061020b6116f8565b34801561050057600080fd5b5061050c600435611707565b60408051948552600160a060020a039093166020850152838301919091526060830152519081900360800190f35b34801561054657600080fd5b5061055e600160a060020a036004351660243561178f565b60408051958652600160a060020a039485166020870152929093168483015260608401526080830191909152519081900360a00190f35b3480156105a157600080fd5b506101626004356024356117d2565b3480156105bc57600080fd5b50610162600160a060020a0360043516611873565b600154600160a060020a031633146105e857600080fd5b620f42408110610668576040805160e560020a62461bcd02815260206004820152602d60248201527f546865206f776e6572206375742073686f756c64206265206265747765656e2060448201527f3020616e64203939392c39393900000000000000000000000000000000000000606482015290519081900360840190fd5b60048190556040805182815290517ffa406a120a9e7f2b332bfb7a43d3bf1c3f079262202907a6b69c94b2821a02c69181900360200190a150565b600154600160a060020a031633146106ba57600080fd5b6106c3816118fb565b60068054600160a060020a031916600160a060020a0383811691909117918290556040519116907f6e65d1b616d558dd96db7a58e31a954d28d47d57d568e7d7fc7819803878928f90600090a250565b7f80ac58cd0000000000000000000000000000000000000000000000000000000081565b604080517f76657269667946696e6765727072696e742875696e743235362c6279746573298152905190819003602001902081565b600154600160a060020a0316331461078357600080fd5b60015460a060020a900460ff16151561079b57600080fd5b6001805474ff0000000000000000000000000000000000000000191690556040517f7805862f689e2f13df9f062ff482ad3ad112aca9e0847911ed832e158c525b3390600090a1565b600254600160a060020a031681565b6107fb612eb0565b60015460a060020a900460ff161561081257600080fd5b60065461082890600160a060020a031683611abb565b60208082015182516040805191825251939450600160a060020a039091169285927f88bd2ba46f3dc2567144331c35bd4c5ced3d547d8828638a152ddd9591c137a6928290030190a35050565b60015460a060020a900460ff1681565b60015460a060020a900460ff161561089c57600080fd5b6108a68282611abb565b505050565b60015460a060020a900460ff16156108c257600080fd5b6108ce84848484611cb2565b50505050565b6040805190810160405280600a81526020017f4d696772617461626c65000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e322e3100000000000000000000000000000000000000000000000000000081525061096d826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b6109778282612358565b600080516020612edf8339815191528282604051808060200180602001838103835285818151815260200191508051906020019080838360005b838110156109c95781810151838201526020016109b1565b50505050905090810190601f1680156109f65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015610a29578181015183820152602001610a11565b50505050905090810190601f168015610a565780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b60208310610a995780518252601f199092019160209182019101610a7a565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310610af55780518252601f199092019160209182019101610ad6565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b60208310610b675780518252601f199092019160209182019101610b48565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b808752600080516020612eff83398151915293870193845291519095945092508291908083835b60208310610be05780518252601f199092019160209182019101610bc1565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050565b600154600160a060020a03163314610c3857600080fd5b60015460a060020a900460ff1615610c4f57600080fd5b6001805474ff0000000000000000000000000000000000000000191660a060020a1790556040517f6985a02210a168e66602d3235cb6db0e70f92b3ba4d376a33c0f3d9434bff62590600090a1565b600154600160a060020a031681565b60015460a060020a900460ff1615610cc457600080fd5b610cd0848484846123dd565b5050505050565b60045481565b610ce5612eb0565b60015460a060020a900460ff1615610cfc57600080fd5b600654610d1490600160a060020a0316858585611cb2565b50600654600160a060020a039081166000908152600360208181526040808420888552825292839020835160a0810185528154808252600183015487168285018190526002840154909716828701529382015460608083018290526004909301546080830181905286519586529385015283850192909252925190939287927f9493ae82b9872af74473effb9d302efba34e0df360a99cc5e577cd3f28e3cab2929081900390910190a350505050565b60055481565b60015460a060020a900460ff1615610de157600080fd5b6108ce83838360206040519081016040528060008152506123dd565b600154600160a060020a03163314610e1457600080fd5b60058190556040805182815290517fe7fa8737293f41b5dfa0d5c3e552860a06275bed7015581b083c7be7003308ba9181900360200190a150565b600080836040518082805190602001908083835b60208310610e825780518252601f199092019160209182019101610e63565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b60208310610ede5780518252601f199092019160209182019101610ebf565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16925050505b92915050565b6040805190810160405280600b81526020017f4d61726b6574706c6163650000000000000000000000000000000000000000008152506040805190810160405280600581526020017f302e302e31000000000000000000000000000000000000000000000000000000815250610fb1826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b610fbb8282612358565b600160a060020a038316151561101b576040805160e560020a62461bcd02815260206004820152600d60248201527f496e76616c6964206f776e657200000000000000000000000000000000000000604482015290519081900360640190fd5b611024836113a1565b61103685600160a060020a0316612d39565b15156110b2576040805160e560020a62461bcd02815260206004820152603660248201527f54686520616363657074656420746f6b656e2061646472657373206d7573742060448201527f62652061206465706c6f79656420636f6e747261637400000000000000000000606482015290519081900360840190fd5b60028054600160a060020a031916600160a060020a0387161790556110d6846118fb565b60068054600160a060020a031916600160a060020a038616179055604080518181528351918101919091528251600080516020612edf8339815191529184918491908190602080830191606084019187019080838360005b8381101561114657818101518382015260200161112e565b50505050905090810190601f1680156111735780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156111a657818101518382015260200161118e565b50505050905090810190601f1680156111d35780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b602083106112165780518252601f1990920191602091820191016111f7565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b602083106112725780518252601f199092019160209182019101611253565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b602083106112e45780518252601f1990920191602091820191016112c5565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b808752600080516020612eff83398151915293870193845291519095945092508291908083835b6020831061135d5780518252601f19909201916020918201910161133e565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505050505050565b6040805190810160405280600881526020017f5061757361626c650000000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e392e3000000000000000000000000000000000000000000000000000000081525061143a826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b6114448282612358565b61144d83612d41565b600080516020612edf8339815191528282604051808060200180602001838103835285818151815260200191508051906020019080838360005b8381101561149f578181015183820152602001611487565b50505050905090810190601f1680156114cc5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156114ff5781810151838201526020016114e7565b50505050905090810190601f16801561152c5780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a160016000836040518082805190602001908083835b6020831061156f5780518252601f199092019160209182019101611550565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842086519094879450925082918401908083835b602083106115cb5780518252601f1990920191602091820191016115ac565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600192600092869290918291908401908083835b6020831061163d5780518252601f19909201916020918201910161161e565b51815160209384036101000a60001901801990921691161790529201948552506040805194859003820185208582018252600b808752600080516020612eff83398151915293870193845291519095945092508291908083835b602083106116b65780518252601f199092019160209182019101611697565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff1916931515939093179092555050505050565b600654600160a060020a031681565b600080600080611715612eb0565b5050600654600160a060020a039081166000908152600360208181526040808420898552825292839020835160a08101855281548082526001830154871693820184905260028301549096169481019490945291820154606084018190526004909201546080840181905293965094509250509193509193565b60036020818152600093845260408085209091529183529120805460018201546002830154938301546004909301549193600160a060020a039182169391169185565b6117da612eb0565b60015460a060020a900460ff16156117f157600080fd5b60065460408051602081019091526000815261181a91600160a060020a031690859085906123dd565b60208181015182516040805191825292810186905282519394503393600160a060020a039092169287927fedcc7e1c269bc295dc24e74dc46b129c8449e6b0544af73b57c4201b78d119db9281900390910190a4505050565b600154600160a060020a0316331461188a57600080fd5b600160a060020a038116151561189f57600080fd5b600154604051600160a060020a038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360018054600160a060020a031916600160a060020a0392909216919091179055565b600061190f82600160a060020a0316612d39565b151561198a576040805160e560020a62461bcd028152602060048201526024808201527f546865204e465420416464726573732073686f756c64206265206120636f6e7460448201527f7261637400000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50604080517f01ffc9a70000000000000000000000000000000000000000000000000000000081527f80ac58cd00000000000000000000000000000000000000000000000000000000600482015290518291600160a060020a038316916301ffc9a7916024808201926020929091908290030181600087803b158015611a0f57600080fd5b505af1158015611a23573d6000803e3d6000fd5b505050506040513d6020811015611a3957600080fd5b50511515611ab7576040805160e560020a62461bcd02815260206004820152603560248201527f546865204e465420636f6e74726163742068617320616e20696e76616c69642060448201527f45524337323120696d706c656d656e746174696f6e0000000000000000000000606482015290519081900360840190fd5b5050565b611ac3612eb0565b611acb612eb0565b50600160a060020a0380841660009081526003602081815260408084208785528252808420815160a081018352815480825260018301548816948201949094526002820154909616918601919091529182015460608501526004909101546080840152819081901515611b88576040805160e560020a62461bcd02815260206004820152601360248201527f4173736574206e6f74207075626c697368656400000000000000000000000000604482015290519081900360640190fd5b6020840151600160a060020a0316331480611bad5750600154600160a060020a031633145b1515611c03576040805160e560020a62461bcd02815260206004820152601160248201527f556e617574686f72697a65642075736572000000000000000000000000000000604482015290519081900360640190fd5b50508151602080840151604080860151600160a060020a03808b16600090815260038087528482208c83528752848220828155600181018054600160a060020a03199081169091556002820180549091169055908101829055600401558251868152818316958101959095528251959650929490939285169289927f0325426328de5b91ae4ad8462ad4076de4bcaf4551e81556185cacde5a425c6b92918290030190a3509195945050505050565b6000806000611cc0876118fb565b86925082600160a060020a0316636352211e876040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611d0c57600080fd5b505af1158015611d20573d6000803e3d6000fd5b505050506040513d6020811015611d3657600080fd5b5051915033600160a060020a03831614611d9a576040805160e560020a62461bcd02815260206004820181905260248201527f4f6e6c7920746865206f776e65722063616e20637265617465206f7264657273604482015290519081900360640190fd5b30600160a060020a031683600160a060020a031663081812fc886040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b158015611ded57600080fd5b505af1158015611e01573d6000803e3d6000fd5b505050506040513d6020811015611e1757600080fd5b5051600160a060020a03161480611ec15750604080517fe985e9c5000000000000000000000000000000000000000000000000000000008152600160a060020a03848116600483015230602483015291519185169163e985e9c5916044808201926020929091908290030181600087803b158015611e9457600080fd5b505af1158015611ea8573d6000803e3d6000fd5b505050506040513d6020811015611ebe57600080fd5b50515b1515611f3d576040805160e560020a62461bcd02815260206004820152603260248201527f54686520636f6e7472616374206973206e6f7420617574686f72697a6564207460448201527f6f206d616e616765207468652061737365740000000000000000000000000000606482015290519081900360840190fd5b60008511611f95576040805160e560020a62461bcd02815260206004820152601d60248201527f50726963652073686f756c6420626520626967676572207468616e2030000000604482015290519081900360640190fd5b611fa642603c63ffffffff612e5316565b8411612022576040805160e560020a62461bcd02815260206004820152603660248201527f5075626c69636174696f6e2073686f756c64206265206d6f7265207468616e2060448201527f31206d696e75746520696e207468652066757475726500000000000000000000606482015290519081900360840190fd5b60408051426020808301919091526c01000000000000000000000000600160a060020a03808716820284860152605484018b90528b1602607483015260888083018990528351808403909101815260a890920192839052815191929182918401908083835b602083106120a65780518252601f199092019160209182019101612087565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040518091039020905060a0604051908101604052808260001916815260200183600160a060020a0316815260200188600160a060020a03168152602001868152602001858152506003600089600160a060020a0316600160a060020a0316815260200190815260200160002060008881526020019081526020016000206000820151816000019060001916905560208201518160010160006101000a815481600160a060020a030219169083600160a060020a0316021790555060408201518160020160006101000a815481600160a060020a030219169083600160a060020a031602179055506060820151816003015560808201518160040155905050600060055411156122f857600254600154600554604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a03938416602482015260448101929092525191909216916323b872dd9160648083019260209291908290030181600087803b15801561225057600080fd5b505af1158015612264573d6000803e3d6000fd5b505050506040513d602081101561227a57600080fd5b505115156122f8576040805160e560020a62461bcd02815260206004820152603f60248201527f5472616e73666572696e6720746865207075626c69636174696f6e206665652060448201527f746f20746865204d61726b6574706c616365206f776e6572206661696c656400606482015290519081900360840190fd5b60408051828152600160a060020a0389811660208301528183018890526060820187905291519184169188917f84c66c3f7ba4b390e20e8e8233e2a516f3ce34a72749e4f12bd010dfba238039919081900360800190a350505050505050565b6123628282610e4f565b15611ab7576040805160e560020a62461bcd02815260206004820152603260248201527f52657175657374656420746172676574206d6967726174696f6e20494420686160448201527f7320616c7265616479206265656e2072756e0000000000000000000000000000606482015290519081900360840190fd5b6123e5612eb0565b60006123ef612eb0565b60008060006123fd8a6118fb565b604080517f76657269667946696e6765727072696e742875696e743235362c6279746573298152815190819003602090810182207f01ffc9a70000000000000000000000000000000000000000000000000000000083527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916600483015291518c9750600160a060020a038816926301ffc9a792602480820193918290030181600087803b1580156124ab57600080fd5b505af11580156124bf573d6000803e3d6000fd5b505050506040513d60208110156124d557600080fd5b50511561264e57604080517f8f9f4b63000000000000000000000000000000000000000000000000000000008152600481018b815260248201928352895160448301528951600160a060020a03891693638f9f4b63938e938d9390929160640190602085019080838360005b83811015612559578181015183820152602001612541565b50505050905090810190601f1680156125865780820380516001836020036101000a031916815260200191505b509350505050602060405180830381600087803b1580156125a657600080fd5b505af11580156125ba573d6000803e3d6000fd5b505050506040513d60208110156125d057600080fd5b5051151561264e576040805160e560020a62461bcd02815260206004820152602260248201527f5468652061737365742066696e6765727072696e74206973206e6f742076616c60448201527f6964000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b600160a060020a03808b1660009081526003602081815260408084208e8552825292839020835160a081018552815480825260018301548716938201939093526002820154909516938501939093529082015460608401526004909101546080830152909450151561270a576040805160e560020a62461bcd02815260206004820152601360248201527f4173736574206e6f74207075626c697368656400000000000000000000000000604482015290519081900360640190fd5b60208401519250600160a060020a0383161515612771576040805160e560020a62461bcd02815260206004820152600f60248201527f496e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a0383163314156127d2576040805160e560020a62461bcd02815260206004820152601160248201527f556e617574686f72697a65642075736572000000000000000000000000000000604482015290519081900360640190fd5b6060840151881461282d576040805160e560020a62461bcd02815260206004820152601860248201527f546865207072696365206973206e6f7420636f72726563740000000000000000604482015290519081900360640190fd5b60808401514210612888576040805160e560020a62461bcd02815260206004820152601160248201527f546865206f726465722065787069726564000000000000000000000000000000604482015290519081900360640190fd5b84600160a060020a0316636352211e8a6040518263ffffffff1660e060020a02815260040180828152602001915050602060405180830381600087803b1580156128d157600080fd5b505af11580156128e5573d6000803e3d6000fd5b505050506040513d60208110156128fb57600080fd5b5051600160a060020a03848116911614612985576040805160e560020a62461bcd02815260206004820152602160248201527f5468652073656c6c6572206973206e6f206c6f6e67657220746865206f776e6560448201527f7200000000000000000000000000000000000000000000000000000000000000606482015290519081900360840190fd5b50508151600160a060020a03891660009081526003602081815260408084208c85529091528220828155600181018054600160a060020a03199081169091556002820180549091169055908101829055600490810182905554909190821015612b3257612a10620f4240612a046004548b612e6090919063ffffffff16565b9063ffffffff612e8916565b600254600154604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152600160a060020a0392831660248201526044810185905290519395509116916323b872dd916064808201926020929091908290030181600087803b158015612a8a57600080fd5b505af1158015612a9e573d6000803e3d6000fd5b505050506040513d6020811015612ab457600080fd5b50511515612b32576040805160e560020a62461bcd02815260206004820152603360248201527f5472616e73666572696e67207468652063757420746f20746865204d61726b6560448201527f74706c616365206f776e6572206661696c656400000000000000000000000000606482015290519081900360840190fd5b600254600160a060020a03166323b872dd3385612b558c8763ffffffff612e9e16565b6040805160e060020a63ffffffff8716028152600160a060020a0394851660048201529290931660248301526044820152905160648083019260209291908290030181600087803b158015612ba957600080fd5b505af1158015612bbd573d6000803e3d6000fd5b505050506040513d6020811015612bd357600080fd5b50511515612c51576040805160e560020a62461bcd02815260206004820152603060248201527f5472616e73666572696e67207468652073616c6520616d6f756e7420746f207460448201527f68652073656c6c6572206661696c656400000000000000000000000000000000606482015290519081900360840190fd5b604080517f42842e0e000000000000000000000000000000000000000000000000000000008152600160a060020a038581166004830152336024830152604482018c90529151918716916342842e0e9160648082019260009290919082900301818387803b158015612cc257600080fd5b505af1158015612cd6573d6000803e3d6000fd5b505060408051848152600160a060020a038e811660208301528183018d9052915133945091871692508c917f695ec315e8a642a74d450a4505eeea53df699b47a7378c7d752e97d5b16eb9bb9181900360600190a4509198975050505050505050565b6000903b1190565b6040805190810160405280600781526020017f4f776e61626c65000000000000000000000000000000000000000000000000008152506040805190810160405280600581526020017f312e392e30000000000000000000000000000000000000000000000000000000815250612dda826040805190810160405280600b8152602001600080516020612eff833981519152815250612358565b612de48282612358565b60018054600160a060020a031916600160a060020a038516179055604080518181528351918101919091528251600080516020612edf8339815191529184918491908190602080830191606084019187019080838360008381101561149f578181015183820152602001611487565b81810182811015610f1257fe5b6000821515612e7157506000610f12565b50818102818382811515612e8157fe5b0414610f1257fe5b60008183811515612e9657fe5b049392505050565b600082821115612eaa57fe5b50900390565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152905600dd117a11c22118c9dee4b5a67ce578bc44529dce21ee0ccc439588fbb9fb4ea3696e697469616c697a6564000000000000000000000000000000000000000000a165627a7a7230582036c7967ac0c58341581c36bf16c11cd79c9ae1b889c361b79c7bd26edae38f2f0029
Swarm Source
bzzr://36c7967ac0c58341581c36bf16c11cd79c9ae1b889c361b79c7bd26edae38f2f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 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.