Only this pageAll pages
Powered by GitBook
1 of 27

Uniscan

Loading...

Getting Started

Loading...

Loading...

Loading...

API Endpoints

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Contract Verification

Loading...

Loading...

Loading...

Loading...

Loading...

Misc Tools & Utilities

Loading...

Support

Loading...

Loading...

Loading...

Loading...

Introduction

Welcome to the Uniscan APIs documentation 🚀.

As a means to provide equitable access to blockchain data, we've developed the Uniscan Developer APIs to empower developers with direct access to Uniscan's block explorer data and services via GET/POST requests.

Uniscan's APIs are provided as a community service and without warranty, so please use what you need and no more.

Source attribution via a backlink or a mention that your app is "Powered by Uniscan.io APIs" is required except for personal/private usage.

API Endpoints

For that you may find a suitable endpoint from our wide range of APIs that you can simply query to provide data while you remain fully focused on building your applications.

Note : All Free API endpoint returns a maximum of 1000 records/call only.

Tutorials

We've helped you take the first steps by writing some thorough tutorials on how to query and derive popular blockchain metrics.

For power users, we've also added guides such as how you can programmatically verify contracts through API calls and more advanced use cases of endpoints.

Support & FAQ

Uniscan is the leading blockchain explorer, search, API and analytics platform for , a DeFi-native Ethereum L2, optimized to be the home for liquidity across chains

Your app may need to show a user's ERC-20 token holdings and their USD value , check if a transaction has been mined or get the latest gas price estimates .

There is an overwhelming amount of data that can be extracted from the Unichain blockchain.

Our curated list of support articles and common questions you may have on topics such as rate limits , common error messages and API key usage across different networks

If your issue is a unique one or you need more clarification, feel free to reach out to us via our

💰
⛏️
⛽
📈
🚧
⛔
🌏
support channels.

Endpoint URLs

Similarly, all endpoints and parameter formatting remain the same across testnet explorers, you are only required to change the relevant API endpoint URL as follows.

Unichain

An API key generated on Uniscan ​ can be used across all mainnet and testnet explorers.

Network
URL
Documentation

Mainnet

Sepolia

https://api.uniscan.xyz/api
https://docs.uniscan.xyz/
https://api-sepolia.uniscan.xyz/api
https://docs.uniscan.xyz/

Contracts

Returns the Contract Application Binary Interface ( ABI ) of a verified smart contract.

https://api.uniscan.xyz/api
   ?module=contract
   &action=getabi
   &address=0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the contract address that has a verified source code

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":"[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"votingDeadline\",\"type\":\"uint256\"},{\"name\":\"open\",\"type\":\"bool\"},{\"name\":\"proposalPassed\",\"type\":\"bool\"},{\"name\":\"proposalHash\",\"type\":\"bytes32\"},{\"name\":\"proposalDeposit\",\"type\":\"uint256\"},{\"name\":\"newCurator\",\"type\":\"bool\"},{\"name\":\"yea\",\"type\":\"uint256\"},{\"name\":\"nay\",\"type\":\"uint256\"},{\"name\":\"creator\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minTokensToCreate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rewardAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"daoCreator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"divisor\",\"outputs\":[{\"name\":\"divisor\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"extraBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unblockMe\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalRewardToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"actualBalance\",\"outputs\":[{\"name\":\"_actualBalance\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"closingTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRecipients\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferWithoutReward\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"refund\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_description\",\"type\":\"string\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"},{\"name\":\"_debatingPeriod\",\"type\":\"uint256\"},{\"name\":\"_newCurator\",\"type\":\"bool\"}],\"name\":\"newProposal\",\"outputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"DAOpaidOut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minQuorumDivisor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newContract\",\"type\":\"address\"}],\"name\":\"newContract\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"changeAllowedRecipients\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"halveMinQuorum\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"paidOut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_newCurator\",\"type\":\"address\"}],\"name\":\"splitDAO\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DAOrewardAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberOfProposals\",\"outputs\":[{\"name\":\"_numberOfProposals\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastTimeMinQuorumMet\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_toMembers\",\"type\":\"bool\"}],\"name\":\"retrieveDAOReward\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"receiveEther\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isFueled\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenHolder\",\"type\":\"address\"}],\"name\":\"createTokenProxy\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"}],\"name\":\"getNewDAOAddress\",\"outputs\":[{\"name\":\"_newDAO\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_supportsProposal\",\"type\":\"bool\"}],\"name\":\"vote\",\"outputs\":[{\"name\":\"_voteID\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getMyReward\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFromWithoutReward\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalDeposit\",\"type\":\"uint256\"}],\"name\":\"changeProposalDeposit\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"blocked\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"curator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"}],\"name\":\"checkProposalCode\",\"outputs\":[{\"name\":\"_codeChecksOut\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"privateCreation\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"inputs\":[{\"name\":\"_curator\",\"type\":\"address\"},{\"name\":\"_daoCreator\",\"type\":\"address\"},{\"name\":\"_proposalDeposit\",\"type\":\"uint256\"},{\"name\":\"_minTokensToCreate\",\"type\":\"uint256\"},{\"name\":\"_closingTime\",\"type\":\"uint256\"},{\"name\":\"_privateCreation\",\"type\":\"address\"}],\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FuelingToDate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreatedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Refund\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newCurator\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"description\",\"type\":\"string\"}],\"name\":\"ProposalAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"position\",\"type\":\"bool\"},{\"indexed\":true,\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"quorum\",\"type\":\"uint256\"}],\"name\":\"ProposalTallied\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_newCurator\",\"type\":\"address\"}],\"name\":\"NewCurator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"AllowedRecipientChanged\",\"type\":\"event\"}]"
}

Returns the Solidity source code of a verified smart contract.

https://api.uniscan.xyz/api
   ?module=contract
   &action=getsourcecode
   &address=0xBB9bc244D798123fDe783fCc1C72d3Bb8C189413
   &apikey=YourApiKeyToken 

Query Parameters

Parameter
Description

address

