Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 741 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Release | 20135517 | 85 days ago | IN | 0 ETH | 0.00055026 | ||||
Lock | 20026363 | 100 days ago | IN | 0 ETH | 0.00128846 | ||||
Lock | 20020763 | 101 days ago | IN | 0 ETH | 0.00116529 | ||||
Release | 19946807 | 111 days ago | IN | 0 ETH | 0.00040655 | ||||
Lock | 19723296 | 143 days ago | IN | 0 ETH | 0.00050068 | ||||
Lock | 19712563 | 144 days ago | IN | 0 ETH | 0.00072784 | ||||
Lock | 19709552 | 145 days ago | IN | 0 ETH | 0.000437 | ||||
Lock | 19703803 | 145 days ago | IN | 0 ETH | 0.00052881 | ||||
Lock | 19669064 | 150 days ago | IN | 0 ETH | 0.0009698 | ||||
Lock | 19537738 | 169 days ago | IN | 0 ETH | 0.00117573 | ||||
Lock | 19509947 | 173 days ago | IN | 0 ETH | 0.00084265 | ||||
Lock | 19454444 | 180 days ago | IN | 0 ETH | 0.00210607 | ||||
Lock | 19390631 | 189 days ago | IN | 0 ETH | 0.00291486 | ||||
Release | 19352676 | 195 days ago | IN | 0 ETH | 0.00270948 | ||||
Release | 19174032 | 220 days ago | IN | 0 ETH | 0.00234653 | ||||
Release | 19161880 | 221 days ago | IN | 0 ETH | 0.00083585 | ||||
Lock | 19100301 | 230 days ago | IN | 0 ETH | 0.0006094 | ||||
Lock | 18994468 | 245 days ago | IN | 0 ETH | 0.00096654 | ||||
Lock | 18989168 | 246 days ago | IN | 0 ETH | 0.00083123 | ||||
Lock | 18966278 | 249 days ago | IN | 0 ETH | 0.00110792 | ||||
Lock | 18965669 | 249 days ago | IN | 0 ETH | 0.00102124 | ||||
Lock | 18926031 | 255 days ago | IN | 0 ETH | 0.0010723 | ||||
Lock | 18918594 | 256 days ago | IN | 0 ETH | 0.00137316 | ||||
Lock | 18897687 | 259 days ago | IN | 0 ETH | 0.00075792 | ||||
Release | 18809256 | 271 days ago | IN | 0 ETH | 0.00234507 |
Loading...
Loading
Contract Name:
SatoshiblesStacksBridgeLock
Compiler Version
v0.8.10+commit.fc410830
Optimization Enabled:
Yes with 10000 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /** * ____ _ _ _ _ _ * / ___| __ _| |_ ___ ___| |__ (_) |__ | | ___ ___ * \___ \ / _` | __/ _ \/ __| '_ \| | '_ \| |/ _ \/ __| * ___) | (_| | || (_) \__ \ | | | | |_) | | __/\__ \ * |____/ \__,_|\__\___/|___/_| |_|_|_.__/|_|\___||___/ * ____ _ _ ____ _ _ * / ___|| |_ __ _ ___| | _____| __ ) _ __(_) __| | __ _ ___ * \___ \| __/ _` |/ __| |/ / __| _ \| '__| |/ _` |/ _` |/ _ \ * ___) | || (_| | (__| <\__ \ |_) | | | | (_| | (_| | __/ * |____/ \__\__,_|\___|_|\_\___/____/|_| |_|\__,_|\__, |\___| * |___/ */ import "./ERC721Receiver.sol"; import "./Interfaces.sol"; import "./MerkleProof.sol"; import "./OwnableSafe.sol"; /** * @title Satoshibles Stacks Bridge Lock * @notice NFT locker for the ethereum side of the Satoshibles Stacks Bridge * @author Aaron Hanson <[email protected]> * The StacksBridge can be used at https://stacksbridge.com/ */ contract SatoshiblesStacksBridgeLock is OwnableSafe, ERC721Receiver { /// Maximum number of tokens that can be locked/released in one tx uint256 public constant MAX_BATCH_SIZE = 50; /// Satoshibles contract instance IERC721 public immutable SATOSHIBLE_CONTRACT; /// Bridge worker address address public worker; /// Whether the bridge is open overall bool public bridgeIsOpen; /// Whether the bridge is open to the public bool public bridgeIsOpenToPublic; /// Gas escrow fee paid per locked token, to cover gas when releasing uint256 public gasEscrowFee; /// Merkle root summarizing all accounts with early access bytes32 public earlyAccessMerkleRoot; /// Tracks number of early access tickets used per address mapping(address => uint256) public earlyAccessTicketsUsed; /** * @notice Emitted when the bridgeIsOpen flag changes * @param isOpen Whether the bridge is now open overall */ event BridgeStateChanged( bool indexed isOpen ); /** * @notice Emitted when the bridgeIsOpenToPublic flag changes * @param isOpenToPublic Whether the bridge is now open to the public */ event BridgePublicStateChanged( bool indexed isOpenToPublic ); /** * @notice Emitted when a Satoshible is locked (bridging to Stacks) * @param tokenId The satoshible token ID * @param ethereumSender The sender's eth address * @param stacksReceiver The receiver's stacks address */ event Locked( uint256 indexed tokenId, address indexed ethereumSender, string stacksReceiver ); /** * @notice Requires the bridge to be open */ modifier onlyWhenBridgeIsOpen() { require( bridgeIsOpen == true, "Bridge is not open" ); _; } /** * @notice Requires the bridge to be open to the public */ modifier onlyWhenBridgeIsOpenToPublic() { require( bridgeIsOpen == true && bridgeIsOpenToPublic == true, "Bridge is not open to public" ); _; } /** * @notice Requires msg.sender to be the bridge worker address */ modifier onlyWorker() { require( _msgSender() == worker, "Caller is not the worker" ); _; } /** * @param _immutableSatoshible The Satoshible contract address * @param _worker The bridge worker address * @param _earlyAccessMerkleRoot The initial early access merkle root */ constructor( address _immutableSatoshible, address _worker, bytes32 _earlyAccessMerkleRoot ) { SATOSHIBLE_CONTRACT = IERC721( _immutableSatoshible ); worker = _worker; earlyAccessMerkleRoot = _earlyAccessMerkleRoot; bridgeIsOpen = true; } /** * @notice Locks one or more satoshibles to bridge to Stacks * @param _tokenIds The satoshible token IDs * @param _stacksReceiver The stacks address to receive the satoshibles */ function lock( uint256[] calldata _tokenIds, string calldata _stacksReceiver ) external payable onlyWhenBridgeIsOpenToPublic { _lock( _tokenIds, _stacksReceiver ); } /** * @notice Locks one or more satoshibles to bridge to Stacks (early access) * @param _tokenIds The satoshible token IDs * @param _stacksReceiver The stacks address to receive the satoshibles * @param _earlyAccessTickets The total early access tickets for _account * @param _proof The merkle proof to be verified */ function lockEarlyAccess( uint256[] calldata _tokenIds, string calldata _stacksReceiver, uint256 _earlyAccessTickets, bytes32[] calldata _proof ) external payable onlyWhenBridgeIsOpen { require( verifyEarlyAccessTickets( _msgSender(), _earlyAccessTickets, _proof ) == true, "Invalid early access proof" ); unchecked { require( earlyAccessTicketsUsed[_msgSender()] + _tokenIds.length <= _earlyAccessTickets, "Not enough tickets remaining" ); earlyAccessTicketsUsed[_msgSender()] += _tokenIds.length; } _lock( _tokenIds, _stacksReceiver ); } /** * @notice Releases one or more satoshibles after bridging from Stacks * @param _tokenIds The satoshible token IDs * @param _receiver The eth address to receive the satoshibles */ function release( uint256[] calldata _tokenIds, address _receiver ) external onlyWorker onlyWhenBridgeIsOpen { require( _tokenIds.length > 0, "No token IDs specified" ); require( _tokenIds.length <= MAX_BATCH_SIZE, "Too many token IDs (max 50)" ); unchecked { for (uint256 i = 0; i < _tokenIds.length; i++) { SATOSHIBLE_CONTRACT.safeTransferFrom( address(this), _receiver, _tokenIds[i] ); } } } /** * @notice Opens or closes the bridge overall * @param _isOpen Whether to open or close the bridge overall */ function setBridgeIsOpen( bool _isOpen ) external onlyOwner { bridgeIsOpen = _isOpen; emit BridgeStateChanged( _isOpen ); } /** * @notice Opens or closes the bridge to the public * @param _isOpenToPublic Whether to open or close the bridge to the public */ function setBridgeIsOpenToPublic( bool _isOpenToPublic ) external onlyOwner { bridgeIsOpenToPublic = _isOpenToPublic; emit BridgePublicStateChanged( _isOpenToPublic ); } /** * @notice Sets a new earlyAccessMerkleRoot * @param _newMerkleRoot The new merkle root */ function setEarlyAccessMerkleRoot( bytes32 _newMerkleRoot ) external onlyOwner { earlyAccessMerkleRoot = _newMerkleRoot; } /** * @notice Sets a new worker address * @param _newWorker The new worker address */ function setWorker( address _newWorker ) external onlyOwner { worker = _newWorker; } /** * @notice Sets a new gas escrow fee * @param _newGasEscrowFee The new gas escrow fee amount (in wei) */ function setGasEscrowFee( uint256 _newGasEscrowFee ) external onlyOwner { gasEscrowFee = _newGasEscrowFee; } /** * @notice Transfers gas escrow ether to worker address * @param _amount The amount to transfer (in wei) */ function transferGasEscrowToWorker( uint256 _amount ) external onlyOwner { payable(worker).transfer( _amount ); } /** * @notice Withdraws any ERC20 tokens in case of accidental transfers * @dev WARNING: Double check token transfer function * @param _token The contract address of token * @param _to The address to which to withdraw * @param _amount The amount to withdraw * @param _hasVerifiedToken Must be true (sanity check) */ function withdrawERC20( address _token, address _to, uint256 _amount, bool _hasVerifiedToken ) external onlyOwner { require( _hasVerifiedToken == true, "Need to verify token" ); IERC20(_token).transfer( _to, _amount ); } /** * @notice Withdraws any ERC721 tokens in case of accidental transfers * @dev WARNING: Double check token safeTransferFrom function * @param _token The contract address of token * @param _to The address to which to withdraw * @param _tokenIds The token IDs to withdraw * @param _hasVerifiedToken Must be true (sanity check) */ function withdrawERC721( address _token, address _to, uint256[] calldata _tokenIds, bool _hasVerifiedToken ) external onlyOwner { require( _hasVerifiedToken == true, "Need to verify token" ); unchecked { for (uint256 i = 0; i < _tokenIds.length; i++) { IERC721(_token).safeTransferFrom( address(this), _to, _tokenIds[i] ); } } } /** * @notice Verifies the merkle proof of an account's early access tickets * @param _account The account to verify * @param _earlyAccessTickets The total early access tickets for _account * @param _proof The merkle proof to be verified * @return isVerified True if the merkle proof is verified */ function verifyEarlyAccessTickets( address _account, uint256 _earlyAccessTickets, bytes32[] calldata _proof ) public view returns (bool isVerified) { bytes32 node = keccak256( abi.encodePacked( _account, _earlyAccessTickets ) ); isVerified = MerkleProof.verify( _proof, earlyAccessMerkleRoot, node ); } /** * @dev Locks one or more satoshibles to bridge to Stacks * @param _tokenIds The satoshible token IDs * @param _stacksReceiver The stacks address to receive the satoshibles */ function _lock( uint256[] calldata _tokenIds, string calldata _stacksReceiver ) private { require( _tokenIds.length > 0, "No token IDs specified" ); require( _tokenIds.length <= MAX_BATCH_SIZE, "Too many token IDs (max 50)" ); unchecked { require( msg.value == gasEscrowFee * _tokenIds.length, "Incorrect gas escrow ether" ); for (uint256 i = 0; i < _tokenIds.length; i++) { uint256 tokenId = _tokenIds[i]; SATOSHIBLE_CONTRACT.safeTransferFrom( _msgSender(), address(this), tokenId ); emit Locked( tokenId, _msgSender(), _stacksReceiver ); } } } }
// SPDX-License-Identifier: MIT // Based on OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) // With renounceOwnership() removed pragma solidity ^0.8.10; import "./ContextSimple.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract OwnableSafe is ContextSimple { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; library MerkleProof { /** * @dev Verifies a merkle proof for a root and leaf node * @param _proof The merkle proof to verify * @param _root The merkle root * @param _leaf The leaf node * @return isVerified True if the merkle proof is verified */ function verify( bytes32[] memory _proof, bytes32 _root, bytes32 _leaf ) internal pure returns (bool isVerified) { bytes32 computedHash = _leaf; unchecked { for (uint256 i = 0; i < _proof.length; i++) { bytes32 proofElement = _proof[i]; if (computedHash <= proofElement) { computedHash = keccak256(abi.encodePacked(computedHash, proofElement)); } else { computedHash = keccak256(abi.encodePacked(proofElement, computedHash)); } } } isVerified = computedHash == _root; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; interface IERC20 { function transfer( address recipient, uint256 amount ) external returns (bool); } interface IERC721 { function safeTransferFrom( address from, address to, uint256 tokenId ) external; }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.10; /** * @notice ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @notice ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes calldata _data ) external pure returns (bytes4) { return 0x150b7a02; } }
// SPDX-License-Identifier: MIT // Based on OpenZeppelin Contracts v4.4.0 (utils/Context.sol) // With _msgData() removed pragma solidity ^0.8.10; /** * @dev Provides the msg.sender in the current execution context. */ abstract contract ContextSimple { function _msgSender() internal view virtual returns (address) { return msg.sender; } }
{ "remappings": [], "optimizer": { "enabled": true, "runs": 10000 }, "evmVersion": "london", "libraries": {}, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_immutableSatoshible","type":"address"},{"internalType":"address","name":"_worker","type":"address"},{"internalType":"bytes32","name":"_earlyAccessMerkleRoot","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"isOpenToPublic","type":"bool"}],"name":"BridgePublicStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"isOpen","type":"bool"}],"name":"BridgeStateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"ethereumSender","type":"address"},{"indexed":false,"internalType":"string","name":"stacksReceiver","type":"string"}],"name":"Locked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SATOSHIBLE_CONTRACT","outputs":[{"internalType":"contract IERC721","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeIsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bridgeIsOpenToPublic","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyAccessMerkleRoot","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"earlyAccessTicketsUsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasEscrowFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"string","name":"_stacksReceiver","type":"string"}],"name":"lock","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"string","name":"_stacksReceiver","type":"string"},{"internalType":"uint256","name":"_earlyAccessTickets","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"lockEarlyAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOpen","type":"bool"}],"name":"setBridgeIsOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isOpenToPublic","type":"bool"}],"name":"setBridgeIsOpenToPublic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_newMerkleRoot","type":"bytes32"}],"name":"setEarlyAccessMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newGasEscrowFee","type":"uint256"}],"name":"setGasEscrowFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newWorker","type":"address"}],"name":"setWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferGasEscrowToWorker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_earlyAccessTickets","type":"uint256"},{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"verifyEarlyAccessTickets","outputs":[{"internalType":"bool","name":"isVerified","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bool","name":"_hasVerifiedToken","type":"bool"}],"name":"withdrawERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"},{"internalType":"bool","name":"_hasVerifiedToken","type":"bool"}],"name":"withdrawERC721","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"worker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60a06040523480156200001157600080fd5b5060405162001bbb38038062001bbb8339810160408190526200003491620000e3565b6200003f3362000076565b6001600160a01b03928316608052600180546003929092556001600160a81b03199091169190921617600160a01b17905562000124565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000de57600080fd5b919050565b600080600060608486031215620000f957600080fd5b6200010484620000c6565b92506200011460208501620000c6565b9150604084015190509250925092565b608051611a6d6200014e6000396000818161019701528181610db201526113520152611a6d6000f3fe6080604052600436106101805760003560e01c8063a302d51a116100d6578063ce5ad3a91161007f578063d67d394111610059578063d67d3941146104ca578063d94dd5ed146104ea578063f2fde38b1461050a57600080fd5b8063ce5ad3a914610475578063cfdbf25414610495578063d3d704cf146104aa57600080fd5b8063be644cd4116100b0578063be644cd414610415578063c26f6d4414610435578063c677dede1461045557600080fd5b8063a302d51a146103d9578063a62aee0f146103ec578063ae55545c146103ff57600080fd5b80634d547ada11610138578063702ac60411610112578063702ac6041461036e5780638da5cb5b1461038e578063a2e1e421146103b957600080fd5b80634d547ada146102e257806364f4f0a01461030f57806367ce337d1461034157600080fd5b806326a66a4c1161016957806326a66a4c146102595780633533b8e01461029c57806343b6330b146102c057600080fd5b806306f44b6a14610185578063150b7a02146101e3575b600080fd5b34801561019157600080fd5b506101b97f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101ef57600080fd5b506102286101fe36600461160a565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101da565b34801561026557600080fd5b5060015461028c907501000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101da565b3480156102a857600080fd5b506102b260035481565b6040519081526020016101da565b3480156102cc57600080fd5b506102e06102db3660046116cc565b61052a565b005b3480156102ee57600080fd5b506001546101b99073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031b57600080fd5b5060015461028c9074010000000000000000000000000000000000000000900460ff1681565b34801561034d57600080fd5b506102b261035c366004611745565b60046020526000908152604090205481565b34801561037a57600080fd5b506102e0610389366004611767565b6106cb565b34801561039a57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101b9565b3480156103c557600080fd5b506102e06103d4366004611780565b610737565b6102e06103e73660046117cf565b610890565b6102e06103fa36600461183b565b61093b565b34801561040b57600080fd5b506102b260025481565b34801561042157600080fd5b506102e06104303660046118df565b610a91565b34801561044157600080fd5b506102e0610450366004611745565b610b6e565b34801561046157600080fd5b506102e06104703660046118fc565b610c1c565b34801561048157600080fd5b506102e0610490366004611767565b610ea0565b3480156104a157600080fd5b506102b2603281565b3480156104b657600080fd5b506102e06104c5366004611767565b610f52565b3480156104d657600080fd5b5061028c6104e5366004611950565b610fbe565b3480156104f657600080fd5b506102e06105053660046118df565b61105f565b34801561051657600080fd5b506102e0610525366004611745565b61113b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001811515146105e85760405162461bcd60e51b815260206004820152601460248201527f4e65656420746f2076657269667920746f6b656e000000000000000000000000604482015260640161058d565b60005b828110156106c3578573ffffffffffffffffffffffffffffffffffffffff166342842e0e30878787868181106106235761062361199e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b5050600190920191506105eb9050565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600255565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b6001811515146107f05760405162461bcd60e51b815260206004820152601460248201527f4e65656420746f2076657269667920746f6b656e000000000000000000000000604482015260640161058d565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015610865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088991906119cd565b5050505050565b6001805474010000000000000000000000000000000000000000900460ff1615151480156108dd5750600180547501000000000000000000000000000000000000000000900460ff161515145b6109295760405162461bcd60e51b815260206004820152601c60248201527f427269646765206973206e6f74206f70656e20746f207075626c696300000000604482015260640161058d565b61093584848484611237565b50505050565b6001805474010000000000000000000000000000000000000000900460ff161515146109a95760405162461bcd60e51b815260206004820152601260248201527f427269646765206973206e6f74206f70656e0000000000000000000000000000604482015260640161058d565b6109b533848484610fbe565b1515600114610a065760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964206561726c79206163636573732070726f6f66000000000000604482015260640161058d565b336000908152600460205260409020548601831015610a675760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768207469636b6574732072656d61696e696e6700000000604482015260640161058d565b336000908152600460205260409020805487019055610a8887878787611237565b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610af85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000831515908102919091179091556040517ffdf0435ec5189e55b237df0d515c8152640284923bd57ecdbb5fc161d97345ea90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bd55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c995760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f742074686520776f726b65720000000000000000604482015260640161058d565b6001805474010000000000000000000000000000000000000000900460ff16151514610d075760405162461bcd60e51b815260206004820152601260248201527f427269646765206973206e6f74206f70656e0000000000000000000000000000604482015260640161058d565b81610d545760405162461bcd60e51b815260206004820152601660248201527f4e6f20746f6b656e204944732073706563696669656400000000000000000000604482015260640161058d565b6032821115610da55760405162461bcd60e51b815260206004820152601b60248201527f546f6f206d616e7920746f6b656e2049447320286d6178203530290000000000604482015260640161058d565b60005b82811015610935577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342842e0e3084878786818110610e0057610e0061199e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610e7c57600080fd5b505af1158015610e90573d6000803e3d6000fd5b505060019092019150610da89050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b60015460405173ffffffffffffffffffffffffffffffffffffffff9091169082156108fc029083906000818181858888f19350505050158015610f4e573d6000803e3d6000fd5b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fb95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600355565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602082015260348101849052600090819060540160405160208183030381529060405280519060200120905061105584848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600354915084905061147e565b9695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515908102919091179091556040517f1f9db46e4b9d0b955c20133ba10fa2412a9d43a5b06f8f51d65d9c3098d3643d90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111a25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b73ffffffffffffffffffffffffffffffffffffffff811661122b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161058d565b61123481611523565b50565b826112845760405162461bcd60e51b815260206004820152601660248201527f4e6f20746f6b656e204944732073706563696669656400000000000000000000604482015260640161058d565b60328311156112d55760405162461bcd60e51b815260206004820152601b60248201527f546f6f206d616e7920746f6b656e2049447320286d6178203530290000000000604482015260640161058d565b600254830234146113285760405162461bcd60e51b815260206004820152601a60248201527f496e636f72726563742067617320657363726f77206574686572000000000000604482015260640161058d565b60005b838110156108895760008585838181106113475761134761199e565b9050602002013590507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166342842e0e6113933390565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015230602482015260448101849052606401600060405180830381600087803b15801561140657600080fd5b505af115801561141a573d6000803e3d6000fd5b505050506114253390565b73ffffffffffffffffffffffffffffffffffffffff16817fe88f694ce77b5c884db7382c7f22ba8c0a5dc6f65f60a346c0209b532b6459e8868660405161146d9291906119ea565b60405180910390a35060010161132b565b600081815b85518110156115185760008682815181106114a0576114a061199e565b602002602001015190508083116114e257604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061150f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50600101611483565b509092149392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115bc57600080fd5b919050565b60008083601f8401126115d357600080fd5b50813567ffffffffffffffff8111156115eb57600080fd5b60208301915083602082850101111561160357600080fd5b9250929050565b60008060008060006080868803121561162257600080fd5b61162b86611598565b945061163960208701611598565b935060408601359250606086013567ffffffffffffffff81111561165c57600080fd5b611668888289016115c1565b969995985093965092949392505050565b60008083601f84011261168b57600080fd5b50813567ffffffffffffffff8111156116a357600080fd5b6020830191508360208260051b850101111561160357600080fd5b801515811461123457600080fd5b6000806000806000608086880312156116e457600080fd5b6116ed86611598565b94506116fb60208701611598565b9350604086013567ffffffffffffffff81111561171757600080fd5b61172388828901611679565b9094509250506060860135611737816116be565b809150509295509295909350565b60006020828403121561175757600080fd5b61176082611598565b9392505050565b60006020828403121561177957600080fd5b5035919050565b6000806000806080858703121561179657600080fd5b61179f85611598565b93506117ad60208601611598565b92506040850135915060608501356117c4816116be565b939692955090935050565b600080600080604085870312156117e557600080fd5b843567ffffffffffffffff808211156117fd57600080fd5b61180988838901611679565b9096509450602087013591508082111561182257600080fd5b5061182f878288016115c1565b95989497509550505050565b60008060008060008060006080888a03121561185657600080fd5b873567ffffffffffffffff8082111561186e57600080fd5b61187a8b838c01611679565b909950975060208a013591508082111561189357600080fd5b61189f8b838c016115c1565b909750955060408a0135945060608a01359150808211156118bf57600080fd5b506118cc8a828b01611679565b989b979a50959850939692959293505050565b6000602082840312156118f157600080fd5b8135611760816116be565b60008060006040848603121561191157600080fd5b833567ffffffffffffffff81111561192857600080fd5b61193486828701611679565b9094509250611947905060208501611598565b90509250925092565b6000806000806060858703121561196657600080fd5b61196f85611598565b935060208501359250604085013567ffffffffffffffff81111561199257600080fd5b61182f87828801611679565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156119df57600080fd5b8151611760816116be565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010191905056fea26469706673582212205f92c513ab6d02bc462bdc4e2bfdf6f681e62e2c013ef39ae0dff7ed3523de1b64736f6c634300080a00330000000000000000000000000b0b186841c55d8a09d53db48dc8cab9dbf4dbd600000000000000000000000000f879b1e26a3b6575061f80f241d28a66e835f2a28d5a6417b932ca5c582b8df875f434c1b206283ed932e7959b47be734da3fe
Deployed Bytecode
0x6080604052600436106101805760003560e01c8063a302d51a116100d6578063ce5ad3a91161007f578063d67d394111610059578063d67d3941146104ca578063d94dd5ed146104ea578063f2fde38b1461050a57600080fd5b8063ce5ad3a914610475578063cfdbf25414610495578063d3d704cf146104aa57600080fd5b8063be644cd4116100b0578063be644cd414610415578063c26f6d4414610435578063c677dede1461045557600080fd5b8063a302d51a146103d9578063a62aee0f146103ec578063ae55545c146103ff57600080fd5b80634d547ada11610138578063702ac60411610112578063702ac6041461036e5780638da5cb5b1461038e578063a2e1e421146103b957600080fd5b80634d547ada146102e257806364f4f0a01461030f57806367ce337d1461034157600080fd5b806326a66a4c1161016957806326a66a4c146102595780633533b8e01461029c57806343b6330b146102c057600080fd5b806306f44b6a14610185578063150b7a02146101e3575b600080fd5b34801561019157600080fd5b506101b97f0000000000000000000000000b0b186841c55d8a09d53db48dc8cab9dbf4dbd681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101ef57600080fd5b506102286101fe36600461160a565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000090911681526020016101da565b34801561026557600080fd5b5060015461028c907501000000000000000000000000000000000000000000900460ff1681565b60405190151581526020016101da565b3480156102a857600080fd5b506102b260035481565b6040519081526020016101da565b3480156102cc57600080fd5b506102e06102db3660046116cc565b61052a565b005b3480156102ee57600080fd5b506001546101b99073ffffffffffffffffffffffffffffffffffffffff1681565b34801561031b57600080fd5b5060015461028c9074010000000000000000000000000000000000000000900460ff1681565b34801561034d57600080fd5b506102b261035c366004611745565b60046020526000908152604090205481565b34801561037a57600080fd5b506102e0610389366004611767565b6106cb565b34801561039a57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101b9565b3480156103c557600080fd5b506102e06103d4366004611780565b610737565b6102e06103e73660046117cf565b610890565b6102e06103fa36600461183b565b61093b565b34801561040b57600080fd5b506102b260025481565b34801561042157600080fd5b506102e06104303660046118df565b610a91565b34801561044157600080fd5b506102e0610450366004611745565b610b6e565b34801561046157600080fd5b506102e06104703660046118fc565b610c1c565b34801561048157600080fd5b506102e0610490366004611767565b610ea0565b3480156104a157600080fd5b506102b2603281565b3480156104b657600080fd5b506102e06104c5366004611767565b610f52565b3480156104d657600080fd5b5061028c6104e5366004611950565b610fbe565b3480156104f657600080fd5b506102e06105053660046118df565b61105f565b34801561051657600080fd5b506102e0610525366004611745565b61113b565b60005473ffffffffffffffffffffffffffffffffffffffff1633146105965760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001811515146105e85760405162461bcd60e51b815260206004820152601460248201527f4e65656420746f2076657269667920746f6b656e000000000000000000000000604482015260640161058d565b60005b828110156106c3578573ffffffffffffffffffffffffffffffffffffffff166342842e0e30878787868181106106235761062361199e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b15801561069f57600080fd5b505af11580156106b3573d6000803e3d6000fd5b5050600190920191506105eb9050565b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146107325760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600255565b60005473ffffffffffffffffffffffffffffffffffffffff16331461079e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b6001811515146107f05760405162461bcd60e51b815260206004820152601460248201527f4e65656420746f2076657269667920746f6b656e000000000000000000000000604482015260640161058d565b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526024820184905285169063a9059cbb906044016020604051808303816000875af1158015610865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088991906119cd565b5050505050565b6001805474010000000000000000000000000000000000000000900460ff1615151480156108dd5750600180547501000000000000000000000000000000000000000000900460ff161515145b6109295760405162461bcd60e51b815260206004820152601c60248201527f427269646765206973206e6f74206f70656e20746f207075626c696300000000604482015260640161058d565b61093584848484611237565b50505050565b6001805474010000000000000000000000000000000000000000900460ff161515146109a95760405162461bcd60e51b815260206004820152601260248201527f427269646765206973206e6f74206f70656e0000000000000000000000000000604482015260640161058d565b6109b533848484610fbe565b1515600114610a065760405162461bcd60e51b815260206004820152601a60248201527f496e76616c6964206561726c79206163636573732070726f6f66000000000000604482015260640161058d565b336000908152600460205260409020548601831015610a675760405162461bcd60e51b815260206004820152601c60248201527f4e6f7420656e6f756768207469636b6574732072656d61696e696e6700000000604482015260640161058d565b336000908152600460205260409020805487019055610a8887878787611237565b50505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610af85760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600180547fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff167501000000000000000000000000000000000000000000831515908102919091179091556040517ffdf0435ec5189e55b237df0d515c8152640284923bd57ecdbb5fc161d97345ea90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff163314610bd55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60015473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c995760405162461bcd60e51b815260206004820152601860248201527f43616c6c6572206973206e6f742074686520776f726b65720000000000000000604482015260640161058d565b6001805474010000000000000000000000000000000000000000900460ff16151514610d075760405162461bcd60e51b815260206004820152601260248201527f427269646765206973206e6f74206f70656e0000000000000000000000000000604482015260640161058d565b81610d545760405162461bcd60e51b815260206004820152601660248201527f4e6f20746f6b656e204944732073706563696669656400000000000000000000604482015260640161058d565b6032821115610da55760405162461bcd60e51b815260206004820152601b60248201527f546f6f206d616e7920746f6b656e2049447320286d6178203530290000000000604482015260640161058d565b60005b82811015610935577f0000000000000000000000000b0b186841c55d8a09d53db48dc8cab9dbf4dbd673ffffffffffffffffffffffffffffffffffffffff166342842e0e3084878786818110610e0057610e0061199e565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b16815273ffffffffffffffffffffffffffffffffffffffff958616600482015294909316602485015250602090910201356044820152606401600060405180830381600087803b158015610e7c57600080fd5b505af1158015610e90573d6000803e3d6000fd5b505060019092019150610da89050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610f075760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b60015460405173ffffffffffffffffffffffffffffffffffffffff9091169082156108fc029083906000818181858888f19350505050158015610f4e573d6000803e3d6000fd5b5050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610fb95760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600355565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b16602082015260348101849052600090819060540160405160208183030381529060405280519060200120905061105584848080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050600354915084905061147e565b9695505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146110c65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b600180547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000831515908102919091179091556040517f1f9db46e4b9d0b955c20133ba10fa2412a9d43a5b06f8f51d65d9c3098d3643d90600090a250565b60005473ffffffffffffffffffffffffffffffffffffffff1633146111a25760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161058d565b73ffffffffffffffffffffffffffffffffffffffff811661122b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161058d565b61123481611523565b50565b826112845760405162461bcd60e51b815260206004820152601660248201527f4e6f20746f6b656e204944732073706563696669656400000000000000000000604482015260640161058d565b60328311156112d55760405162461bcd60e51b815260206004820152601b60248201527f546f6f206d616e7920746f6b656e2049447320286d6178203530290000000000604482015260640161058d565b600254830234146113285760405162461bcd60e51b815260206004820152601a60248201527f496e636f72726563742067617320657363726f77206574686572000000000000604482015260640161058d565b60005b838110156108895760008585838181106113475761134761199e565b9050602002013590507f0000000000000000000000000b0b186841c55d8a09d53db48dc8cab9dbf4dbd673ffffffffffffffffffffffffffffffffffffffff166342842e0e6113933390565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff909116600482015230602482015260448101849052606401600060405180830381600087803b15801561140657600080fd5b505af115801561141a573d6000803e3d6000fd5b505050506114253390565b73ffffffffffffffffffffffffffffffffffffffff16817fe88f694ce77b5c884db7382c7f22ba8c0a5dc6f65f60a346c0209b532b6459e8868660405161146d9291906119ea565b60405180910390a35060010161132b565b600081815b85518110156115185760008682815181106114a0576114a061199e565b602002602001015190508083116114e257604080516020810185905290810182905260600160405160208183030381529060405280519060200120925061150f565b60408051602081018390529081018490526060016040516020818303038152906040528051906020012092505b50600101611483565b509092149392505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b803573ffffffffffffffffffffffffffffffffffffffff811681146115bc57600080fd5b919050565b60008083601f8401126115d357600080fd5b50813567ffffffffffffffff8111156115eb57600080fd5b60208301915083602082850101111561160357600080fd5b9250929050565b60008060008060006080868803121561162257600080fd5b61162b86611598565b945061163960208701611598565b935060408601359250606086013567ffffffffffffffff81111561165c57600080fd5b611668888289016115c1565b969995985093965092949392505050565b60008083601f84011261168b57600080fd5b50813567ffffffffffffffff8111156116a357600080fd5b6020830191508360208260051b850101111561160357600080fd5b801515811461123457600080fd5b6000806000806000608086880312156116e457600080fd5b6116ed86611598565b94506116fb60208701611598565b9350604086013567ffffffffffffffff81111561171757600080fd5b61172388828901611679565b9094509250506060860135611737816116be565b809150509295509295909350565b60006020828403121561175757600080fd5b61176082611598565b9392505050565b60006020828403121561177957600080fd5b5035919050565b6000806000806080858703121561179657600080fd5b61179f85611598565b93506117ad60208601611598565b92506040850135915060608501356117c4816116be565b939692955090935050565b600080600080604085870312156117e557600080fd5b843567ffffffffffffffff808211156117fd57600080fd5b61180988838901611679565b9096509450602087013591508082111561182257600080fd5b5061182f878288016115c1565b95989497509550505050565b60008060008060008060006080888a03121561185657600080fd5b873567ffffffffffffffff8082111561186e57600080fd5b61187a8b838c01611679565b909950975060208a013591508082111561189357600080fd5b61189f8b838c016115c1565b909750955060408a0135945060608a01359150808211156118bf57600080fd5b506118cc8a828b01611679565b989b979a50959850939692959293505050565b6000602082840312156118f157600080fd5b8135611760816116be565b60008060006040848603121561191157600080fd5b833567ffffffffffffffff81111561192857600080fd5b61193486828701611679565b9094509250611947905060208501611598565b90509250925092565b6000806000806060858703121561196657600080fd5b61196f85611598565b935060208501359250604085013567ffffffffffffffff81111561199257600080fd5b61182f87828801611679565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000602082840312156119df57600080fd5b8151611760816116be565b60208152816020820152818360408301376000818301604090810191909152601f9092017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016010191905056fea26469706673582212205f92c513ab6d02bc462bdc4e2bfdf6f681e62e2c013ef39ae0dff7ed3523de1b64736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000b0b186841c55d8a09d53db48dc8cab9dbf4dbd600000000000000000000000000f879b1e26a3b6575061f80f241d28a66e835f2a28d5a6417b932ca5c582b8df875f434c1b206283ed932e7959b47be734da3fe
-----Decoded View---------------
Arg [0] : _immutableSatoshible (address): 0x0B0b186841C55D8a09d53Db48dc8cab9dbf4Dbd6
Arg [1] : _worker (address): 0x00f879b1e26A3B6575061F80F241D28A66e835f2
Arg [2] : _earlyAccessMerkleRoot (bytes32): 0xa28d5a6417b932ca5c582b8df875f434c1b206283ed932e7959b47be734da3fe
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000b0b186841c55d8a09d53db48dc8cab9dbf4dbd6
Arg [1] : 00000000000000000000000000f879b1e26a3b6575061f80f241d28a66e835f2
Arg [2] : a28d5a6417b932ca5c582b8df875f434c1b206283ed932e7959b47be734da3fe
Loading...
Loading
Loading...
Loading
OVERVIEW
Satoshibles are a series of 5000 algorithmically generated crypto collectible NFTs that have been hand illustrated. Each one is unique.Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.