ETH Price: $2,340.83 (-5.92%)

Contract

0xfa86cAbfF17A2628a4C875Ebc3260191b08448ec
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Add_data74979052019-04-03 22:21:582156 days ago1554330118IN
0xfa86cAbf...1b08448ec
0 ETH0.02132415
Add_data74979022019-04-03 22:21:182156 days ago1554330078IN
0xfa86cAbf...1b08448ec
0 ETH0.022626165
Add_data74979002019-04-03 22:20:552156 days ago1554330055IN
0xfa86cAbf...1b08448ec
0 ETH0.022280975
Add_data74978982019-04-03 22:20:482156 days ago1554330048IN
0xfa86cAbf...1b08448ec
0 ETH0.02202825
Add_data74978932019-04-03 22:19:132156 days ago1554329953IN
0xfa86cAbf...1b08448ec
0 ETH0.023280415
Add_data74978912019-04-03 22:19:062156 days ago1554329946IN
0xfa86cAbf...1b08448ec
0 ETH0.02077155
Add_data74978852019-04-03 22:17:432156 days ago1554329863IN
0xfa86cAbf...1b08448ec
0 ETH0.022439095
Add_data74978832019-04-03 22:17:232156 days ago1554329843IN
0xfa86cAbf...1b08448ec
0 ETH0.023083215
Add_data74978782019-04-03 22:16:172156 days ago1554329777IN
0xfa86cAbf...1b08448ec
0 ETH0.022658255
Add_data74978762019-04-03 22:15:492156 days ago1554329749IN
0xfa86cAbf...1b08448ec
0 ETH0.022976815
Add_data74978742019-04-03 22:15:312156 days ago1554329731IN
0xfa86cAbf...1b08448ec
0 ETH0.021841865
Add_data74978712019-04-03 22:14:562156 days ago1554329696IN
0xfa86cAbf...1b08448ec
0 ETH0.022491945
Add_data74978552019-04-03 22:10:252156 days ago1554329425IN
0xfa86cAbf...1b08448ec
0 ETH0.023313545
Add_data74978512019-04-03 22:09:482156 days ago1554329388IN
0xfa86cAbf...1b08448ec
0 ETH0.022331055
Add_data74978362019-04-03 22:06:012156 days ago1554329161IN
0xfa86cAbf...1b08448ec
0 ETH0.023423855
Add_data74978242019-04-03 22:02:462156 days ago1554328966IN
0xfa86cAbf...1b08448ec
0 ETH0.022265835
Add_data74978092019-04-03 21:58:482156 days ago1554328728IN
0xfa86cAbf...1b08448ec
0 ETH0.0231195
Add_data74978042019-04-03 21:57:332156 days ago1554328653IN
0xfa86cAbf...1b08448ec
0 ETH0.022728565
Add_data74977952019-04-03 21:53:592156 days ago1554328439IN
0xfa86cAbf...1b08448ec
0 ETH0.022755025
Add_data74977932019-04-03 21:53:182156 days ago1554328398IN
0xfa86cAbf...1b08448ec
0 ETH0.022902495
Add_data74977882019-04-03 21:51:292156 days ago1554328289IN
0xfa86cAbf...1b08448ec
0 ETH0.022517055
Add_data74977872019-04-03 21:51:282156 days ago1554328288IN
0xfa86cAbf...1b08448ec
0 ETH0.023368785
Add_data74977822019-04-03 21:50:042156 days ago1554328204IN
0xfa86cAbf...1b08448ec
0 ETH0.022453125
Add_data74977802019-04-03 21:49:292156 days ago1554328169IN
0xfa86cAbf...1b08448ec
0 ETH0.023168235
Add_data74977782019-04-03 21:49:262156 days ago1554328166IN
0xfa86cAbf...1b08448ec
0 ETH0.023281955
View all transactions

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
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

Contract ABI

[{"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"}]