the contract address that has a verified source code

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "SourceCode":"/*\n\n- Bytecode Verification performed was compared on second iteration -\n\nThis file is part of the DAO.\n\nThe DAO is free software: you can redistribute it and/or modify\nit under the terms of the GNU lesser General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThe DAO is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU lesser General Public License for more details.\n\nYou should have received a copy of the GNU lesser General Public License\nalong with the DAO.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\n\n/*\nBasic, standardized Token contract with no \"premine\". Defines the functions to\ncheck token balances, send tokens, send tokens on behalf of a 3rd party and the\ncorresponding approval process. Tokens need to be created by a derived\ncontract (e.g. TokenCreation.sol).\n\nThank you ConsenSys, this contract originated from:\nhttps://github.com/ConsenSys/Tokens/blob/master/Token_Contracts/contracts/Standard_Token.sol\nWhich is itself based on the Unichain standardized contract APIs:\nhttps://github.com/ethereum/wiki/wiki/Standardized_Contract_APIs\n*/\n\n/// @title Standard Token Contract.\n\ncontract TokenInterface {\n    mapping (address => uint256) balances;\n    mapping (address => mapping (address => uint256)) allowed;\n\n    /// Total amount of tokens\n    uint256 public totalSupply;\n\n    /// @param _owner The address from which the balance will be retrieved\n    /// @return The balance\n    function balanceOf(address _owner) constant returns (uint256 balance);\n\n    /// @notice Send `_amount` tokens to `_to` from `msg.sender`\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transferred\n    /// @return Whether the transfer was successful or not\n    function transfer(address _to, uint256 _amount) returns (bool success);\n\n    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it\n    /// is approved by `_from`\n    /// @param _from The address of the origin of the transfer\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transferred\n    /// @return Whether the transfer was successful or not\n    function transferFrom(address _from, address _to, uint256 _amount) returns (bool success);\n\n    /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on\n    /// its behalf\n    /// @param _spender The address of the account able to transfer the tokens\n    /// @param _amount The amount of tokens to be approved for transfer\n    /// @return Whether the approval was successful or not\n    function approve(address _spender, uint256 _amount) returns (bool success);\n\n    /// @param _owner The address of the account owning tokens\n    /// @param _spender The address of the account able to transfer the tokens\n    /// @return Amount of remaining tokens of _owner that _spender is allowed\n    /// to spend\n    function allowance(\n        address _owner,\n        address _spender\n    ) constant returns (uint256 remaining);\n\n    event Transfer(address indexed _from, address indexed _to, uint256 _amount);\n    event Approval(\n        address indexed _owner,\n        address indexed _spender,\n        uint256 _amount\n    );\n}\n\n\ncontract Token is TokenInterface {\n    // Protects users by preventing the execution of method calls that\n    // inadvertently also transferred ether\n    modifier noEther() {if (msg.value > 0) throw; _}\n\n    function balanceOf(address _owner) constant returns (uint256 balance) {\n        return balances[_owner];\n    }\n\n    function transfer(address _to, uint256 _amount) noEther returns (bool success) {\n        if (balances[msg.sender] >= _amount && _amount > 0) {\n            balances[msg.sender] -= _amount;\n            balances[_to] += _amount;\n            Transfer(msg.sender, _to, _amount);\n            return true;\n        } else {\n           return false;\n        }\n    }\n\n    function transferFrom(\n        address _from,\n        address _to,\n        uint256 _amount\n    ) noEther returns (bool success) {\n\n        if (balances[_from] >= _amount\n            && allowed[_from][msg.sender] >= _amount\n            && _amount > 0) {\n\n            balances[_to] += _amount;\n            balances[_from] -= _amount;\n            allowed[_from][msg.sender] -= _amount;\n            Transfer(_from, _to, _amount);\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    function approve(address _spender, uint256 _amount) returns (bool success) {\n        allowed[msg.sender][_spender] = _amount;\n        Approval(msg.sender, _spender, _amount);\n        return true;\n    }\n\n    function allowance(address _owner, address _spender) constant returns (uint256 remaining) {\n        return allowed[_owner][_spender];\n    }\n}\n\n\n/*\nThis file is part of the DAO.\n\nThe DAO is free software: you can redistribute it and/or modify\nit under the terms of the GNU lesser General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThe DAO is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU lesser General Public License for more details.\n\nYou should have received a copy of the GNU lesser General Public License\nalong with the DAO.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\n\n/*\nBasic account, used by the DAO contract to separately manage both the rewards \nand the extraBalance accounts. \n*/\n\ncontract ManagedAccountInterface {\n    // The only address with permission to withdraw from this account\n    address public owner;\n    // If true, only the owner of the account can receive ether from it\n    bool public payOwnerOnly;\n    // The sum of ether (in wei) which has been sent to this contract\n    uint public accumulatedInput;\n\n    /// @notice Sends `_amount` of wei to _recipient\n    /// @param _amount The amount of wei to send to `_recipient`\n    /// @param _recipient The address to receive `_amount` of wei\n    /// @return True if the send completed\n    function payOut(address _recipient, uint _amount) returns (bool);\n\n    event PayOut(address indexed _recipient, uint _amount);\n}\n\n\ncontract ManagedAccount is ManagedAccountInterface{\n\n    // The constructor sets the owner of the account\n    function ManagedAccount(address _owner, bool _payOwnerOnly) {\n        owner = _owner;\n        payOwnerOnly = _payOwnerOnly;\n    }\n\n    // When the contract receives a transaction without data this is called. \n    // It counts the amount of ether it receives and stores it in \n    // accumulatedInput.\n    function() {\n        accumulatedInput += msg.value;\n    }\n\n    function payOut(address _recipient, uint _amount) returns (bool) {\n        if (msg.sender != owner || msg.value > 0 || (payOwnerOnly && _recipient != owner))\n            throw;\n        if (_recipient.call.value(_amount)()) {\n            PayOut(_recipient, _amount);\n            return true;\n        } else {\n            return false;\n        }\n    }\n}\n/*\nThis file is part of the DAO.\n\nThe DAO is free software: you can redistribute it and/or modify\nit under the terms of the GNU lesser General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThe DAO is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU lesser General Public License for more details.\n\nYou should have received a copy of the GNU lesser General Public License\nalong with the DAO.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\n\n/*\n * Token Creation contract, used by the DAO to create its tokens and initialize\n * its ether. Feel free to modify the divisor method to implement different\n * Token Creation parameters\n*/\n\n\ncontract TokenCreationInterface {\n\n    // End of token creation, in Unix time\n    uint public closingTime;\n    // Minimum fueling goal of the token creation, denominated in tokens to\n    // be created\n    uint public minTokensToCreate;\n    // True if the DAO reached its minimum fueling goal, false otherwise\n    bool public isFueled;\n    // For DAO splits - if privateCreation is 0, then it is a public token\n    // creation, otherwise only the address stored in privateCreation is\n    // allowed to create tokens\n    address public privateCreation;\n    // hold extra ether which has been sent after the DAO token\n    // creation rate has increased\n    ManagedAccount public extraBalance;\n    // tracks the amount of wei given from each contributor (used for refund)\n    mapping (address => uint256) weiGiven;\n\n    /// @dev Constructor setting the minimum fueling goal and the\n    /// end of the Token Creation\n    /// @param _minTokensToCreate Minimum fueling goal in number of\n    ///        Tokens to be created\n    /// @param _closingTime Date (in Unix time) of the end of the Token Creation\n    /// @param _privateCreation Zero means that the creation is public.  A\n    /// non-zero address represents the only address that can create Tokens\n    /// (the address can also create Tokens on behalf of other accounts)\n    // This is the constructor: it can not be overloaded so it is commented out\n    //  function TokenCreation(\n        //  uint _minTokensTocreate,\n        //  uint _closingTime,\n        //  address _privateCreation\n    //  );\n\n    /// @notice Create Token with `_tokenHolder` as the initial owner of the Token\n    /// @param _tokenHolder The address of the Tokens's recipient\n    /// @return Whether the token creation was successful\n    function createTokenProxy(address _tokenHolder) returns (bool success);\n\n    /// @notice Refund `msg.sender` in the case the Token Creation did\n    /// not reach its minimum fueling goal\n    function refund();\n\n    /// @return The divisor used to calculate the token creation rate during\n    /// the creation phase\n    function divisor() constant returns (uint divisor);\n\n    event FuelingToDate(uint value);\n    event CreatedToken(address indexed to, uint amount);\n    event Refund(address indexed to, uint value);\n}\n\n\ncontract TokenCreation is TokenCreationInterface, Token {\n    function TokenCreation(\n        uint _minTokensToCreate,\n        uint _closingTime,\n        address _privateCreation) {\n\n        closingTime = _closingTime;\n        minTokensToCreate = _minTokensToCreate;\n        privateCreation = _privateCreation;\n        extraBalance = new ManagedAccount(address(this), true);\n    }\n\n    function createTokenProxy(address _tokenHolder) returns (bool success) {\n        if (now < closingTime && msg.value > 0\n            && (privateCreation == 0 || privateCreation == msg.sender)) {\n\n            uint token = (msg.value * 20) / divisor();\n            extraBalance.call.value(msg.value - token)();\n            balances[_tokenHolder] += token;\n            totalSupply += token;\n            weiGiven[_tokenHolder] += msg.value;\n            CreatedToken(_tokenHolder, token);\n            if (totalSupply >= minTokensToCreate && !isFueled) {\n                isFueled = true;\n                FuelingToDate(totalSupply);\n            }\n            return true;\n        }\n        throw;\n    }\n\n    function refund() noEther {\n        if (now > closingTime && !isFueled) {\n            // Get extraBalance - will only succeed when called for the first time\n            if (extraBalance.balance >= extraBalance.accumulatedInput())\n                extraBalance.payOut(address(this), extraBalance.accumulatedInput());\n\n            // Execute refund\n            if (msg.sender.call.value(weiGiven[msg.sender])()) {\n                Refund(msg.sender, weiGiven[msg.sender]);\n                totalSupply -= balances[msg.sender];\n                balances[msg.sender] = 0;\n                weiGiven[msg.sender] = 0;\n            }\n        }\n    }\n\n    function divisor() constant returns (uint divisor) {\n        // The number of (base unit) tokens per wei is calculated\n        // as `msg.value` * 20 / `divisor`\n        // The fueling period starts with a 1:1 ratio\n        if (closingTime - 2 weeks > now) {\n            return 20;\n        // Followed by 10 days with a daily creation rate increase of 5%\n        } else if (closingTime - 4 days > now) {\n            return (20 + (now - (closingTime - 2 weeks)) / (1 days));\n        // The last 4 days there is a constant creation rate ratio of 1:1.5\n        } else {\n            return 30;\n        }\n    }\n}\n/*\nThis file is part of the DAO.\n\nThe DAO is free software: you can redistribute it and/or modify\nit under the terms of the GNU lesser General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThe DAO is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU lesser General Public License for more details.\n\nYou should have received a copy of the GNU lesser General Public License\nalong with the DAO.  If not, see <http://www.gnu.org/licenses/>.\n*/\n\n\n/*\nStandard smart contract for a Decentralized Autonomous Organization (DAO)\nto automate organizational governance and decision-making.\n*/\n\n\ncontract DAOInterface {\n\n    // The amount of days for which people who try to participate in the\n    // creation by calling the fallback function will still get their ether back\n    uint constant creationGracePeriod = 40 days;\n    // The minimum debate period that a generic proposal can have\n    uint constant minProposalDebatePeriod = 2 weeks;\n    // The minimum debate period that a split proposal can have\n    uint constant minSplitDebatePeriod = 1 weeks;\n    // Period of days inside which it's possible to execute a DAO split\n    uint constant splitExecutionPeriod = 27 days;\n    // Period of time after which the minimum Quorum is halved\n    uint constant quorumHalvingPeriod = 25 weeks;\n    // Period after which a proposal is closed\n    // (used in the case `executeProposal` fails because it throws)\n    uint constant executeProposalPeriod = 10 days;\n    // Denotes the maximum proposal deposit that can be given. It is given as\n    // a fraction of total Ether spent plus balance of the DAO\n    uint constant maxDepositDivisor = 100;\n\n    // Proposals to spend the DAO's ether or to choose a new Curator\n    Proposal[] public proposals;\n    // The quorum needed for each proposal is partially calculated by\n    // totalSupply / minQuorumDivisor\n    uint public minQuorumDivisor;\n    // The unix time of the last time quorum was reached on a proposal\n    uint  public lastTimeMinQuorumMet;\n\n    // Address of the curator\n    address public curator;\n    // The whitelist: List of addresses the DAO is allowed to send ether to\n    mapping (address => bool) public allowedRecipients;\n\n    // Tracks the addresses that own Reward Tokens. Those addresses can only be\n    // DAOs that have split from the original DAO. Conceptually, Reward Tokens\n    // represent the proportion of the rewards that the DAO has the right to\n    // receive. These Reward Tokens are generated when the DAO spends ether.\n    mapping (address => uint) public rewardToken;\n    // Total supply of rewardToken\n    uint public totalRewardToken;\n\n    // The account used to manage the rewards which are to be distributed to the\n    // DAO Token Holders of this DAO\n    ManagedAccount public rewardAccount;\n\n    // The account used to manage the rewards which are to be distributed to\n    // any DAO that holds Reward Tokens\n    ManagedAccount public DAOrewardAccount;\n\n    // Amount of rewards (in wei) already paid out to a certain DAO\n    mapping (address => uint) public DAOpaidOut;\n\n    // Amount of rewards (in wei) already paid out to a certain address\n    mapping (address => uint) public paidOut;\n    // Map of addresses blocked during a vote (not allowed to transfer DAO\n    // tokens). The address points to the proposal ID.\n    mapping (address => uint) public blocked;\n\n    // The minimum deposit (in wei) required to submit any proposal that is not\n    // requesting a new Curator (no deposit is required for splits)\n    uint public proposalDeposit;\n\n    // the accumulated sum of all current proposal deposits\n    uint sumOfProposalDeposits;\n\n    // Contract that is able to create a new DAO (with the same code as\n    // this one), used for splits\n    DAO_Creator public daoCreator;\n\n    // A proposal with `newCurator == false` represents a transaction\n    // to be issued by this DAO\n    // A proposal with `newCurator == true` represents a DAO split\n    struct Proposal {\n        // The address where the `amount` will go to if the proposal is accepted\n        // or if `newCurator` is true, the proposed Curator of\n        // the new DAO).\n        address recipient;\n        // The amount to transfer to `recipient` if the proposal is accepted.\n        uint amount;\n        // A plain text description of the proposal\n        string description;\n        // A unix timestamp, denoting the end of the voting period\n        uint votingDeadline;\n        // True if the proposal's votes have yet to be counted, otherwise False\n        bool open;\n        // True if quorum has been reached, the votes have been counted, and\n        // the majority said yes\n        bool proposalPassed;\n        // A hash to check validity of a proposal\n        bytes32 proposalHash;\n        // Deposit in wei the creator added when submitting their proposal. It\n        // is taken from the msg.value of a newProposal call.\n        uint proposalDeposit;\n        // True if this proposal is to assign a new Curator\n        bool newCurator;\n        // Data needed for splitting the DAO\n        SplitData[] splitData;\n        // Number of Tokens in favor of the proposal\n        uint yea;\n        // Number of Tokens opposed to the proposal\n        uint nay;\n        // Simple mapping to check if a shareholder has voted for it\n        mapping (address => bool) votedYes;\n        // Simple mapping to check if a shareholder has voted against it\n        mapping (address => bool) votedNo;\n        // Address of the shareholder who created the proposal\n        address creator;\n    }\n\n    // Used only in the case of a newCurator proposal.\n    struct SplitData {\n        // The balance of the current DAO minus the deposit at the time of split\n        uint splitBalance;\n        // The total amount of DAO Tokens in existence at the time of split.\n        uint totalSupply;\n        // Amount of Reward Tokens owned by the DAO at the time of split.\n        uint rewardToken;\n        // The new DAO contract created at the time of split.\n        DAO newDAO;\n    }\n\n    // Used to restrict access to certain functions to only DAO Token Holders\n    modifier onlyTokenholders {}\n\n    /// @dev Constructor setting the Curator and the address\n    /// for the contract able to create another DAO as well as the parameters\n    /// for the DAO Token Creation\n    /// @param _curator The Curator\n    /// @param _daoCreator The contract able to (re)create this DAO\n    /// @param _proposalDeposit The deposit to be paid for a regular proposal\n    /// @param _minTokensToCreate Minimum required wei-equivalent tokens\n    ///        to be created for a successful DAO Token Creation\n    /// @param _closingTime Date (in Unix time) of the end of the DAO Token Creation\n    /// @param _privateCreation If zero the DAO Token Creation is open to public, a\n    /// non-zero address means that the DAO Token Creation is only for the address\n    // This is the constructor: it can not be overloaded so it is commented out\n    //  function DAO(\n        //  address _curator,\n        //  DAO_Creator _daoCreator,\n        //  uint _proposalDeposit,\n        //  uint _minTokensToCreate,\n        //  uint _closingTime,\n        //  address _privateCreation\n    //  );\n\n    /// @notice Create Token with `msg.sender` as the beneficiary\n    /// @return Whether the token creation was successful\n    function () returns (bool success);\n\n\n    /// @dev This function is used to send ether back\n    /// to the DAO, it can also be used to receive payments that should not be\n    /// counted as rewards (donations, grants, etc.)\n    /// @return Whether the DAO received the ether successfully\n    function receiveEther() returns(bool);\n\n    /// @notice `msg.sender` creates a proposal to send `_amount` Wei to\n    /// `_recipient` with the transaction data `_transactionData`. If\n    /// `_newCurator` is true, then this is a proposal that splits the\n    /// DAO and sets `_recipient` as the new DAO's Curator.\n    /// @param _recipient Address of the recipient of the proposed transaction\n    /// @param _amount Amount of wei to be sent with the proposed transaction\n    /// @param _description String describing the proposal\n    /// @param _transactionData Data of the proposed transaction\n    /// @param _debatingPeriod Time used for debating a proposal, at least 2\n    /// weeks for a regular proposal, 10 days for new Curator proposal\n    /// @param _newCurator Bool defining whether this proposal is about\n    /// a new Curator or not\n    /// @return The proposal ID. Needed for voting on the proposal\n    function newProposal(\n        address _recipient,\n        uint _amount,\n        string _description,\n        bytes _transactionData,\n        uint _debatingPeriod,\n        bool _newCurator\n    ) onlyTokenholders returns (uint _proposalID);\n\n    /// @notice Check that the proposal with the ID `_proposalID` matches the\n    /// transaction which sends `_amount` with data `_transactionData`\n    /// to `_recipient`\n    /// @param _proposalID The proposal ID\n    /// @param _recipient The recipient of the proposed transaction\n    /// @param _amount The amount of wei to be sent in the proposed transaction\n    /// @param _transactionData The data of the proposed transaction\n    /// @return Whether the proposal ID matches the transaction data or not\n    function checkProposalCode(\n        uint _proposalID,\n        address _recipient,\n        uint _amount,\n        bytes _transactionData\n    ) constant returns (bool _codeChecksOut);\n\n    /// @notice Vote on proposal `_proposalID` with `_supportsProposal`\n    /// @param _proposalID The proposal ID\n    /// @param _supportsProposal Yes/No - support of the proposal\n    /// @return The vote ID.\n    function vote(\n        uint _proposalID,\n        bool _supportsProposal\n    ) onlyTokenholders returns (uint _voteID);\n\n    /// @notice Checks whether proposal `_proposalID` with transaction data\n    /// `_transactionData` has been voted for or rejected, and executes the\n    /// transaction in the case it has been voted for.\n    /// @param _proposalID The proposal ID\n    /// @param _transactionData The data of the proposed transaction\n    /// @return Whether the proposed transaction has been executed or not\n    function executeProposal(\n        uint _proposalID,\n        bytes _transactionData\n    ) returns (bool _success);\n\n    /// @notice ATTENTION! I confirm to move my remaining ether to a new DAO\n    /// with `_newCurator` as the new Curator, as has been\n    /// proposed in proposal `_proposalID`. This will burn my tokens. This can\n    /// not be undone and will split the DAO into two DAO's, with two\n    /// different underlying tokens.\n    /// @param _proposalID The proposal ID\n    /// @param _newCurator The new Curator of the new DAO\n    /// @dev This function, when called for the first time for this proposal,\n    /// will create a new DAO and send the sender's portion of the remaining\n    /// ether and Reward Tokens to the new DAO. It will also burn the DAO Tokens\n    /// of the sender.\n    function splitDAO(\n        uint _proposalID,\n        address _newCurator\n    ) returns (bool _success);\n\n    /// @dev can only be called by the DAO itself through a proposal\n    /// updates the contract of the DAO by sending all ether and rewardTokens\n    /// to the new DAO. The new DAO needs to be approved by the Curator\n    /// @param _newContract the address of the new contract\n    function newContract(address _newContract);\n\n\n    /// @notice Add a new possible recipient `_recipient` to the whitelist so\n    /// that the DAO can send transactions to them (using proposals)\n    /// @param _recipient New recipient address\n    /// @dev Can only be called by the current Curator\n    /// @return Whether successful or not\n    function changeAllowedRecipients(address _recipient, bool _allowed) external returns (bool _success);\n\n\n    /// @notice Change the minimum deposit required to submit a proposal\n    /// @param _proposalDeposit The new proposal deposit\n    /// @dev Can only be called by this DAO (through proposals with the\n    /// recipient being this DAO itself)\n    function changeProposalDeposit(uint _proposalDeposit) external;\n\n    /// @notice Move rewards from the DAORewards managed account\n    /// @param _toMembers If true rewards are moved to the actual reward account\n    ///                   for the DAO. If not then it's moved to the DAO itself\n    /// @return Whether the call was successful\n    function retrieveDAOReward(bool _toMembers) external returns (bool _success);\n\n    /// @notice Get my portion of the reward that was sent to `rewardAccount`\n    /// @return Whether the call was successful\n    function getMyReward() returns(bool _success);\n\n    /// @notice Withdraw `_account`'s portion of the reward from `rewardAccount`\n    /// to `_account`'s balance\n    /// @return Whether the call was successful\n    function withdrawRewardFor(address _account) internal returns (bool _success);\n\n    /// @notice Send `_amount` tokens to `_to` from `msg.sender`. Prior to this\n    /// getMyReward() is called.\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transfered\n    /// @return Whether the transfer was successful or not\n    function transferWithoutReward(address _to, uint256 _amount) returns (bool success);\n\n    /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it\n    /// is approved by `_from`. Prior to this getMyReward() is called.\n    /// @param _from The address of the sender\n    /// @param _to The address of the recipient\n    /// @param _amount The amount of tokens to be transfered\n    /// @return Whether the transfer was successful or not\n    function transferFromWithoutReward(\n        address _from,\n        address _to,\n        uint256 _amount\n    ) returns (bool success);\n\n    /// @notice Doubles the 'minQuorumDivisor' in the case quorum has not been\n    /// achieved in 52 weeks\n    /// @return Whether the change was successful or not\n    function halveMinQuorum() returns (bool _success);\n\n    /// @return total number of proposals ever created\n    function numberOfProposals() constant returns (uint _numberOfProposals);\n\n    /// @param _proposalID Id of the new curator proposal\n    /// @return Address of the new DAO\n    function getNewDAOAddress(uint _proposalID) constant returns (address _newDAO);\n\n    /// @param _account The address of the account which is checked.\n    /// @return Whether the account is blocked (not allowed to transfer tokens) or not.\n    function isBlocked(address _account) internal returns (bool);\n\n    /// @notice If the caller is blocked by a proposal whose voting deadline\n    /// has exprired then unblock him.\n    /// @return Whether the account is blocked (not allowed to transfer tokens) or not.\n    function unblockMe() returns (bool);\n\n    event ProposalAdded(\n        uint indexed proposalID,\n        address recipient,\n        uint amount,\n        bool newCurator,\n        string description\n    );\n    event Voted(uint indexed proposalID, bool position, address indexed voter);\n    event ProposalTallied(uint indexed proposalID, bool result, uint quorum);\n    event NewCurator(address indexed _newCurator);\n    event AllowedRecipientChanged(address indexed _recipient, bool _allowed);\n}\n\n// The DAO contract itself\ncontract DAO is DAOInterface, Token, TokenCreation {\n\n    // Modifier that allows only shareholders to vote and create new proposals\n    modifier onlyTokenholders {\n        if (balanceOf(msg.sender) == 0) throw;\n            _\n    }\n\n    function DAO(\n        address _curator,\n        DAO_Creator _daoCreator,\n        uint _proposalDeposit,\n        uint _minTokensToCreate,\n        uint _closingTime,\n        address _privateCreation\n    ) TokenCreation(_minTokensToCreate, _closingTime, _privateCreation) {\n\n        curator = _curator;\n        daoCreator = _daoCreator;\n        proposalDeposit = _proposalDeposit;\n        rewardAccount = new ManagedAccount(address(this), false);\n        DAOrewardAccount = new ManagedAccount(address(this), false);\n        if (address(rewardAccount) == 0)\n            throw;\n        if (address(DAOrewardAccount) == 0)\n            throw;\n        lastTimeMinQuorumMet = now;\n        minQuorumDivisor = 5; // sets the minimal quorum to 20%\n        proposals.length = 1; // avoids a proposal with ID 0 because it is used\n\n        allowedRecipients[address(this)] = true;\n        allowedRecipients[curator] = true;\n    }\n\n    function () returns (bool success) {\n        if (now < closingTime + creationGracePeriod && msg.sender != address(extraBalance))\n            return createTokenProxy(msg.sender);\n        else\n            return receiveEther();\n    }\n\n\n    function receiveEther() returns (bool) {\n        return true;\n    }\n\n\n    function newProposal(\n        address _recipient,\n        uint _amount,\n        string _description,\n        bytes _transactionData,\n        uint _debatingPeriod,\n        bool _newCurator\n    ) onlyTokenholders returns (uint _proposalID) {\n\n        // Sanity check\n        if (_newCurator && (\n            _amount != 0\n            || _transactionData.length != 0\n            || _recipient == curator\n            || msg.value > 0\n            || _debatingPeriod < minSplitDebatePeriod)) {\n            throw;\n        } else if (\n            !_newCurator\n            && (!isRecipientAllowed(_recipient) || (_debatingPeriod <  minProposalDebatePeriod))\n        ) {\n            throw;\n        }\n\n        if (_debatingPeriod > 8 weeks)\n            throw;\n\n        if (!isFueled\n            || now < closingTime\n            || (msg.value < proposalDeposit && !_newCurator)) {\n\n            throw;\n        }\n\n        if (now + _debatingPeriod < now) // prevents overflow\n            throw;\n\n        // to prevent a 51% attacker to convert the ether into deposit\n        if (msg.sender == address(this))\n            throw;\n\n        _proposalID = proposals.length++;\n        Proposal p = proposals[_proposalID];\n        p.recipient = _recipient;\n        p.amount = _amount;\n        p.description = _description;\n        p.proposalHash = sha3(_recipient, _amount, _transactionData);\n        p.votingDeadline = now + _debatingPeriod;\n        p.open = true;\n        //p.proposalPassed = False; // that's default\n        p.newCurator = _newCurator;\n        if (_newCurator)\n            p.splitData.length++;\n        p.creator = msg.sender;\n        p.proposalDeposit = msg.value;\n\n        sumOfProposalDeposits += msg.value;\n\n        ProposalAdded(\n            _proposalID,\n            _recipient,\n            _amount,\n            _newCurator,\n            _description\n        );\n    }\n\n\n    function checkProposalCode(\n        uint _proposalID,\n        address _recipient,\n        uint _amount,\n        bytes _transactionData\n    ) noEther constant returns (bool _codeChecksOut) {\n        Proposal p = proposals[_proposalID];\n        return p.proposalHash == sha3(_recipient, _amount, _transactionData);\n    }\n\n\n    function vote(\n        uint _proposalID,\n        bool _supportsProposal\n    ) onlyTokenholders noEther returns (uint _voteID) {\n\n        Proposal p = proposals[_proposalID];\n        if (p.votedYes[msg.sender]\n            || p.votedNo[msg.sender]\n            || now >= p.votingDeadline) {\n\n            throw;\n        }\n\n        if (_supportsProposal) {\n            p.yea += balances[msg.sender];\n            p.votedYes[msg.sender] = true;\n        } else {\n            p.nay += balances[msg.sender];\n            p.votedNo[msg.sender] = true;\n        }\n\n        if (blocked[msg.sender] == 0) {\n            blocked[msg.sender] = _proposalID;\n        } else if (p.votingDeadline > proposals[blocked[msg.sender]].votingDeadline) {\n            // this proposal's voting deadline is further into the future than\n            // the proposal that blocks the sender so make it the blocker\n            blocked[msg.sender] = _proposalID;\n        }\n\n        Voted(_proposalID, _supportsProposal, msg.sender);\n    }\n\n\n    function executeProposal(\n        uint _proposalID,\n        bytes _transactionData\n    ) noEther returns (bool _success) {\n\n        Proposal p = proposals[_proposalID];\n\n        uint waitPeriod = p.newCurator\n            ? splitExecutionPeriod\n            : executeProposalPeriod;\n        // If we are over deadline and waiting period, assert proposal is closed\n        if (p.open && now > p.votingDeadline + waitPeriod) {\n            closeProposal(_proposalID);\n            return;\n        }\n\n        // Check if the proposal can be executed\n        if (now < p.votingDeadline  // has the voting deadline arrived?\n            // Have the votes been counted?\n            || !p.open\n            // Does the transaction code match the proposal?\n            || p.proposalHash != sha3(p.recipient, p.amount, _transactionData)) {\n\n            throw;\n        }\n\n        // If the curator removed the recipient from the whitelist, close the proposal\n        // in order to free the deposit and allow unblocking of voters\n        if (!isRecipientAllowed(p.recipient)) {\n            closeProposal(_proposalID);\n            p.creator.send(p.proposalDeposit);\n            return;\n        }\n\n        bool proposalCheck = true;\n\n        if (p.amount > actualBalance())\n            proposalCheck = false;\n\n        uint quorum = p.yea + p.nay;\n\n        // require 53% for calling newContract()\n        if (_transactionData.length >= 4 && _transactionData[0] == 0x68\n            && _transactionData[1] == 0x37 && _transactionData[2] == 0xff\n            && _transactionData[3] == 0x1e\n            && quorum < minQuorum(actualBalance() + rewardToken[address(this)])) {\n\n                proposalCheck = false;\n        }\n\n        if (quorum >= minQuorum(p.amount)) {\n            if (!p.creator.send(p.proposalDeposit))\n                throw;\n\n            lastTimeMinQuorumMet = now;\n            // set the minQuorum to 20% again, in the case it has been reached\n            if (quorum > totalSupply / 5)\n                minQuorumDivisor = 5;\n        }\n\n        // Execute result\n        if (quorum >= minQuorum(p.amount) && p.yea > p.nay && proposalCheck) {\n            if (!p.recipient.call.value(p.amount)(_transactionData))\n                throw;\n\n            p.proposalPassed = true;\n            _success = true;\n\n            // only create reward tokens when ether is not sent to the DAO itself and\n            // related addresses. Proxy addresses should be forbidden by the curator.\n            if (p.recipient != address(this) && p.recipient != address(rewardAccount)\n                && p.recipient != address(DAOrewardAccount)\n                && p.recipient != address(extraBalance)\n                && p.recipient != address(curator)) {\n\n                rewardToken[address(this)] += p.amount;\n                totalRewardToken += p.amount;\n            }\n        }\n\n        closeProposal(_proposalID);\n\n        // Initiate event\n        ProposalTallied(_proposalID, _success, quorum);\n    }\n\n\n    function closeProposal(uint _proposalID) internal {\n        Proposal p = proposals[_proposalID];\n        if (p.open)\n            sumOfProposalDeposits -= p.proposalDeposit;\n        p.open = false;\n    }\n\n    function splitDAO(\n        uint _proposalID,\n        address _newCurator\n    ) noEther onlyTokenholders returns (bool _success) {\n\n        Proposal p = proposals[_proposalID];\n\n        // Sanity check\n\n        if (now < p.votingDeadline  // has the voting deadline arrived?\n            //The request for a split expires XX days after the voting deadline\n            || now > p.votingDeadline + splitExecutionPeriod\n            // Does the new Curator address match?\n            || p.recipient != _newCurator\n            // Is it a new curator proposal?\n            || !p.newCurator\n            // Have you voted for this split?\n            || !p.votedYes[msg.sender]\n            // Did you already vote on another proposal?\n            || (blocked[msg.sender] != _proposalID && blocked[msg.sender] != 0) )  {\n\n            throw;\n        }\n\n        // If the new DAO doesn't exist yet, create the new DAO and store the\n        // current split data\n        if (address(p.splitData[0].newDAO) == 0) {\n            p.splitData[0].newDAO = createNewDAO(_newCurator);\n            // Call depth limit reached, etc.\n            if (address(p.splitData[0].newDAO) == 0)\n                throw;\n            // should never happen\n            if (this.balance < sumOfProposalDeposits)\n                throw;\n            p.splitData[0].splitBalance = actualBalance();\n            p.splitData[0].rewardToken = rewardToken[address(this)];\n            p.splitData[0].totalSupply = totalSupply;\n            p.proposalPassed = true;\n        }\n\n        // Move ether and assign new Tokens\n        uint fundsToBeMoved =\n            (balances[msg.sender] * p.splitData[0].splitBalance) /\n            p.splitData[0].totalSupply;\n        if (p.splitData[0].newDAO.createTokenProxy.value(fundsToBeMoved)(msg.sender) == false)\n            throw;\n\n\n        // Assign reward rights to new DAO\n        uint rewardTokenToBeMoved =\n            (balances[msg.sender] * p.splitData[0].rewardToken) /\n            p.splitData[0].totalSupply;\n\n        uint paidOutToBeMoved = DAOpaidOut[address(this)] * rewardTokenToBeMoved /\n            rewardToken[address(this)];\n\n        rewardToken[address(p.splitData[0].newDAO)] += rewardTokenToBeMoved;\n        if (rewardToken[address(this)] < rewardTokenToBeMoved)\n            throw;\n        rewardToken[address(this)] -= rewardTokenToBeMoved;\n\n        DAOpaidOut[address(p.splitData[0].newDAO)] += paidOutToBeMoved;\n        if (DAOpaidOut[address(this)] < paidOutToBeMoved)\n            throw;\n        DAOpaidOut[address(this)] -= paidOutToBeMoved;\n\n        // Burn DAO Tokens\n        Transfer(msg.sender, 0, balances[msg.sender]);\n        withdrawRewardFor(msg.sender); // be nice, and get his rewards\n        totalSupply -= balances[msg.sender];\n        balances[msg.sender] = 0;\n        paidOut[msg.sender] = 0;\n        return true;\n    }\n\n    function newContract(address _newContract){\n        if (msg.sender != address(this) || !allowedRecipients[_newContract]) return;\n        // move all ether\n        if (!_newContract.call.value(address(this).balance)()) {\n            throw;\n        }\n\n        //move all reward tokens\n        rewardToken[_newContract] += rewardToken[address(this)];\n        rewardToken[address(this)] = 0;\n        DAOpaidOut[_newContract] += DAOpaidOut[address(this)];\n        DAOpaidOut[address(this)] = 0;\n    }\n\n\n    function retrieveDAOReward(bool _toMembers) external noEther returns (bool _success) {\n        DAO dao = DAO(msg.sender);\n\n        if ((rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) /\n            totalRewardToken < DAOpaidOut[msg.sender])\n            throw;\n\n        uint reward =\n            (rewardToken[msg.sender] * DAOrewardAccount.accumulatedInput()) /\n            totalRewardToken - DAOpaidOut[msg.sender];\n        if(_toMembers) {\n            if (!DAOrewardAccount.payOut(dao.rewardAccount(), reward))\n                throw;\n            }\n        else {\n            if (!DAOrewardAccount.payOut(dao, reward))\n                throw;\n        }\n        DAOpaidOut[msg.sender] += reward;\n        return true;\n    }\n\n    function getMyReward() noEther returns (bool _success) {\n        return withdrawRewardFor(msg.sender);\n    }\n\n\n    function withdrawRewardFor(address _account) noEther internal returns (bool _success) {\n        if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account])\n            throw;\n\n        uint reward =\n            (balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account];\n        if (!rewardAccount.payOut(_account, reward))\n            throw;\n        paidOut[_account] += reward;\n        return true;\n    }\n\n\n    function transfer(address _to, uint256 _value) returns (bool success) {\n        if (isFueled\n            && now > closingTime\n            && !isBlocked(msg.sender)\n            && transferPaidOut(msg.sender, _to, _value)\n            && super.transfer(_to, _value)) {\n\n            return true;\n        } else {\n            throw;\n        }\n    }\n\n\n    function transferWithoutReward(address _to, uint256 _value) returns (bool success) {\n        if (!getMyReward())\n            throw;\n        return transfer(_to, _value);\n    }\n\n\n    function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {\n        if (isFueled\n            && now > closingTime\n            && !isBlocked(_from)\n            && transferPaidOut(_from, _to, _value)\n            && super.transferFrom(_from, _to, _value)) {\n\n            return true;\n        } else {\n            throw;\n        }\n    }\n\n\n    function transferFromWithoutReward(\n        address _from,\n        address _to,\n        uint256 _value\n    ) returns (bool success) {\n\n        if (!withdrawRewardFor(_from))\n            throw;\n        return transferFrom(_from, _to, _value);\n    }\n\n\n    function transferPaidOut(\n        address _from,\n        address _to,\n        uint256 _value\n    ) internal returns (bool success) {\n\n        uint transferPaidOut = paidOut[_from] * _value / balanceOf(_from);\n        if (transferPaidOut > paidOut[_from])\n            throw;\n        paidOut[_from] -= transferPaidOut;\n        paidOut[_to] += transferPaidOut;\n        return true;\n    }\n\n\n    function changeProposalDeposit(uint _proposalDeposit) noEther external {\n        if (msg.sender != address(this) || _proposalDeposit > (actualBalance() + rewardToken[address(this)])\n            / maxDepositDivisor) {\n\n            throw;\n        }\n        proposalDeposit = _proposalDeposit;\n    }\n\n\n    function changeAllowedRecipients(address _recipient, bool _allowed) noEther external returns (bool _success) {\n        if (msg.sender != curator)\n            throw;\n        allowedRecipients[_recipient] = _allowed;\n        AllowedRecipientChanged(_recipient, _allowed);\n        return true;\n    }\n\n\n    function isRecipientAllowed(address _recipient) internal returns (bool _isAllowed) {\n        if (allowedRecipients[_recipient]\n            || (_recipient == address(extraBalance)\n                // only allowed when at least the amount held in the\n                // extraBalance account has been spent from the DAO\n                && totalRewardToken > extraBalance.accumulatedInput()))\n            return true;\n        else\n            return false;\n    }\n\n    function actualBalance() constant returns (uint _actualBalance) {\n        return this.balance - sumOfProposalDeposits;\n    }\n\n\n    function minQuorum(uint _value) internal constant returns (uint _minQuorum) {\n        // minimum of 20% and maximum of 53.33%\n        return totalSupply / minQuorumDivisor +\n            (_value * totalSupply) / (3 * (actualBalance() + rewardToken[address(this)]));\n    }\n\n\n    function halveMinQuorum() returns (bool _success) {\n        // this can only be called after `quorumHalvingPeriod` has passed or at anytime\n        // by the curator with a delay of at least `minProposalDebatePeriod` between the calls\n        if ((lastTimeMinQuorumMet < (now - quorumHalvingPeriod) || msg.sender == curator)\n            && lastTimeMinQuorumMet < (now - minProposalDebatePeriod)) {\n            lastTimeMinQuorumMet = now;\n            minQuorumDivisor *= 2;\n            return true;\n        } else {\n            return false;\n        }\n    }\n\n    function createNewDAO(address _newCurator) internal returns (DAO _newDAO) {\n        NewCurator(_newCurator);\n        return daoCreator.createDAO(_newCurator, 0, 0, now + splitExecutionPeriod);\n    }\n\n    function numberOfProposals() constant returns (uint _numberOfProposals) {\n        // Don't count index 0. It's used by isBlocked() and exists from start\n        return proposals.length - 1;\n    }\n\n    function getNewDAOAddress(uint _proposalID) constant returns (address _newDAO) {\n        return proposals[_proposalID].splitData[0].newDAO;\n    }\n\n    function isBlocked(address _account) internal returns (bool) {\n        if (blocked[_account] == 0)\n            return false;\n        Proposal p = proposals[blocked[_account]];\n        if (now > p.votingDeadline) {\n            blocked[_account] = 0;\n            return false;\n        } else {\n            return true;\n        }\n    }\n\n    function unblockMe() returns (bool) {\n        return isBlocked(msg.sender);\n    }\n}\n\ncontract DAO_Creator {\n    function createDAO(\n        address _curator,\n        uint _proposalDeposit,\n        uint _minTokensToCreate,\n        uint _closingTime\n    ) returns (DAO _newDAO) {\n\n        return new DAO(\n            _curator,\n            DAO_Creator(this),\n            _proposalDeposit,\n            _minTokensToCreate,\n            _closingTime,\n            msg.sender\n        );\n    }\n}\n",
         "ABI":"[{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"proposals\",\"outputs\":[{\"name\":\"recipient\",\"type\":\"address\"},{\"name\":\"amount\",\"type\":\"uint256\"},{\"name\":\"description\",\"type\":\"string\"},{\"name\":\"votingDeadline\",\"type\":\"uint256\"},{\"name\":\"open\",\"type\":\"bool\"},{\"name\":\"proposalPassed\",\"type\":\"bool\"},{\"name\":\"proposalHash\",\"type\":\"bytes32\"},{\"name\":\"proposalDeposit\",\"type\":\"uint256\"},{\"name\":\"newCurator\",\"type\":\"bool\"},{\"name\":\"yea\",\"type\":\"uint256\"},{\"name\":\"nay\",\"type\":\"uint256\"},{\"name\":\"creator\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_spender\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minTokensToCreate\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"rewardAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"daoCreator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"divisor\",\"outputs\":[{\"name\":\"divisor\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"extraBalance\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"}],\"name\":\"executeProposal\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"unblockMe\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"totalRewardToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"actualBalance\",\"outputs\":[{\"name\":\"_actualBalance\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"closingTime\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"allowedRecipients\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferWithoutReward\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"refund\",\"outputs\":[],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_description\",\"type\":\"string\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"},{\"name\":\"_debatingPeriod\",\"type\":\"uint256\"},{\"name\":\"_newCurator\",\"type\":\"bool\"}],\"name\":\"newProposal\",\"outputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"DAOpaidOut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"minQuorumDivisor\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_newContract\",\"type\":\"address\"}],\"name\":\"newContract\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"name\":\"balance\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"changeAllowedRecipients\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"halveMinQuorum\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"paidOut\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_newCurator\",\"type\":\"address\"}],\"name\":\"splitDAO\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"DAOrewardAccount\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"proposalDeposit\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"numberOfProposals\",\"outputs\":[{\"name\":\"_numberOfProposals\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"lastTimeMinQuorumMet\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_toMembers\",\"type\":\"bool\"}],\"name\":\"retrieveDAOReward\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"receiveEther\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"isFueled\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_tokenHolder\",\"type\":\"address\"}],\"name\":\"createTokenProxy\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"}],\"name\":\"getNewDAOAddress\",\"outputs\":[{\"name\":\"_newDAO\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_supportsProposal\",\"type\":\"bool\"}],\"name\":\"vote\",\"outputs\":[{\"name\":\"_voteID\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[],\"name\":\"getMyReward\",\"outputs\":[{\"name\":\"_success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"rewardToken\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_from\",\"type\":\"address\"},{\"name\":\"_to\",\"type\":\"address\"},{\"name\":\"_value\",\"type\":\"uint256\"}],\"name\":\"transferFromWithoutReward\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\"},{\"name\":\"_spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"name\":\"remaining\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"_proposalDeposit\",\"type\":\"uint256\"}],\"name\":\"changeProposalDeposit\",\"outputs\":[],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"\",\"type\":\"address\"}],\"name\":\"blocked\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"curator\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"_proposalID\",\"type\":\"uint256\"},{\"name\":\"_recipient\",\"type\":\"address\"},{\"name\":\"_amount\",\"type\":\"uint256\"},{\"name\":\"_transactionData\",\"type\":\"bytes\"}],\"name\":\"checkProposalCode\",\"outputs\":[{\"name\":\"_codeChecksOut\",\"type\":\"bool\"}],\"type\":\"function\"},{\"constant\":true,\"inputs\":[],\"name\":\"privateCreation\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"type\":\"function\"},{\"inputs\":[{\"name\":\"_curator\",\"type\":\"address\"},{\"name\":\"_daoCreator\",\"type\":\"address\"},{\"name\":\"_proposalDeposit\",\"type\":\"uint256\"},{\"name\":\"_minTokensToCreate\",\"type\":\"uint256\"},{\"name\":\"_closingTime\",\"type\":\"uint256\"},{\"name\":\"_privateCreation\",\"type\":\"address\"}],\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_owner\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"_spender\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"FuelingToDate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"CreatedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Refund\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"newCurator\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"description\",\"type\":\"string\"}],\"name\":\"ProposalAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"position\",\"type\":\"bool\"},{\"indexed\":true,\"name\":\"voter\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"proposalID\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"name\":\"quorum\",\"type\":\"uint256\"}],\"name\":\"ProposalTallied\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_newCurator\",\"type\":\"address\"}],\"name\":\"NewCurator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"_recipient\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"_allowed\",\"type\":\"bool\"}],\"name\":\"AllowedRecipientChanged\",\"type\":\"event\"}]",
         "ContractName":"DAO",
         "CompilerVersion":"v0.3.1-2016-04-12-3ad5e82",
         "OptimizationUsed":"1",
         "Runs":"200",
         "ConstructorArguments":"000000000000000000000000da4a4626d3e16e094de3225a751aab7128e965260000000000000000000000004a574510c7014e4ae985403536074abe582adfc80000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000a968163f0a57b4000000000000000000000000000000000000000000000000000000000000057495e100000000000000000000000000000000000000000000000000000000000000000",
         "EVMVersion":"Default",
         "Library":"",
         "LicenseType":"",
         "Proxy":"0",
         "Implementation":"",
         "SwarmSource":""
      }
   ]
}

