Overview
POL Balance
0 POL
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 10 from a total of 10 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Request For Upda... | 45862161 | 492 days ago | IN | 0 POL | 0.00300387 | ||||
Request For Upda... | 45861051 | 492 days ago | IN | 0 POL | 0.00225679 | ||||
Request For Upda... | 45858227 | 492 days ago | IN | 0 POL | 0.00264248 | ||||
Request For Upda... | 45263788 | 507 days ago | IN | 0 POL | 0.00251774 | ||||
Request For Upda... | 44235647 | 533 days ago | IN | 0 POL | 0.00438301 | ||||
Request For Upda... | 44235551 | 533 days ago | IN | 0 POL | 0.00403496 | ||||
Request For Upda... | 44234637 | 533 days ago | IN | 0 POL | 0.00403401 | ||||
Request For Upda... | 43972976 | 540 days ago | IN | 0 POL | 0.00379527 | ||||
Request For Upda... | 43970576 | 540 days ago | IN | 0 POL | 0.00429549 | ||||
Update Signer | 43969777 | 540 days ago | IN | 0 POL | 0.00401653 |
Loading...
Loading
Contract Name:
DIARequestBaseOracle
Compiler Version
v0.8.4+commit.c7e474f2
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; contract DIARequestBaseOracle is Ownable { using EnumerableSet for EnumerableSet.AddressSet; EnumerableSet.AddressSet private _oracleUpdaters; string name = "DiaData"; string version = "1.0.0"; uint256 chainId = 1; address verifyingContract = 0x0000000000000000000000000000000000000000; address public signer; struct Message { string Symbol; address Address; string Blockchain; uint256 Price; uint256 Time; bytes Signature; uint256 TimeRequest; } mapping(string => Message) public values; // call using symbol mapping(string => Message) public timebasedvalues; // call using asset-blockchain-timestamp using Strings for uint256; event OracleUpdate(string key, uint256 value, uint256 timestamp); event UpdaterAddressChange(address newUpdater); event RequestUpdate( address assetAddress, string blockchain, uint256 timestamp ); event Key(string k); constructor() { _oracleUpdaters.add(msg.sender); signer = msg.sender; } function setValue(Message memory value) external { require(getSigner(value) == signer); values[value.Symbol] = value; string memory timeString = value.TimeRequest.toString(); string memory timekey = string( abi.encodePacked( value.Blockchain, "-", _toString(value.Address), "-", timeString ) ); emit Key(timekey); timebasedvalues[timekey] = value; timebasedvalues[value.Symbol] = value; emit OracleUpdate(value.Symbol, value.Price, value.Time); } function requestForUpdate( address assetAddress, string memory blockchain, uint256 timestamp ) external { emit RequestUpdate(assetAddress, blockchain, timestamp); } function getValue( string memory key ) external view returns (Message memory) { return values[key]; } function updateSigner(address _newSigner) external onlyOwner { signer = _newSigner; } function addUpdater(address oracleUpdaterAddress) external onlyOwner { _oracleUpdaters.add(oracleUpdaterAddress); } function removeUpdater(address oracleUpdaterAddress) external onlyOwner { _oracleUpdaters.remove(oracleUpdaterAddress); } function changeOwner(address newOwner) external onlyOwner { _oracleUpdaters.add(newOwner); _oracleUpdaters.remove(owner()); _transferOwnership(newOwner); } function getSigner(Message memory message) public view returns (address) { bytes memory _signature; _signature = message.Signature; string memory EIP712_DOMAIN_TYPE = "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"; string memory MESSAGE_TYPE = "Message(string Symbol,address Address,string Blockchain,uint256 Price,uint256 Time)"; bytes32 DOMAIN_SEPARATOR = keccak256( abi.encode( keccak256(abi.encodePacked(EIP712_DOMAIN_TYPE)), keccak256(abi.encodePacked(name)), keccak256(abi.encodePacked(version)), chainId, verifyingContract ) ); bytes32 hash = keccak256( abi.encodePacked( "\x19\x01", // backslash is needed to escape the character DOMAIN_SEPARATOR, keccak256( abi.encode( keccak256(abi.encodePacked(MESSAGE_TYPE)), keccak256(bytes(message.Symbol)), message.Address, keccak256(bytes(message.Blockchain)), message.Price, message.Time ) ) ) ); // split signature bytes32 r; bytes32 s; uint8 v; if (_signature.length != 65) { return address(0); } assembly { r := mload(add(_signature, 32)) s := mload(add(_signature, 64)) v := byte(0, mload(add(_signature, 96))) } if (v < 27) { v += 27; } if (v != 27 && v != 28) { return address(0); } else { // verify return ecrecover(hash, v, r, s); } } // Internal function to convert address to string function _toString(address _addr) internal pure returns (string memory) { bytes32 value = bytes32(uint256(uint160(_addr))); bytes memory alphabet = "0123456789abcdef"; bytes memory str = new bytes(42); str[0] = "0"; str[1] = "x"; for (uint256 i = 0; i < 20; i++) { str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)]; str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)]; } return string(str); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"k","type":"string"}],"name":"Key","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"key","type":"string"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OracleUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"assetAddress","type":"address"},{"indexed":false,"internalType":"string","name":"blockchain","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"RequestUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newUpdater","type":"address"}],"name":"UpdaterAddressChange","type":"event"},{"inputs":[{"internalType":"address","name":"oracleUpdaterAddress","type":"address"}],"name":"addUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"Symbol","type":"string"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"string","name":"Blockchain","type":"string"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Time","type":"uint256"},{"internalType":"bytes","name":"Signature","type":"bytes"},{"internalType":"uint256","name":"TimeRequest","type":"uint256"}],"internalType":"struct DIARequestBaseOracle.Message","name":"message","type":"tuple"}],"name":"getSigner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"key","type":"string"}],"name":"getValue","outputs":[{"components":[{"internalType":"string","name":"Symbol","type":"string"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"string","name":"Blockchain","type":"string"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Time","type":"uint256"},{"internalType":"bytes","name":"Signature","type":"bytes"},{"internalType":"uint256","name":"TimeRequest","type":"uint256"}],"internalType":"struct DIARequestBaseOracle.Message","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"oracleUpdaterAddress","type":"address"}],"name":"removeUpdater","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"assetAddress","type":"address"},{"internalType":"string","name":"blockchain","type":"string"},{"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"requestForUpdate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"string","name":"Symbol","type":"string"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"string","name":"Blockchain","type":"string"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Time","type":"uint256"},{"internalType":"bytes","name":"Signature","type":"bytes"},{"internalType":"uint256","name":"TimeRequest","type":"uint256"}],"internalType":"struct DIARequestBaseOracle.Message","name":"value","type":"tuple"}],"name":"setValue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"timebasedvalues","outputs":[{"internalType":"string","name":"Symbol","type":"string"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"string","name":"Blockchain","type":"string"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Time","type":"uint256"},{"internalType":"bytes","name":"Signature","type":"bytes"},{"internalType":"uint256","name":"TimeRequest","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newSigner","type":"address"}],"name":"updateSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"values","outputs":[{"internalType":"string","name":"Symbol","type":"string"},{"internalType":"address","name":"Address","type":"address"},{"internalType":"string","name":"Blockchain","type":"string"},{"internalType":"uint256","name":"Price","type":"uint256"},{"internalType":"uint256","name":"Time","type":"uint256"},{"internalType":"bytes","name":"Signature","type":"bytes"},{"internalType":"uint256","name":"TimeRequest","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600781526020017f4469614461746100000000000000000000000000000000000000000000000000815250600390805190602001906200005192919062000319565b506040518060400160405280600581526020017f312e302e30000000000000000000000000000000000000000000000000000000815250600490805190602001906200009f92919062000319565b5060016005556000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000f457600080fd5b5062000115620001096200017860201b60201c565b6200018060201b60201c565b620001303360016200024460201b620011a41790919060201c565b5033600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200042e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000274836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200027c60201b60201c565b905092915050565b6000620002908383620002f660201b60201c565b620002eb578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002f0565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200032790620003c9565b90600052602060002090601f0160209004810192826200034b576000855562000397565b82601f106200036657805160ff191683800117855562000397565b8280016001018555821562000397579182015b828111156200039657825182559160200191906001019062000379565b5b509050620003a69190620003aa565b5090565b5b80821115620003c5576000816000905550600101620003ab565b5090565b60006002820490506001821680620003e257607f821691505b60208210811415620003f957620003f8620003ff565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b612cdd806200043e6000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a6f9dae111610066578063a6f9dae114610241578063a7ecd37e1461025d578063f2fde38b14610279578063fcc65e0a14610295576100ea565b80638da5cb5b146101d75780638e805a97146101f5578063960384a014610211576100ea565b806349ae1157116100c857806349ae1157146101455780635a9ade8b146101615780635c8b8d2414610197578063715018a6146101cd576100ea565b806304b07a5e146100ef578063238ac9331461010b57806343d24a5e14610129575b600080fd5b61010960048036038101906101049190611ee3565b6102c5565b005b6101136102e5565b60405161012091906123dc565b60405180910390f35b610143600480360381019061013e9190611ee3565b61030b565b005b61015f600480360381019061015a9190611f0c565b61032b565b005b61017b60048036038101906101769190611f73565b61036b565b60405161018e9796959493929190612550565b60405180910390f35b6101b160048036038101906101ac9190611f73565b61057b565b6040516101c49796959493929190612550565b60405180910390f35b6101d561078b565b005b6101df61079f565b6040516101ec91906123dc565b60405180910390f35b61020f600480360381019061020a9190611fb4565b6107c8565b005b61022b60048036038101906102269190611f73565b610b98565b6040516102389190612652565b60405180910390f35b61025b60048036038101906102569190611ee3565b610dfa565b005b61027760048036038101906102729190611ee3565b610e3f565b005b610293600480360381019061028e9190611ee3565b610e8b565b005b6102af60048036038101906102aa9190611fb4565b610f0f565b6040516102bc91906123dc565b60405180910390f35b6102cd6111d4565b6102e181600161125290919063ffffffff16565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103136111d4565b6103278160016111a490919063ffffffff16565b5050565b7f615905b33f41fb7748afca85845bf0c6f2b8e570dafe6e2900d6082d54000b8b83838360405161035e939291906123f7565b60405180910390a1505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546103a490612956565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090612956565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461045890612956565b80601f016020809104026020016040519081016040528092919081815260200182805461048490612956565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b5050505050908060030154908060040154908060050180546104f290612956565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90612956565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050908060060154905087565b6009818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546105b490612956565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090612956565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461066890612956565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612956565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b50505050509080600301549080600401549080600501805461070290612956565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612956565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050908060060154905087565b6107936111d4565b61079d6000611282565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661080a82610f0f565b73ffffffffffffffffffffffffffffffffffffffff161461082a57600080fd5b806008826000015160405161083f9190612330565b90815260200160405180910390206000820151816000019080519060200190610869929190611b75565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906108cd929190611b75565b50606082015181600301556080820151816004015560a08201518160050190805190602001906108fe929190611bfb565b5060c08201518160060155905050600061091b8260c00151611346565b90506000826040015161093184602001516114f3565b8360405160200161094493929190612347565b60405160208183030381529060405290507f6bb5438899b7a2e1b2e7de98838553d7383920495bfbac1c2f66753894b0b9bf81604051610984919061252e565b60405180910390a18260098260405161099d9190612330565b908152602001604051809103902060008201518160000190805190602001906109c7929190611b75565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610a2b929190611b75565b50606082015181600301556080820151816004015560a0820151816005019080519060200190610a5c929190611bfb565b5060c082015181600601559050508260098460000151604051610a7f9190612330565b90815260200160405180910390206000820151816000019080519060200190610aa9929190611b75565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610b0d929190611b75565b50606082015181600301556080820151816004015560a0820151816005019080519060200190610b3e929190611bfb565b5060c082015181600601559050507fca0b5292bc004458150424070dbce820c622f608abd60e37eceeff0a23d5318d836000015184606001518560800151604051610b8b939291906125d4565b60405180910390a1505050565b610ba0611c81565b600882604051610bb09190612330565b90815260200160405180910390206040518060e0016040529081600082018054610bd990612956565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0590612956565b8015610c525780601f10610c2757610100808354040283529160200191610c52565b820191906000526020600020905b815481529060010190602001808311610c3557829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610cc190612956565b80601f0160208091040260200160405190810160405280929190818152602001828054610ced90612956565b8015610d3a5780601f10610d0f57610100808354040283529160200191610d3a565b820191906000526020600020905b815481529060010190602001808311610d1d57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582018054610d6790612956565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9390612956565b8015610de05780601f10610db557610100808354040283529160200191610de0565b820191906000526020600020905b815481529060010190602001808311610dc357829003601f168201915b505050505081526020016006820154815250509050919050565b610e026111d4565b610e168160016111a490919063ffffffff16565b50610e32610e2261079f565b600161125290919063ffffffff16565b50610e3c81611282565b50565b610e476111d4565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e936111d4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90612612565b60405180910390fd5b610f0c81611282565b50565b600060608260a0015190506000604051806080016040528060528152602001612c566052913990506000604051806080016040528060538152602001612c03605391399050600082604051602001610f679190612330565b604051602081830303815290604052805190602001206003604051602001610f8f919061238e565b604051602081830303815290604052805190602001206004604051602001610fb7919061238e565b60405160208183030381529060405280519060200120600554600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051602001611007959493929190612496565b604051602081830303815290604052805190602001209050600081836040516020016110339190612330565b6040516020818303038152906040528051906020012088600001518051906020012089602001518a60400151805190602001208b606001518c6080015160405160200161108596959493929190612435565b604051602081830303815290604052805190602001206040516020016110ac9291906123a5565b604051602081830303815290604052805190602001209050600080600060418851146110e35760009850505050505050505061119f565b6020880151925060408801519150606088015160001a9050601b8160ff16101561111757601b8161111491906127cb565b90505b601b8160ff161415801561112f5750601c8160ff1614155b156111455760009850505050505050505061119f565b6001848285856040516000815260200160405260405161116894939291906124e9565b6020604051602081039080840390855afa15801561118a573d6000803e3d6000fd5b50505060206040510351985050505050505050505b919050565b60006111cc836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611954565b905092915050565b6111dc6119c4565b73ffffffffffffffffffffffffffffffffffffffff166111fa61079f565b73ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790612632565b60405180910390fd5b565b600061127a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119cc565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6060600082141561138e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506114ee565b600082905060005b600082146113c05780806113a9906129b9565b915050600a826113b99190612802565b9150611396565b60008167ffffffffffffffff811115611402577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156114345781602001600182028036833780820191505090505b5090505b600085146114e75760018261144d919061288d565b9150600a8561145c9190612a0c565b60306114689190612775565b60f81b8183815181106114a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114e09190612802565b9450611438565b8093505050505b919050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b905060006040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506000602a67ffffffffffffffff811115611590577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115c25781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611620577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106116aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156119485782600485600c846116f69190612775565b6020811061172d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611792577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b826002836117ab9190612833565b60026117b79190612775565b815181106117ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f60f81b85600c846118319190612775565b60208110611868577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b1660f81c60ff16815181106118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b826002836118c39190612833565b60036118cf9190612775565b81518110611906577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611940906129b9565b9150506116dc565b50809350505050919050565b60006119608383611b52565b6119b95782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506119be565b600090505b92915050565b600033905090565b60008083600101600084815260200190815260200160002054905060008114611b465760006001826119fe919061288d565b9050600060018660000180549050611a16919061288d565b9050818114611ad1576000866000018281548110611a5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611b4c565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054611b8190612956565b90600052602060002090601f016020900481019282611ba35760008555611bea565b82601f10611bbc57805160ff1916838001178555611bea565b82800160010185558215611bea579182015b82811115611be9578251825591602001919060010190611bce565b5b509050611bf79190611cd4565b5090565b828054611c0790612956565b90600052602060002090601f016020900481019282611c295760008555611c70565b82601f10611c4257805160ff1916838001178555611c70565b82800160010185558215611c70579182015b82811115611c6f578251825591602001919060010190611c54565b5b509050611c7d9190611cd4565b5090565b6040518060e0016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081526020016000815260200160608152602001600081525090565b5b80821115611ced576000816000905550600101611cd5565b5090565b6000611d04611cff84612699565b612674565b905082815260208101848484011115611d1c57600080fd5b611d27848285612914565b509392505050565b6000611d42611d3d846126ca565b612674565b905082815260208101848484011115611d5a57600080fd5b611d65848285612914565b509392505050565b600081359050611d7c81612bd4565b92915050565b600082601f830112611d9357600080fd5b8135611da3848260208601611cf1565b91505092915050565b600082601f830112611dbd57600080fd5b8135611dcd848260208601611d2f565b91505092915050565b600060e08284031215611de857600080fd5b611df260e0612674565b9050600082013567ffffffffffffffff811115611e0e57600080fd5b611e1a84828501611dac565b6000830152506020611e2e84828501611d6d565b602083015250604082013567ffffffffffffffff811115611e4e57600080fd5b611e5a84828501611dac565b6040830152506060611e6e84828501611ece565b6060830152506080611e8284828501611ece565b60808301525060a082013567ffffffffffffffff811115611ea257600080fd5b611eae84828501611d82565b60a08301525060c0611ec284828501611ece565b60c08301525092915050565b600081359050611edd81612beb565b92915050565b600060208284031215611ef557600080fd5b6000611f0384828501611d6d565b91505092915050565b600080600060608486031215611f2157600080fd5b6000611f2f86828701611d6d565b935050602084013567ffffffffffffffff811115611f4c57600080fd5b611f5886828701611dac565b9250506040611f6986828701611ece565b9150509250925092565b600060208284031215611f8557600080fd5b600082013567ffffffffffffffff811115611f9f57600080fd5b611fab84828501611dac565b91505092915050565b600060208284031215611fc657600080fd5b600082013567ffffffffffffffff811115611fe057600080fd5b611fec84828501611dd6565b91505092915050565b611ffe816128c1565b82525050565b61200d816128c1565b82525050565b61201c816128d3565b82525050565b61203361202e826128d3565b612a02565b82525050565b600061204482612710565b61204e8185612726565b935061205e818560208601612923565b61206781612af9565b840191505092915050565b600061207d82612710565b6120878185612737565b9350612097818560208601612923565b6120a081612af9565b840191505092915050565b60006120b68261271b565b6120c08185612748565b93506120d0818560208601612923565b6120d981612af9565b840191505092915050565b60006120ef8261271b565b6120f98185612759565b9350612109818560208601612923565b61211281612af9565b840191505092915050565b60006121288261271b565b612132818561276a565b9350612142818560208601612923565b80840191505092915050565b6000815461215b81612956565b612165818661276a565b945060018216600081146121805760018114612191576121c4565b60ff198316865281860193506121c4565b61219a856126fb565b60005b838110156121bc5781548189015260018201915060208101905061219d565b838801955050505b50505092915050565b60006121da602683612759565b91506121e582612b0a565b604082019050919050565b60006121fd60028361276a565b915061220882612b59565b600282019050919050565b6000612220602083612759565b915061222b82612b82565b602082019050919050565b600061224360018361276a565b915061224e82612bab565b600182019050919050565b600060e083016000830151848203600086015261227682826120ab565b915050602083015161228b6020860182611ff5565b50604083015184820360408601526122a382826120ab565b91505060608301516122b86060860182612303565b5060808301516122cb6080860182612303565b5060a083015184820360a08601526122e38282612039565b91505060c08301516122f860c0860182612303565b508091505092915050565b61230c816128fd565b82525050565b61231b816128fd565b82525050565b61232a81612907565b82525050565b600061233c828461211d565b915081905092915050565b6000612353828661211d565b915061235e82612236565b915061236a828561211d565b915061237582612236565b9150612381828461211d565b9150819050949350505050565b600061239a828461214e565b915081905092915050565b60006123b0826121f0565b91506123bc8285612022565b6020820191506123cc8284612022565b6020820191508190509392505050565b60006020820190506123f16000830184612004565b92915050565b600060608201905061240c6000830186612004565b818103602083015261241e81856120e4565b905061242d6040830184612312565b949350505050565b600060c08201905061244a6000830189612013565b6124576020830188612013565b6124646040830187612004565b6124716060830186612013565b61247e6080830185612312565b61248b60a0830184612312565b979650505050505050565b600060a0820190506124ab6000830188612013565b6124b86020830187612013565b6124c56040830186612013565b6124d26060830185612312565b6124df6080830184612004565b9695505050505050565b60006080820190506124fe6000830187612013565b61250b6020830186612321565b6125186040830185612013565b6125256060830184612013565b95945050505050565b6000602082019050818103600083015261254881846120e4565b905092915050565b600060e082019050818103600083015261256a818a6120e4565b90506125796020830189612004565b818103604083015261258b81886120e4565b905061259a6060830187612312565b6125a76080830186612312565b81810360a08301526125b98185612072565b90506125c860c0830184612312565b98975050505050505050565b600060608201905081810360008301526125ee81866120e4565b90506125fd6020830185612312565b61260a6040830184612312565b949350505050565b6000602082019050818103600083015261262b816121cd565b9050919050565b6000602082019050818103600083015261264b81612213565b9050919050565b6000602082019050818103600083015261266c8184612259565b905092915050565b600061267e61268f565b905061268a8282612988565b919050565b6000604051905090565b600067ffffffffffffffff8211156126b4576126b3612aca565b5b6126bd82612af9565b9050602081019050919050565b600067ffffffffffffffff8211156126e5576126e4612aca565b5b6126ee82612af9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612780826128fd565b915061278b836128fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127c0576127bf612a3d565b5b828201905092915050565b60006127d682612907565b91506127e183612907565b92508260ff038211156127f7576127f6612a3d565b5b828201905092915050565b600061280d826128fd565b9150612818836128fd565b92508261282857612827612a6c565b5b828204905092915050565b600061283e826128fd565b9150612849836128fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561288257612881612a3d565b5b828202905092915050565b6000612898826128fd565b91506128a3836128fd565b9250828210156128b6576128b5612a3d565b5b828203905092915050565b60006128cc826128dd565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612941578082015181840152602081019050612926565b83811115612950576000848401525b50505050565b6000600282049050600182168061296e57607f821691505b6020821081141561298257612981612a9b565b5b50919050565b61299182612af9565b810181811067ffffffffffffffff821117156129b0576129af612aca565b5b80604052505050565b60006129c4826128fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129f7576129f6612a3d565b5b600182019050919050565b6000819050919050565b6000612a17826128fd565b9150612a22836128fd565b925082612a3257612a31612a6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b612bdd816128c1565b8114612be857600080fd5b50565b612bf4816128fd565b8114612bff57600080fd5b5056fe4d65737361676528737472696e672053796d626f6c2c6164647265737320416464726573732c737472696e6720426c6f636b636861696e2c75696e743235362050726963652c75696e743235362054696d6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a264697066735822122041f194f200c8afb7f209eaaa8ee2963a4896fa39b1b6c2ae1c4c8404a8f37a3d64736f6c63430008040033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638da5cb5b1161008c578063a6f9dae111610066578063a6f9dae114610241578063a7ecd37e1461025d578063f2fde38b14610279578063fcc65e0a14610295576100ea565b80638da5cb5b146101d75780638e805a97146101f5578063960384a014610211576100ea565b806349ae1157116100c857806349ae1157146101455780635a9ade8b146101615780635c8b8d2414610197578063715018a6146101cd576100ea565b806304b07a5e146100ef578063238ac9331461010b57806343d24a5e14610129575b600080fd5b61010960048036038101906101049190611ee3565b6102c5565b005b6101136102e5565b60405161012091906123dc565b60405180910390f35b610143600480360381019061013e9190611ee3565b61030b565b005b61015f600480360381019061015a9190611f0c565b61032b565b005b61017b60048036038101906101769190611f73565b61036b565b60405161018e9796959493929190612550565b60405180910390f35b6101b160048036038101906101ac9190611f73565b61057b565b6040516101c49796959493929190612550565b60405180910390f35b6101d561078b565b005b6101df61079f565b6040516101ec91906123dc565b60405180910390f35b61020f600480360381019061020a9190611fb4565b6107c8565b005b61022b60048036038101906102269190611f73565b610b98565b6040516102389190612652565b60405180910390f35b61025b60048036038101906102569190611ee3565b610dfa565b005b61027760048036038101906102729190611ee3565b610e3f565b005b610293600480360381019061028e9190611ee3565b610e8b565b005b6102af60048036038101906102aa9190611fb4565b610f0f565b6040516102bc91906123dc565b60405180910390f35b6102cd6111d4565b6102e181600161125290919063ffffffff16565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6103136111d4565b6103278160016111a490919063ffffffff16565b5050565b7f615905b33f41fb7748afca85845bf0c6f2b8e570dafe6e2900d6082d54000b8b83838360405161035e939291906123f7565b60405180910390a1505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546103a490612956565b80601f01602080910402602001604051908101604052809291908181526020018280546103d090612956565b801561041d5780601f106103f25761010080835404028352916020019161041d565b820191906000526020600020905b81548152906001019060200180831161040057829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461045890612956565b80601f016020809104026020016040519081016040528092919081815260200182805461048490612956565b80156104d15780601f106104a6576101008083540402835291602001916104d1565b820191906000526020600020905b8154815290600101906020018083116104b457829003601f168201915b5050505050908060030154908060040154908060050180546104f290612956565b80601f016020809104026020016040519081016040528092919081815260200182805461051e90612956565b801561056b5780601f106105405761010080835404028352916020019161056b565b820191906000526020600020905b81548152906001019060200180831161054e57829003601f168201915b5050505050908060060154905087565b6009818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546105b490612956565b80601f01602080910402602001604051908101604052809291908181526020018280546105e090612956565b801561062d5780601f106106025761010080835404028352916020019161062d565b820191906000526020600020905b81548152906001019060200180831161061057829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201805461066890612956565b80601f016020809104026020016040519081016040528092919081815260200182805461069490612956565b80156106e15780601f106106b6576101008083540402835291602001916106e1565b820191906000526020600020905b8154815290600101906020018083116106c457829003601f168201915b50505050509080600301549080600401549080600501805461070290612956565b80601f016020809104026020016040519081016040528092919081815260200182805461072e90612956565b801561077b5780601f106107505761010080835404028352916020019161077b565b820191906000526020600020905b81548152906001019060200180831161075e57829003601f168201915b5050505050908060060154905087565b6107936111d4565b61079d6000611282565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661080a82610f0f565b73ffffffffffffffffffffffffffffffffffffffff161461082a57600080fd5b806008826000015160405161083f9190612330565b90815260200160405180910390206000820151816000019080519060200190610869929190611b75565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060408201518160020190805190602001906108cd929190611b75565b50606082015181600301556080820151816004015560a08201518160050190805190602001906108fe929190611bfb565b5060c08201518160060155905050600061091b8260c00151611346565b90506000826040015161093184602001516114f3565b8360405160200161094493929190612347565b60405160208183030381529060405290507f6bb5438899b7a2e1b2e7de98838553d7383920495bfbac1c2f66753894b0b9bf81604051610984919061252e565b60405180910390a18260098260405161099d9190612330565b908152602001604051809103902060008201518160000190805190602001906109c7929190611b75565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610a2b929190611b75565b50606082015181600301556080820151816004015560a0820151816005019080519060200190610a5c929190611bfb565b5060c082015181600601559050508260098460000151604051610a7f9190612330565b90815260200160405180910390206000820151816000019080519060200190610aa9929190611b75565b5060208201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002019080519060200190610b0d929190611b75565b50606082015181600301556080820151816004015560a0820151816005019080519060200190610b3e929190611bfb565b5060c082015181600601559050507fca0b5292bc004458150424070dbce820c622f608abd60e37eceeff0a23d5318d836000015184606001518560800151604051610b8b939291906125d4565b60405180910390a1505050565b610ba0611c81565b600882604051610bb09190612330565b90815260200160405180910390206040518060e0016040529081600082018054610bd990612956565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0590612956565b8015610c525780601f10610c2757610100808354040283529160200191610c52565b820191906000526020600020905b815481529060010190602001808311610c3557829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600282018054610cc190612956565b80601f0160208091040260200160405190810160405280929190818152602001828054610ced90612956565b8015610d3a5780601f10610d0f57610100808354040283529160200191610d3a565b820191906000526020600020905b815481529060010190602001808311610d1d57829003601f168201915b505050505081526020016003820154815260200160048201548152602001600582018054610d6790612956565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9390612956565b8015610de05780601f10610db557610100808354040283529160200191610de0565b820191906000526020600020905b815481529060010190602001808311610dc357829003601f168201915b505050505081526020016006820154815250509050919050565b610e026111d4565b610e168160016111a490919063ffffffff16565b50610e32610e2261079f565b600161125290919063ffffffff16565b50610e3c81611282565b50565b610e476111d4565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610e936111d4565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efa90612612565b60405180910390fd5b610f0c81611282565b50565b600060608260a0015190506000604051806080016040528060528152602001612c566052913990506000604051806080016040528060538152602001612c03605391399050600082604051602001610f679190612330565b604051602081830303815290604052805190602001206003604051602001610f8f919061238e565b604051602081830303815290604052805190602001206004604051602001610fb7919061238e565b60405160208183030381529060405280519060200120600554600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051602001611007959493929190612496565b604051602081830303815290604052805190602001209050600081836040516020016110339190612330565b6040516020818303038152906040528051906020012088600001518051906020012089602001518a60400151805190602001208b606001518c6080015160405160200161108596959493929190612435565b604051602081830303815290604052805190602001206040516020016110ac9291906123a5565b604051602081830303815290604052805190602001209050600080600060418851146110e35760009850505050505050505061119f565b6020880151925060408801519150606088015160001a9050601b8160ff16101561111757601b8161111491906127cb565b90505b601b8160ff161415801561112f5750601c8160ff1614155b156111455760009850505050505050505061119f565b6001848285856040516000815260200160405260405161116894939291906124e9565b6020604051602081039080840390855afa15801561118a573d6000803e3d6000fd5b50505060206040510351985050505050505050505b919050565b60006111cc836000018373ffffffffffffffffffffffffffffffffffffffff1660001b611954565b905092915050565b6111dc6119c4565b73ffffffffffffffffffffffffffffffffffffffff166111fa61079f565b73ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124790612632565b60405180910390fd5b565b600061127a836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119cc565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6060600082141561138e576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506114ee565b600082905060005b600082146113c05780806113a9906129b9565b915050600a826113b99190612802565b9150611396565b60008167ffffffffffffffff811115611402577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156114345781602001600182028036833780820191505090505b5090505b600085146114e75760018261144d919061288d565b9150600a8561145c9190612a0c565b60306114689190612775565b60f81b8183815181106114a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856114e09190612802565b9450611438565b8093505050505b919050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b905060006040518060400160405280601081526020017f303132333435363738396162636465660000000000000000000000000000000081525090506000602a67ffffffffffffffff811115611590577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156115c25781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110611620577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106116aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060005b60148110156119485782600485600c846116f69190612775565b6020811061172d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916901c60f81c60ff1681518110611792577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b826002836117ab9190612833565b60026117b79190612775565b815181106117ee577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535082600f60f81b85600c846118319190612775565b60208110611868577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b1660f81c60ff16815181106118aa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602001015160f81c60f81b826002836118c39190612833565b60036118cf9190612775565b81518110611906577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080611940906129b9565b9150506116dc565b50809350505050919050565b60006119608383611b52565b6119b95782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506119be565b600090505b92915050565b600033905090565b60008083600101600084815260200190815260200160002054905060008114611b465760006001826119fe919061288d565b9050600060018660000180549050611a16919061288d565b9050818114611ad1576000866000018281548110611a5d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611aa7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480611b0b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611b4c565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b828054611b8190612956565b90600052602060002090601f016020900481019282611ba35760008555611bea565b82601f10611bbc57805160ff1916838001178555611bea565b82800160010185558215611bea579182015b82811115611be9578251825591602001919060010190611bce565b5b509050611bf79190611cd4565b5090565b828054611c0790612956565b90600052602060002090601f016020900481019282611c295760008555611c70565b82601f10611c4257805160ff1916838001178555611c70565b82800160010185558215611c70579182015b82811115611c6f578251825591602001919060010190611c54565b5b509050611c7d9190611cd4565b5090565b6040518060e0016040528060608152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160608152602001600081526020016000815260200160608152602001600081525090565b5b80821115611ced576000816000905550600101611cd5565b5090565b6000611d04611cff84612699565b612674565b905082815260208101848484011115611d1c57600080fd5b611d27848285612914565b509392505050565b6000611d42611d3d846126ca565b612674565b905082815260208101848484011115611d5a57600080fd5b611d65848285612914565b509392505050565b600081359050611d7c81612bd4565b92915050565b600082601f830112611d9357600080fd5b8135611da3848260208601611cf1565b91505092915050565b600082601f830112611dbd57600080fd5b8135611dcd848260208601611d2f565b91505092915050565b600060e08284031215611de857600080fd5b611df260e0612674565b9050600082013567ffffffffffffffff811115611e0e57600080fd5b611e1a84828501611dac565b6000830152506020611e2e84828501611d6d565b602083015250604082013567ffffffffffffffff811115611e4e57600080fd5b611e5a84828501611dac565b6040830152506060611e6e84828501611ece565b6060830152506080611e8284828501611ece565b60808301525060a082013567ffffffffffffffff811115611ea257600080fd5b611eae84828501611d82565b60a08301525060c0611ec284828501611ece565b60c08301525092915050565b600081359050611edd81612beb565b92915050565b600060208284031215611ef557600080fd5b6000611f0384828501611d6d565b91505092915050565b600080600060608486031215611f2157600080fd5b6000611f2f86828701611d6d565b935050602084013567ffffffffffffffff811115611f4c57600080fd5b611f5886828701611dac565b9250506040611f6986828701611ece565b9150509250925092565b600060208284031215611f8557600080fd5b600082013567ffffffffffffffff811115611f9f57600080fd5b611fab84828501611dac565b91505092915050565b600060208284031215611fc657600080fd5b600082013567ffffffffffffffff811115611fe057600080fd5b611fec84828501611dd6565b91505092915050565b611ffe816128c1565b82525050565b61200d816128c1565b82525050565b61201c816128d3565b82525050565b61203361202e826128d3565b612a02565b82525050565b600061204482612710565b61204e8185612726565b935061205e818560208601612923565b61206781612af9565b840191505092915050565b600061207d82612710565b6120878185612737565b9350612097818560208601612923565b6120a081612af9565b840191505092915050565b60006120b68261271b565b6120c08185612748565b93506120d0818560208601612923565b6120d981612af9565b840191505092915050565b60006120ef8261271b565b6120f98185612759565b9350612109818560208601612923565b61211281612af9565b840191505092915050565b60006121288261271b565b612132818561276a565b9350612142818560208601612923565b80840191505092915050565b6000815461215b81612956565b612165818661276a565b945060018216600081146121805760018114612191576121c4565b60ff198316865281860193506121c4565b61219a856126fb565b60005b838110156121bc5781548189015260018201915060208101905061219d565b838801955050505b50505092915050565b60006121da602683612759565b91506121e582612b0a565b604082019050919050565b60006121fd60028361276a565b915061220882612b59565b600282019050919050565b6000612220602083612759565b915061222b82612b82565b602082019050919050565b600061224360018361276a565b915061224e82612bab565b600182019050919050565b600060e083016000830151848203600086015261227682826120ab565b915050602083015161228b6020860182611ff5565b50604083015184820360408601526122a382826120ab565b91505060608301516122b86060860182612303565b5060808301516122cb6080860182612303565b5060a083015184820360a08601526122e38282612039565b91505060c08301516122f860c0860182612303565b508091505092915050565b61230c816128fd565b82525050565b61231b816128fd565b82525050565b61232a81612907565b82525050565b600061233c828461211d565b915081905092915050565b6000612353828661211d565b915061235e82612236565b915061236a828561211d565b915061237582612236565b9150612381828461211d565b9150819050949350505050565b600061239a828461214e565b915081905092915050565b60006123b0826121f0565b91506123bc8285612022565b6020820191506123cc8284612022565b6020820191508190509392505050565b60006020820190506123f16000830184612004565b92915050565b600060608201905061240c6000830186612004565b818103602083015261241e81856120e4565b905061242d6040830184612312565b949350505050565b600060c08201905061244a6000830189612013565b6124576020830188612013565b6124646040830187612004565b6124716060830186612013565b61247e6080830185612312565b61248b60a0830184612312565b979650505050505050565b600060a0820190506124ab6000830188612013565b6124b86020830187612013565b6124c56040830186612013565b6124d26060830185612312565b6124df6080830184612004565b9695505050505050565b60006080820190506124fe6000830187612013565b61250b6020830186612321565b6125186040830185612013565b6125256060830184612013565b95945050505050565b6000602082019050818103600083015261254881846120e4565b905092915050565b600060e082019050818103600083015261256a818a6120e4565b90506125796020830189612004565b818103604083015261258b81886120e4565b905061259a6060830187612312565b6125a76080830186612312565b81810360a08301526125b98185612072565b90506125c860c0830184612312565b98975050505050505050565b600060608201905081810360008301526125ee81866120e4565b90506125fd6020830185612312565b61260a6040830184612312565b949350505050565b6000602082019050818103600083015261262b816121cd565b9050919050565b6000602082019050818103600083015261264b81612213565b9050919050565b6000602082019050818103600083015261266c8184612259565b905092915050565b600061267e61268f565b905061268a8282612988565b919050565b6000604051905090565b600067ffffffffffffffff8211156126b4576126b3612aca565b5b6126bd82612af9565b9050602081019050919050565b600067ffffffffffffffff8211156126e5576126e4612aca565b5b6126ee82612af9565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000612780826128fd565b915061278b836128fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127c0576127bf612a3d565b5b828201905092915050565b60006127d682612907565b91506127e183612907565b92508260ff038211156127f7576127f6612a3d565b5b828201905092915050565b600061280d826128fd565b9150612818836128fd565b92508261282857612827612a6c565b5b828204905092915050565b600061283e826128fd565b9150612849836128fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561288257612881612a3d565b5b828202905092915050565b6000612898826128fd565b91506128a3836128fd565b9250828210156128b6576128b5612a3d565b5b828203905092915050565b60006128cc826128dd565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b83811015612941578082015181840152602081019050612926565b83811115612950576000848401525b50505050565b6000600282049050600182168061296e57607f821691505b6020821081141561298257612981612a9b565b5b50919050565b61299182612af9565b810181811067ffffffffffffffff821117156129b0576129af612aca565b5b80604052505050565b60006129c4826128fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156129f7576129f6612a3d565b5b600182019050919050565b6000819050919050565b6000612a17826128fd565b9150612a22836128fd565b925082612a3257612a31612a6c565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f2d00000000000000000000000000000000000000000000000000000000000000600082015250565b612bdd816128c1565b8114612be857600080fd5b50565b612bf4816128fd565b8114612bff57600080fd5b5056fe4d65737361676528737472696e672053796d626f6c2c6164647265737320416464726573732c737472696e6720426c6f636b636861696e2c75696e743235362050726963652c75696e743235362054696d6529454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429a264697066735822122041f194f200c8afb7f209eaaa8ee2963a4896fa39b1b6c2ae1c4c8404a8f37a3d64736f6c63430008040033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.