6080604081905260008054600160a060020a0319163317808255600160a060020a0316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a36110c2806100576000396000f3fe608060405234801561001057600080fd5b5060043610610107576000357c010000000000000000000000000000000000000000000000000000000090048063955cb325116100a9578063c1b8a7c711610083578063c1b8a7c7146103cb578063d24a31b714610471578063e2375b08146104ad578063f2fde38b146104d057610107565b8063955cb325146103565780639f6b564914610385578063a462ee89146103a857610107565b8063715018a6116100e5578063715018a6146102635780637b217fc41461026b5780638da5cb5b146103165780638f32d59b1461033a57610107565b80631e9668371461010c5780632dff6941146101b457806365b13c0f14610246575b600080fd5b6101b26004803603602081101561012257600080fd5b81019060208101813564010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104f6945050505050565b005b6101d1600480360360208110156101ca57600080fd5b50356105ce565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d16004803603602081101561025c57600080fd5b5035610668565b6101b2610708565b6101b26004803603606081101561028157600080fd5b81019060208101813564010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610772565b61031e610828565b60408051600160a060020a039092168252519081900360200190f35b610342610838565b604080519115158252519081900360200190f35b6103736004803603602081101561036c57600080fd5b5035610849565b60408051918252519081900360200190f35b6103736004803603604081101561039b57600080fd5b508035906020013561085e565b6101d1600480360360408110156103be57600080fd5b508035906020013561087b565b610342600480360360208110156103e157600080fd5b8101906020810181356401000000008111156103fc57600080fd5b82018360208201111561040e57600080fd5b8035906020019184600183028401116401000000008311171561043057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610932945050505050565b6104946004803603604081101561048757600080fd5b50803590602001356109e1565b6040805192835260208301919091528051918290030190f35b610494600480360360408110156104c357600080fd5b5080359060200135610a3f565b6101b2600480360360208110156104e657600080fd5b5035600160a060020a0316610a7a565b6104fe610838565b151561050957600080fd5b606061051c61051783610a99565b610ade565b905060005b81518110156105c957606061054c838381518110151561053d57fe5b90602001906020020151610ade565b9050600061057182600081518110151561056257fe5b90602001906020020151610b93565b9050600061058783600181518110151561056257fe5b905060606105ac84600281518110151561059d57fe5b90602001906020020151610bdc565b90506105b9818484610772565b5050600190920191506105219050565b505050565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f81018390048302840183019094528383529192908301828280156106605780601f1061063557610100808354040283529160200191610660565b820191906000526020600020905b81548152906001019060200180831161064357829003601f168201915b505050505081565b60008181526001602081815260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835260609390918301828280156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b50505050509050919050565b610710610838565b151561071b57600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b61077a610838565b151561078557600080fd5b825160208085019190912060008481526002835260408082208583529093529190912054156107b457506105c9565b6000838152600260208181526040808420868552825280842085905584845260038252808420815180830183528881528084018881528254600181810185559388528588209251960290910194855551938101939093558484529181529120855161082192870190610fc6565b5050505050565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b6000818152600360205260409020545b919050565b600260209081526000928352604080842090915290825290205481565b6000828152600260208181526040808420858552825280842054808552600180845294829020805483519681161561010002600019011694909404601f8101849004840286018401909252818552606094909390929091908301828280156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b505050505091505092915050565b805160208083019190912060008181526001808452604080832080548251600294821615610100026000190190911693909304601f8101879004870284018701909252818352929460609391908301828280156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b505092511515979650505050505050565b6000806109ec611044565b6000858152600360205260409020805485908110610a0657fe5b60009182526020918290206040805180820190915260029092020180548083526001909101549190920181905290969095509350505050565b600360205281600052604060002081815481101515610a5a57fe5b600091825260209091206002909102018054600190910154909250905082565b610a82610838565b1515610a8d57600080fd5b610a9681610c42565b50565b610aa1611044565b8151801515610ac55750506040805180820190915260008082526020820152610859565b6040805180820190915260209384018152928301525090565b6060610ae982610cbf565b1515610af457600080fd5b6000610aff83610ce6565b905080604051908082528060200260200182016040528015610b3b57816020015b610b28611044565b815260200190600190039081610b205790505b509150610b4661105b565b610b4f84610d4c565b905060005b610b5d82610d85565b15610b8b57610b6b82610da4565b8482815181101515610b7957fe5b60209081029091010152600101610b54565b505050919050565b6000610b9e82610de4565b1515610ba957600080fd5b600080610bb584610e0a565b90925090506020811115610bc857600080fd5b806020036101000a82510492505050919050565b6060610be782610de4565b1515610bf257600080fd5b600080610bfe84610e0a565b91509150806040519080825280601f01601f191660200182016040528015610c2d576020820181803883390190505b509250610c3b828483610e7c565b5050919050565b600160a060020a0381161515610c5757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000816020015160001415610cd657506000610859565b50515160c060009190911a101590565b6000610cf182610cbf565b1515610cff57506000610859565b81518051600090811a9190610d1385610eba565b6020860151908301915082016000190160005b818311610d4257610d3683610f38565b90920191600101610d26565b9695505050505050565b610d5461105b565b610d5d82610cbf565b1515610d6857600080fd5b6000610d7383610eba565b83519383529092016020820152919050565b6000610d8f611044565b50508051602080820151915192015191011190565b610dac611044565b610db582610d85565b156101075760208201516000610dca82610f38565b828452602080850182905292019184019190915250610859565b6000816020015160001415610dfb57506000610859565b50515160c060009190911a1090565b600080610e1683610de4565b1515610e2157600080fd5b8251805160001a906080821015610e3f57925060019150610e779050565b60b8821015610e5d5760018560200151039250806001019350610e74565b602085015182820160b51901945082900360b60192505b50505b915091565b6020601f820104836020840160005b83811015610ea757602081028381015190830152600101610e8b565b5060008551602001860152505050505050565b6000816020015160001415610ed157506000610859565b8151805160001a906080821015610eed57600092505050610859565b60b8821080610f08575060c08210158015610f08575060f882105b15610f1857600192505050610859565b60c0821015610f2d575060b519019050610859565b5060f5190192915050565b8051600090811a6080811015610f515760019150610fc0565b60b8811015610f6657607e1981019150610fc0565b60c0811015610f8f57600183015160b76020839003016101000a9004810160b519019150610fc0565b60f8811015610fa45760be1981019150610fc0565b600183015160f76020839003016101000a9004810160f5190191505b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061100757805160ff1916838001178555611034565b82800160010185558215611034579182015b82811115611034578251825591602001919060010190611019565b5061104092915061107c565b5090565b604080518082019091526000808252602082015290565b60606040519081016040528061106f611044565b8152602001600081525090565b61083591905b80821115611040576000815560010161108256fea165627a7a723058202df067a9e517cc0e4144ae9d23ec5068724cfe7bb910a0e085195499fd1513b20029