Get Contract Creator and Creation Tx Hash

Returns a contract's deployer address and transaction hash it was created, up to 5 at a time.

https://api.uniscan.xyz/api
   ?module=contract
   &action=getcontractcreation
   &contractaddresses=0xB83c27805aAcA5C7082eB45C868d955Cf04C337F,0x68b3465833fb72A70ecDF485E0e4C7bD8665Fc45,0xe4462eb568E2DFbb5b0cA2D3DbB1A35C9Aa98aad,0xdAC17F958D2ee523a2206206994597C13D831ec7,0xf5b969064b91869fBF676ecAbcCd1c5563F591d0
   &apikey=YourApiKeyToken 

Query Parameters

Parameter
Description

contractaddresses

the contract address , up to 5 at a time

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "contractAddress":"0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45",
         "contractCreator":"0x6c9fc64a53c1b71fb3f9af64d1ae3a4931a5f4e9",
         "txHash":"0x7299cca7203f60a831756e043f4c2ccb0ee6cb7cf8aed8420f0ae99a16883a2b"
      },
      {
         "contractAddress":"0xb83c27805aaca5c7082eb45c868d955cf04c337f",
         "contractCreator":"0x390dcfddebeff949b9862ec91d7be337b8995553",
         "txHash":"0x0dbad4991b6727df606650635c9e632dad8a92c6363c91652307680efd336c6e"
      },
      {
         "contractAddress":"0xdac17f958d2ee523a2206206994597c13d831ec7",
         "contractCreator":"0x36928500bc1dcd7af6a2b4008875cc336b927d57",
         "txHash":"0x2f1c5c2b44f771e942a8506148e256f94f1a464babc938ae0690c6e34cd79190"
      },
      {
         "contractAddress":"0xe4462eb568e2dfbb5b0ca2d3dbb1a35c9aa98aad",
         "contractCreator":"0xa6d3a33a1c66083859765b9d6e407d095a908193",
         "txHash":"0x785bcd378c8168b63c9fdef64219f8ff69eec1f785f081a74513f21b18072f93"
      },
      {
         "contractAddress":"0xf5b969064b91869fbf676ecabccd1c5563f591d0",
         "contractCreator":"0x435a5760aa360cae8c246039abab7754e80a1af1",
         "txHash":"0x779cceffd0a5b4df6718674f7d88dda3edde9ff0a6fec271eb584f65a56997c6"
      }
   ]
}

Verify Source Code

https://api.uniscan.xyz/api
   ?module=contract
   &action=verifysourcecode
   &apikey=YourApiKeyToken 

Query Parameters

Requests must be sent using HTTP POST

Parameter
Description

chainId

codeformat

single file, use solidity-single-file JSON file ( recommended ), use solidity-standard-json-input

sourceCode

the Solidity source code

constructorArguements

optional, include if your contract uses constructor arguments

contractaddress

the address your contract is deployed at

contractname

the name of your contract, such as contracts/Verified.sol:Verified

compilerversion

Sample Response

{
    "status": "1",
    "message": "OK",
    "result": "a7lpxkm9kpcpicx7daftmjifrfhiuhf5vqqnawhkfhzfrcpnxj"
}

Check Source Code Verification Status

Returns the success or error status of a contract verification request.

https://api.uniscan.xyz/api
   ?module=contract
   &action=checkverifystatus
   &guid=x3ryqcqr1zdknhfhkimqmizlcqpxncqc6nrvp3pgrcpfsqedqi
   &apikey=YourApiKeyToken 

Query Parameters

Parameter
Description

guid

the unique guid received from the verification request

Sample Response

{
    "status": "1",
    "message": "OK",
    "result": "Pass - Verified"
}

Verify Proxy Contract

Submits a proxy contract source code to Uniscan for verification.

  1. Requires a valid Uniscan API key, it will be rejected otherwise

  2. Current daily limit of 100 submissions per day per user (subject to change)

  3. Only supports HTTP post

  4. Upon successful submission you will receive a GUID (50 characters) as a receipt

  5. You may use this GUID to track the status of your submission

  6. Verified proxy contracts will display the "Read/Write as Proxy" of the implementation contract under the contract address's contract tab

Verifying Proxy Contract using cURL

// example with only the mandatory contract address parameter
curl -d "address=0xcbdcd3815b5f975e1a2c944a9b2cd1c985a1cb7f" "https://api.uniscan.xyz/api?module=contract&action=verifyproxycontract&apikey=YourApiKeyToken"

// example using the expectedimplementation optional parameter
// the expectedimplementation enforces a check to ensure the returned implementation contract address == address picked up by the verifier
curl -d "address=0xbc46363a7669f6e12353fa95bb067aead3675c29&expectedimplementation=0xe45a5176bc0f2c1198e2451c4e4501d4ed9b65a6" "https://api.uniscan.xyz/api?module=contract&action=verifyproxycontract&apikey=YourApiKeyToken"
// OK
{"status":"1","message":"OK","result":"gwgrrnfy56zf6vc1fljuejwg6pelnc5yns6fg6y2i6zfpgzquz"}

// NOTOK
{"status":"0","message":"NOTOK","result":"Invalid API Key"}

Checking Proxy Contract Verification Submission Status using cURL

