Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 274 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Add_data | 7497905 | 2156 days ago | IN | 0 ETH | 0.0213241 | ||||
Add_data | 7497902 | 2156 days ago | IN | 0 ETH | 0.02262616 | ||||
Add_data | 7497900 | 2156 days ago | IN | 0 ETH | 0.02228097 | ||||
Add_data | 7497898 | 2156 days ago | IN | 0 ETH | 0.0220282 | ||||
Add_data | 7497893 | 2156 days ago | IN | 0 ETH | 0.02328041 | ||||
Add_data | 7497891 | 2156 days ago | IN | 0 ETH | 0.0207715 | ||||
Add_data | 7497885 | 2156 days ago | IN | 0 ETH | 0.02243909 | ||||
Add_data | 7497883 | 2156 days ago | IN | 0 ETH | 0.02308321 | ||||
Add_data | 7497878 | 2156 days ago | IN | 0 ETH | 0.02265825 | ||||
Add_data | 7497876 | 2156 days ago | IN | 0 ETH | 0.02297681 | ||||
Add_data | 7497874 | 2156 days ago | IN | 0 ETH | 0.02184186 | ||||
Add_data | 7497871 | 2156 days ago | IN | 0 ETH | 0.02249194 | ||||
Add_data | 7497855 | 2156 days ago | IN | 0 ETH | 0.02331354 | ||||
Add_data | 7497851 | 2156 days ago | IN | 0 ETH | 0.02233105 | ||||
Add_data | 7497836 | 2156 days ago | IN | 0 ETH | 0.02342385 | ||||
Add_data | 7497824 | 2156 days ago | IN | 0 ETH | 0.02226583 | ||||
Add_data | 7497809 | 2156 days ago | IN | 0 ETH | 0.023119 | ||||
Add_data | 7497804 | 2156 days ago | IN | 0 ETH | 0.02272856 | ||||
Add_data | 7497795 | 2156 days ago | IN | 0 ETH | 0.02275502 | ||||
Add_data | 7497793 | 2156 days ago | IN | 0 ETH | 0.02290249 | ||||
Add_data | 7497788 | 2156 days ago | IN | 0 ETH | 0.02251705 | ||||
Add_data | 7497787 | 2156 days ago | IN | 0 ETH | 0.02336878 | ||||
Add_data | 7497782 | 2156 days ago | IN | 0 ETH | 0.02245312 | ||||
Add_data | 7497780 | 2156 days ago | IN | 0 ETH | 0.02316823 | ||||
Add_data | 7497778 | 2156 days ago | IN | 0 ETH | 0.02328195 |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Storage
Compiler Version
v0.5.4+commit.9549d8ff
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-04-03 */ pragma solidity ^0.5.2 <0.6.0; contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor () internal { _owner = msg.sender; emit OwnershipTransferred(address(0), _owner); } /** * @return the address of the owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(isOwner()); _; } /** * @return true if `msg.sender` is the owner of the contract. */ function isOwner() public view returns (bool) { return msg.sender == _owner; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { _transferOwnership(newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function _transferOwnership(address newOwner) internal { require(newOwner != address(0)); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library RLP { uint constant DATA_SHORT_START = 0x80; uint constant DATA_LONG_START = 0xB8; uint constant LIST_SHORT_START = 0xC0; uint constant LIST_LONG_START = 0xF8; uint constant DATA_LONG_OFFSET = 0xB7; uint constant LIST_LONG_OFFSET = 0xF7; struct RLPItem { uint _unsafe_memPtr; // Pointer to the RLP-encoded bytes. uint _unsafe_length; // Number of bytes. This is the full length of the string. } struct Iterator { RLPItem _unsafe_item; // Item that's being iterated over. uint _unsafe_nextPtr; // Position of the next item in the list. } /* Iterator */ function next(Iterator memory self) internal pure returns (RLPItem memory subItem) { if(hasNext(self)) { uint256 ptr = self._unsafe_nextPtr; uint256 itemLength = _itemLength(ptr); subItem._unsafe_memPtr = ptr; subItem._unsafe_length = itemLength; self._unsafe_nextPtr = ptr + itemLength; } else revert(); } function next(Iterator memory self, bool strict) internal pure returns (RLPItem memory subItem) { subItem = next(self); if(strict && !_validate(subItem)) revert(); return subItem; } function hasNext( Iterator memory self ) internal pure returns (bool) { RLP.RLPItem memory item = self._unsafe_item; return self._unsafe_nextPtr < item._unsafe_memPtr + item._unsafe_length; } /* RLPItem */ /// @dev Creates an RLPItem from an array of RLP encoded bytes. /// @param self The RLP encoded bytes. /// @return An RLPItem function toRLPItem(bytes memory self) internal pure returns (RLPItem memory) { uint len = self.length; if (len == 0) { return RLPItem(0, 0); } uint memPtr; assembly { memPtr := add(self, 0x20) } return RLPItem(memPtr, len); } /// @dev Creates an RLPItem from an array of RLP encoded bytes. /// @param self The RLP encoded bytes. /// @param strict Will throw if the data is not RLP encoded. /// @return An RLPItem function toRLPItem(bytes memory self, bool strict) internal pure returns (RLPItem memory) { RLP.RLPItem memory item = toRLPItem(self); if(strict) { uint len = self.length; if(_payloadOffset(item) > len) revert(); if(_itemLength(item._unsafe_memPtr) != len) revert(); if(!_validate(item)) revert(); } return item; } /// @dev Check if the RLP item is null. /// @param self The RLP item. /// @return 'true' if the item is null. function isNull(RLPItem memory self) internal pure returns (bool ret) { return self._unsafe_length == 0; } /// @dev Check if the RLP item is a list. /// @param self The RLP item. /// @return 'true' if the item is a list. function isList(RLPItem memory self) internal pure returns (bool ret) { if (self._unsafe_length == 0) return false; uint memPtr = self._unsafe_memPtr; assembly { ret := iszero(lt(byte(0, mload(memPtr)), 0xC0)) } } /// @dev Check if the RLP item is data. /// @param self The RLP item. /// @return 'true' if the item is data. function isData(RLPItem memory self) internal pure returns (bool ret) { if (self._unsafe_length == 0) return false; uint memPtr = self._unsafe_memPtr; assembly { ret := lt(byte(0, mload(memPtr)), 0xC0) } } /// @dev Check if the RLP item is empty (string or list). /// @param self The RLP item. /// @return 'true' if the item is null. function isEmpty(RLPItem memory self) internal pure returns (bool ret) { if(isNull(self)) return false; uint b0; uint memPtr = self._unsafe_memPtr; assembly { b0 := byte(0, mload(memPtr)) } return (b0 == DATA_SHORT_START || b0 == LIST_SHORT_START); } /// @dev Get the number of items in an RLP encoded list. /// @param self The RLP item. /// @return The number of items. function items(RLPItem memory self) internal pure returns (uint) { if (!isList(self)) return 0; uint b0; uint memPtr = self._unsafe_memPtr; assembly { b0 := byte(0, mload(memPtr)) } uint pos = memPtr + _payloadOffset(self); uint last = memPtr + self._unsafe_length - 1; uint itms; while(pos <= last) { pos += _itemLength(pos); itms++; } return itms; } /// @dev Create an iterator. /// @param self The RLP item. /// @return An 'Iterator' over the item. function iterator(RLPItem memory self) internal pure returns (Iterator memory it) { require(isList(self)); uint ptr = self._unsafe_memPtr + _payloadOffset(self); it._unsafe_item = self; it._unsafe_nextPtr = ptr; } /// @dev Return the RLP encoded bytes. /// @param self The RLPItem. /// @return The bytes. function toBytes(RLPItem memory self) internal pure returns (bytes memory bts) { uint256 len = self._unsafe_length; if (len == 0) return bts; bts = new bytes(len); _copyToBytes(self._unsafe_memPtr, bts, len); // // uint256 len = self._unsafe_length; // // if (len == 0) { // return bts; // } else if (len == 1) { // bts = new bytes(len); // _copyToBytes(self._unsafe_memPtr, bts, len); // return bts; // } // // bts = new bytes(len-_payloadOffset(self)); // uint start = self._unsafe_memPtr + _payloadOffset(self); // _copyToBytes(start, bts, len-_payloadOffset(self)); } /// @dev Decode an RLPItem into bytes. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toData(RLPItem memory self) internal pure returns (bytes memory bts) { require(isData(self)); (uint256 rStartPos, uint256 len) = _decode(self); bts = new bytes(len); _copyToBytes(rStartPos, bts, len); } /// @dev Get the list of sub-items from an RLP encoded list. /// Warning: This is inefficient, as it requires that the list is read twice. /// @param self The RLP item. /// @return Array of RLPItems. function toList(RLPItem memory self) internal pure returns (RLPItem[] memory list) { require(isList(self)); uint256 numItems = items(self); list = new RLPItem[](numItems); RLP.Iterator memory it = iterator(self); uint idx; while(hasNext(it)) { list[idx] = next(it); idx++; } } /// @dev Decode an RLPItem into an ascii string. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toAscii(RLPItem memory self) internal pure returns (string memory str) { require(isData(self)); (uint256 rStartPos, uint256 len) = _decode(self); bytes memory bts = new bytes(len); _copyToBytes(rStartPos, bts, len); str = string(bts); } /// @dev Decode an RLPItem into a uint. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toUint(RLPItem memory self) internal pure returns (uint data) { require(isData(self)); (uint256 rStartPos, uint256 len) = _decode(self); require(len <= 32); assembly { data := div(mload(rStartPos), exp(256, sub(32, len))) } } /// @dev Decode an RLPItem into a boolean. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toBool(RLPItem memory self) internal pure returns (bool data) { require(isData(self)); (uint256 rStartPos, uint256 len) = _decode(self); require(len == 1); uint temp; assembly { temp := byte(0, mload(rStartPos)) } require(temp == 1 || temp == 0); return temp == 1 ? true : false; } /// @dev Decode an RLPItem into a byte. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toByte(RLPItem memory self) internal pure returns (byte data) { require(isData(self)); (uint256 rStartPos, uint256 len) = _decode(self); require(len == 1); byte temp; assembly { temp := byte(0, mload(rStartPos)) } return temp; } /// @dev Decode an RLPItem into an int. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toInt(RLPItem memory self) internal pure returns (int data) { return int(toUint(self)); } /// @dev Decode an RLPItem into a bytes32. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toBytes32(RLPItem memory self) internal pure returns (bytes32 data) { return bytes32(toUint(self)); } /// @dev Decode an RLPItem into an address. This will not work if the /// RLPItem is a list. /// @param self The RLPItem. /// @return The decoded string. function toAddress(RLPItem memory self) internal pure returns (address data) { (, uint256 len) = _decode(self); require(len <= 20); return address(toUint(self)); } // Get the payload offset. function _payloadOffset(RLPItem memory self) private pure returns (uint) { if(self._unsafe_length == 0) return 0; uint b0; uint memPtr = self._unsafe_memPtr; assembly { b0 := byte(0, mload(memPtr)) } if(b0 < DATA_SHORT_START) return 0; if(b0 < DATA_LONG_START || (b0 >= LIST_SHORT_START && b0 < LIST_LONG_START)) return 1; if(b0 < LIST_SHORT_START) return b0 - DATA_LONG_OFFSET + 1; return b0 - LIST_LONG_OFFSET + 1; } // Get the full length of an RLP item. function _itemLength(uint memPtr) private pure returns (uint len) { uint b0; assembly { b0 := byte(0, mload(memPtr)) } if (b0 < DATA_SHORT_START) len = 1; else if (b0 < DATA_LONG_START) len = b0 - DATA_SHORT_START + 1; else if (b0 < LIST_SHORT_START) { assembly { let bLen := sub(b0, 0xB7) // bytes length (DATA_LONG_OFFSET) let dLen := div(mload(add(memPtr, 1)), exp(256, sub(32, bLen))) // data length len := add(1, add(bLen, dLen)) // total length } } else if (b0 < LIST_LONG_START) { len = b0 - LIST_SHORT_START + 1; } else { assembly { let bLen := sub(b0, 0xF7) // bytes length (LIST_LONG_OFFSET) let dLen := div(mload(add(memPtr, 1)), exp(256, sub(32, bLen))) // data length len := add(1, add(bLen, dLen)) // total length } } } // Get start position and length of the data. function _decode(RLPItem memory self) private pure returns (uint memPtr, uint len) { require(isData(self)); uint b0; uint start = self._unsafe_memPtr; assembly { b0 := byte(0, mload(start)) } if (b0 < DATA_SHORT_START) { memPtr = start; len = 1; return (memPtr, len); } if (b0 < DATA_LONG_START) { len = self._unsafe_length - 1; memPtr = start + 1; } else { uint bLen; assembly { bLen := sub(b0, 0xB7) // DATA_LONG_OFFSET } len = self._unsafe_length - 1 - bLen; memPtr = start + bLen + 1; } return (memPtr, len); } // Assumes that enough memory has been allocated to store in target. function _copyToBytes( uint btsPtr, bytes memory tgt, uint btsLen) private pure { // Exploiting the fact that 'tgt' was the last thing to be allocated, // we can write entire words, and just overwrite any excess. assembly { { let words := div(add(btsLen, 31), 32) let rOffset := btsPtr let wOffset := add(tgt, 0x20) for { let i := 0 } lt(i, words) { i := add(i, 1) } { let offset := mul(i, 0x20) mstore(add(wOffset, offset), mload(add(rOffset, offset))) } mstore(add(tgt, add(0x20, mload(tgt))), 0) } } } // Check that an RLP item is valid. function _validate(RLPItem memory self) private pure returns (bool ret) { // Check that RLP is well-formed. uint b0; uint b1; uint memPtr = self._unsafe_memPtr; assembly { b0 := byte(0, mload(memPtr)) b1 := byte(1, mload(memPtr)) } if(b0 == DATA_SHORT_START + 1 && b1 < DATA_SHORT_START) return false; return true; } } library Object { using RLP for bytes; using RLP for bytes[]; using RLP for RLP.RLPItem; using RLP for RLP.Iterator; struct Data { uint sura; uint ayat; bytes text; } function createData(bytes memory dataBytes) internal pure returns (Data memory) { RLP.RLPItem[] memory dataList = dataBytes.toRLPItem().toList(); return Data({ sura: dataList[0].toUint(), ayat: dataList[1].toUint(), text: dataList[2].toBytes() }); } } contract Storage is Ownable { using Object for bytes; using RLP for bytes; using RLP for bytes[]; using RLP for RLP.RLPItem; using RLP for RLP.Iterator; struct coord { uint sura; uint ayat; } // @dev Mapping ayat's hash with its text. mapping(bytes32 => bytes) public content; mapping(uint => mapping(uint => bytes32)) public coordinates; mapping(bytes32 => coord[]) public all_coordinates; /** @dev Adds content. * @param text Ayat text. * @param sura Sura number. * @param ayat Ayat number. */ function add_content( bytes memory text, uint sura, uint ayat ) public onlyOwner { bytes32 hash = keccak256(text); if (coordinates[sura][ayat] != 0x0000000000000000000000000000000000000000000000000000000000000000) { return; } coordinates[sura][ayat] = hash; all_coordinates[hash].push(coord({sura:sura, ayat: ayat})); content[hash] = text; } /** @dev Adds packed data. * @param data RLP packed objects. */ function add_data(bytes memory data) public onlyOwner { RLP.RLPItem[] memory list = data.toRLPItem().toList(); for (uint index = 0; index < list.length; index++) { RLP.RLPItem[] memory item = list[index].toList(); uint sura = item[0].toUint(); uint ayat = item[1].toUint(); bytes memory text = item[2].toData(); add_content(text, sura, ayat); } } /** @dev Gets ayat text by hash. * @param ayat_hash Ayat keccak256 hash of compressed text (gzip). * @return Ayat compressed text. */ function get_ayat_text_by_hash( bytes32 ayat_hash ) public view returns (bytes memory text) { text = content[ayat_hash]; } /** @dev Gets ayat text by coordinates. * @param sura Sura number. * @param ayat Ayat number. * @return Ayat compressed text. */ function get_ayat_text_by_coordinates( uint sura, uint ayat ) public view returns (bytes memory text) { bytes32 hash = coordinates[sura][ayat]; text = content[hash]; } /** @dev Gets number of ayats by hash. * @param hash Ayat keccak256 hash of compressed text (gzip). * @return Ayats number. */ function get_ayats_length( bytes32 hash ) public view returns (uint) { return all_coordinates[hash].length; } /** @dev Gets an ayat's number and a sura number by a hash and a index in an array. * @param hash Ayat keccak256 hash of compressed text (gzip). * @param index Ayat index. Ayat text is not unique in the Quran, so this may be several options. */ function get_ayat_coordinates_by_index( bytes32 hash, uint index ) public view returns (uint sura, uint ayat) { coord memory data = all_coordinates[hash][index]; sura = data.sura; ayat = data.ayat; } /** @dev Verifying the text of an ayat. * @param text Ayat compressed text (gzip). * @return bool */ function check_ayat_text( bytes memory text ) public view returns(bool) { bytes32 hash = keccak256(text); bytes memory ayat_data = content[hash]; return ayat_data.length != 0; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"data","type":"bytes"}],"name":"add_data","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"content","outputs":[{"name":"","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"ayat_hash","type":"bytes32"}],"name":"get_ayat_text_by_hash","outputs":[{"name":"text","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"text","type":"bytes"},{"name":"sura","type":"uint256"},{"name":"ayat","type":"uint256"}],"name":"add_content","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"}],"name":"get_ayats_length","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"name":"coordinates","outputs":[{"name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"sura","type":"uint256"},{"name":"ayat","type":"uint256"}],"name":"get_ayat_text_by_coordinates","outputs":[{"name":"text","type":"bytes"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"text","type":"bytes"}],"name":"check_ayat_text","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"hash","type":"bytes32"},{"name":"index","type":"uint256"}],"name":"get_ayat_coordinates_by_index","outputs":[{"name":"sura","type":"uint256"},{"name":"ayat","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"},{"name":"","type":"uint256"}],"name":"all_coordinates","outputs":[{"name":"sura","type":"uint256"},{"name":"ayat","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]
Contract Creation Code
6080604081905260008054600160a060020a0319163317808255600160a060020a0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36110c2806100576000396000f3fe608060405234801561001057600080fd5b5060043610610107576000357c010000000000000000000000000000000000000000000000000000000090048063955cb325116100a9578063c1b8a7c711610083578063c1b8a7c7146103cb578063d24a31b714610471578063e2375b08146104ad578063f2fde38b146104d057610107565b8063955cb325146103565780639f6b564914610385578063a462ee89146103a857610107565b8063715018a6116100e5578063715018a6146102635780637b217fc41461026b5780638da5cb5b146103165780638f32d59b1461033a57610107565b80631e9668371461010c5780632dff6941146101b457806365b13c0f14610246575b600080fd5b6101b26004803603602081101561012257600080fd5b81019060208101813564010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104f6945050505050565b005b6101d1600480360360208110156101ca57600080fd5b50356105ce565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d16004803603602081101561025c57600080fd5b5035610668565b6101b2610708565b6101b26004803603606081101561028157600080fd5b81019060208101813564010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610772565b61031e610828565b60408051600160a060020a039092168252519081900360200190f35b610342610838565b604080519115158252519081900360200190f35b6103736004803603602081101561036c57600080fd5b5035610849565b60408051918252519081900360200190f35b6103736004803603604081101561039b57600080fd5b508035906020013561085e565b6101d1600480360360408110156103be57600080fd5b508035906020013561087b565b610342600480360360208110156103e157600080fd5b8101906020810181356401000000008111156103fc57600080fd5b82018360208201111561040e57600080fd5b8035906020019184600183028401116401000000008311171561043057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610932945050505050565b6104946004803603604081101561048757600080fd5b50803590602001356109e1565b6040805192835260208301919091528051918290030190f35b610494600480360360408110156104c357600080fd5b5080359060200135610a3f565b6101b2600480360360208110156104e657600080fd5b5035600160a060020a0316610a7a565b6104fe610838565b151561050957600080fd5b606061051c61051783610a99565b610ade565b905060005b81518110156105c957606061054c838381518110151561053d57fe5b90602001906020020151610ade565b9050600061057182600081518110151561056257fe5b90602001906020020151610b93565b9050600061058783600181518110151561056257fe5b905060606105ac84600281518110151561059d57fe5b90602001906020020151610bdc565b90506105b9818484610772565b5050600190920191506105219050565b505050565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f81018390048302840183019094528383529192908301828280156106605780601f1061063557610100808354040283529160200191610660565b820191906000526020600020905b81548152906001019060200180831161064357829003601f168201915b505050505081565b60008181526001602081815260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835260609390918301828280156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b50505050509050919050565b610710610838565b151561071b57600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b61077a610838565b151561078557600080fd5b825160208085019190912060008481526002835260408082208583529093529190912054156107b457506105c9565b6000838152600260208181526040808420868552825280842085905584845260038252808420815180830183528881528084018881528254600181810185559388528588209251960290910194855551938101939093558484529181529120855161082192870190610fc6565b5050505050565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b6000818152600360205260409020545b919050565b600260209081526000928352604080842090915290825290205481565b6000828152600260208181526040808420858552825280842054808552600180845294829020805483519681161561010002600019011694909404601f8101849004840286018401909252818552606094909390929091908301828280156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b505050505091505092915050565b805160208083019190912060008181526001808452604080832080548251600294821615610100026000190190911693909304601f8101879004870284018701909252818352929460609391908301828280156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b505092511515979650505050505050565b6000806109ec611044565b6000858152600360205260409020805485908110610a0657fe5b60009182526020918290206040805180820190915260029092020180548083526001909101549190920181905290969095509350505050565b600360205281600052604060002081815481101515610a5a57fe5b600091825260209091206002909102018054600190910154909250905082565b610a82610838565b1515610a8d57600080fd5b610a9681610c42565b50565b610aa1611044565b8151801515610ac55750506040805180820190915260008082526020820152610859565b6040805180820190915260209384018152928301525090565b6060610ae982610cbf565b1515610af457600080fd5b6000610aff83610ce6565b905080604051908082528060200260200182016040528015610b3b57816020015b610b28611044565b815260200190600190039081610b205790505b509150610b4661105b565b610b4f84610d4c565b905060005b610b5d82610d85565b15610b8b57610b6b82610da4565b8482815181101515610b7957fe5b60209081029091010152600101610b54565b505050919050565b6000610b9e82610de4565b1515610ba957600080fd5b600080610bb584610e0a565b90925090506020811115610bc857600080fd5b806020036101000a82510492505050919050565b6060610be782610de4565b1515610bf257600080fd5b600080610bfe84610e0a565b91509150806040519080825280601f01601f191660200182016040528015610c2d576020820181803883390190505b509250610c3b828483610e7c565b5050919050565b600160a060020a0381161515610c5757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000816020015160001415610cd657506000610859565b50515160c060009190911a101590565b6000610cf182610cbf565b1515610cff57506000610859565b81518051600090811a9190610d1385610eba565b6020860151908301915082016000190160005b818311610d4257610d3683610f38565b90920191600101610d26565b9695505050505050565b610d5461105b565b610d5d82610cbf565b1515610d6857600080fd5b6000610d7383610eba565b83519383529092016020820152919050565b6000610d8f611044565b50508051602080820151915192015191011190565b610dac611044565b610db582610d85565b156101075760208201516000610dca82610f38565b828452602080850182905292019184019190915250610859565b6000816020015160001415610dfb57506000610859565b50515160c060009190911a1090565b600080610e1683610de4565b1515610e2157600080fd5b8251805160001a906080821015610e3f57925060019150610e779050565b60b8821015610e5d5760018560200151039250806001019350610e74565b602085015182820160b51901945082900360b60192505b50505b915091565b6020601f820104836020840160005b83811015610ea757602081028381015190830152600101610e8b565b5060008551602001860152505050505050565b6000816020015160001415610ed157506000610859565b8151805160001a906080821015610eed57600092505050610859565b60b8821080610f08575060c08210158015610f08575060f882105b15610f1857600192505050610859565b60c0821015610f2d575060b519019050610859565b5060f5190192915050565b8051600090811a6080811015610f515760019150610fc0565b60b8811015610f6657607e1981019150610fc0565b60c0811015610f8f57600183015160b76020839003016101000a9004810160b519019150610fc0565b60f8811015610fa45760be1981019150610fc0565b600183015160f76020839003016101000a9004810160f5190191505b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061100757805160ff1916838001178555611034565b82800160010185558215611034579182015b82811115611034578251825591602001919060010190611019565b5061104092915061107c565b5090565b604080518082019091526000808252602082015290565b60606040519081016040528061106f611044565b8152602001600081525090565b61083591905b80821115611040576000815560010161108256fea165627a7a723058202df067a9e517cc0e4144ae9d23ec5068724cfe7bb910a0e085195499fd1513b20029
Deployed Bytecode
0x608060405234801561001057600080fd5b5060043610610107576000357c010000000000000000000000000000000000000000000000000000000090048063955cb325116100a9578063c1b8a7c711610083578063c1b8a7c7146103cb578063d24a31b714610471578063e2375b08146104ad578063f2fde38b146104d057610107565b8063955cb325146103565780639f6b564914610385578063a462ee89146103a857610107565b8063715018a6116100e5578063715018a6146102635780637b217fc41461026b5780638da5cb5b146103165780638f32d59b1461033a57610107565b80631e9668371461010c5780632dff6941146101b457806365b13c0f14610246575b600080fd5b6101b26004803603602081101561012257600080fd5b81019060208101813564010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104f6945050505050565b005b6101d1600480360360208110156101ca57600080fd5b50356105ce565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d16004803603602081101561025c57600080fd5b5035610668565b6101b2610708565b6101b26004803603606081101561028157600080fd5b81019060208101813564010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610772565b61031e610828565b60408051600160a060020a039092168252519081900360200190f35b610342610838565b604080519115158252519081900360200190f35b6103736004803603602081101561036c57600080fd5b5035610849565b60408051918252519081900360200190f35b6103736004803603604081101561039b57600080fd5b508035906020013561085e565b6101d1600480360360408110156103be57600080fd5b508035906020013561087b565b610342600480360360208110156103e157600080fd5b8101906020810181356401000000008111156103fc57600080fd5b82018360208201111561040e57600080fd5b8035906020019184600183028401116401000000008311171561043057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610932945050505050565b6104946004803603604081101561048757600080fd5b50803590602001356109e1565b6040805192835260208301919091528051918290030190f35b610494600480360360408110156104c357600080fd5b5080359060200135610a3f565b6101b2600480360360208110156104e657600080fd5b5035600160a060020a0316610a7a565b6104fe610838565b151561050957600080fd5b606061051c61051783610a99565b610ade565b905060005b81518110156105c957606061054c838381518110151561053d57fe5b90602001906020020151610ade565b9050600061057182600081518110151561056257fe5b90602001906020020151610b93565b9050600061058783600181518110151561056257fe5b905060606105ac84600281518110151561059d57fe5b90602001906020020151610bdc565b90506105b9818484610772565b5050600190920191506105219050565b505050565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f81018390048302840183019094528383529192908301828280156106605780601f1061063557610100808354040283529160200191610660565b820191906000526020600020905b81548152906001019060200180831161064357829003601f168201915b505050505081565b60008181526001602081815260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835260609390918301828280156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b50505050509050919050565b610710610838565b151561071b57600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b61077a610838565b151561078557600080fd5b825160208085019190912060008481526002835260408082208583529093529190912054156107b457506105c9565b6000838152600260208181526040808420868552825280842085905584845260038252808420815180830183528881528084018881528254600181810185559388528588209251960290910194855551938101939093558484529181529120855161082192870190610fc6565b5050505050565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b6000818152600360205260409020545b919050565b600260209081526000928352604080842090915290825290205481565b6000828152600260208181526040808420858552825280842054808552600180845294829020805483519681161561010002600019011694909404601f8101849004840286018401909252818552606094909390929091908301828280156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b505050505091505092915050565b805160208083019190912060008181526001808452604080832080548251600294821615610100026000190190911693909304601f8101879004870284018701909252818352929460609391908301828280156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b505092511515979650505050505050565b6000806109ec611044565b6000858152600360205260409020805485908110610a0657fe5b60009182526020918290206040805180820190915260029092020180548083526001909101549190920181905290969095509350505050565b600360205281600052604060002081815481101515610a5a57fe5b600091825260209091206002909102018054600190910154909250905082565b610a82610838565b1515610a8d57600080fd5b610a9681610c42565b50565b610aa1611044565b8151801515610ac55750506040805180820190915260008082526020820152610859565b6040805180820190915260209384018152928301525090565b6060610ae982610cbf565b1515610af457600080fd5b6000610aff83610ce6565b905080604051908082528060200260200182016040528015610b3b57816020015b610b28611044565b815260200190600190039081610b205790505b509150610b4661105b565b610b4f84610d4c565b905060005b610b5d82610d85565b15610b8b57610b6b82610da4565b8482815181101515610b7957fe5b60209081029091010152600101610b54565b505050919050565b6000610b9e82610de4565b1515610ba957600080fd5b600080610bb584610e0a565b90925090506020811115610bc857600080fd5b806020036101000a82510492505050919050565b6060610be782610de4565b1515610bf257600080fd5b600080610bfe84610e0a565b91509150806040519080825280601f01601f191660200182016040528015610c2d576020820181803883390190505b509250610c3b828483610e7c565b5050919050565b600160a060020a0381161515610c5757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000816020015160001415610cd657506000610859565b50515160c060009190911a101590565b6000610cf182610cbf565b1515610cff57506000610859565b81518051600090811a9190610d1385610eba565b6020860151908301915082016000190160005b818311610d4257610d3683610f38565b90920191600101610d26565b9695505050505050565b610d5461105b565b610d5d82610cbf565b1515610d6857600080fd5b6000610d7383610eba565b83519383529092016020820152919050565b6000610d8f611044565b50508051602080820151915192015191011190565b610dac611044565b610db582610d85565b156101075760208201516000610dca82610f38565b828452602080850182905292019184019190915250610859565b6000816020015160001415610dfb57506000610859565b50515160c060009190911a1090565b600080610e1683610de4565b1515610e2157600080fd5b8251805160001a906080821015610e3f57925060019150610e779050565b60b8821015610e5d5760018560200151039250806001019350610e74565b602085015182820160b51901945082900360b60192505b50505b915091565b6020601f820104836020840160005b83811015610ea757602081028381015190830152600101610e8b565b5060008551602001860152505050505050565b6000816020015160001415610ed157506000610859565b8151805160001a906080821015610eed57600092505050610859565b60b8821080610f08575060c08210158015610f08575060f882105b15610f1857600192505050610859565b60c0821015610f2d575060b519019050610859565b5060f5190192915050565b8051600090811a6080811015610f515760019150610fc0565b60b8811015610f6657607e1981019150610fc0565b60c0811015610f8f57600183015160b76020839003016101000a9004810160b519019150610fc0565b60f8811015610fa45760be1981019150610fc0565b600183015160f76020839003016101000a9004810160f5190191505b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061100757805160ff1916838001178555611034565b82800160010185558215611034579182015b82811115611034578251825591602001919060010190611019565b5061104092915061107c565b5090565b604080518082019091526000808252602082015290565b60606040519081016040528061106f611044565b8152602001600081525090565b61083591905b80821115611040576000815560010161108256fea165627a7a723058202df067a9e517cc0e4144ae9d23ec5068724cfe7bb910a0e085195499fd1513b20029
Swarm Source
bzzr://2df067a9e517cc0e4144ae9d23ec5068724cfe7bb910a0e085195499fd1513b2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.