Deployed Bytecode

0x608060405234801561001057600080fd5b5060043610610107576000357c010000000000000000000000000000000000000000000000000000000090048063955cb325116100a9578063c1b8a7c711610083578063c1b8a7c7146103cb578063d24a31b714610471578063e2375b08146104ad578063f2fde38b146104d057610107565b8063955cb325146103565780639f6b564914610385578063a462ee89146103a857610107565b8063715018a6116100e5578063715018a6146102635780637b217fc41461026b5780638da5cb5b146103165780638f32d59b1461033a57610107565b80631e9668371461010c5780632dff6941146101b457806365b13c0f14610246575b600080fd5b6101b26004803603602081101561012257600080fd5b81019060208101813564010000000081111561013d57600080fd5b82018360208201111561014f57600080fd5b8035906020019184600183028401116401000000008311171561017157600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506104f6945050505050565b005b6101d1600480360360208110156101ca57600080fd5b50356105ce565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561020b5781810151838201526020016101f3565b50505050905090810190601f1680156102385780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101d16004803603602081101561025c57600080fd5b5035610668565b6101b2610708565b6101b26004803603606081101561028157600080fd5b81019060208101813564010000000081111561029c57600080fd5b8201836020820111156102ae57600080fd5b803590602001918460018302840111640100000000831117156102d057600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135610772565b61031e610828565b60408051600160a060020a039092168252519081900360200190f35b610342610838565b604080519115158252519081900360200190f35b6103736004803603602081101561036c57600080fd5b5035610849565b60408051918252519081900360200190f35b6103736004803603604081101561039b57600080fd5b508035906020013561085e565b6101d1600480360360408110156103be57600080fd5b508035906020013561087b565b610342600480360360208110156103e157600080fd5b8101906020810181356401000000008111156103fc57600080fd5b82018360208201111561040e57600080fd5b8035906020019184600183028401116401000000008311171561043057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610932945050505050565b6104946004803603604081101561048757600080fd5b50803590602001356109e1565b6040805192835260208301919091528051918290030190f35b610494600480360360408110156104c357600080fd5b5080359060200135610a3f565b6101b2600480360360208110156104e657600080fd5b5035600160a060020a0316610a7a565b6104fe610838565b151561050957600080fd5b606061051c61051783610a99565b610ade565b905060005b81518110156105c957606061054c838381518110151561053d57fe5b90602001906020020151610ade565b9050600061057182600081518110151561056257fe5b90602001906020020151610b93565b9050600061058783600181518110151561056257fe5b905060606105ac84600281518110151561059d57fe5b90602001906020020151610bdc565b90506105b9818484610772565b5050600190920191506105219050565b505050565b60016020818152600092835260409283902080548451600294821615610100026000190190911693909304601f81018390048302840183019094528383529192908301828280156106605780601f1061063557610100808354040283529160200191610660565b820191906000526020600020905b81548152906001019060200180831161064357829003601f168201915b505050505081565b60008181526001602081815260409283902080548451600294821615610100026000190190911693909304601f810183900483028401830190945283835260609390918301828280156106fc5780601f106106d1576101008083540402835291602001916106fc565b820191906000526020600020905b8154815290600101906020018083116106df57829003601f168201915b50505050509050919050565b610710610838565b151561071b57600080fd5b60008054604051600160a060020a03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805473ffffffffffffffffffffffffffffffffffffffff19169055565b61077a610838565b151561078557600080fd5b825160208085019190912060008481526002835260408082208583529093529190912054156107b457506105c9565b6000838152600260208181526040808420868552825280842085905584845260038252808420815180830183528881528084018881528254600181810185559388528588209251960290910194855551938101939093558484529181529120855161082192870190610fc6565b5050505050565b600054600160a060020a03165b90565b600054600160a060020a0316331490565b6000818152600360205260409020545b919050565b600260209081526000928352604080842090915290825290205481565b6000828152600260208181526040808420858552825280842054808552600180845294829020805483519681161561010002600019011694909404601f8101849004840286018401909252818552606094909390929091908301828280156109245780601f106108f957610100808354040283529160200191610924565b820191906000526020600020905b81548152906001019060200180831161090757829003601f168201915b505050505091505092915050565b805160208083019190912060008181526001808452604080832080548251600294821615610100026000190190911693909304601f8101879004870284018701909252818352929460609391908301828280156109d05780601f106109a5576101008083540402835291602001916109d0565b820191906000526020600020905b8154815290600101906020018083116109b357829003601f168201915b505092511515979650505050505050565b6000806109ec611044565b6000858152600360205260409020805485908110610a0657fe5b60009182526020918290206040805180820190915260029092020180548083526001909101549190920181905290969095509350505050565b600360205281600052604060002081815481101515610a5a57fe5b600091825260209091206002909102018054600190910154909250905082565b610a82610838565b1515610a8d57600080fd5b610a9681610c42565b50565b610aa1611044565b8151801515610ac55750506040805180820190915260008082526020820152610859565b6040805180820190915260209384018152928301525090565b6060610ae982610cbf565b1515610af457600080fd5b6000610aff83610ce6565b905080604051908082528060200260200182016040528015610b3b57816020015b610b28611044565b815260200190600190039081610b205790505b509150610b4661105b565b610b4f84610d4c565b905060005b610b5d82610d85565b15610b8b57610b6b82610da4565b8482815181101515610b7957fe5b60209081029091010152600101610b54565b505050919050565b6000610b9e82610de4565b1515610ba957600080fd5b600080610bb584610e0a565b90925090506020811115610bc857600080fd5b806020036101000a82510492505050919050565b6060610be782610de4565b1515610bf257600080fd5b600080610bfe84610e0a565b91509150806040519080825280601f01601f191660200182016040528015610c2d576020820181803883390190505b509250610c3b828483610e7c565b5050919050565b600160a060020a0381161515610c5757600080fd5b60008054604051600160a060020a03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a36000805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a0392909216919091179055565b6000816020015160001415610cd657506000610859565b50515160c060009190911a101590565b6000610cf182610cbf565b1515610cff57506000610859565b81518051600090811a9190610d1385610eba565b6020860151908301915082016000190160005b818311610d4257610d3683610f38565b90920191600101610d26565b9695505050505050565b610d5461105b565b610d5d82610cbf565b1515610d6857600080fd5b6000610d7383610eba565b83519383529092016020820152919050565b6000610d8f611044565b50508051602080820151915192015191011190565b610dac611044565b610db582610d85565b156101075760208201516000610dca82610f38565b828452602080850182905292019184019190915250610859565b6000816020015160001415610dfb57506000610859565b50515160c060009190911a1090565b600080610e1683610de4565b1515610e2157600080fd5b8251805160001a906080821015610e3f57925060019150610e779050565b60b8821015610e5d5760018560200151039250806001019350610e74565b602085015182820160b51901945082900360b60192505b50505b915091565b6020601f820104836020840160005b83811015610ea757602081028381015190830152600101610e8b565b5060008551602001860152505050505050565b6000816020015160001415610ed157506000610859565b8151805160001a906080821015610eed57600092505050610859565b60b8821080610f08575060c08210158015610f08575060f882105b15610f1857600192505050610859565b60c0821015610f2d575060b519019050610859565b5060f5190192915050565b8051600090811a6080811015610f515760019150610fc0565b60b8811015610f6657607e1981019150610fc0565b60c0811015610f8f57600183015160b76020839003016101000a9004810160b519019150610fc0565b60f8811015610fa45760be1981019150610fc0565b600183015160f76020839003016101000a9004810160f5190191505b50919050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061100757805160ff1916838001178555611034565b82800160010185558215611034579182015b82811115611034578251825591602001919060010190611019565b5061104092915061107c565b5090565b604080518082019091526000808252602082015290565b60606040519081016040528061106f611044565b8152602001600081525090565b61083591905b80821115611040576000815560010161108256fea165627a7a723058202df067a9e517cc0e4144ae9d23ec5068724cfe7bb910a0e085195499fd1513b20029

Swarm Source

bzzr://2df067a9e517cc0e4144ae9d23ec5068724cfe7bb910a0e085195499fd1513b2

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.