curl "https://api.uniscan.xyz/api?module=contract&action=checkproxyverification&guid=gwgrrnfy56zf6vc1fljuejwg6pelnc5yns6fg6y2i6zfpgzquz&apikey=YourApiKeyToken"
// OK
{"status":"1","message":"OK","result":"The proxy's (0xbc46363a7669f6e12353fa95bb067aead3675c29) implementation contract is found at 0xe45a5176bc0f2c1198e2451c4e4501d4ed9b65a6 and is successfully updated."}
                                    
// NOTOK
{"status":"0","message":"NOTOK","result":"A corresponding implementation contract was unfortunately not detected for the proxy address."}

Get Contract ABI for

Find verified contracts on our page.

Try this endpoint in your

Get Contract Source Code for

Tip : You can also download a of which the code publishers have provided a corresponding Open Source license for redistribution.

Try this endpoint in your

Try this endpoint in your

Submits a contract source code to an explorer for verification.

Tutorial : A full walk through of submitting .

Note : This endpoint is limited to 100 verifications/day, regardless of API PRO tier.

the to submit verification, such as 1 for mainnet

used, such as v0.8.24+commit.e11b9ed9

Try this endpoint in your

If your encounter an error, reference our

📝
Verified Contract Source Codes
✅
Verified Contracts Source Code
🔗
browser
Verified Contract Source Codes
📩
CSV list of verified contracts addresses
🔗
browser
🔗
browser
Uniscan-like
🌐
multichain contract verification
🔗
browser
error list
chain
compiler version

Accounts

Get Ether Balance for a Single Address

Returns the Ether balance of a given address.

https://api.uniscan.xyz/api
   ?module=account
   &action=balance
   &address=0x4200000000000000000000000000000000000016
   &tag=latest
   &apikey=YourApiKeyToken

Get Ether Balance for Multiple Addresses in a Single Call

Returns the balance of the accounts from a list of addresses.

https://api.uniscan.xyz/api
   ?module=account
   &action=balancemulti
   &address=0x0a790a8E43b1CbC90802597ac0824859Ed1F12D9,0x8Dbf5864b6724352938a13D907cDa3eF4D78BEEd,0xE6e32C0B202f7f62C95fc8c16734FABD374a606a
   &tag=latest
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the strings representing the addresses to check for balance, separated by ,

up to 20 addresses per call

tag

the integer pre-defined block parameter, either earliest, pending or latest

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "account":"0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",
         "balance":"40891626854930000000000"
      },
      {
         "account":"0x63a9975ba31b0b9626b34300f7f627147df1f526",
         "balance":"332567136222827062478"
      },
      {
         "account":"0x198ef1ec325a96cc354c7266a038be8b5c558f67",
         "balance":"0"
      }
   ]
}

Get a list of 'Normal' Transactions By Address

Returns the list of transactions performed by an address, with optional pagination.

https://api.uniscan.xyz/api
   ?module=account
   &action=txlist
   &address=0x4200000000000000000000000000000000000006
   &startblock=0
   &endblock=99999999
   &page=1
   &offset=10
   &sort=asc
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the addresses to check for balance

startblock

the integer block number to start searching for transactions

endblock

the integer block number to stop searching for transactions

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

sort

the sorting preference, use asc to sort by ascending and desc to sort by descendin Tip: Specify a smaller startblock and endblock range for faster search results.

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"14923678",
         "timeStamp":"1654646411",
         "hash":"0xc52783ad354aecc04c670047754f062e3d6d04e8f5b24774472651f9c3882c60",
         "nonce":"1",
         "blockHash":"0x7e1638fd2c6bdd05ffd83c1cf06c63e2f67d0f802084bef076d06bdcf86d1bb0",
         "transactionIndex":"61",
         "from":"0x9aa99c23f67c81701c772b106b4f83f6e858dd2e",
         "to":"",
         "value":"0",
         "gas":"6000000",
         "gasPrice":"83924748773",
         "isError":"0",
         "txreceipt_status":"1",
         "input":"0x6101606040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140908152503480156200003a57600080fd5b5060405162005ddb38038062005ddb833981810160405281019062000060919062000d70565b6040518060400160405280600381526020017f486f700000000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f486f7000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f484f50000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200015192919062000ca9565b5080600490805190602001906200016a92919062000ca9565b50505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620001d68184846200027760201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508061012081815250505050505050506200024362000237620002b360201b60201c565b620002bb60201b60201c565b6200025533846200038160201b60201c565b6200026730836200038160201b60201c565b80600b81905550505050620012b3565b600083838346306040516020016200029495949392919062000e9b565b6040516020818303038152906040528051906020012090509392505050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200039882826200039c60201b620017a81760201c565b5050565b620003b382826200045a60201b620018351760201c565b620003c3620005d360201b60201c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16620003f1620005f760201b60201c565b111562000435576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042c9062000ef8565b60405180910390fd5b6200045460086200060160201b6200199517836200061960201b60201c565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c49062000f5e565b60405180910390fd5b620004e160008383620008ca60201b60201c565b8060026000828254620004f5919062000fdb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200054c919062000fdb565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005b3919062000f80565b60405180910390a3620005cf60008383620008cf60201b60201c565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b6000600254905090565b6000818362000611919062000fdb565b905092915050565b600080600085805490509050600081146200068e57856001826200063e919062001038565b815481106200065257620006516200114f565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1662000691565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250620006bd83858760201c565b91506000811180156200071657504386600183620006dc919062001038565b81548110620006f057620006ef6200114f565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16145b15620007b7576200073282620008ec60201b620019ab1760201c565b8660018362000742919062001038565b815481106200075657620007556200114f565b5b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff160217905550620008c1565b856040518060400160405280620007d9436200095a60201b62001a161760201c565b63ffffffff168152602001620007fa85620008ec60201b620019ab1760201c565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b50935093915050565b505050565b620008e7838383620009b060201b62001a691760201c565b505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff801682111562000952576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009499062000f1a565b60405180910390fd5b819050919050565b600063ffffffff8016821115620009a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200099f9062000f3c565b60405180910390fd5b819050919050565b620009c883838362000a0060201b62001a941760201c565b620009fb620009dd8462000a0560201b60201c565b620009ee8462000a0560201b60201c565b8362000a6e60201b60201c565b505050565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000aab5750600081115b1562000c8c57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000b9e5760008062000b45600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002062000c9160201b62001a9917856200061960201b60201c565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000b9392919062000f9d565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161462000c8b5760008062000c32600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206200060160201b6200199517856200061960201b60201c565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405162000c8092919062000f9d565b60405180910390a250505b5b505050565b6000818362000ca1919062001038565b905092915050565b82805462000cb790620010bb565b90600052602060002090601f01602090048101928262000cdb576000855562000d27565b82601f1062000cf657805160ff191683800117855562000d27565b8280016001018555821562000d27579182015b8281111562000d2657825182559160200191906001019062000d09565b5b50905062000d36919062000d3a565b5090565b5b8082111562000d5557600081600090555060010162000d3b565b5090565b60008151905062000d6a8162001299565b92915050565b60008060006060848603121562000d8c5762000d8b6200117e565b5b600062000d9c8682870162000d59565b935050602062000daf8682870162000d59565b925050604062000dc28682870162000d59565b9150509250925092565b62000dd78162001073565b82525050565b62000de88162001087565b82525050565b600062000dfd60308362000fca565b915062000e0a8262001183565b604082019050919050565b600062000e2460278362000fca565b915062000e3182620011d2565b604082019050919050565b600062000e4b60268362000fca565b915062000e588262001221565b604082019050919050565b600062000e72601f8362000fca565b915062000e7f8262001270565b602082019050919050565b62000e9581620010b1565b82525050565b600060a08201905062000eb2600083018862000ddd565b62000ec1602083018762000ddd565b62000ed0604083018662000ddd565b62000edf606083018562000e8a565b62000eee608083018462000dcc565b9695505050505050565b6000602082019050818103600083015262000f138162000dee565b9050919050565b6000602082019050818103600083015262000f358162000e15565b9050919050565b6000602082019050818103600083015262000f578162000e3c565b9050919050565b6000602082019050818103600083015262000f798162000e63565b9050919050565b600060208201905062000f97600083018462000e8a565b92915050565b600060408201905062000fb4600083018562000e8a565b62000fc3602083018462000e8a565b9392505050565b600082825260208201905092915050565b600062000fe882620010b1565b915062000ff583620010b1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200102d576200102c620010f1565b5b828201905092915050565b60006200104582620010b1565b91506200105283620010b1565b925082821015620010685762001067620010f1565b5b828203905092915050565b6000620010808262001091565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620010d457607f821691505b60208210811415620010eb57620010ea62001120565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620012a481620010b1565b8114620012b057600080fd5b50565b60805160a05160c05160601c60e051610100516101205161014051614aca62001311600039600061141e0152600061203d0152600061207f0152600061205e01526000611f9301526000611fe9015260006120120152614aca6000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c806370a082311161011a5780639ab24eb0116100ad578063c3cda5201161007c578063c3cda52014610612578063d505accf1461062e578063dd62ed3e1461064a578063f1127ed81461067a578063f2fde38b146106aa576101fb565b80639ab24eb0146105525780639e34070f14610582578063a457c2d7146105b2578063a9059cbb146105e2576101fb565b80637ecebe00116100e95780637ecebe00146104b65780638da5cb5b146104e65780638e539e8c1461050457806395d89b4114610534576101fb565b806370a0823114610444578063715018a614610474578063761229031461047e5780637cb647591461049a576101fb565b80633950935111610192578063587cde1e11610161578063587cde1e146103aa5780635c19a95c146103da57806366deac47146103f65780636fcfff4514610414576101fb565b806339509351146103125780633a46b1a81461034257806340c10f191461037257806342966c681461038e576101fb565b806323b872dd116101ce57806323b872dd146102885780632eb4a7ab146102b8578063313ce567146102d65780633644e515146102f4576101fb565b806301681a621461020057806306fdde031461021c578063095ea7b31461023a57806318160ddd1461026a575b600080fd5b61021a600480360381019061021591906130df565b6106c6565b005b61022461079c565b6040516102319190613b56565b60405180910390f35b610254600480360381019061024f9190613241565b61082e565b60405161026191906139e2565b60405180910390f35b610272610851565b60405161027f9190613f13565b60405180910390f35b6102a2600480360381019061029d919061314c565b61085b565b6040516102af91906139e2565b60405180910390f35b6102c061088a565b6040516102cd91906139fd565b60405180910390f35b6102de610890565b6040516102eb9190613f72565b60405180910390f35b6102fc610899565b60405161030991906139fd565b60405180910390f35b61032c60048036038101906103279190613241565b6108a8565b60405161033991906139e2565b60405180910390f35b61035c60048036038101906103579190613241565b610952565b6040516103699190613f13565b60405180910390f35b61038c60048036038101906103879190613241565b6109e6565b005b6103a860048036038101906103a3919061337b565b610a70565b005b6103c460048036038101906103bf91906130df565b610b00565b6040516103d191906139c7565b60405180910390f35b6103f460048036038101906103ef91906130df565b610b69565b005b6103fe610b7d565b60405161040b9190613f13565b60405180910390f35b61042e600480360381019061042991906130df565b610b83565b60405161043b9190613f57565b60405180910390f35b61045e600480360381019061045991906130df565b610bd7565b60405161046b9190613f13565b60405180910390f35b61047c610c1f565b005b610498600480360381019061049391906133a8565b610ca7565b005b6104b460048036038101906104af919061334e565b610e32565b005b6104d060048036038101906104cb91906130df565b610f36565b6040516104dd9190613f13565b60405180910390f35b6104ee610f86565b6040516104fb91906139c7565b60405180910390f35b61051e6004803603810190610519919061337b565b610fb0565b60405161052b9190613f13565b60405180910390f35b61053c611006565b6040516105499190613b56565b60405180910390f35b61056c600480360381019061056791906130df565b611098565b6040516105799190613f13565b60405180910390f35b61059c6004803603810190610597919061337b565b6111a9565b6040516105a991906139e2565b60405180910390f35b6105cc60048036038101906105c79190613241565b6111c6565b6040516105d991906139e2565b60405180910390f35b6105fc60048036038101906105f79190613241565b6112b0565b60405161060991906139e2565b60405180910390f35b61062c60048036038101906106279190613281565b6112d3565b005b6106486004803603810190610643919061319f565b6113d7565b005b610664600480360381019061065f919061310c565b611519565b6040516106719190613f13565b60405180910390f35b610694600480360381019061068f919061330e565b6115a0565b6040516106a19190613ef8565b60405180910390f35b6106c460048036038101906106bf91906130df565b6116b0565b005b6106ce611aaf565b73ffffffffffffffffffffffffffffffffffffffff166106ec610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610742576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161073990613dd8565b60405180910390fd5b600b544211610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d90613d58565b60405180910390fd5b610799308261079430610bd7565b611ab7565b50565b6060600380546107ab90614193565b80601f01602080910402602001604051908101604052809291908181526020018280546107d790614193565b80156108245780601f106107f957610100808354040283529160200191610824565b820191906000526020600020905b81548152906001019060200180831161080757829003601f168201915b5050505050905090565b600080610839611aaf565b9050610846818585611d38565b600191505092915050565b6000600254905090565b600080610866611aaf565b9050610873858285611f03565b61087e858585611ab7565b60019150509392505050565b600a5481565b60006012905090565b60006108a3611f8f565b905090565b6000806108b3611aaf565b9050610947818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546109429190613fb4565b611d38565b600191505092915050565b6000438210610996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098d90613bb8565b60405180910390fd5b6109de600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020836120a9565b905092915050565b6109ee611aaf565b73ffffffffffffffffffffffffffffffffffffffff16610a0c610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5990613dd8565b60405180910390fd5b610a6c82826121b5565b5050565b610a78611aaf565b73ffffffffffffffffffffffffffffffffffffffff16610a96610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae390613dd8565b60405180910390fd5b610afd610af7610f86565b826121c3565b50565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610b7a610b74611aaf565b826121d1565b50565b600b5481565b6000610bd0600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611a16565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610c27611aaf565b73ffffffffffffffffffffffffffffffffffffffff16610c45610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9290613dd8565b60405180910390fd5b610ca560006122eb565b565b60003385604051602001610cbc929190613938565b604051602081830303815290604052805190602001209050600080610d25858580806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600a54856123b1565b9150915081610d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6090613bd8565b60405180910390fd5b610d72816111a9565b15610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613df8565b60405180910390fd5b610dc681600c61248d90919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d488604051610e0c9190613f13565b60405180910390a2610e1e33876121d1565b610e29303389611ab7565b50505050505050565b610e3a611aaf565b73ffffffffffffffffffffffffffffffffffffffff16610e58610f86565b73ffffffffffffffffffffffffffffffffffffffff1614610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea590613dd8565b60405180910390fd5b6000801b600a5414610ef5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eec90613c38565b60405180910390fd5b80600a819055507f1b930366dfeaa7eb3b325021e4ae81e36527063452ee55b86c95f85b36f4c31c81604051610f2b91906139fd565b60405180910390a150565b6000610f7f600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206124cb565b9050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000438210610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613bb8565b60405180910390fd5b610fff6008836120a9565b9050919050565b60606004805461101590614193565b80601f016020809104026020016040519081016040528092919081815260200182805461104190614193565b801561108e5780601f106110635761010080835404028352916020019161108e565b820191906000526020600020905b81548152906001019060200180831161107157829003601f168201915b5050505050905090565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905090506000811461118057600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001826111349190614095565b8154811061114557611144614302565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611183565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b60006111bf82600c6124d990919063ffffffff16565b9050919050565b6000806111d1611aaf565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611297576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128e90613eb8565b60405180910390fd5b6112a48286868403611d38565b60019250505092915050565b6000806112bb611aaf565b90506112c8818585611ab7565b600191505092915050565b83421115611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90613bf8565b60405180910390fd5b60006113786113707fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf8989896040516020016113559493929190613a79565b60405160208183030381529060405280519060200120612515565b85858561252f565b90506113838161255a565b86146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90613c78565b60405180910390fd5b6113ce81886121d1565b50505050505050565b8342111561141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190613cf8565b60405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000008888886114498c61255a565b8960405160200161145f96959493929190613a18565b604051602081830303815290604052805190602001209050600061148282612515565b905060006114928287878761252f565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f990613d98565b60405180910390fd5b61150d8a8a8a611d38565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6115a8612fe2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff16815481106115ff576115fe614302565b5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b6116b8611aaf565b73ffffffffffffffffffffffffffffffffffffffff166116d6610f86565b73ffffffffffffffffffffffffffffffffffffffff161461172c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172390613dd8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561179c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179390613c98565b60405180910390fd5b6117a5816122eb565b50565b6117b28282611835565b6117ba6125b8565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166117e0610851565b1115611821576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181890613db8565b60405180910390fd5b61182f6008611995836125dc565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189c90613ed8565b60405180910390fd5b6118b160008383612854565b80600260008282546118c39190613fb4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119189190613fb4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161197d9190613f13565b60405180910390a361199160008383612859565b5050565b600081836119a39190613fb4565b905092915050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8016821115611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590613e18565b60405180910390fd5b819050919050565b600063ffffffff8016821115611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890613e78565b60405180910390fd5b819050919050565b611a74838383611a94565b611a8f611a8084610b00565b611a8984610b00565b83612869565b505050565b505050565b60008183611aa79190614095565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1e90613e58565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8e90613b98565b60405180910390fd5b611ba2838383612854565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1f90613d18565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbb9190613fb4565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d1f9190613f13565b60405180910390a3611d32848484612859565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9f90613e98565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90613cb8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611ef69190613f13565b60405180910390a3505050565b6000611f0f8484611519565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611f895781811015611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290613cd8565b60405180910390fd5b611f888484848403611d38565b5b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614801561200b57507f000000000000000000000000000000000000000000000000000000000000000046145b15612038577f000000000000000000000000000000000000000000000000000000000000000090506120a6565b6120a37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612a62565b90505b90565b6000808380549050905060005b818110156121285760006120ca8284612a9c565b9050848682815481106120e0576120df614302565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16111561211257809250612122565b60018161211f9190613fb4565b91505b506120b6565b6000821461218a578460018361213e9190614095565b8154811061214f5761214e614302565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661218d565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b6121bf82826117a8565b5050565b6121cd8282612ac2565b5050565b60006121dc83610b00565b905060006121e984610bd7565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a46122e5828483612869565b50505050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060008390506000805b875181101561247a576002826123d3919061403b565b915060008882815181106123ea576123e9614302565b5b6020026020010151905080841161242b57838160405160200161240e929190613964565b604051602081830303815290604052805190602001209350612466565b808460405160200161243e929190613964565b6040516020818303038152906040528051906020012093506001836124639190613fb4565b92505b508080612472906141c5565b9150506123bd565b5085821481935093505050935093915050565b6000600882901c9050600060ff83166001901b9050808460000160008481526020019081526020016000206000828254179250508190555050505050565b600081600001549050919050565b600080600883901c9050600060ff84166001901b9050600081866000016000858152602001908152602001600020541614159250505092915050565b6000612528612522611f8f565b83612ae0565b9050919050565b600080600061254087878787612b13565b9150915061254d81612c20565b8192505050949350505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506125a7816124cb565b91506125b281612df5565b50919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b6000806000858054905090506000811461264a57856001826125fe9190614095565b8154811061260f5761260e614302565b5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661264d565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061267b83858763ffffffff16565b91506000811180156126ce575043866001836126979190614095565b815481106126a8576126a7614302565b5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16145b1561275b576126dc826119ab565b866001836126ea9190614095565b815481106126fb576126fa614302565b5b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555061284b565b85604051806040016040528061277043611a16565b63ffffffff168152602001612784856119ab565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b50935093915050565b505050565b612864838383611a69565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128a55750600081115b15612a5d57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129835760008061292c600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611a99856125dc565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612978929190613f2e565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a5c57600080612a05600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611995856125dc565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a7248383604051612a51929190613f2e565b60405180910390a250505b5b505050565b60008383834630604051602001612a7d959493929190613abe565b6040516020818303038152906040528051906020012090509392505050565b60006002828418612aad919061400a565b828416612aba9190613fb4565b905092915050565b612acc8282612e0b565b612ada6008611a99836125dc565b50505050565b60008282604051602001612af5929190613990565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115612b4e576000600391509150612c17565b601b8560ff1614158015612b665750601c8560ff1614155b15612b78576000600491509150612c17565b600060018787878760405160008152602001604052604051612b9d9493929190613b11565b6020604051602081039080840390855afa158015612bbf573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612c0e57600060019250925050612c17565b80600092509250505b94509492505050565b60006004811115612c3457612c336142a4565b5b816004811115612c4757612c466142a4565b5b1415612c5257612df2565b60016004811115612c6657612c656142a4565b5b816004811115612c7957612c786142a4565b5b1415612cba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb190613b78565b60405180910390fd5b60026004811115612cce57612ccd6142a4565b5b816004811115612ce157612ce06142a4565b5b1415612d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1990613c58565b60405180910390fd5b60036004811115612d3657612d356142a4565b5b816004811115612d4957612d486142a4565b5b1415612d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8190613d38565b60405180910390fd5b600480811115612d9d57612d9c6142a4565b5b816004811115612db057612daf6142a4565b5b1415612df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612de890613d78565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7290613e38565b60405180910390fd5b612e8782600083612854565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0490613c18565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160026000828254612f649190614095565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612fc99190613f13565b60405180910390a3612fdd83600084612859565b505050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b60008135905061302f81614a21565b92915050565b60008083601f84011261304b5761304a614336565b5b8235905067ffffffffffffffff81111561306857613067614331565b5b6020830191508360208202830111156130845761308361433b565b5b9250929050565b60008135905061309a81614a38565b92915050565b6000813590506130af81614a4f565b92915050565b6000813590506130c481614a66565b92915050565b6000813590506130d981614a7d565b92915050565b6000602082840312156130f5576130f4614345565b5b600061310384828501613020565b91505092915050565b6000806040838503121561312357613122614345565b5b600061313185828601613020565b925050602061314285828601613020565b9150509250929050565b60008060006060848603121561316557613164614345565b5b600061317386828701613020565b935050602061318486828701613020565b9250506040613195868287016130a0565b9150509250925092565b600080600080600080600060e0888a0312156131be576131bd614345565b5b60006131cc8a828b01613020565b97505060206131dd8a828b01613020565b96505060406131ee8a828b016130a0565b95505060606131ff8a828b016130a0565b94505060806132108a828b016130ca565b93505060a06132218a828b0161308b565b92505060c06132328a828b0161308b565b91505092959891949750929550565b6000806040838503121561325857613257614345565b5b600061326685828601613020565b9250506020613277858286016130a0565b9150509250929050565b60008060008060008060c0878903121561329e5761329d614345565b5b60006132ac89828a01613020565b96505060206132bd89828a016130a0565b95505060406132ce89828a016130a0565b94505060606132df89828a016130ca565b93505060806132f089828a0161308b565b92505060a061330189828a0161308b565b9150509295509295509295565b6000806040838503121561332557613324614345565b5b600061333385828601613020565b9250506020613344858286016130b5565b9150509250929050565b60006020828403121561336457613363614345565b5b60006133728482850161308b565b91505092915050565b60006020828403121561339157613390614345565b5b600061339f848285016130a0565b91505092915050565b600080600080606085870312156133c2576133c1614345565b5b60006133d0878288016130a0565b94505060206133e187828801613020565b935050604085013567ffffffffffffffff81111561340257613401614340565b5b61340e87828801613035565b925092505092959194509250565b613425816140c9565b82525050565b61343c613437826140c9565b61420e565b82525050565b61344b816140db565b82525050565b61345a816140e7565b82525050565b61347161346c826140e7565b614220565b82525050565b600061348282613f8d565b61348c8185613f98565b935061349c818560208601614160565b6134a58161434a565b840191505092915050565b60006134bd601883613f98565b91506134c882614368565b602082019050919050565b60006134e0602383613f98565b91506134eb82614391565b604082019050919050565b6000613503601f83613f98565b915061350e826143e0565b602082019050919050565b6000613526601a83613f98565b915061353182614409565b602082019050919050565b6000613549601d83613f98565b915061355482614432565b602082019050919050565b600061356c602283613f98565b91506135778261445b565b604082019050919050565b600061358f601c83613f98565b915061359a826144aa565b602082019050919050565b60006135b2601f83613f98565b91506135bd826144d3565b602082019050919050565b60006135d5601983613f98565b91506135e0826144fc565b602082019050919050565b60006135f8602683613f98565b915061360382614525565b604082019050919050565b600061361b602283613f98565b915061362682614574565b604082019050919050565b600061363e600283613fa9565b9150613649826145c3565b600282019050919050565b6000613661601d83613f98565b915061366c826145ec565b602082019050919050565b6000613684601d83613f98565b915061368f82614615565b602082019050919050565b60006136a7602683613f98565b91506136b28261463e565b604082019050919050565b60006136ca602283613f98565b91506136d58261468d565b604082019050919050565b60006136ed601f83613f98565b91506136f8826146dc565b602082019050919050565b6000613710602283613f98565b915061371b82614705565b604082019050919050565b6000613733601e83613f98565b915061373e82614754565b602082019050919050565b6000613756603083613f98565b91506137618261477d565b604082019050919050565b6000613779602083613f98565b9150613784826147cc565b602082019050919050565b600061379c601c83613f98565b91506137a7826147f5565b602082019050919050565b60006137bf602783613f98565b91506137ca8261481e565b604082019050919050565b60006137e2602183613f98565b91506137ed8261486d565b604082019050919050565b6000613805602583613f98565b9150613810826148bc565b604082019050919050565b6000613828602683613f98565b91506138338261490b565b604082019050919050565b600061384b602483613f98565b91506138568261495a565b604082019050919050565b600061386e602583613f98565b9150613879826149a9565b604082019050919050565b6000613891601f83613f98565b915061389c826149f8565b602082019050919050565b6040820160008201516138bd600085018261390b565b5060208201516138d060208501826138d6565b50505050565b6138df81614111565b82525050565b6138ee81614139565b82525050565b61390561390082614139565b61423c565b82525050565b61391481614143565b82525050565b61392381614143565b82525050565b61393281614153565b82525050565b6000613944828561342b565b60148201915061395482846138f4565b6020820191508190509392505050565b60006139708285613460565b6020820191506139808284613460565b6020820191508190509392505050565b600061399b82613631565b91506139a78285613460565b6020820191506139b78284613460565b6020820191508190509392505050565b60006020820190506139dc600083018461341c565b92915050565b60006020820190506139f76000830184613442565b92915050565b6000602082019050613a126000830184613451565b92915050565b600060c082019050613a2d6000830189613451565b613a3a602083018861341c565b613a47604083018761341c565b613a5460608301866138e5565b613a6160808301856138e5565b613a6e60a08301846138e5565b979650505050505050565b6000608082019050613a8e6000830187613451565b613a9b602083018661341c565b613aa860408301856138e5565b613ab560608301846138e5565b95945050505050565b600060a082019050613ad36000830188613451565b613ae06020830187613451565b613aed6040830186613451565b613afa60608301856138e5565b613b07608083018461341c565b9695505050505050565b6000608082019050613b266000830187613451565b613b336020830186613929565b613b406040830185613451565b613b4d6060830184613451565b95945050505050565b60006020820190508181036000830152613b708184613477565b905092915050565b60006020820190508181036000830152613b91816134b0565b9050919050565b60006020820190508181036000830152613bb1816134d3565b9050919050565b60006020820190508181036000830152613bd1816134f6565b9050919050565b60006020820190508181036000830152613bf181613519565b9050919050565b60006020820190508181036000830152613c118161353c565b9050919050565b60006020820190508181036000830152613c318161355f565b9050919050565b60006020820190508181036000830152613c5181613582565b9050919050565b60006020820190508181036000830152613c71816135a5565b9050919050565b60006020820190508181036000830152613c91816135c8565b9050919050565b60006020820190508181036000830152613cb1816135eb565b9050919050565b60006020820190508181036000830152613cd18161360e565b9050919050565b60006020820190508181036000830152613cf181613654565b9050919050565b60006020820190508181036000830152613d1181613677565b9050919050565b60006020820190508181036000830152613d318161369a565b9050919050565b60006020820190508181036000830152613d51816136bd565b9050919050565b60006020820190508181036000830152613d71816136e0565b9050919050565b60006020820190508181036000830152613d9181613703565b9050919050565b60006020820190508181036000830152613db181613726565b9050919050565b60006020820190508181036000830152613dd181613749565b9050919050565b60006020820190508181036000830152613df18161376c565b9050919050565b60006020820190508181036000830152613e118161378f565b9050919050565b60006020820190508181036000830152613e31816137b2565b9050919050565b60006020820190508181036000830152613e51816137d5565b9050919050565b60006020820190508181036000830152613e71816137f8565b9050919050565b60006020820190508181036000830152613e918161381b565b9050919050565b60006020820190508181036000830152613eb18161383e565b9050919050565b60006020820190508181036000830152613ed181613861565b9050919050565b60006020820190508181036000830152613ef181613884565b9050919050565b6000604082019050613f0d60008301846138a7565b92915050565b6000602082019050613f2860008301846138e5565b92915050565b6000604082019050613f4360008301856138e5565b613f5060208301846138e5565b9392505050565b6000602082019050613f6c600083018461391a565b92915050565b6000602082019050613f876000830184613929565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613fbf82614139565b9150613fca83614139565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613fff57613ffe614246565b5b828201905092915050565b600061401582614139565b915061402083614139565b9250826140305761402f614275565b5b828204905092915050565b600061404682614139565b915061405183614139565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561408a57614089614246565b5b828202905092915050565b60006140a082614139565b91506140ab83614139565b9250828210156140be576140bd614246565b5b828203905092915050565b60006140d4826140f1565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b8381101561417e578082015181840152602081019050614163565b8381111561418d576000848401525b50505050565b600060028204905060018216806141ab57607f821691505b602082108114156141bf576141be6142d3565b5b50919050565b60006141d082614139565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561420357614202614246565b5b600182019050919050565b60006142198261422a565b9050919050565b6000819050919050565b60006142358261435b565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400600082015250565b7f484f503a2056616c69642070726f6f662072657175697265642e000000000000600082015250565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f484f503a204d65726b6c6520726f6f7420616c72656164792073657400000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f484f503a20436c61696d20706572696f64206e6f742079657420656e64656400600082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f484f503a20546f6b656e7320616c726561647920636c61696d65642e00000000600082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b614a2a816140c9565b8114614a3557600080fd5b50565b614a41816140e7565b8114614a4c57600080fd5b50565b614a5881614139565b8114614a6357600080fd5b50565b614a6f81614143565b8114614a7a57600080fd5b50565b614a8681614153565b8114614a9157600080fd5b5056fea2646970667358221220f6ac0f9b7be284957c471924efd5c5c2c2364146e9216e4365ec0870f955dce864736f6c634300080700330000000000000000000000000000000000000000030dd5e3217b0bbfacdaca690000000000000000000000000000000000000000002d58597e55747d3b253597000000000000000000000000000000000000000000000000000000006392c0d0",
         "contractAddress":"0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc",
         "cumulativeGasUsed":"10450178",
         "gasUsed":"4457269",
         "confirmations":"122485",
         "methodId":"0x61016060",
         "functionName":""
      },
      {
         "blockNumber":"14923692",
         "timeStamp":"1654646570",
         "hash":"0xaa45b4858ba44230a5fce5a29570a5dec2bf1f0ba95bacdec4fe8f2c4fa99338",
         "nonce":"7",
         "blockHash":"0x8df71a12a8c06b36c06c26bf6248857dd2a2b75b6edbb4e33e9477078897b282",
         "transactionIndex":"27",
         "from":"0x9aa99c23f67c81701c772b106b4f83f6e858dd2e",
         "to":"0xc5102fe9359fd9a28f877a67e36b0f050d81a3cc",
         "value":"0",
         "gas":"6000000",
         "gasPrice":"125521409858",
         "isError":"0",
         "txreceipt_status":"1",
         "input":"0xa9059cbb000000000000000000000000313143c4088a47c469d06fe3fa5fd4196be6a4d600000000000000000000000000000000000000000003b8e97d229a2d54800000",
         "contractAddress":"",
         "cumulativeGasUsed":"1977481",
         "gasUsed":"57168",
         "confirmations":"122471",
         "methodId":"0xa9059cbb",
         "functionName":"transfer(address _to, uint256 _value)"
      }
   ]
}

