| description | ?module=contract |
|---|
{% hint style="info" %} Page is under construction. For a full description of RPC endpoints, visit https://blockscout.com/xdai/mainnet/api-docs {% endhint %}
listcontracts
List sorted in ascending order based on the time a contact was first indexed by the explorer. With filters `not_decompiled`(`4`) or `not_verified(4)` the results will not be sorted for performance reasons.
Example:
https://instance_base_url/api
?module=contract
&action=listcontracts
{% tabs %} {% tab title="Request Params" %}
| Parameter | Description |
|---|---|
| page | optional nonnegative integer representing the page number used for pagination. 'offset' must also be provided. |
| offset | optional nonnegative integer representing the max number of records to return when paginating. 'page' must also be provided. |
| filter | optional string verified|decompiled|unverified|not_decompiled|empty, or 1|2|3|4|5 respectively. Returns contracts with the requested status. |
| not_decompiled_with_version | optional string ensures none of the returned contracts were decompiled with the provided version. Ignored unless filtering for decompiled contracts. |
| verified_at_start_timestamp | optional unix timestamp Represents the starting timestamp for verified contracts. Only used with verified filter. |
| verified_at_end_timestamp | optional unix timestamp Represents the ending timestamp for verified contracts. Only used with verified filter. |
| {% endtab %} |
{% tab title="Example Result" %}
{
"message": "OK",
"result": [
{
"ABI": "[{\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event\"\n}, {\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event2\"\n}, {\n\"type\":\"function\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\"}],\n\"name\":\"foo\",\n\"outputs\": []\n}]\n",
"CompilerVersion": "v0.2.1-2016-01-30-91a6b35",
"ContractName": "Test",
"OptimizationUsed": "1",
"SourceCode": "pragma solidity >0.4.24;\n\ncontract Test {\nconstructor() public { b = hex\"12345678901234567890123456789012\"; }\nevent Event(uint indexed a, bytes32 b);\nevent Event2(uint indexed a, bytes32 b);\nfunction foo(uint a) public { emit Event(a, b); }\nbytes32 b;\n}\n"
}
],
"status": "1"
}{% endtab %} {% endtabs %}
getabi
Also available through a GraphQL addresses query.
Example:
https://instance_base_url/api
?module=contract
&action=getabi
&address={addressHash}
{% tabs %} {% tab title="Request Params" %}
| Parameter | Description |
|---|---|
| address | string containing the address hash. |
| {% endtab %} |
{% tab title="Example Result" %}
{
"message": "OK",
"result": "[{\"constant\":false,\"inputs\":[{\"name\":\"voucher_token\",\"type\":\"bytes32\"}],\"name\":\"burn\",\"outputs\":[{\"name\":\"success\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"constant\":true,\"inputs\":[{\"name\":\"voucher_token\",\"type\":\"bytes32\"}],\"name\":\"is_expired\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"view\",\"type\":\"function\"},{\"constant\":false,\"inputs\":[{\"name\":\"voucher_token\",\"type\":\"bytes32\"}],\"name\":\"is_burnt\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"voucher_token\",\"type\":\"bytes32\"},{\"name\":\"_lifetime\",\"type\":\"uint256\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"}]",
"status": "1"
}
{% endtab %} {% endtabs %}
getsourcecode
Also available through a GraphQL addresses query.
Example:
https://instance_base_url/api
?module=contract
&action=getsourcecode
&address={addressHash}
{% tabs %} {% tab title="Request Params" %}
| Parameter | Description |
|---|---|
| address | string containing the address hash. |
| {% endtab %} |
{% tab title="Example Result" %}
{
"message": "OK",
"result": {
"ABI": "[{\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event\"\n}, {\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event2\"\n}, {\n\"type\":\"function\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\"}],\n\"name\":\"foo\",\n\"outputs\": []\n}]\n",
"CompilerVersion": "v0.2.1-2016-01-30-91a6b35",
"ContractName": "Test",
"FileName": "{sourcify path or empty}",
"ImplementationAddress": "0x000000000000000000000000000000000000000e",
"IsProxy": "true",
"OptimizationUsed": "1",
"SourceCode": "pragma solidity >0.4.24;\n\ncontract Test {\nconstructor() public { b = hex\"12345678901234567890123456789012\"; }\nevent Event(uint indexed a, bytes32 b);\nevent Event2(uint indexed a, bytes32 b);\nfunction foo(uint a) public { emit Event(a, b); }\nbytes32 b;\n}\n"
},
"status": "1"
}
{% endtab %} {% endtabs %}
verify
Example:
https://instance_base_url/api
?module=contract
&action=verify
&addressHash={addressHash}
&name={name}
&compilerVersion={compilerVersion}
&optimization={false}
&contractSourceCode={contractSourceCode}
Curl Post Example
{% code overflow="wrap" %}
curl -d '{"addressHash":"0xc63BB6555C90846afACaC08A0F0Aa5caFCB382a1","compilerVersion":"v0.5.4+commit.9549d8ff", "contractSourceCode":"pragma solidity ^0.5.4; contract Test { }","name":"Test","optimization":false}' -H "Content-Type: application/json" -X POST "https://blockscout.com/poa/sokol/api?module=contract&action=verify"
{% endcode %}
{% hint style="info" %}
On successful submission you will receive a guid as a receipt. Use this with checkverifystatusto view verification status.
{% endhint %}
{% tabs %} {% tab title="Params" %}
| Parameter | Description |
|---|---|
| addressHash | string containing the address hash of the contract. |
| name | string containing the name of the contract. |
| compilerVersion | string containing the compiler version for the contract. |
| optimization | enum whether or not compiler optimizations were enabled 0=false, 1=true |
| contractSourceCode | string containing the source code of the contract. |
| constructorArguments | optional string constructor argument data provided. |
| autodetectConstructorArguments | optional boolean whether or not automatically detect constructor argument. |
| evmVersion | optional EVM version for the contract. |
| optimizationRuns | optional number of optimization runs used during compilation |
| library1Name | optional string name of the first library used. |
| library1Address | optional string address of the first library used. |
| library2Name | optional string name of the second library used. |
| library2Address | optional string address of the second library used. |
| library3Name | optional string name of the third library used. |
| library3Address | optional string address of the third library used. |
| library4Name | optional string name of the fourth library used. |
| library4Address | optional string address of the fourth library used. |
| library5Name | optional string name of the fifth library used. |
| library5Address | optional string address of the fifth library used. |
| {% endtab %} |
{% tab title="Example Result" %} {% code overflow="wrap" %}
{
"message": "OK",
"result": {
"ABI": "[{\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event\"\n}, {\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event2\"\n}, {\n\"type\":\"function\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\"}],\n\"name\":\"foo\",\n\"outputs\": []\n}]\n",
"CompilerVersion": "v0.2.1-2016-01-30-91a6b35",
"ContractName": "Test",
"ImplementationAddress": "0x000000000000000000000000000000000000000e",
"IsProxy": "true",
"OptimizationUsed": "1",
"SourceCode": "pragma solidity >0.4.24;\n\ncontract Test {\nconstructor() public { b = hex\"12345678901234567890123456789012\"; }\nevent Event(uint indexed a, bytes32 b);\nevent Event2(uint indexed a, bytes32 b);\nfunction foo(uint a) public { emit Event(a, b); }\nbytes32 b;\n}\n"
},
"status": "1"
}
{% endcode %} {% endtab %} {% endtabs %}
Verify a contract through Sourcify
verify_via_sourcify
- if a smart contract is already verified on Sourcify, it will automatically fetch the data from the repo
- otherwise you need to upload source files and JSON metadata file(s).
Example:
https://instance_base_url/api
?module=contract
&action=verify_via_sourcify
&addressHash={addressHash}
--6e1e4c11657c62dc1e4349d024de9e28
Content-Disposition: form-data; name="addressHash"
0xb77b7443e0F32F1FEBf0BE0fBd7124D135d0a525
--6e1e4c11657c62dc1e4349d024de9e28
Content-Disposition: form-data; name="files[0]"; filename="contract.sol"
Content-Type: application/json
...Source code...
--6e1e4c11657c62dc1e4349d024de9e28
Content-Disposition: form-data; name="files[1]"; filename="metadata.json"
Content-Type: application/json
...JSON metadata...
--6e1e4c11657c62dc1e4349d024de9e28--
{% tabs %} {% tab title="Params" %}
| Parameter | Description |
|---|---|
| addressHash | string containing the address hash. |
| files | array with sources and metadata files |
| {% endtab %} |
{% tab title="Example " %}
{
"message": "OK",
"result": {
"ABI": "[{\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event\"\n}, {\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event2\"\n}, {\n\"type\":\"function\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\"}],\n\"name\":\"foo\",\n\"outputs\": []\n}]\n",
"CompilerVersion": "v0.2.1-2016-01-30-91a6b35",
"ContractName": "Test",
"ImplementationAddress": "0x000000000000000000000000000000000000000e",
"IsProxy": "true",
"OptimizationUsed": "1",
"SourceCode": "pragma solidity >0.4.24;\n\ncontract Test {\nconstructor() public { b = hex\"12345678901234567890123456789012\"; }\nevent Event(uint indexed a, bytes32 b);\nevent Event2(uint indexed a, bytes32 b);\nfunction foo(uint a) public { emit Event(a, b); }\nbytes32 b;\n}\n"
},
"status": "1"
}
{% endtab %} {% endtabs %}
verify_vyper_contract
Example
https://instance_base_url/api
?module=contract
&action=verify_vyper_contract
&addressHash={addressHash}
&name={name}
&compilerVersion={compilerVersion}
&contractSourceCode={contractSourceCode}
curl POST example
{% code overflow="wrap" %}
curl --location --request POST 'http://localhost:4000/api?module=contract&action=verify_vyper_contract' --form 'contractSourceCode="SOURCE_CODE"' --form 'name="Vyper_contract"' --form 'addressHash="0xE60B1B8bD493569a3E945be50A6c89d29a560Fa1"' --form 'compilerVersion="v0.2.12"'
{% endcode %}
{% tabs %} {% tab title="First Tab" %}
| Parameter | Description |
|---|---|
| addressHash | string containing the address hash of the contract. |
| name | string containing the name of the contract. |
| compilerVersion | string containing the compiler version for the contract. |
| contractSourceCode | string containing the source code of the contract. |
| constructorArguments | string constructor argument data provided. |
| {% endtab %} |
{% tab title="Example" %}
{
"message": "OK",
"result": {
"ABI": "[{\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event\"\n}, {\n\"type\":\"event\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\",\"indexed\":true},{\"name\":\"b\",\"type\":\"bytes32\",\"indexed\":false}],\n\"name\":\"Event2\"\n}, {\n\"type\":\"function\",\n\"inputs\": [{\"name\":\"a\",\"type\":\"uint256\"}],\n\"name\":\"foo\",\n\"outputs\": []\n}]\n",
"CompilerVersion": "v0.2.1-2016-01-30-91a6b35",
"ContractName": "Test",
"ImplementationAddress": "0x000000000000000000000000000000000000000e",
"IsProxy": "true",
"OptimizationUsed": "1",
"SourceCode": "pragma solidity >0.4.24;\n\ncontract Test {\nconstructor() public { b = hex\"12345678901234567890123456789012\"; }\nevent Event(uint indexed a, bytes32 b);\nevent Event2(uint indexed a, bytes32 b);\nfunction foo(uint a) public { emit Event(a, b); }\nbytes32 b;\n}\n"
},
"status": "1"
}
{% endtab %} {% endtabs %}
verifysourcecode
Example
https://instance_base_url/api
?module=contract
&action=verifysourcecode
&codeformat={solidity-standard-json-input}
&contractaddress={contractaddress}
&contractname={contractname}
&compilerversion={compilerversion}
&sourceCode={sourceCode}
{% tabs %} {% tab title="Params" %}
| Parameter | Description |
|---|---|
| codeformat | Format of sourceCode (currently only supports solidity-standard-json-input) |
| contractaddress | string containing the address hash of the contract. |
| contractname | string name of the contract. It an be an empty string(""), just the contract name("ContractName"), or a filename and contract name("contracts/contract_1.sol:ContractName") |
| compilerversion | string containing the compiler version for the contract. |
| sourceCode | string standard input json |
| constructorArguments | optional string constructor argument data provided. |
| autodetectConstructorArguments | optional boolean whether or not automatically detect constructor argument. |
| {% endtab %} |
{% tab title="Example Result" %}
{
"message": "OK",
"result": "b080b96bd06ad1c9341c2afb7e3730311388544961acde94",
"status": "1"
}
{% endtab %} {% endtabs %}
checkverifystatus
{% hint style="info" %}
guid is received as a receipt from the verifysourcecode method.
{% endhint %}
Example
https://instance_base_url/api
?module=contract
&action=checkverifystatus
&guid={identifierString}
{% tabs %} {% tab title="Params" %}
| Parameter | Description |
|---|---|
| guid | stringused for identifying verification attempt |
| {% endtab %} |
{% tab title="Example Result" %}
{
"message": "OK",
"result": "Pending in queue",
"status": "1"
}
{% hint style="info" %}
Return Options: Pending in queue | Pass - Verified | Fail - Unable to verify | Unknown UID
{% endhint %}
{% endtab %}
{% endtabs %}