# WebSocket

By default, `Websocket API` listens on `20335` port.

After a local node has been installed, `Websocket` can be started on the client end using the following command:

```bash
ontology --ws
```

The following option can be used to change the port at which the `Websocket API` listens:

```bash
ontology --wsport 1024
```

## Interface definition

Ontology's client side `Websocket` interface has been standardized as follows:

### Response parameters

The structure of the response message after a request is sent is as follows:

|  Field  | Data type | Description                 |
| :-----: | :-------: | --------------------------- |
|  Action |   String  | Response action name        |
|   Desc  |   String  | Response result description |
|  Error  |  Integer  | Error code                  |
|  Result |   Object  | Execution result            |
| Version |   String  | Version number              |
|    Id   |   int64   | Request ID                  |

### Method list

The methods available as a part of the `Websocket API` to query the chain:

| Method                                                                                            | Description                                                                                                              |
| ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| [heartbeat](/developer-tools/api/http-api/websocket.md#heartbeat)                                 | Send the heartbeat information                                                                                           |
| [subscribe](/developer-tools/api/http-api/websocket.md#subscribe)                                 | Subscribe to a particular service                                                                                        |
| [getconnectioncount](/developer-tools/api/http-api/websocket.md#getconnectioncount)               | Fetch the number of nodes in the network                                                                                 |
| [getblocktxsbyheight](/developer-tools/api/http-api/websocket.md#getblocktxsbyheight)             | Fetch all the transaction hashes for a block at a given height                                                           |
| [getblockbyheight](/developer-tools/api/http-api/websocket.md#getblockbyheight)                   | Fetch the block details for a block at a given height                                                                    |
| [getblockbyhash](/developer-tools/api/http-api/websocket.md#getblockbyhash)                       | Fetch the block details using the block hash                                                                             |
| [getblockheight](/developer-tools/api/http-api/websocket.md#getblockheight)                       | Fetch the current block height of the blockchain                                                                         |
| [getblockhash](/developer-tools/api/http-api/websocket.md#getblockhash)                           | Fetch the block hash for a block at a given height                                                                       |
| [gettransaction](/developer-tools/api/http-api/websocket.md#gettransaction)                       | Fetch the transaction details using a given transaction hash                                                             |
| [sendrawtransaction](/developer-tools/api/http-api/websocket.md#sendrawtransaction)               | Send a transaction to the Ontology network, if `preExec=1`, the transaction is pre-executed                              |
| [getstorage](/developer-tools/api/http-api/websocket.md#getstorage)                               | Fetch the corresponding value using the contract address hash or the key                                                 |
| [getbalance](/developer-tools/api/http-api/websocket.md#getbalance)                               | Fetch the balance of the account using an address                                                                        |
| [getbalancev2](#getbalancev2)                                                                     | Fetch the balance of the account using an address, with ONT's decimals being 9, a ONG's decimals being 18                |
| [getcontract](/developer-tools/api/http-api/websocket.md#getcontract)                             | Fetch the contract status using the contract address hash                                                                |
| [getsmartcodeeventbyheight](/developer-tools/api/http-api/websocket.md#getsmartcodeeventbyheight) | Fetch the contract execution result for a particular block using the block height                                        |
| [getsmartcodeeventbyhash](/developer-tools/api/http-api/websocket.md#getsmartcodeeventbyhash)     | Fetch transaction execution result using a given transaction hash                                                        |
| [getblockheightbytxhash](/developer-tools/api/http-api/websocket.md#getblockheightbytxhash)       | Fetch the block height at which a transaction was carried out using a given transaction hash                             |
| [getmerkleproof](/developer-tools/api/http-api/websocket.md#getmerkleproof)                       | Fetch the `merkle` proof for a transaction using a given transaction hash                                                |
| [getsessioncount](/developer-tools/api/http-api/websocket.md#getsessioncount)                     | Fetch current session count on the server side                                                                           |
| [getgasprice](/developer-tools/api/http-api/websocket.md#getgasprice)                             | Fetch the gas price                                                                                                      |
| [getallowance](/developer-tools/api/http-api/websocket.md#getallowance)                           | Return the allowance from the `from` account to the `to` account                                                         |
| getallowancev2                                                                                    | Return the allowance from the `from` account to the `to` account, with ONT's decimals being 9, a ONG's decimals being 18 |
| [getunboundong](/developer-tools/api/http-api/websocket.md#getunboundong)                         | Return the unclaimed `ONG` for a particular account using a given account address                                        |
| [getmempooltxstate](/developer-tools/api/http-api/websocket.md#getmempooltxstate)                 | Fetch the transaction status for a given transaction using the transaction hash                                          |
| [getmempooltxcount](/developer-tools/api/http-api/websocket.md#getmempooltxcount)                 | Fetch the number of transactions stored in the memory                                                                    |
| [getversion](/developer-tools/api/http-api/websocket.md#getversion)                               | Fetch the version information                                                                                            |
| [getnetworkid](/developer-tools/api/http-api/websocket.md#getnetworkid)                           | Fetch the `network id`                                                                                                   |
| [getgrantong](/developer-tools/api/http-api/websocket.md#getgrantong)                             | Fetch the `grant ong`                                                                                                    |
| [getsyncstatus](#getsyncstatus)                                                                   | Fetch the synchronization status of the node                                                                             |

## `heartbeat`

Sends heartbeat information. If heartbeat information is not received by the client the sessin expires in 5 minutes.

#### Sample request

```javascript
{
    "Action": "heartbeat",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "heartbeat",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "SubscribeEvent":false,
        "SubscribeJsonBlock":false,
        "SubscribeRawBlock":false,
        "SubscribeBlockTxHashs":false
    }
    "Version": "1.0.0"
}
```

## `subscribe`

Used to subscribe to a particular service.

#### Sample request

```javascript
{
    "Action": "subscribe",
    "Version": "1.0.0",
    "Id":12345, //optional
    "ConstractsFilter":["constractAddress"], //optional
    "SubscribeEvent":false, //optional
    "SubscribeJsonBlock":true, //optional
    "SubscribeRawBlock":false, //optional
    "SubscribeBlockTxHashs":false //optional
}
```

#### Sample response

```javascript
{
    "Action": "subscribe",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "ConstractsFilter":["contractAddress"],
        "SubscribeEvent":false,
        "SubscribeJsonBlock":true,
        "SubscribeRawBlock":false,
        "SubscribeBlockTxHashs":false
    }
    "Version": "1.0.0"
}
```

## `getconnectioncount`

Fetches the number of connections to the node.

#### Sample request

```javascript
{
    "Action": "getconnectioncount",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getconnectioncount",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": 4,
    "Version": "1.0.0"
}
```

## `getblocktxsbyheight`

Fetch transaction hashes for a block at given height.

#### Sample request

```javascript
{
    "Action": "getblocktxsbyheight",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Height": 100
}
```

#### Sample response

```javascript
{
    "Action": "getblocktxsbyheight",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "Hash": "ea5e5219d2f1591f4feef89885c3f38c83d3a3474a5622cf8cd3de1b93849603",
        "Height": 100,
        "Transactions": [
            "37e017cb9de93aa93ef817e82c555812a0a6d5c3f7d6c521c7808a5a77fc93c7"
        ]
    },
    "Version": "1.0.0"
}
```

## `getblockbyheight`

Fetch block details for block at given height.

#### Sample request

```javascript
{
    "Action": "getblockbyheight",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Raw": "0",
    "Height": 100
}
```

#### Sample response

```javascript
{
    "Action": "getblockbyheight",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "Hash": "ea5e5219d2f1591f4feef89885c3f38c83d3a3474a5622cf8cd3de1b93849603",
        "Header": {
            "Version": 0,
            "PrevBlockHash": "fc3066adb581c5aee8edaa47eecda2b7cc039c8662757f8b1e3c3aed60314353",
            "TransactionsRoot": "37e017cb9de93aa93ef817e82c555812a0a6d5c3f7d6c521c7808a5a77fc93c7",
            "BlockRoot": "7154a6dcb3c23254334bc1f5d8f054c143a39ff28f46fdeb8a9c7488147ccec6",
            "Timestamp": 1522313652,
            "Height": 100,
            "ConsensusData": 18012644264110396442,
            "NextBookkeeper": "TABrSU6ABhj6Rdw5KozV53wvZNSUATgKHW",
            "Bookkeepers": [
                "120203fe4f9ba2022b68595dd163f4a92ac80f918919674de2d6e2a7e04a10c59d0066"
            ],
            "SigData": [
                "01a2369280b0ff75bed85f351d3ef0dd58add118328c1ed2f7d3320df32cb4bd55541f1bb8e11ad093bd24da3de4cd12464800310bfdb49dc62d42d97ca0549762"
            ],
            "Hash": "ea5e5219d2f1591f4feef89885c3f38c83d3a3474a5622cf8cd3de1b93849603"
        },
        "Transactions": [
            {
                "Version": 0,
                "Nonce": 0,
                "TxType": 0,
                "Payload": {
                    "Nonce": 1522313652068190000
                },
                "Attributes": [],
                "Fee": [],
                "NetworkFee": 0,
                "Sigs": [
                    {
                        "PubKeys": [
                            "120203fe4f9ba2022b68595dd163f4a92ac80f918919674de2d6e2a7e04a10c59d0066"
                        ],
                        "M": 1,
                        "SigData": [
                            "017d3641607c894dd85f455c71a94afaea2661acbe372ff8f3f4c7921b0c768756e3a6e9308a4c4c8b1b58e717f1486a2f10f5bc809b803a27c10a2cd579778a54"
                        ]
                    }
                ],
                "Hash": "37e017cb9de93aa93ef817e82c555812a0a6d5c3f7d6c521c7808a5a77fc93c7"
            }
        ]
    },
    "Version": "1.0.0"
}
```

## `getblockbyhash`

Fetch block details for block using given block hash.

{% hint style="info" %}
When the value of the `raw` field in the request is set to **1**, the API returns serialized block information in the form of a hex string. For **0**, it returns raw information in the form of a JSON string. The default value is **0**.
{% endhint %}

#### Sample request

```javascript
{
    "Action": "getblockbyhash",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Raw": "0",
    "Hash": "7c3e38afb62db28c7360af7ef3c1baa66aeec27d7d2f60cd22c13ca85b2fd4f3"
}
```

#### Sample response

```javascript
{
    "Action": "getblockbyhash",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "Hash": "ea5e5219d2f1591f4feef89885c3f38c83d3a3474a5622cf8cd3de1b93849603",
        "Header": {
            "Version": 0,
            "PrevBlockHash": "fc3066adb581c5aee8edaa47eecda2b7cc039c8662757f8b1e3c3aed60314353",
            "TransactionsRoot": "37e017cb9de93aa93ef817e82c555812a0a6d5c3f7d6c521c7808a5a77fc93c7",
            "BlockRoot": "7154a6dcb3c23254334bc1f5d8f054c143a39ff28f46fdeb8a9c7488147ccec6",
            "Timestamp": 1522313652,
            "Height": 100,
            "ConsensusData": 18012644264110396442,
            "NextBookkeeper": "TABrSU6ABhj6Rdw5KozV53wvZNSUATgKHW",
            "Bookkeepers": [
                "120203fe4f9ba2022b68595dd163f4a92ac80f918919674de2d6e2a7e04a10c59d0066"
            ],
            "SigData": [
                "01a2369280b0ff75bed85f351d3ef0dd58add118328c1ed2f7d3320df32cb4bd55541f1bb8e11ad093bd24da3de4cd12464800310bfdb49dc62d42d97ca0549762"
            ],
            "Hash": "ea5e5219d2f1591f4feef89885c3f38c83d3a3474a5622cf8cd3de1b93849603"
        },
        "Transactions": [
            {
                "Version": 0,
                "Nonce": 0,
                "TxType": 0,
                "Payload": {
                    "Nonce": 1522313652068190000
                },
                "Attributes": [],
                "Fee": [],
                "NetworkFee": 0,
                "Sigs": [
                    {
                        "PubKeys": [
                            "120203fe4f9ba2022b68595dd163f4a92ac80f918919674de2d6e2a7e04a10c59d0066"
                        ],
                        "M": 1,
                        "SigData": [
                            "017d3641607c894dd85f455c71a94afaea2661acbe372ff8f3f4c7921b0c768756e3a6e9308a4c4c8b1b58e717f1486a2f10f5bc809b803a27c10a2cd579778a54"
                        ]
                    }
                ],
                "Hash": "37e017cb9de93aa93ef817e82c555812a0a6d5c3f7d6c521c7808a5a77fc93c7"
            }
        ]
    },
    "Version": "1.0.0"
}
```

## `getblockheight`

Fetch the current block height.

#### Sample request

```javascript
{
    "Action": "getblockheight",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getblockheight",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": 327,
    "Version": "1.0.0"
}
```

## `getblockhash`

Fetch block hash for the block at given height.

#### Sample request

```javascript
{
    "Action": "getblockhash",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Height": 100
}
```

#### Sample response

```javascript
{
    "Action": "getblockhash",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": "3b90ddc4d33c4954c3d87736120e94915f963546861987757f358c9376422255",
    "Version": "1.0.0"
}
```

## `gettransaction`

Fetch transaction details for a transaction using given hash.

{% hint style="info" %}
When the value of the `raw` field in the request is set to **1**, the API returns serialized transaction information in the form of a hex string. For **0**, it returns raw information in the form of a JSON string. The default value is **0**.
{% endhint %}

#### Sample request

```javascript
{
    "Action": "gettransaction",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Hash": "3b90ddc4d33c4954c3d87736120e94915f963546861987757f358c9376422255",
    "Raw": "0"
}
```

#### Sample response&#x20;

```javascript
{
    "Action": "gettransaction",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "Version": 0,
        "Nonce": 3743545316,
        "GasPrice": 500,
        "GasLimit": 20000,
        "Payer": "AWM9vmGpAhFyiXxg8r5Cx4H3mS2zrtSkUF",
        "TxType": 209,
        "Payload": {
            "Code": "00c66b149fdd13f41303beb7771ddd0aad6b2d815dcd62916a7cc81400000000000000000000000000000000000000016a7cc8149fdd13f41303beb7771ddd0aad6b2d815dcd62916a7cc8085da07645000000006a7cc86c0c7472616e7366657246726f6d1400000000000000000000000000000000000000020068164f6e746f6c6f67792e4e61746976652e496e766f6b65"
        },
        "Attributes": [],
        "Sigs": [
            {
                "PubKeys": [
                    "03e9ac636107c8d5a22e87bf6ae76a5e7a1394930972db72e0c3bebf54e8210a37"
                ],
                "M": 1,
                "SigData": [
                    "01dfcf5328a6587b2e2b30d6fae73bc18343ce7e5db2c00b3c92415a7274cfb1367d74604121dfd2eb8aef95b1a5e688bdde5633f1bde0fe85881db55ea2fd112d"
                ]
            }
        ],
        "Hash": "5623dbd283a99ff1cd78068cba474a22bed97fceba4a56a9d38ab0fbc178c4ab",
        "Height": 175888
    },
    "Version": "1.0.0"
}
```

## `sendrawtransaction`

Send a raw transaction to be recorded on the chain.

{% hint style="info" %}
The `PreExec` field in the request object is used to specify whether the contract needs to be pre-run. If the contract is to be pre-run, set the value to **1**, else **0.**
{% endhint %}

#### Sample request

```javascript
{
    "Action":"sendrawtransaction",
    "Version":"1.0.0",
    "Id":12345, //optional
    "PreExec": 0,
    "Data":"80000001195876cb34364dc38b730077156c6bc3a7fc570044a66fbfeeea56f71327e8ab0000029b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc500c65eaf440000000f9a23e06f74cf86b8827a9108ec2e0f89ad956c9b7cffdaa674beae0f930ebe6085af9093e5fe56b34a5c220ccdcf6efc336fc50092e14b5e00000030aab52ad93f6ce17ca07fa88fc191828c58cb71014140915467ecd359684b2dc358024ca750609591aa731a0b309c7fb3cab5cd0836ad3992aa0a24da431f43b68883ea5651d548feb6bd3c8e16376e6e426f91f84c58232103322f35c7819267e721335948d385fae5be66e7ba8c748ac15467dcca0693692dac"
}
```

#### Sample response

```javascript
{
    "Action": "sendrawtransaction",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": "22471ab3f4b4307a99f00c9a717dbf8b26f5bf63bf47f9c560477da8181de777",
    "Version": "1.0.0"
}
```

{% hint style="info" %}
The result obtained is the transaction hash of the raw transaction.
{% endhint %}

## `getstorage`

Fetches the value stored in a contract using the contract hash and the storage key.

The contract hash passed to the method can be generated in the following manner:

```go
addr := types.AddressFromVmCode([]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04})
fmt.Println(addr.ToHexString())
```

#### Sample request

```javascript
{
    "Action": "getstorage",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Hash": "0144587c1094f6929ed7362d6328cffff4fb4da2",
    "Key" : "4587c1094f6"
}
```

#### Sample response

```javascript
{
    "Action": "getstorage",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": "58d15e17628000",
    "Version": "1.0.0"
}
```

{% hint style="info" %}
The `result` in the response object and the `key` in the request are hex strings
{% endhint %}

## `getbalance`

Fetches the balance of a Base58 address.

#### Sample request

```javascript
{
    "Action": "getbalance",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Addr": "TA63xZXqdPLtDeznWQ6Ns4UsbqprLrrLJk"
}
```

#### Sample response

```javascript
{
    "Action": "getbalance",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "ont": "2500",
        "ong": "0"
    },
    "Version": "1.0.0"
}
```

## `getbalancev2`

Fetch the balance of the account using an address, with ONT's decimals being 9, a ONG's decimals being 18

#### Sample request

```javascript
{
    "Action": "getbalancev2",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Addr": "TA63xZXqdPLtDeznWQ6Ns4UsbqprLrrLJk"6
}^
```

#### Sample response

```javascript
{
    "Action": "getbalancev2",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "ont": "999999996000000000",
        "ong": "999999998000000000000000000",
        "height":"1455"
    },
    "Version": "1.0.0"
}
```

## `getcontract`

Fetches the contract details for the contract using given contract hash.

**Sample request**

```java
{
    "Action": "getcontract",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Hash": "0100000000000000000000000000000000000000"
}
```

#### Sample response

```javascript
{
    "Action": "getcontract",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": {
        "Code": "0000000000000000000000000000000000000001",
        "NeedStorage": true,
        "Name": "ONT",
        "CodeVersion": "1.0",
        "Author": "Ontology Team",
        "Email": "contact@ont.io",
        "Description": "Ontology Network ONT Token"
    }
}
```

## `getsmartcodeeventbyheight`

Fetches event details for a smart contract event that occurred at given block height and fetches the transaction list.

**Sample request**

```javascript
{
    "Action": "getsmartcodeeventbyheight",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Height": 100
}
```

**Sample response**

```javascript
{
    "Action": "getsmartcodeeventbyheight",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": [
               {
                    "TxHash": "7e8c19fdd4f9ba67f95659833e336eac37116f74ea8bf7be4541ada05b13503e",
                    "State": 1,
                    "GasConsumed": 0,
                    "Notify": [
                        {
                            "ContractAddress": "0200000000000000000000000000000000000000",
                            "States": [
                                "transfer",
                                "AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM",
                                "AFmseVrdL9f9oyCzZefL9tG6UbvhUMqNMV",
                                1000000000000000000
                            ]
                        }
                    ]
                },
                {
                    "TxHash": "fc82cd363271729367098fbabcfd0c02cf6ded1e535700d04658b596d53cf07d",
                    "State": 1,
                    "GasConsumed": 0,
                    "Notify": [
                        {
                            "ContractAddress": "0200000000000000000000000000000000000000",
                            "States": [
                                "transfer",
                                "AFmseVrdL9f9oyCzZefL9tG6UbvhPbdYzM",
                                "AFmseVrdL9f9oyCzZefL9tG6UbvhUMqNMV",
                                1000000000000000000
                            ]
                        }
                    ]
                }
    ],
    "Version": "1.0.0"
}
```

{% hint style="info" %}
The `result` in the response object is a list that contains transaction hashes
{% endhint %}

## `getsmartcodeeventbyhash`

Fetch contract event details using given transaction hash.

**Sample request**

```javascript
{
    "Action": "getsmartcodeeventbyhash",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Hash": "20046da68ef6a91f6959caa798a5ac7660cc80cf4098921bc63604d93208a8ac"
}
```

#### Sample response

```javascript
{
    "Action": "getsmartcodeeventbyhash",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": {
             "TxHash": "20046da68ef6a91f6959caa798a5ac7660cc80cf4098921bc63604d93208a8ac",
             "State": 1,
             "GasConsumed": 0,
             "Notify": [
                    {
                      "ContractAddress": "ff00000000000000000000000000000000000001",
                      "States": [
                            "transfer",
                            "A9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb",
                            "AA4WVfUB1ipHL8s3PRSYgeV1HhAU3KcKTq",
                            1000000000
                         ]
                     }
              ]
    }
}
```

## `getblockheightbytxhash`

Fetch block height using given transaction hash.

**Sample request**

```javascript
{
    "Action": "getblockheightbytxhash",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Hash": "3e23cf222a47739d4141255da617cd42925a12638ac19cadcc85501f907972c8"
}
```

#### Sample response

```javascript
{
    "Action": "getblockheightbytxhash",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": 100,
    "Version": "1.0.0"
}
```

## `getmerkleproof`

Fetch merkle proof for given block hash.

#### Sample request

```javascript
{
    "Action": "getmerkleproof",
    "Version": "1.0.0",
    "Id":12345, //optional
    "Hash": "0087217323d87284d21c3539f216dd030bf9da480372456d1fa02eec74c3226d"
}
```

#### Sample request

```javascript
{
    "Action": "getmerkleproof",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
        "Type": "MerkleProof",
        "TransactionsRoot": "fe3a4ee8a44e3e588de55de1b8fe08f08b6184d9c062cf7316fb9481eb57b9e6",
        "BlockHeight": 600,
        "CurBlockRoot": "57476eba688531dec8555cb712835c7eda48a478431a2cfd3372aeee5298e711",
        "CurBlockHeight": 6478,
        "TargetHashes": [
            "270cd10ea235cc18cba83a070fdf18ae576983b6b9a7bb9a3fec540b3786c85c",
            "24e4697f9dd6cb944d0736bd3e11b64f64edec94fb599e25d4e5461d54174f0e",
            "9a47ab04acf6bba7bb97b83eddeb0db20e11c0627b8079b40b60031d5bd63154",
            "d1b513810b9b983014c9f8b7084b8ea8744eca8e7c942586c2b7c63f910363ca",
            "54e88360efedcf5dbbc486ea0267724a98b027b3ba780617e32569bb3fbe56e8",
            "e0c5ebca3ca191617d42e11db64778b047cd9a520538efd95d5a688cbba0c8d5",
            "52bfb23b6456cac4e5e7143287e1518dd923c5b5d32d0bfe8d825dc8195ea62b",
            "86d6be166ae1a53c052adc40b9b66c4f95f5e3b6ecc88afaea3750e1cbe98276",
            "5588530cfc4d92e979717f8ae399ac4553a76e7537a981e8eaf078d60f1d39a6",
            "3f15bec38bcf054e4f32efe475a09d3e80c2e90d3345a1428aaa262606f13267",
            "f238ed8ceb1c10a08f7eaa390cdde44ed7d160abbde4702028407b55671e7aa8",
            "b4813f1f27c0457726b58f8bf20bee70c100a4d5c5f1805e53dcd20f38479615",
            "83893713ea8ace9214b28af854b75671c8aaa62bb74b0d43ad6fb83e3dee42db"
        ]
    },
    "Version": "1.0.0"
}
```

## `getsessioncount`

Fetch session count.

#### Sample request

```javascript
{
    "Action": "getsessioncount",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

**Sample response**

```javascript
{
    "Action": "getsessioncount",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": 10,
    "Version": "1.0.0"
}
```

## `getgasprice`

Fetch gas price.

#### Sample request

```javascript
{
    "Action": "getgasprice",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

**Sample response**

```javascript
{
    "Action": "getgasprice",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": {
         "gasprice": 0,
         "height": 1
     },
    "Version": "1.0.0"
}
```

## `getallowance`

Fetch the amount of allowance of a certain asset granted by one address to another address.

#### Sample request

```javascript
{
    "Action": "getallowance",
    "Id":12345, //optional
    "Asset": "ont",
    "From" :  "A9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb",
    "To"   :  "AA4WVfUB1ipHL8s3PRSYgeV1HhAU3KcKTq",
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getallowance",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": "10",
    "Version": "1.0.0"
}
```

## `getallowancev2`

Return the allowance from the from account to the to account, with ONT's decimals being 9, a ONG's decimals being 18.

#### Sample request

```javascript
{
    "Action": "getallowancev2",
    "Id":12345, //optional
    "Asset": "ont",
    "From" :  "A9yD14Nj9j7xAB4dbGeiX9h8unkKHxuWwb",
    "To"   :  "AA4WVfUB1ipHL8s3PRSYgeV1HhAU3KcKTq",
    "Version": "1.0.0"
}
```

**Sample response**

```javascript
{
    "Action": "getallowancev2",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": "10000000000",
    "Version": "1.0.0"
}
```

## `getunboundong`

Fetch amount of unbound ONG for an address.

#### Sample request

```javascript
{
    "Action": "getunboundong",
    "Id":12345, //optional
    "Addr": "ANH5bHrrt111XwNEnuPZj6u95Dd6u7G4D6",
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getunboundong",
    "Desc": "SUCCESS",
    "Error": 0,
    "Result": "204957950400000",
    "Version": "1.0.0"
}
```

## `getmempooltxstate`

Fetches state of transactions in the memory pool.

#### Sample request

```javascript
{
    "Action": "getmempooltxstate",
    "Id":12345, //optional
    "Hash": "0b437771a42d18d292741c5d4f1300a135fa6e65b0594e39dc299e7f8279221a",
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getmempooltxstate",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": {
              	"State": [{
              		"Type": 1,
              		"Height": 342,
              		"ErrCode": 0
              	}, {
              		"Type": 0,
              		"Height": 0,
              		"ErrCode": 0
              	}]
    }
}
```

## `getmempooltxcount`

Fetch the transaction count in the memory pool.

#### Sample request

```javascript
{
    "Action": "getmempooltxcount",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getmempooltxcount",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": [100,50]
}
```

## `getversion`

Fetch version details for a node.

#### Sample request

```javascript
{
    "Action": "getversion",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getversion",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": "0.9"
}
```

## `getnetworkid`

Fetch the network ID.

#### Sample request

```javascript
{
    "Action": "getnetworkid",
    "Id":12345, //optional
    "Version": "1.0.0"
}
```

**Sample response**

```javascript
{
    "Action": "getnetworkid",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": 1
}
```

## `getgrantong`

Fetch the granted ONG for an address.

#### Sample request

```javascript
{
    "Action": "getgrantong",
    "Id":12345, //optional
    "Addr":"AKDFapcoUhewN9Kaj6XhHusurfHzUiZqUA",
    "Version": "1.0.0"
}
```

#### Sample response

```javascript
{
    "Action": "getgrantong",
    "Desc": "SUCCESS",
    "Error": 0,
    "Version": "1.0.0",
    "Result": 4995625
}
```

## `getsyncstatus`

Fetch the synchronization status of the node.

#### Sample request

```javascript
{
 	"jsonrpc": "2.0", 
 	"method": "getsyncstatus", 
 	"params": [], 
 	"id": 0
 }
```

#### Sample response

```javascript
{
    "desc": "SUCCESS",
    "error": 0,
    "id": 0,
    "jsonrpc": "2.0",
    "result": {
        "CurrentBlockHeight": 16224663,
        "ConnectCount": 20,
        "MaxPeerBlockHeight": 16224663
    }
}
```

## Error Codes

The error codes in the response message signify the following:

| Field | Data type | Description                    |
| :---: | :-------: | ------------------------------ |
|   0   |   int64   | Success                        |
| 41001 |   int64   | Session timeout or invalid     |
| 41002 |   int64   | Service limit reached          |
| 41003 |   int64   | Invalid data format            |
| 41004 |   int64   | Invalid version number         |
| 42001 |   int64   | Invalid function               |
| 42002 |   int64   | Invalid parameter              |
| 43001 |   int64   | Invalid transaction            |
| 43002 |   int64   | Invalid resource               |
| 43003 |   int64   | Invalid block                  |
| 44001 |   int64   | Unknown transaction            |
| 44002 |   int64   | Unknown resource               |
| 44003 |   int64   | Unknown block                  |
| 45001 |   int64   | Internal error                 |
| 47001 |   int64   | Smart contract execution error |


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.ont.io/developer-tools/api/http-api/websocket.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