Get a list of 'Internal' Transactions by Address

Returns the list of internal transactions performed by an address, with optional pagination.

https://api.uniscan.xyz/api
   ?module=account
   &action=txlistinternal
   &address=0x4200000000000000000000000000000000000006
   &startblock=0
   &endblock=2702578
   &page=1
   &offset=10
   &sort=asc
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the addresses to check for balance

startblock

the integer block number to start searching for transactions

endblock

the integer block number to stop searching for transactions

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

sort

the sorting preference, use asc to sort by ascending and desc to sort by descending

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"2535368",
         "timeStamp":"1477837690",
         "hash":"0x8a1a9989bda84f80143181a68bc137ecefa64d0d4ebde45dd94fc0cf49e70cb6",
         "from":"0x20d42f2e99a421147acf198d775395cac2e8b03d",
         "to":"",
         "value":"0",
         "contractAddress":"0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3",
         "input":"",
         "type":"create",
         "gas":"254791",
         "gasUsed":"46750",
         "traceId":"0",
         "isError":"0",
         "errCode":""
      },
      {
         "blockNumber":"2535479",
         "timeStamp":"1477839134",
         "hash":"0x1a50f1dc0bc912745f7d09b988669f71d199719e2fb7592c2074ede9578032d0",
         "from":"0x2c1ba59d6f58433fb1eaee7d20b26ed83bda51a3",
         "to":"0x20d42f2e99a421147acf198d775395cac2e8b03d",
         "value":"100000000000000000",
         "contractAddress":"",
         "input":"",
         "type":"call",
         "gas":"235231",
         "gasUsed":"0",
         "traceId":"0",
         "isError":"0",
         "errCode":""
      }
   ]
}

Get 'Internal Transactions' by Transaction Hash

Returns the list of internal transactions performed within a transaction.

https://api.uniscan.xyz/api
   ?module=account
   &action=txlistinternal
   &txhash=0xc37d1d2d7495e1c942c42070b3d336023104938c70ee77a32172b18b88d9879a
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

txhash

the string representing the transaction hash to check for internal transactions

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"1743059",
         "timeStamp":"1466489498",
         "from":"0x2cac6e4b11d6b58f6d3c1c9d5fe8faa89f60e5a2",
         "to":"0x66a1c3eaf0f1ffc28d209c0763ed0ca614f3b002",
         "value":"7106740000000000",
         "contractAddress":"",
         "input":"",
         "type":"call",
         "gas":"2300",
         "gasUsed":"0",
         "isError":"0",
         "errCode":""
      }
   ]
}

The isError field returns 0 for successful transactions and 1 for rejected/cancelled transactions.

Get "Internal Transactions" by Block Range

Returns the list of internal transactions performed within a block range, with optional pagination.

https://api.uniscan.xyz/api
   ?module=account
   &action=txlistinternal
   &startblock=1000
   &endblock=latest
   &page=1
   &offset=10
   &sort=asc
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

startblock

the integer block number to start searching for transactions

endblock

the integer block number to stop searching for transactions

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

sort

the sorting preference, use asc to sort by ascending and desc to sort by descending

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"50107",
         "timeStamp":"1438984016",
         "hash":"0x3f97c969ddf71f515ce5373b1f8e76e9fd7016611d8ce455881009414301789e",
         "from":"0x109c4f2ccc82c4d77bde15f306707320294aea3f",
         "to":"0x881b0a4e9c55d08e31d8d3c022144d75a454211c",
         "value":"1000000000000000000",
         "contractAddress":"",
         "input":"",
         "type":"call",
         "gas":"2300",
         "gasUsed":"0",
         "traceId":"0",
         "isError":"1",
         "errCode":""
      },
      {
         "blockNumber":"50111",
         "timeStamp":"1438984075",
         "hash":"0x893c428fed019404f704cf4d9be977ed9ca01050ed93dccdd6c169422155586f",
         "from":"0x109c4f2ccc82c4d77bde15f306707320294aea3f",
         "to":"0x881b0a4e9c55d08e31d8d3c022144d75a454211c",
         "value":"1000000000000000000",
         "contractAddress":"",
         "input":"",
         "type":"call",
         "gas":"2300",
         "gasUsed":"0",
         "traceId":"0",
         "isError":"0",
         "errCode":""
      }
   ]
}

The isError field returns 0 for successful transactions and 1 for rejected/cancelled transactions.

Get a list of 'ERC20 - Token Transfer Events' by Address

Returns the list of ERC-20 tokens transferred by an address, with optional filtering by token contract.

https://api.uniscan.xyz/api
   ?module=account
   &action=tokentx
   &contractaddress=0x4200000000000000000000000000000000000006
   &address=0x8270282Ec808bE95642048eF02B4028E6eA98Af8
   &page=1
   &offset=100
   &startblock=0
   &endblock=27025780
   &sort=asc
   &apikey=YourApiKeyToken

Usage:

  • ERC-20 transfers from an address, specify the address parameter

  • ERC-20 transfers from a contract address, specify the contract address parameter

  • ERC-20 transfers from an address filtered by a token contract, specify both address and contract address parameters.

Query Parameters

Parameter
Description

address

the string representing the address to check for balance

contractaddress

the string representing the token contract address to check for balance

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

startblock

the integer block number to start searching for transactions

endblock

the integer block number to stop searching for transactions

sort

the sorting preference, use asc to sort by ascending and desc to sort by descending

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"4730207",
         "timeStamp":"1513240363",
         "hash":"0xe8c208398bd5ae8e4c237658580db56a2a94dfa0ca382c99b776fa6e7d31d5b4",
         "nonce":"406",
         "blockHash":"0x022c5e6a3d2487a8ccf8946a2ffb74938bf8e5c8a3f6d91b41c56378a96b5c37",
         "from":"0x642ae78fafbb8032da552d619ad43f1d81e4dd7c",
         "contractAddress":"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",
         "to":"0x4e83362442b8d1bec281594cea3050c8eb01311c",
         "value":"5901522149285533025181",
         "tokenName":"Maker",
         "tokenSymbol":"MKR",
         "tokenDecimal":"18",
         "transactionIndex":"81",
         "gas":"940000",
         "gasPrice":"32010000000",
         "gasUsed":"77759",
         "cumulativeGasUsed":"2523379",
         "input":"deprecated",
         "confirmations":"7968350"
      },
      {
         "blockNumber":"4764973",
         "timeStamp":"1513764636",
         "hash":"0x9c82e89b7f6a4405d11c361adb6d808d27bcd9db3b04b3fb3bc05d182bbc5d6f",
         "nonce":"428",
         "blockHash":"0x87a4d04a6d8fce7a149e9dc528b88dc0c781a87456910c42984bdc15930a2cac",
         "from":"0x4e83362442b8d1bec281594cea3050c8eb01311c",
         "contractAddress":"0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2",
         "to":"0x69076e44a9c70a67d5b79d95795aba299083c275",
         "value":"132520488141080",
         "tokenName":"Maker",
         "tokenSymbol":"MKR",
         "tokenDecimal":"18",
         "transactionIndex":"167",
         "gas":"940000",
         "gasPrice":"35828000000",
         "gasUsed":"127593",
         "cumulativeGasUsed":"6315818",
         "input":"deprecated",
         "confirmations":"7933584"
      }
   ]
}

Get a list of 'ERC721 - Token Transfer Events' by Address

Returns the list of ERC-721 ( NFT ) tokens transferred by an address, with optional filtering by token contract.

https://api.uniscan.xyz/api
   ?module=account
   &action=tokennfttx
   &contractaddress=0x06012c8cf97bead5deae237070f9587f8e7a266d
   &address=0x6975be450864c02b4613023c2152ee0743572325
   &page=1
   &offset=100
   &startblock=0
   &endblock=27025780
   &sort=asc
   &apikey=YourApiKeyToken

Usage:

  • ERC-721 transfers from an address, specify the address parameter

  • ERC-721 transfers from a contract address, specify the contract address parameter

  • ERC-721 transfers from an address filtered by a token contract, specify both address and contract address parameters.

Query Parameters

Parameter
Description

address

the string representing the address to check for balance

contractaddress

the string representing the token contract address to check for balance

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

startblock

the integer block number to start searching for transactions

endblock

the integer block number to stop searching for transactions

sort

the sorting preference, use asc to sort by ascending and desc to sort by descending

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"4708120",
         "timeStamp":"1512907118",
         "hash":"0x031e6968a8de362e4328d60dcc7f72f0d6fc84284c452f63176632177146de66",
         "nonce":"0",
         "blockHash":"0x4be19c278bfaead5cb0bc9476fa632e2447f6e6259e0303af210302d22779a24",
         "from":"0xb1690c08e213a35ed9bab7b318de14420fb57d8c",
         "contractAddress":"0x06012c8cf97bead5deae237070f9587f8e7a266d",
         "to":"0x6975be450864c02b4613023c2152ee0743572325",
         "tokenID":"202106",
         "tokenName":"CryptoKitties",
         "tokenSymbol":"CK",
         "tokenDecimal":"0",
         "transactionIndex":"81",
         "gas":"158820",
         "gasPrice":"40000000000",
         "gasUsed":"60508",
         "cumulativeGasUsed":"4880352",
         "input":"deprecated",
         "confirmations":"7990490"
      },
      {
         "blockNumber":"4708161",
         "timeStamp":"1512907756",
         "hash":"0x9626e7064b68b5463cf677e10815a0b394645a0bfa245f26a2de6074324e83ff",
         "nonce":"1",
         "blockHash":"0xe1c6cbc39a723496f4cbc3e70241012854f2e88b4d2d5f339d8f0a4a1cc406d8",
         "from":"0xb1690c08e213a35ed9bab7b318de14420fb57d8c",
         "contractAddress":"0x06012c8cf97bead5deae237070f9587f8e7a266d",
         "to":"0x6975be450864c02b4613023c2152ee0743572325",
         "tokenID":"147739",
         "tokenName":"CryptoKitties",
         "tokenSymbol":"CK",
         "tokenDecimal":"0",
         "transactionIndex":"41",
         "gas":"135963",
         "gasPrice":"40000000000",
         "gasUsed":"45508",
         "cumulativeGasUsed":"3359342",
         "input":"deprecated",
         "confirmations":"7990449"
      }
   ]
}

Get a list of 'ERC1155 - Token Transfer Events' by Address

Returns the list of ERC-1155 ( Multi Token Standard ) tokens transferred by an address, with optional filtering by token contract.

https://api.uniscan.xyz/api
   ?module=account
   &action=token1155tx
   &contractaddress=0x76be3b62873462d2142405439777e971754e8e77
   &address=0x83f564d180b58ad9a02a449105568189ee7de8cb
   &page=1
   &offset=100
   &startblock=0
   &endblock=99999999
   &sort=asc
   &apikey=YourApiKeyToken

Usage:

  • ERC-1155 transfers from an address, specify the address parameter

  • ERC-1155 transfers from a contract address, specify the contract address parameter

  • ERC-1155 transfers from an address filtered by a token contract, specify both address and contract address parameters.

Query Parameters

Parameter
Description

address

the string representing the address to check for balance

contractaddress

the string representing the token contract address to check for balance

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

startblock

the integer block number to start searching for transactions

endblock

the integer block number to stop searching for transactions

sort

the sorting preference, use asc to sort by ascending and desc to sort by descending

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"13472395",
         "timeStamp":"1634973285",
         "hash":"0x643b15f3ffaad5d38e33e5872b4ebaa7a643eda8b50ffd5331f682934ee65d4d",
         "nonce":"41",
         "blockHash":"0xa5da536dfbe8125eb146114e2ee0d0bdef2b20483aacbf30fed6b60f092059e6",
         "transactionIndex":"100",
         "gas":"140000",
         "gasPrice":"52898577246",
         "gasUsed":"105030",
         "cumulativeGasUsed":"11739203",
         "input":"deprecated",
         "contractAddress":"0x76be3b62873462d2142405439777e971754e8e77",
         "from":"0x1e63326a84d2fa207bdfa856da9278a93deba418",
         "to":"0x83f564d180b58ad9a02a449105568189ee7de8cb",
         "tokenID":"10371",
         "tokenValue":"1",
         "tokenName":"parallel",
         "tokenSymbol":"LL",
         "confirmations":"1447769"
      },
      {
         "blockNumber":"14049909",
         "timeStamp":"1642781541",
         "hash":"0x58353aab15a4b5a77333b87619edaa749c7f3cf8bb2263a1c0865d73bf1264bd",
         "nonce":"4",
         "blockHash":"0x1e88a63a4cb4086a747644b8ab7ff3434540930f3029eacb8add08b15974fdc9",
         "transactionIndex":"114",
         "gas":"253032",
         "gasPrice":"225052869211",
         "gasUsed":"184899",
         "cumulativeGasUsed":"6855790",
         "input":"deprecated",
         "contractAddress":"0x76be3b62873462d2142405439777e971754e8e77",
         "from":"0x83f564d180b58ad9a02a449105568189ee7de8cb",
         "to":"0x80833dc92d326a81d0cb74982a8e6f1a3887f837",
         "tokenID":"10371",
         "tokenValue":"1",
         "tokenName":"parallel",
         "tokenSymbol":"LL",
         "confirmations":"870255"
      },
      {
         "blockNumber":"14067255",
         "timeStamp":"1643012777",
         "hash":"0x3222b5f71e577c2551e17701eaf39b308b976bbe6bf6ce3f8c20549527b9d6ae",
         "nonce":"7",
         "blockHash":"0x236cfed8b42fa6cb8956f6e7b889797047d9af0883066b1f3be8284beda16e17",
         "transactionIndex":"172",
         "gas":"56873",
         "gasPrice":"69434775835",
         "gasUsed":"52073",
         "cumulativeGasUsed":"17181952",
         "input":"deprecated",
         "contractAddress":"0x76be3b62873462d2142405439777e971754e8e77",
         "from":"0x9d48305f859a0006b57da25c80af62ecb8e5c6a2",
         "to":"0x83f564d180b58ad9a02a449105568189ee7de8cb",
         "tokenID":"10372",
         "tokenValue":"1",
         "tokenName":"parallel",
         "tokenSymbol":"LL",
         "confirmations":"852909"
      }
   ]
}

Get list of Blocks Validated by Address

Returns the list of blocks validated by an address.

https://api.uniscan.xyz/api
   ?module=account
   &action=getminedblocks
   &address=0x9dd134d14d1e65f84b706d6f205cd5b1cd03a46b
   &blocktype=blocks
   &page=1
   &offset=10
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the address to check for balance

blocktype

the string pre-defined block type, either blocks for canonical blocks or uncles for uncle blocks only

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"3462296",
         "timeStamp":"1491118514",
         "blockReward":"5194770940000000000"
      },
      {
         "blockNumber":"2691400",
         "timeStamp":"1480072029",
         "blockReward":"5086562212310617100"
      },
      {
         "blockNumber":"2687700",
         "timeStamp":"1480018852",
         "blockReward":"5003251945421042780"
      }
   ]
}

Logs

Get Event Logs by Address

Returns the event logs from an address, with optional filtering by block range.

https://api.uniscan.xyz/api
   ?module=logs
   &action=getLogs
   &address=0xbd3531da5cf5857e7cfaa92426877b022e612cf8
   &fromBlock=12878196
   &toBlock=12878196
   &page=1
   &offset=1000
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the address to check for logs

fromBlock

the integer block number to start searching for logs eg. 12878196

toBlock

the integer block number to stop searching for logs eg. 12879196

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page limited to 1000 records per query, use the page parameter for subsequent records

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "address":"0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
         "topics":[
            "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "0x0000000000000000000000000000000000000000000000000000000000000000",
            "0x000000000000000000000000c45a4b3b698f21f88687548e7f5a80df8b99d93d",
            "0x00000000000000000000000000000000000000000000000000000000000000b5"
         ],
         "data":"0x",
         "blockNumber":"0xc48174",
         "timeStamp":"0x60f9ce56",
         "gasPrice":"0x2e90edd000",
         "gasUsed":"0x247205",
         "logIndex":"0x",
         "transactionHash":"0x4ffd22d986913d33927a392fe4319bcd2b62f3afe1c15a2c59f77fc2cc4c20a9",
         "transactionIndex":"0x"
      },
      {
         "address":"0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
         "topics":[
            "0x645f26e653c951cec836533f8fe0616d301c20a17153debc17d7c3dbe4f32b28",
            "0x00000000000000000000000000000000000000000000000000000000000000b5"
         ],
         "data":"0x",
         "blockNumber":"0xc48174",
         "timeStamp":"0x60f9ce56",
         "gasPrice":"0x2e90edd000",
         "gasUsed":"0x247205",
         "logIndex":"0x1",
         "transactionHash":"0x4ffd22d986913d33927a392fe4319bcd2b62f3afe1c15a2c59f77fc2cc4c20a9",
         "transactionIndex":"0x"
      }
   ]
}

Get Event Logs by Topics

Returns the events log in a block range, filtered by topics.

https://api.uniscan.xyz/api
   ?module=logs
   &action=getLogs
   &fromBlock=12878196
   &toBlock=12879196
   &topic0=0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
   &topic0_1_opr=and
   &topic1=0x0000000000000000000000000000000000000000000000000000000000000000
   &page=1
   &offset=1000
   &apikey=YourApiKeyToken

Usage:

  • For a single topic, specify the topic number such as topic0, topic1, topic2, topic3

  • For multiple topics, specify the topic numbers and topic operator either and or or such as below topic0_1_opr (and|or between topic0 & topic1), topic1_2_opr (and|or between topic1 & topic2) topic2_3_opr (and|or between topic2 & topic3), topic0_2_opr (and|or between topic0 & topic2) topic0_3_opr (and|or between topic0 & topic3), topic1_3_opr (and|or between topic1 & topic3)

Query Parameters

Parameter
Description

fromBlock

the integer block number to start searching for logs eg. 12878196

toBlock

the integer block number to stop searching for logs eg. 12879196

topic

the topic numbers to search for limited totopic0, topic1, topic2, topic3

topicOperator

the topic operator when multiple topic combinations are used limited to and or or

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page limited to 1000 records per query, use the page parameter for subsequent records

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "address":"0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
         "topics":[
            "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "0x0000000000000000000000000000000000000000000000000000000000000000",
            "0x000000000000000000000000c45a4b3b698f21f88687548e7f5a80df8b99d93d",
            "0x00000000000000000000000000000000000000000000000000000000000000b5"
         ],
         "data":"0x",
         "blockNumber":"0xc48174",
         "timeStamp":"0x60f9ce56",
         "gasPrice":"0x2e90edd000",
         "gasUsed":"0x247205",
         "logIndex":"0x",
         "transactionHash":"0x4ffd22d986913d33927a392fe4319bcd2b62f3afe1c15a2c59f77fc2cc4c20a9",
         "transactionIndex":"0x"
      },
      {
         "address":"0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
         "topics":[
            "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
            "0x0000000000000000000000000000000000000000000000000000000000000000",
            "0x000000000000000000000000c45a4b3b698f21f88687548e7f5a80df8b99d93d",
            "0x00000000000000000000000000000000000000000000000000000000000000b6"
         ],
         "data":"0x",
         "blockNumber":"0xc48174",
         "timeStamp":"0x60f9ce56",
         "gasPrice":"0x2e90edd000",
         "gasUsed":"0x247205",
         "logIndex":"0x2",
         "transactionHash":"0x4ffd22d986913d33927a392fe4319bcd2b62f3afe1c15a2c59f77fc2cc4c20a9",
         "transactionIndex":"0x"
      }
   ]
}

Get Event Logs by Address filtered by Topics

Returns the event logs from an address, filtered by topics and block range.

https://api.uniscan.xyz/api
   ?module=logs
   &action=getLogs
   &fromBlock=15073139
   &toBlock=15074139
   &address=0x59728544b08ab483533076417fbbb2fd0b17ce3a
   &topic0=0x27c4f0403323142b599832f26acd21c74a9e5b809f2215726e244a4ac588cd7d
   &topic0_1_opr=and
   &topic1=0x00000000000000000000000023581767a106ae21c074b2276d25e5c3e136a68b
   &page=1
   &offset=1000
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

fromBlock

the integer block number to start searching for logs eg. 12878196

toBlock

the integer block number to stop searching for logs eg. 12879196

address

the string representing the address to check for logs

topic

the topic numbers to search for limited totopic0, topic1, topic2, topic3

topicOperator

the topic operator when multiple topic combinations are used limited to and or or

page

the integer page number, if pagination is enabled

offset

the number of transactions displayed per page limited to 1000 records per query, use the page parameter for subsequent records

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "address":"0x59728544b08ab483533076417fbbb2fd0b17ce3a",
         "topics":[
            "0x27c4f0403323142b599832f26acd21c74a9e5b809f2215726e244a4ac588cd7d",
            "0x00000000000000000000000023581767a106ae21c074b2276d25e5c3e136a68b",
            "0x000000000000000000000000000000000000000000000000000000000000236d",
            "0x000000000000000000000000c8a5592031f93debea5d9e67a396944ee01bb2ca"
         ],
         "data":"0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000f207539952d0000",
         "blockNumber":"0xe60262",
         "timeStamp":"0x62c26caf",
         "gasPrice":"0x5e2d742c9",
         "gasUsed":"0xfb7f8",
         "logIndex":"0x4b",
         "transactionHash":"0x26fe1a0a403fd44ef11ee72f3b4ceff590b6ea533684cb279cb4242be463304c",
         "transactionIndex":"0x39"
      },
      {
         "address":"0x59728544b08ab483533076417fbbb2fd0b17ce3a",
         "topics":[
            "0x27c4f0403323142b599832f26acd21c74a9e5b809f2215726e244a4ac588cd7d",
            "0x00000000000000000000000023581767a106ae21c074b2276d25e5c3e136a68b",
            "0x0000000000000000000000000000000000000000000000000000000000002261",
            "0x000000000000000000000000c8a5592031f93debea5d9e67a396944ee01bb2ca"
         ],
         "data":"0x000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000000000000000000000000000000de0b6b3a7640000",
         "blockNumber":"0xe6035b",
         "timeStamp":"0x62c27ab1",
         "gasPrice":"0x27e523173",
         "gasUsed":"0x3b86e",
         "logIndex":"0x1d7",
         "transactionHash":"0x3a299413cf2c91e376e542efcf3fc308c562da79af6e992401217cc6208c7f74",
         "transactionIndex":"0x92"
      }
   ]
}

Creating an Account

Having an Uniscan account allows you to use sign-in only features and tools such as Address Watch List, Txn Private Notes, Token Ignore List and APIs.

1. Register an Account

2. Verify Your Email

3. Using Your Account

Geth/Parity Proxy

For compatibility with Parity, please prefix all hex strings with " 0x ".

eth_blockNumber

Returns the number of most recent block

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_blockNumber
   &apikey=YourApiKeyToken

No parameters required.

Sample response

{
   "jsonrpc":"2.0",
   "id":83,
   "result":"0xc36b29"
}

eth_getBlockByNumber

Returns information about a block by block number.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getBlockByNumber
   &tag=0x10d4f
   &boolean=true
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

tag

the block number, in hex eg. 0xC36B3C

boolean

the boolean value to show full transaction objects.

when true, returns full transaction objects and their information, when false only returns a list of transactions.

Sample response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":{
      "baseFeePerGas":"0x5cfe76044",
      "difficulty":"0x1b4ac252b8a531",
      "extraData":"0xd883010a06846765746888676f312e31362e36856c696e7578",
      "gasLimit":"0x1caa87b",
      "gasUsed":"0x5f036a",
      "hash":"0x396288e0ad6690159d56b5502a172d54baea649698b4d7af2393cf5d98bf1bb3",
      "logsBloom":"0x5020418e211832c600000411c00098852850124700800500580d406984009104010420410c00420080414b044000012202448082084560844400d00002202b1209122000812091288804302910a246e25380282000e00002c00050009038cc205a018180028225218760100040820ac12302840050180448420420b000080000410448288400e0a2c2402050004024a240200415016c105844214060005009820302001420402003200452808508401014690208808409000033264a1b0d200c1200020280000cc0220090a8000801c00b0100a1040a8110420111870000250a22dc210a1a2002409c54140800c9804304b408053112804062088bd700900120",
      "miner":"0x5a0b54d5dc17e0aadc383d2db43b0a0d3e029c4c",
      "mixHash":"0xc547c797fb85c788ecfd4f5d24651bddf15805acbaad2c74b96b0b2a2317e66c",
      "nonce":"0x04a99df972bd8412",
      "number":"0xc63251",
      "parentHash":"0xbb2d43395f93dab5c424421be22d874f8c677e3f466dc993c218fa2cd90ef120",
      "receiptsRoot":"0x3de3b59d208e0fd441b6a2b3b1c814a2929f5a2d3016716465d320b4d48cc1e5",
      "sha3Uncles":"0xee2e81479a983dd3d583ab89ec7098f809f74485e3849afb58c2ea8e64dd0930",
      "size":"0x6cb6",
      "stateRoot":"0x60fdb78b92f0e621049e0aed52957971e226a11337f633856d8b953a56399510",
      "timestamp":"0x6110bab2",
      "totalDifficulty":"0x612789b0aba90e580f8",
      "transactions":[
         "0x40330c87750aa1ba1908a787b9a42d0828e53d73100ef61ae8a4d925329587b5",
         "0x6fa2208790f1154b81fc805dd7565679d8a8cc26112812ba1767e1af44c35dd4",
         "0xe31d8a1f28d4ba5a794e877d65f83032e3393809686f53fa805383ab5c2d3a3c",
         "0xa6a83df3ca7b01c5138ec05be48ff52c7293ba60c839daa55613f6f1c41fdace",
         "0x4e46edeb68a62dde4ed081fae5efffc1fb5f84957b5b3b558cdf2aa5c2621e17",
         "0x356ee444241ae2bb4ce9f77cdbf98cda9ffd6da244217f55465716300c425e82",
         "0x1a4ec2019a3f8b1934069fceff431e1370dcc13f7b2561fe0550cc50ab5f4bbc",
         "0xad7994bc966aed17be5d0b6252babef3f56e0b3f35833e9ac414b45ed80dac93"
      ],
      "transactionsRoot":"0xaceb14fcf363e67d6cdcec0d7808091b764b4428f5fd7e25fb18d222898ef779",
      "uncles":[
         "0x9e8622c7bf742bdeaf96c700c07151c1203edaf17a38ea8315b658c2e6d873cd"
      ]
   }
}

eth_getUncleByBlockNumberAndIndex

Returns information about a uncle by block number.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getUncleByBlockNumberAndIndex
   &tag=0xC63276
   &index=0x0
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

tag

the block number, in hex eg. 0xC36B3C

index

the position of the uncle's index in the block, in hex eg. 0x5

Sample response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":{
      "baseFeePerGas":"0x65a42b13c",
      "difficulty":"0x1b1457a8247bbb",
      "extraData":"0x486976656f6e2063612d68656176792059476f6e",
      "gasLimit":"0x1ca359a",
      "gasUsed":"0xb48fe1",
      "hash":"0x1da88e3581315d009f1cb600bf06f509cd27a68cb3d6437bda8698d04089f14a",
      "logsBloom":"0xf1a360ca505cdda510d810c1c81a03b51a8a508ed601811084833072945290235c8721e012182e40d57df552cf00f1f01bc498018da19e008681832b43762a30c26e11709948a9b96883a42ad02568e3fcc3000004ee12813e4296498261619992c40e22e60bd95107c5bd8462fcca570a0095d52a4c24720b00f13a2c3d62aca81e852017470c109643b15041fd69742406083d67654fc841a18b405ab380e06a8c14c0138b6602ea8f48b2cd90ac88c3478212011136802900264718a085047810221225080dfb2c214010091a6f233883bb0084fa1c197330a10bb0006686e678b80e50e4328000041c218d1458880181281765d28d51066058f3f80a7822",
      "miner":"0x1ad91ee08f21be3de0ba2ba6918e714da6b45836",
      "mixHash":"0xa8e1dbbf073614c7ed05f44b9e92fbdb3e1d52575ed8167fa57f934210bbb0a2",
      "nonce":"0x28cc3e5b7bee9866",
      "number":"0xc63274",
      "parentHash":"0x496dae3e722efdd9ee1eb69499bdc7ed0dca54e13cd1157a42811c442f01941f",
      "receiptsRoot":"0x9c9a7a99b4af7607691a7f2a50d474290385c0a6f39c391131ea0c67307213f4",
      "sha3Uncles":"0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
      "size":"0x224",
      "stateRoot":"0xde9a11f0ee321390c1a7843cab7b9ffd3779d438bc8f77de4361dfe2807d7dee",
      "timestamp":"0x6110bd1a",
      "transactionsRoot":"0xa04a79e531db3ec373cb63e9ebfbc9c95525de6347958918a273675d4f221575",
      "uncles":[
         
      ]
   }
}

eth_getBlockTransactionCountByNumber

Returns the number of transactions in a block.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getBlockTransactionCountByNumber
   &tag=0x10FB78
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

tag

the block number, in hex eg. 0x10FB78

Sample response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":"0x3"
}

eth_getTransactionByHash

Returns the information about a transaction requested by transaction hash.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getTransactionByHash
   &txhash=0xbc78ab8a9e9a0bca7d0321a27b2c03addeae08ba81ea98b03cd3dd237eabed44
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

txhash

the string representing the hash of the transaction

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":{
      "blockHash":"0xf850331061196b8f2b67e1f43aaa9e69504c059d3d3fb9547b04f9ed4d141ab7",
      "blockNumber":"0xcf2420",
      "from":"0x00192fb10df37c9fb26829eb2cc623cd1bf599e8",
      "gas":"0x5208",
      "gasPrice":"0x19f017ef49",
      "maxFeePerGas":"0x1f6ea08600",
      "maxPriorityFeePerGas":"0x3b9aca00",
      "hash":"0xbc78ab8a9e9a0bca7d0321a27b2c03addeae08ba81ea98b03cd3dd237eabed44",
      "input":"0x",
      "nonce":"0x33b79d",
      "to":"0xc67f4e626ee4d3f272c2fb31bad60761ab55ed9f",
      "transactionIndex":"0x5b",
      "value":"0x19755d4ce12c00",
      "type":"0x2",
      "accessList":[
         
      ],
      "chainId":"0x1",
      "v":"0x0",
      "r":"0xa681faea68ff81d191169010888bbbe90ec3eb903e31b0572cd34f13dae281b9",
      "s":"0x3f59b0fa5ce6cf38aff2cfeb68e7a503ceda2a72b4442c7e2844d63544383e3"
   }
}

eth_getTransactionByBlockNumberAndIndex

Returns information about a transaction by block number and transaction index position.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getTransactionByBlockNumberAndIndex
   &tag=0xC6331D
   &index=0x11A
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

tag

the block number, in hex eg. 0x10FB78

index

the position of the uncle's index in the block, in hex eg. 0x0

Sample Response

{
   "jsonrpc":"2.0",
   "result":{
      "accessList":[
         
      ],
      "blockHash":"0xdce94191f861842c2786e3594da0c0109707fd78409cab5f38e10eb87d0f301c",
      "blockNumber":"0xa36e44",
      "chainId":"0x3",
      "condition":null,
      "creates":null,
      "from":"0xb910ae1db14a9fbc64ce175bdca6d3a743f690ab",
      "gas":"0x186a0",
      "gasPrice":"0x3b9aca09",
      "hash":"0xf96ff62ba5aaf46cd824b6766f7fa6f6b9595b1dd4ef1d31bcf1f765047c2835",
      "input":"0xd0e30db0",
      "maxFeePerGas":"0x3b9aca12",
      "maxPriorityFeePerGas":"0x3b9aca00",
      "nonce":"0xc6",
      "publicKey":"0x6dbf7068e19de8457c426a758a92ea54827ebd5b8467c3a1a5c4ac19bc7570457738fe496a40ea4e1f59d39d89636a430afdec0bf2a8060c6bf7d612bfe90ad3",
      "r":"0xdecdc48821a06bf116e82b355d520dc5a44d6df98234e5344c16565b0b3dfdba",
      "raw":"0x02f8750381c6843b9aca00843b9aca12830186a094c778417e063141139fce010982780140aa0cd5ab8502540be40084d0e30db0c001a0decdc48821a06bf116e82b355d520dc5a44d6df98234e5344c16565b0b3dfdbaa06b85bb6fd8153e86b50f0011787585e8c709a2a25e7ee3c2579572f07acfd42e",
      "s":"0x6b85bb6fd8153e86b50f0011787585e8c709a2a25e7ee3c2579572f07acfd42e",
      "to":"0xc778417e063141139fce010982780140aa0cd5ab",
      "transactionIndex":"0xd",
      "type":"0x2",
      "v":"0x1",
      "value":"0x2540be400"
   },
   "id":1
}

eth_getTransactionCount

Returns the number of transactions performed by an address.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getTransactionCount
   &address=0x4bd5900Cb274ef15b153066D736bf3e83A9ba44e
   &tag=latest
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the address to get transaction count

tag

the string pre-defined block parameter, either earliest, pending or latest

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":"0x44"
}

eth_sendRawTransaction

Submits a pre-signed transaction for broadcast to the Unichain network.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_sendRawTransaction
   &hex=0xf904808000831cfde080
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

hex

the string representing the signed raw transaction data to broadcast.

Sample Response

{
  "id":1,
  "jsonrpc": "2.0",
  "result": "0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331"
}

Use eth_getTransactionReceipt to retrieve full details.

eth_getTransactionReceipt

Returns the receipt of a transaction by transaction hash.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getTransactionReceipt
   &txhash=0xadb8aec59e80db99811ac4a0235efa3e45da32928bcff557998552250fa672eb
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

txhash

the string representing the hash of the transaction

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":{
      "blockHash":"0x07c17710dbb7514e92341c9f83b4aab700c5dba7c4fb98caadd7926a32e47799",
      "blockNumber":"0xcf2427",
      "contractAddress":null,
      "cumulativeGasUsed":"0xeb67d5",
      "effectiveGasPrice":"0x1a96b24c26",
      "from":"0x292f04a44506c2fd49bac032e1ca148c35a478c8",
      "gasUsed":"0xb41d",
      "logs":[
         {
            "address":"0xdac17f958d2ee523a2206206994597c13d831ec7",
            "topics":[
               "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef",
               "0x000000000000000000000000292f04a44506c2fd49bac032e1ca148c35a478c8",
               "0x000000000000000000000000ab6960a6511ff18ed8b8c012cb91c7f637947fc0"
            ],
            "data":"0x00000000000000000000000000000000000000000000000000000000013f81a6",
            "blockNumber":"0xcf2427",
            "transactionHash":"0xadb8aec59e80db99811ac4a0235efa3e45da32928bcff557998552250fa672eb",
            "transactionIndex":"0x122",
            "blockHash":"0x07c17710dbb7514e92341c9f83b4aab700c5dba7c4fb98caadd7926a32e47799",
            "logIndex":"0xdb",
            "removed":false
         }
      ],
      "logsBloom":"0x00000000000000000000000000000000000000000000000000000000000004000000000004000000000000000000010000000000000000000000000000000000000000000000000000000008000000000000000000000000800000000000000000000000000000000000000000000000000000000000000000000010000000001100000000000000000000000000000000000000000000000000000200100000000000000000000000000080000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
      "status":"0x1",
      "to":"0xdac17f958d2ee523a2206206994597c13d831ec7",
      "transactionHash":"0xadb8aec59e80db99811ac4a0235efa3e45da32928bcff557998552250fa672eb",
      "transactionIndex":"0x122",
      "type":"0x2"
   }
}

eth_call

Executes a new message call immediately without creating a transaction on the block chain.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_call
   &to=0xAEEF46DB4855E25702F8237E8f403FddcaF931C0
   &data=0x70a08231000000000000000000000000e16359506c028e51f16be38986ec5746251e9724
   &tag=latest
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

to

the string representing the address to interact with

data

the hash of the method signature and encoded parameters

tag

the string pre-defined block parameter, either earliest, pending or latest

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":"0x00000000000000000000000000000000000000000000000000601d8888141c00"
}

eth_getCode

Returns code at a given address.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getCode
   &address=0xf75e354c5edc8efed9b59ee9f67a80845ade7d0c
   &tag=latest
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the address to get code

tag

the string pre-defined block parameter, either earliest, pending or latest

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":"0x3660008037602060003660003473273930d21e01ee25e4c219b63259d214872220a261235a5a03f21560015760206000f3"
}

eth_getStorageAt

Returns the value from a storage position at a given address.

This endpoint is still experimental and may have potential issues

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_getStorageAt
   &address=0x6e03d9cce9d60f3e9f2597e13cd4c54c55330cfd
   &position=0x0
   &tag=latest
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

address

the string representing the address to get code

position

the hex code of the position in storage, eg 0x0

tag

the string pre-defined block parameter, either earliest, pending or latest

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":"0x0000000000000000000000003d0768da09ce77d25e2d998e6a7b6ed4b9116c2d"
}

eth_gasPrice

Returns the current price per gas in wei.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_gasPrice
   &apikey=YourApiKeyToken

No parameters required.

Sample Response

{
   "jsonrpc":"2.0",
   "id":73,
   "result":"0x430e23400"
}

eth_estimateGas

Makes a call or transaction, which won't be added to the blockchain and returns the used gas.

https://api.uniscan.xyz/api
   ?module=proxy
   &action=eth_estimateGas
   &data=0x4e71d92d
   &to=0xf0160428a8552ac9bb7e050d90eeade4ddd52843
   &value=0xff22
   &gasPrice=0x51da038cc
   &gas=0x5f5e0ff
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

data

the hash of the method signature and encoded parameters

to

the string representing the address to interact with

value

the value sent in this transaction, in hex eg. 0xff22

gas

the amount of gas provided for the transaction, in hex eg. 0x5f5e0ff

gasPrice

the gas price paid for each unit of gas, in wei

post EIP-1559, the gasPrice has to be higher than the block's baseFeePerGas

Sample Response

{
   "jsonrpc":"2.0",
   "id":1,
   "result":"0x6556"
}

Getting an API key

Creating an API Key

From there, you may click on Add to create a new key and give a name to your project. Each Uniscan account is limited to creating 3 keys at any one time.

Editing an API Key

To change your project name associated with an API Key, click on Edit to specify a new App Name, and save the changes.

If you would like to delete an API Key or suspect your key has been compromised, you may click on Remove to delete that key and generate a new one.

Transactions

Check Contract Execution Status

Returns the status code of a contract execution.

https://api.uniscan.xyz/api
   ?module=transaction
   &action=getstatus
   &txhash=0x15f8e5ea1079d9a0bb04a4c58ae5fe7654b5b2b4463375ff7ffb490aa0032f3a
   &apikey=YourApiKeyToken

Check Transaction Receipt Status

Returns the status code of a transaction execution.

https://api.uniscan.xyz/api
   ?module=transaction
   &action=gettxreceiptstatus
   &txhash=0x513c1ba0bebf66436b5fed86ab668452b7805593c05073eb2d51d3a52f480a76
   &apikey=YourApiKeyToken

Query Parameters

Parameter
Description

txhash

the string representing the transaction hash to check the execution status

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":{
      "status":"1"
   }
}

Common Verification Errors

Contract Doesn't Match

"Compiled contract deployment bytecode does NOT match the transaction deployment bytecode"

The submitted source code does not match the contract code deployed on chain.

Common causes include using a different compiler version or enabling optimisation runs.

For an exact match to be found, both source code and compiler settings specified have to exactly match the deployment conditions, for the same bytecode to be reproduced.

Solidity Compilation Error

"Solidity Compilation Error: Identifier not found or not unique"

A compilation issue occured due to syntax errors in your Solidity source code.

Contract Not Deployed

"Unable to locate ContractCode at 0x539a277b12a3f6723f4c1769edb11b0be7c214da

The contract has not been deployed at the specific address at the specific chain.

Missing or Invalid Library Names

"Library was required but suitable match not found"

Double check on your library names ( case sensitive such as "PRBMath" ) or ensure that a matching library name and library address is provided.

Missing Contract Name

"Unable to locate ContractName , did you specify the correct Contract Name ?"

A match was not found with the name of the contract specified when multiple files are provided.

Ensure that you have provided the correct contract name to be matched against, and making sure you submit the main contract name not its dependencies.

No Deployment Bytecode Match Found

"Compiled contract deployment bytecode does NOT match the transaction deployment bytecode"

The compilation of your submitted source code does not match the deployment bytecode, ie the constructor arguments plus general initialisation code and runtime bytecode.

Similar solution as above, do take into account constructor arguments as well below.

Missing/Invalid Constructor Arguments

"Please check if the correct constructor argument was entered"

if your contract utilized the constructor keyword, you should provide it in hex format. Otherwise, leave this field empty as it is.

There is an easter egg 🐣 on the constructorArguements field spelling, using it as the "correct" spelling may miss your submission!

Mismatched bytecode metadata hash

"Please check if the correct bytecodehash was specified via standard-json verification."

Other submission formats such as single file or multifile do not support changing this setting, and will use the compiler defaults.

Similar Match Found

"This contract already Similar Matches the deployed ByteCode at 0x4200000000000000000000000000000000000042"

Unsupported Solc Version

"Invalid or not supported solc version, see https://uniscan.xyz/solcversions for list"

This error is thrown when you specify to use an invalid or unsupported version of the Solidity Compiler ie. below v0.4.11-nightly.2017.3.15+.

Source Code Already Verified

"Source code already verified"

If you think this might be a mistake, do check if you've submitted verification to the right explorer/chain, a contract that is verified on Uniscan is not automatically verified on other explorers.

Unsupported File Import Callback

"Source "@openzeppelin/contracts/ERC20.sol" not found: File import callback not supported"

Invalid chainId

The chain you've specified does not have an Uniscan-like explorer.

Temporary Error

"This could be a temporary error, please retry or contact us (Error Code 10001/10002/10003)"

Tokens

Get ERC20-Token TotalSupply by ContractAddress

Returns the current amount of an ERC-20 token in circulation.

Get ERC20-Token Account Balance for TokenContractAddress

Returns the current balance of an ERC-20 token of an address.

Query Parameters

Sample Response

Eg. a token with a balance of 215.241526476136819398 and 18 decimal places will be returned as 215241526476136819398

Stats

Get Total Supply of Ether

Returns the current amount of Ether in circulation excluding ETH2 Staking rewards and EIP1559 burnt fees.

Get Total Supply of Ether 2

Returns the current amount of Ether in circulation, ETH2 Staking rewards, EIP1559 burnt fees, and total withdrawn ETH from the beacon chain.

Get Ether Last Price

Returns the latest price of 1 ETH.

No parameters required.

Sample Response

Get Unichain Nodes Size

Returns the size of the Unichain blockchain, in bytes, over a date range.

Query Parameters

Sample Response

Get Total Nodes Count

Returns the total number of discoverable Unichain nodes.

No parameters required.

Sample Response

What's Contract Verification

How do I verify a contract I've deployed ?

Multichain Verification

1. Using the Verify Contract Endpoint

In Postman, set your request method to HTTP POST and your URL to https://api.uniscan.xyz/api .

Under the Body tab and using form-data, specify the "module" to contract and "action" to verifysourcecode.

2. Specify Your chainId

Select the chain you've deployed your contract, which is supported by an Uniscan-like explorer.

Specify it under the "chainId" parameter, such as 1 for Unichain and 8453 for Base.

3. Add Contract Source Code

We support 2 formats, solidity-single-file or solidity-standard-json-input.

Paste your source code under "sourceCode" and the code format under the "codeformat" parameter.

4. Add Contract Metadata

Include the contract address as "contractaddress", beginning with "0x".

Specify your contract file path and contract name separated by a colon as "contractname", such as "contracts/Verified.sol:Verified".

5. Submitting Verification

Supported Chains

Blocks

Get Block Rewards by BlockNo

Returns the block reward.

Get Estimated Block Countdown Time by BlockNo

Returns the estimated time remaining, in seconds, until a certain block is mined.

Query Parameters

Sample Response

Get Block Number by Timestamp

Returns the block number that was mined at a certain timestamp.

Query Parameters

Sample Response

Try this endpoint in your

Query Parameters

Parameter
Description

address

the string representing the address to check for balance

tag

the string pre-defined block parameter, either earliest, pending or latest

Sample response

{
   "status":"1",
   "message":"OK",
   "result":"40891626854930000000000" 
}

Tip: The result is returned in

Convert Unichain units using our

Try this endpoint in your

📖 Tip: The result is returned in

Convert Unichain units using our

​​ ​ Note : This API endpoint returns a maximum of 10000 records only.

Try this endpoint in your

Note : This API endpoint returns a maximum of 10000 records only.

Try this endpoint in your

Tip: Specify a smaller startblock and endblock range for faster search results

Note : This API endpoint returns a maximum of 10000 records only.

Try this endpoint in your

​​ Note : This API endpoint returns a maximum of 10000 records only.

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Note : The timeStamp is represented in ****

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Note that creating an Uniscan account is only linked to Uniscan's block explorer services, it is not the same as creating an .

Head over to the page and provide a username, email and password for your account.

You may opt-in for our monthly newsletter to receive updates on the latest features, analyses, trending topics, giveaways and more!

A confirmation link will be sent to your email address to verify your sign up request.

Once you've clicked on the link, your account set-up process is complete and you may to use your account-specific features !

Upon signing in, you will have access to your account dashboard where you can make full use of Uniscan's features such as generating API keys , hide unwanted tokens and add private notes.

For the full documentation of available parameters and descriptions, please visit the official docs.

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Tip: Send a POST request if your hex string is particularly long.

For more information on creating a signed raw transaction, visit this

Note: The result represents the transaction hash of the submitted raw transaction.

Try this endpoint in your

Try this endpoint in your

Note: The gas parameter is capped at 2x the current block gas limit.

Try this endpoint in your

Try this endpoint in your

Try this endpoint in your

Tip: The result is returned in wei.

Easily convert Unichain units using our

Try this endpoint in your

Note: The gas parameter is capped at 2x the current block gas limit.

A valid API Key is required for all queries, if you run into any issues ✅

From your , click on the navigation tab labelled API-KEYs

The same keys can be used for the and testnet explorer .

Try this endpoint in your

Query Parameters

Parameter
Description

txhash

the string representing the transaction hash to check the execution status

Sample Response

{
   "status":"1",
   "message":"OK",
   "result":{
      "isError":"1",
      "errDescription":"Bad jump destination"
   }
}

Tip: The isError field returns 0 for successful transactions and 1 for failed transactions.

Note: Only applicable for post transactions.

Try this endpoint in your

Tip: The status field returns 0 for failed transactions and 1 for successful transactions.

An index of possible errors you may encounter when submitting requests to the endpoint, and potions to debug them 🐛

Consider debugging your contract with any compiler such as or and reference the error from Solidity's .

Check the contract address you've deployed, if your contract deployment transaction has succeeded or if the specified is correct.

A was used in your contract deployment, but was not specified, misspelt or using the wrong library address.

You may reference your original deployment's constructor arguments or determine it from the .

The settings of your submitted source code differs from the settings of your original contract deployment, such as being set to ipfs or none.

Submit your contract verification using the solc json input format, and accordingly there.

This error indicates that the contract has already been verified via to another contract.

Kindly to us at this point of time to have this updated to Full Match if required.

Do if you need to verify a contract below this supported version such as to prove you deployed the first NFT!

An has been obtained, get back to having your !

This error is thrown when contracts reference imports from external sources, such as libraries or Github links.

Consider your source code into a single file, or use the Solidity Standard Json Input format that comes with tools such as to resolve these external imports.

Check the chainId used against our .

Something went wrong on our end, which could include downtime or windows.

Please retry this in a while or if this continues to persist!

Try this endpoint in your

Query Parameters

Parameter
Description

Sample Response

Tip : The result is returned in the token's smallest decimal representation.

Eg. a token with a balance of 215.241526476136819398 and 18 decimal places will be returned as 215241526476136819398

Try this endpoint in your

Parameter
Description

Tip : The result is returned in the token's smallest decimal representation.

Try this endpoint in your

No parameters required.

Sample Response

Tip : Easily convert Unichain units using our

Try this endpoint in your

No parameters required.

Sample Response

Note: The EthSupply is calculated before adding ETH minted as Eth2Staking rewards and subtracting BurntFees from EIP-1559.

For more information, check out our

Try this endpoint in your

Tip : The timestamps are represented in

Try this endpoint in your

Parameter
Description

Tip : The chainSize is represented in bytes.

Try this endpoint in your

Contract verification is essentially open-sourcing your contract code

Contract verification allows smart contract developers to prove and publish the source code of the contracts deployed on-chain .

You may have come across some of them when browsing the of any contract address on Uniscan.

If you've deployed your contract using an online tool such as Remix, or OpenZeppelin's Contract Wizard, consider using the page.

If you've deployed your contract using a development tool such as Hardhat, Foundry, Truffle and so on, consider using to automate the verification process.

For repeated or multichain contract verification, it's best to use the to automate source code submission .

You may specify a chainId along with an to submit verification for any Uniscan-like explorer

All API based verification must be authenticated, include your under the "apikey" field.

Using JSON is the gold standard for verification, as you can ( if you use imports such as from ).

Optionally if your contract uses , you may specify them too under the "constructorArguments" parameter in format.

Select the compiler version used from as your "compilerversion".

Click Send and you'll receive a guid which you can then .

Alternatively if everything went well, you'll see the happy green checkmark on your

A list of explorers by Uniscan and their chain IDs ( same as ).

Explorer
Chain ID

Try this endpoint in your

Query Parameters

Parameter
Description

Sample Response

Try this endpoint in your

Parameter
Description

Try this endpoint in your

Parameter
Description

Tip : Convert a regular date-time to a

​​ Tip : The timestamp field is denoted in

📝
📝
💡
📝
📝
📰
🎁
🔗
🔑
💡
⛏️
⛽
📖
⛽
📖
📖
🔗
browser
📖
wei.
Unit Converter.
🔗
browser
wei.
Unit Converter.
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
⏳
Unix timestamp.
🔗
browser
🔗
browser
🔗
browser
💡
Unichain address
Account Registration
🎉
sign in
Unichain JSON-RPC
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🔗
browser
🖋️
page.
🔗
browser
🔗
browser
🔗
browser
browser
🔗
browser
unit converter.
🔗
browser
let us know
🗝️
Account Dashboard
🏗️
Sepolia
🔗
browser
📝
Byzantium Fork
🔗
browser
https://api.uniscan.xyz/api
   ?module=stats
   &action=tokensupply
   &contractaddress=0x57d90b64a1a57749b0f932f1a3395792e12e7055
   &apikey=YourApiKeyToken
https://api.uniscan.xyz/api
   ?module=account
   &action=tokenbalance
   &contractaddress=0x57d90b64a1a57749b0f932f1a3395792e12e7055
   &address=0xe04f27eb70e025b78871a2ad7eabe85e61212761
   &tag=latest&apikey=YourApiKeyToken

contractaddress

the contract address of the ERC-20 token

address

the string representing the address to check for token balance

{
   "status":"1",
   "message":"OK",
   "result":"135499"
}
https://api.uniscan.xyz/api
   ?module=stats
   &action=ethsupply
   &apikey=YourApiKeyToken
https://api.uniscan.xyz/api
   ?module=stats
   &action=ethsupply2
   &apikey=YourApiKeyToken
https://api.uniscan.xyz/api
   ?module=stats
   &action=ethprice
   &apikey=YourApiKeyToken
{
   "status":"1",
   "message":"OK",
   "result":{
      "ethbtc":"0.06116",
      "ethbtc_timestamp":"1624961308",
      "ethusd":"2149.18",
      "ethusd_timestamp":"1624961308"
   }
}
https://api.uniscan.xyz/api
   ?module=stats
   &action=chainsize
   &startdate=2025-02-01
   &enddate=2025-02-01
   &clienttype=geth
   &syncmode=default
   &sort=asc
   &apikey=YourApiKeyToken
{
   "status":"1",
   "message":"OK",
   "result":[
      {
         "blockNumber":"7156164",
         "chainTimeStamp":"2019-02-01",
         "chainSize":"184726421279",
         "clientType":"Geth",
         "syncMode":"Default"
      }
      {
         "blockNumber":"7276521",
         "chainTimeStamp":"2019-02-28",
         "chainSize":"197073145113",
         "clientType":"Geth",
         "syncMode":"Default"
      }
   ]
}
https://api.uniscan.xyz/api
   ?module=stats
   &action=nodecount
   &apikey=YourApiKeyToken
{
   "status":"1",
   "message":"OK",
   "result":{
      "UTCDate":"2021-06-29",
      "TotalNodeCount":"6413"
   }
}

Uniscan

1

Goerli Uniscan

5

Sepolia Uniscan

11155111

Holesky Uniscan

17000

BscScan

56

Testnet BscScan

97

opBNB BscScan

204

Testnet opBNB BscScan

5611

FTMScan

250

Testnet FTMScan

4002

Optimistic Uniscan

10

Goerli Optimistic Uniscan

420

Sepolia Optimistic Uniscan

11155420

PolygonScan

137

Arbiscan

42161

Sepolia Arbiscan

421614

Moonbeam Moonscan

1284

Moonbase Moonscan

1287

Moonriver Moonscan

1285

BTTCScan

199

Donau BTTCScan

1028

CeloScan

42220

Alfajores CeloScan

44787

GnosisScan

100

Nova Arbiscan

42170

BaseScan

8453

Sepolia BaseScan

84532

zkEVM PolygonScan

1101

LineaScan

59144

Testnet LineaScan

59140

ScrollScan

534352

Testnet ScrollScan

534351

WemixScan

1111

Testnet WemixScan

1112

KromaScan

255

Testnet KromaScan

2358

Fraxscan

252

Testnet Fraxscan

2522

SnowScan

43114

Fuji SnowScan

43113

BlastScan

81457

Testnet BlastScan

23888

https://api.uniscan.xyz/api
   ?module=block
   &action=getblockreward
   &blockno=2165403
   &apikey=YourApiKeyToken
https://api.uniscan.xyz/api
   ?module=block
   &action=getblockcountdown
   &blockno=16701588
   &apikey=YourApiKeyToken
{
   "status":"1",
   "message":"OK",
   "result":{
      "CurrentBlock":"12715477",
      "CountdownBlock":"16701588",
      "RemainingBlock":"3986111",
      "EstimateTimeInSec":"52616680.2"
   }
}
https://api.uniscan.xyz/api
   ?module=block
   &action=getblocknobytime
   &timestamp=1578638524
   &closest=before
   &apikey=YourApiKeyToken

timestamp

the integer representing the Unix timestamp in seconds.

closest

the closest available block to the provided timestamp, either before or after

{
   "status":"1",
   "message":"OK",
   "result":"12712551"
}

contractaddress

the contract address of the ERC-20 token

{
   "status":"1",
   "message":"OK",
   "result":"21265524714464"
}
📈
📈
⛓️
✏️
✅
Remix
Hardhat
official documentation
chainId
library
end of your compiled bytecode
metadata hash
specify the settings
Similar Match
reach out
let us know
Exact Match
coffee
OpenZeppelin
flattening
Hardhat
supported list
maintenance
ping us
🔗
browser
🔗
browser
🔗
browser
{
   "status":"1",
   "message":"OK",
   "result":"116487067186500000000000000"
}
📖
unit converter.
🔗
browser
{
   "status":"1",
   "message":"OK",
   "result":{
      "EthSupply":"122373866217800000000000000",
      "Eth2Staking":"1157529105115885000000000",
      "BurntFees":"3102505506455601519229842",
      "WithdrawnTotal":"1170200333006131000000000"
   }
}
📝
Ether Total Supply Dashboard.
🔗
browser
⏳
Unix timestamp.
🔗
browser
🔗
browser
Contract tab
contract verification
plugins
Uniscan API key
Uniscan API key
✨
include compiler settings and multiple files
OpenZeppelin
constructor arguments
ABI encoded
this list
✅
contract code
ChainList
🔗
browser
⏳
Unix timestamp.
🔗
browser
🔗
browser
⏳
Unix timestamp.
contract verification
🐇
Verify Contract endpoint
check on your verification status

startdate

the starting date in yyyy-MM-dd format, eg. 2019-02-01

enddate

the ending date in yyyy-MM-dd format, eg. 2019-02-28

clienttype

syncmode

sort

the sorting preference, use asc to sort by ascending and desc to sort by descending

blockno

{
   "status":"1",
   "message":"OK",
   "result":{
      "blockNumber":"2165403",
      "timeStamp":"1472533979",
      "blockMiner":"0x13a06d3dfe21e0db5c016c03ea7d2509f7f8d1e3",
      "blockReward":"5314181600000000000",
      "uncles":[
         {
            "miner":"0xbcdfc35b86bedf72f0cda046a3c16829a2ef41d1",
            "unclePosition":"0",
            "blockreward":"3750000000000000000"
         },
         {
            "miner":"0x0d0c9855c722ff0c78f21e43aa275a5b8ea60dce",
            "unclePosition":"1",
            "blockreward":"3750000000000000000"
         }
      ],
      "uncleInclusionReward":"312500000000000000"
   }
}

blockno

Rate Limits

API Tier
Rate Limit

Free

3 calls/second , 1000 data points/call and up to 50,000 calls/day

Libraries

Postman

Python

NodeJS

GoLang

PHP

.NET

Lisp

Dart

Contract Verification Plugins

hardhat-verify

truffle-plugin-verify

forge-verify-contract

remix-etherscan-plugin

solt

FAQ

Frequently Asked Questions.

Can the same API keys be used across different explorers?

Which networks are API PRO endpoints applicable to?

My API keys are not working, what can I do?

Common Error Messages

{
   "status":"0",
   "message":"NOTOK",
   "result":"Max rate limit reached, please use API Key for higher rate limit"
}

Invalid API Key

"Invalid API Key"

To resolve, ensure that you have copy pasted the right key from the right explorer.

New API Keys may also take a moment to be fully activated, so if your fresh key is throwing an error consider waiting for a few minutes.

Max rate limit

"Max rate limit reached, please use API Key for higher rate limit"

This error occurs when you exceed the rate limit assigned to your specific API key.

Missing or invalid action

"Error! Missing Or invalid Action name"

This error occurs when you do not specify, or specify an invalid module and action name.

To resolve, double check your API query to use a valid module and action name.

Endpoint-specific errors

"Error! Block number already pass"

"Error! Invalid address format"

"Contract source code not verified"

These error messages returned are specific to certain endpoints and their related parameters.

To resolve, kindly refer to the specific endpoint's documentation, and check for the correct format or values to be specified as parameters.

Query Timeout

"Query Timeout occured. Please select a smaller result dataset"

"Unexpected err, timeout occurred or server too busy. Please try again later"

This error occurs when you have sent a particularly large query that did not manage to be completed in time.

Getting Help

The best way to reach out to us regarding general inquiries, advertising, updating token information, and API technical support.

Keep in mind that as a block explorer service, we cannot cancel, refund or reverse transactions as we do not process them.

For general updates, new feature releases and community support, keep in touch with us via Twitter.

Announcements for ongoing and scheduled maintenance works that may affect certain services used.

the Unichain to use, either geth or parity

the to run, either default or archive

the integer block number to check block rewards for eg.

the integer block number to estimate time remaining to be mined eg.

Reference for various API tiers and their rate limits .

A valid API Key is required for all queries, if you run into any issues .

The following are 3rd party tools and utilities created by the community . We do not provide any support or warranties for the solutions listed below.

A simple of the APIs for testing and debugging calls.

An asynchronous Python wrapper for Uniscan ( and other chains ), available on and developed by

A Python wrapper for the Uniscan APIs developed by

A Python wrapper available as a package on developed by

A NodeJS wrapper for the Uniscan APIs developed by

A Go binding for the Uniscan APIs developed by

A PHP wrapper, available as a package on developed by

A PHP wrapper for the Uniscan APIs developed by

A .NET wrapper for the Uniscan APIs, available as a package developed by

A Common Lisp wrapper available on Github developed by

A Dart wrapper for Flutter applications available on Pub by

The following are 3rd party tools and utilities created by the community . We do not provide any support or warranties for the solutions listed below.

A plugin to verifying contracts developed on the development environment, built by

A plugin for verifying contracts built using the development environment, built by

A plugin for verifying contracts built into the Foundry environment, built by .

A plugin for verifying contracts compiled using , built right in and developed by

A tool for compiling Solidity files into the Standard Json format ( recommended over flattening ), and optionally submitting them to Uniscan, developed by

This works for Mac/Linux environments only for now

Every block explorer built by Uniscan ( eg. BscScan, PolygonScan, HecoInfo ) requires a different account to be created and hence a different set of API keys .

The additional endpoints available under any API PRO subscription are only available to the Unichain mainnet, and not supported on testnets.

Newly generated keys may take a moment to fully activate, please retry this in a moment!

If the issue still persists after a few minutes or with a previously working key, do for us to have a closer look.

An API call that encounters an error will return 0 as its status code and display the cause of the error under the result field.

This error occurs when you specify an invalid API Key, or use a key from an explorer on a .

To resolve, adhere to the of your available plan by waiting for a certain amount of time before each request. If you are using a script or application, apply throttling to limit the frequency of calls.

If you require some help getting started, try copying the sample queries provided in the and pasting them into your browser.

To resolve, consider selecting a smaller date/block range, though you may if you think the issue may be performance related.

Beware of phishing attempts and emails impersonating the team at Uniscan Take note of our official support and communication channels as below.

General Support Tickets

If your issues are related to transactions, you may find helpful articles over at the

Reach out to us via a

Twitter

Follow us on

Freshstatus

Check Uniscan's

🚧
🔧
🙌
🔧
🙌
🚧
🗝️
✨
⚠️
node client
type of node
12697906
12697906
✅
let us know
Postman collection
PyPI
@ape364
@corpetty
PyPI
@pcko1
@sebs
@nanmu42
Packagist
@maslakoff
@dzarezenko
NuGet
@hossyposs
@muyinliu
@Zfinix
Hardhat
@nomiclabs
Truffle
@rkalis
Paradigm
Remix IDE
@Machinalabs
@hjubb
reach out
rate limits
API Endpoints
ping us
Uniscan Information Center.
support ticket.
Twitter.
network status.
different chain
GitHub - pcko1/etherscan-python: A minimal, yet complete, python API for Etherscan.io.GitHub
GitHub - ape364/aioetherscan: Etherscan API async Python wrapperGitHub
GitHub - corpetty/py-etherscan-api: Python bindings to the Etherscan.io APIGitHub
GitHub - sebs/etherscan-api: A node.js wrapper for the etherscan api to fetch data and metadata from the ethereum blockchainGitHub
Postman
https://github.com/hossyposs/Uniscan.Netgithub.com
GitHub - nanmu42/etherscan-api: Golang client for Ethereum Etherscan API (and its families like BscScan) / Golang 以太坊 Etherscan API库(也支持同一家族的BscScan)GitHub
GitHub - maslakoff/php-etherscan-api: A PHP wrapper for the etherscan.io api to fetch data and metadata from the ethereum blockchainGitHub
GitHub - muyinliu/cl-etherscan-client: Etherscan client for Common LispGitHub
GitHub - Machinalabs/remix-etherscan-plugin: Remix Etherscan PluginGitHub
GitHub - dzarezenko/etherscan-api: etherscan.io API PHP wrapperGitHub
hardhat-verify | Ethereum development environment for professionals by Nomic Foundation
Logo
etherscan_api | Dart PackageDart packages
Logo
Foundry Book
npm: truffle-plugin-verifynpm
GitHub - hjubb/soltGitHub
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo