# Client

Please see [here](https://scdo-project.gitbook.io/scdo-wiki/developer/gettingstarted#create-a-client-executable) for downloading or creating a SCDO client.

## Command Line Options

### Full Node Client

```
client -h
NAME:
   client - interact with a full node

USAGE:
   client [global options] command [command options] [arguments...]

COMMANDS:
     call              call contract
     deckeyfile        Decrypt key file
     domain            system domain name commands(in development)
     dumpheap          dump heap for profiling, return the file path
     getbalance        get balance info
     getblock          get block by height or hash
     getblockheight    get block height
     getblocktx        get transaction by block height or block hash
     getblocktxbyhash  get the transactions by block hash
     getblocktxbyheight get the transactions by block height
     getblocktxcount   get block transaction count by block height or block hash
     getchangedaccounts get accounts that are modified
     getdebtbyhash     get debt by debt hash
     getdebts          get pending debts
     getinfo           get node info
     getlogs           get logs
     getnonce          get account nonce
     getpendingtxs     get pending transactions
     getreceipt        get receipt by transaction hash
     getscdoforkheight get Scdo fork height
     getshardnum       get account shard number
     gettxbyhash       get transaction by transaction hash
     gettxfromaccount  get transaction from one account at specific height or blockhash
     gettxinblock      get transaction by block height or block hash with index of the transaction in the block
     gettxpoolcontent  get transaction pool contents
     gettxpoolcount    get transaction pool transaction count
     gettxtoaccount    get transaction to one account at specific height or blockhash
     htlc              Hash time lock contract commands(in development)
     key               generate key with or without shard number
     miner             miner commands
     p2p               p2p commands
     payload           generate the payload according to the abi file and method name and args
     savekey           save private key to a keystore file
     sendtx            send transaction to node
     sign              generate a signed transaction and print it out
     subchain          system sub chain commands(in development)
     help, h           Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h  show help
```

### Light Node Client

```
light -h
NAME:
   light - interact with a light node process

USAGE:
   light [global options] command [command options] [arguments...]

COMMANDS:
     deckeyfile        Decrypt key file
     getaccounttx      get transaction of one account at specific height of blockhash
     getbalance        get balance info
     getblock          get block by height or hash
     getblockheight    get block height
     getblocktx        get transaction by block height or block hash
     getblocktxbyhash  get transactions at the specific block hash
     getblocktxbyheight get transactions at the specific block height
     getblocktxcount   get block transaction count by block height or block hash
     getchangedaccounts get accounts that are modified
     getgasprice       get transaction gas price by transaction hash
     getnonce          get account nonce
     getpendingtxs     get pending transactions
     getreceipt        get receipt by transaction hash
     getscdoforkheight get Scdo fork height
     getshardnum       get account shard number
     gettxbyhash       get transaction by transaction hash
     gettxfromaccount  get transaction from one account at specific height or blockhash
     gettxinblock      get transaction by block height or block hash with index of the transaction in the block
     gettxpoolcontent  get transaction pool contents
     gettxpoolcount    get transaction count in the transaction pool
     gettxtoaccount    get transaction to one account at specific height or blockhash
     key               generate key with or without shard number
     p2p               p2p commands
     payload           generate the payload according to the abi file and method name and args
     savekey           save private key to a keystore file
     sendtx            send transaction to node
     sign              generate a signed transaction and print it out
     help, h           Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h  show help
```

## Client Command List

| Command                                   | Full | Light |
| ----------------------------------------- | :--: | :---: |
| [Call](#call)                             |   ✓  |       |
| [Deckeyfile](#deckeyfile)                 |   ✓  |   ✓   |
| [DumpHeap](#dumpheap)                     |   ✓  |       |
| [GetBalance](#getbalance)                 |   ✓  |   ✓   |
| [GetBlock](#getblock)                     |   ✓  |   ✓   |
| [GetBlockHeight](#getblockheight)         |   ✓  |   ✓   |
| [GetBlockTx](#getblocktx)                 |   ✓  |   ✓   |
| [GetBlockTxByHash](#getblocktxbyhash)     |   ✓  |   ✓   |
| [GetBlockTxByHeight](#getblocktxbyheight) |   ✓  |   ✓   |
| [GetBlockTxCount](#getblocktxcount)       |   ✓  |   ✓   |
| [GetChangedAccounts](#getchangedaccounts) |   ✓  |   ✓   |
| [GetDebtByHash](#getdebtbyhash)           |   ✓  |       |
| [GetDebts](#getdebts)                     |   ✓  |       |
| [GetInfo](#getinfo)                       |   ✓  |       |
| [GetLogs](#getlogs)                       |   ✓  |       |
| [GetNonce](#getnonce)                     |   ✓  |   ✓   |
| [GetPendingTxs](#getpendingtxs)           |   ✓  |   ✓   |
| [GetReceipt](#getreceipt)                 |   ✓  |   ✓   |
| [GetScdoForkHeight](#getscdoforkheight)   |   ✓  |   ✓   |
| [GetShardNum](#getshardnum)               |   ✓  |   ✓   |
| [GetTxByHash](#gettxbyhash)               |   ✓  |   ✓   |
| [GetTxFromAccount](#gettxfromaccount)     |   ✓  |   ✓   |
| [GetTxInBlock](#gettxinblock)             |   ✓  |   ✓   |
| [GetTxpoolContent](#gettxpoolcontent)     |   ✓  |   ✓   |
| [GetTxpoolCount](#gettxpoolcount)         |   ✓  |   ✓   |
| [GetTxToAccount](#gettxtoaccount)         |   ✓  |   ✓   |
| [Key](#key)                               |   ✓  |   ✓   |
| [miner](#miner)                           |   ✓  |       |
| [p2p](#p2p)                               |   ✓  |   ✓   |
| [payload](#payload)                       |   ✓  |   ✓   |
| [Savekey](#savekey)                       |   ✓  |   ✓   |
| [Sendtx](#sendtx)                         |   ✓  |   ✓   |
| [Sign](#sign)                             |   ✓  |   ✓   |

### Call

This method is used to call the functions of a contract. The functions to be called should not alter the state of the contract. If the functions can alter the state of the contract, you should use `sendtx` instead of `call`. Please see [how to develop and deploy contracts on SCDO](https://scdo-project.gitbook.io/scdo-wiki/en/contractflow#develop-and-deploy-contract-on-SCDO) for more details.

| Type    | Template                                                                         |
| ------- | -------------------------------------------------------------------------------- |
| Console | `client call --address <string> --payload <string> --to <string> --height <int>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `height`:`int64` - block height (default: -1, indicating the most recent block height); if the height is 10000, then the functions of the contract are called based on the contract state at height 10000
* `payload`:`string` - bytecodes containing information of which function to call and function inputs
* `to`:`string` - contract address

#### Returns

* `contract`:`string` - contract address
* `failed`:`bool` - contract executes successfully or not
* `poststate`:`string` - state trie root hash after transaction execution
* `result`:`string` - transaction result
* `totalFee`:`int64` - transaction fee
* `txhash`:`string` - transaction hash
* `usedGas`:`int64` - transaction gas

#### Example

When using the example below, the contract must be deployed first. The solidity code file:

```
pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData=23;

    function set(uint x) {
        storedData=x;
    }

    function get() constant returns(uint) {
        return storedData;
    }
}
```

As you can see, the example is testing the get function.

```javascript
// Request
client call --payload 0x6d4ce63c --to 0x9df8ed11ea024183bd584480e80952c9b04e0122 --height -1

// Result
succeeded in calling a contract
{
        "contract": "0x",
        "failed": false,
        "poststate": "0x7c8b22f29b0f9e4db9d61264d3ea6bb8fdff412fc667d411a5e9e98205d36197",
        "result": "0x0000000000000000000000000000000000000000000000000000000000000005",
        "totalFee": 101,
        "txhash": "0x16330ce64136bd756491d4685b4fadd1d81fc36e88eff7987d1784bec466da77",
        "usedGas": 424
}
```

### Deckeyfile

This method is used to decode the keystore file to account address and private key. You will be asked to type in the password of the keystore file.

| Type    | Template                            |
| ------- | ----------------------------------- |
| Console | `client deckeyfile --file <string>` |

#### Parameters

* `file`:`string` keystore file

#### Returns

* `Account`:`string` - account address
* `Private key`:`string` - private key

#### Example

```javascript
// Request
client deckeyfile --file .keystore-shard-1-4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21

// Result
Please input your key file password: 
Account:  4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21
Private key: 0xf65e40c6809643b25ce4df33153da2f3338876f181f83d2281c6ac4a987b1479
```

### GetBalance

This method returns the balance of the given account.

| Type    | Template                                                  |
| ------- | --------------------------------------------------------- |
| Console | `client getbalance --account <string> --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `account`:`string` - account address
* `hash`:`string` - hash value in hex
* `height`:`int64` - block height or current block height for negative value (default: -1)

#### Returns

* `Account`:`string` - account
* `Balance`:`big.Int` - account balance

#### Example

```javascript
// Request
client getbalance --account 4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21

// Result
{
    "Account": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21",
    "Balance": 261899990000
}
```

### GetBlock

This method is used to obtain the block content of given block height or block hash.

| Type    | Template                                                                                       |
| ------- | ---------------------------------------------------------------------------------------------- |
| Console | `client getblock --height -1 --hash <string>(--height <int>) --fulltx=true --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - block hash
* `height`:`string` - block height
* `fulltx`:`bool` - whether to include detailed transaction information; can use `-f` instead of `--fulltx`

#### Returns

* `debts`:`array` - debts in block
* `Hash`:`string` - debts hash
* `Data`:`json` - debts data
* `TxHash`:`string` - txhash in debt
* `Shard`:`int` - shard number of SCDO node where debts on
* `Account`:`array` - debt account
* `Amount`:`int64` - debt amount
* `Fee`:`int64` - debt fee
* `Code`:`string` - debt code
* `hash`:`string` - block hash
* `header`:`json` - block header
* `CreateTimestamp`:`uint64` - create timestamp
* `Creator`:`string` - creator address
* `DebtHash`:`string` - debts hash
* `Difficulty`:`big.Int` - block difficulty
* `ExtraData`:`string` - extra data
* `Height`:`unit64` - block height
* `Nonce`:`unit64` - block nonce
* `PreviousBlockHash`:`string` - previous block hash
* `ReceiptHash`:`string` - Receipts hash
* `stateHash`:`string` - state tree hash
* `TxDebtHash`:`string` - debts hash
* `TxHash`:`string` - tx hash
* `totalDifficulty`:`big.Int` - total difficulty
* `transactions`:`array` - transaction array
* `accountNonce`:`unit64` - account nonce
* `amount`:`Int` - transaction amount
* `gasLimit`:`Int` - transaction gas limit
* `gasPrice`:`Int` - transaction gas price
* `from`:`string` - transaction provider
* `hash`:`string` - transaction hash
* `payload`:`array` - transaction payload
* `timestamp`:`big.Int` - timestamp
* `to`:`string` - transaction receiver
* `txDebts`:`array` - transaction debts
* `Data`:`json` - txDebts data
* `Account`:`string` - transaction account
* `Amount`:`int` - transaction amount
* `Code`:`string` - transaction code
* `Fee`:`int` - transaction fee
* `Shard`:`int` - transaction shard number
* `TxHash`:`string` - transaction hash
* `Hash`:`string` - txDebts hash

#### Example

```javascript
// Request
client getblock --height 10368 --fulltx=true

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "debts": [
            {
                "Hash": "0x0da1ed893e7f0ca2558c193b3b82ed20575a6978bea5b14f282309c69fee368e",
                "Data": {
                    "TxHash": "0x58752f8aeb2c69dd2c32059d3ad8b2d3d860c6d92aa2b3b30ff985e564f60fae",
                    "Shard": 2,
                    "Account": "0x0ea2a45ab5a909c309439b0e004c61b7b2a3e831",
                    "Amount": 10000,
                    "Fee": 0,
                    "Code": ""
                }
            }
        ],
        "hash": "0x000002069d9de64bad509239e2a121afbf7de183576457a1d1fb077d19fa3e8c",
        "header": {
            "PreviousBlockHash": "0x000001cba2c0b82402b3d2d2ad49f50ca0b21aee18c8123486377b2ec93aa0e0",
            "Creator": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21",
            "StateHash": "0x8af14975f636ace27571cfcdcd9a1a1b4a5b15228977cf6207e82f63abf96ffd",
            "TxHash": "0xdb00575ff0cc0de89bd6c1799d37e5f600687963785176ca76e81bebfde6a03f",
            "ReceiptHash": "0x02fa1d68e7bbf0b833f6e8719efb11b32c7f760e4ae050a4f9b58b8dd8ad1620",
            "TxDebtHash": "0x58d7c36b25a715f5076ccb878940920f6bb333ab142287452509f881103960d2",
            "DebtHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
            "Difficulty": 6563003,
            "Height": 10368,
            "CreateTimestamp": 1539050098,
            "Nonce": 17825487295277268182,
            "ExtraData": ""
        },
        "totalDifficulty": 68985339754,
        "transactions": [
            {
                "accountNonce": 0,
                "amount": 150000000,
                "from": "0x0000000000000000000000000000000000000000",
                "gasLimit": 0,
                "gasPrice": 0,
                "hash": "0x6fb17b265260caed33b4e8f58ad84b508dd8950b9bc93dae8518fc96912f76bb",
                "payload": "",
                "timestamp": 1539931510,
                "to": "0xd5a145191b7ca9cb4f3dc850e426c1e853d2a9f1"
            },
            {
                "accountNonce": 280,
                "amount": 10000,
                "from": "0xec759db47a65f6537d630517f6cd3ca39c6f93d1",
                "gasLimit": 21000,
                "gasPrice": 1,
                "hash": "0xf526dc404145cd409601e951fec4f2222f3abf578381cdaaea9db3a791a79cbd",
                "payload": "",
                "timestamp": 0,
                "to": "0xa00d22dc3624d4696eff8d1641b442f79c3379b1"
            }
        ],
        "txDebts": [
            {
                "Hash": "0xe1c24a636a7c27aea7c384f6eb61eb49168129105f4c081ffa8ca7e77198b3f6",
                "Data": {
                    "TxHash": "0x0b30a6edf95a16933a0a77ffd3eb15680d4e3cb79466f21c1181c013a68eae62",
                    "Shard": 2,
                    "Account": "0x0ea2a45ab5a909c309439b0e004c61b7b2a3e831",
                    "Amount": 10000,
                    "Fee": 0,
                    "Code": ""
                }
            }
        ]
    }
}
// Request
client getblock --hash 0x000002069d9de64bad509239e2a121afbf7de183576457a1d1fb077d19fa3e8c --fulltx=true

// Result
{
    "jsonrpc": "2.0",
    "id": 1,
    "result": {
        "debts": [
            {
                "Hash": "0x0da1ed893e7f0ca2558c193b3b82ed20575a6978bea5b14f282309c69fee368e",
                "Data": {
                    "TxHash": "0x58752f8aeb2c69dd2c32059d3ad8b2d3d860c6d92aa2b3b30ff985e564f60fae",
                    "Shard": 2,
                    "Account": "0x0ea2a45ab5a909c309439b0e004c61b7b2a3e831",
                    "Amount": 10000,
                    "Fee": 0,
                    "Code": ""
                }
            }
        ],
        "hash": "0x000002069d9de64bad509239e2a121afbf7de183576457a1d1fb077d19fa3e8c",
        "header": {
            "PreviousBlockHash": "0x000001cba2c0b82402b3d2d2ad49f50ca0b21aee18c8123486377b2ec93aa0e0",
            "Creator": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21",
            "StateHash": "0x8af14975f636ace27571cfcdcd9a1a1b4a5b15228977cf6207e82f63abf96ffd",
            "TxHash": "0xdb00575ff0cc0de89bd6c1799d37e5f600687963785176ca76e81bebfde6a03f",
            "ReceiptHash": "0x02fa1d68e7bbf0b833f6e8719efb11b32c7f760e4ae050a4f9b58b8dd8ad1620",
            "TxDebtHash": "0x58d7c36b25a715f5076ccb878940920f6bb333ab142287452509f881103960d2",
            "DebtHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
            "Difficulty": 6563003,
            "Height": 10368,
            "CreateTimestamp": 1539050098,
            "Nonce": 17825487295277268182,
            "ExtraData": ""
        },
        "totalDifficulty": 68985339754,
        "transactions": [
            {
                "accountNonce": 0,
                "amount": 150000000,
                "from": "0x0000000000000000000000000000000000000000",
                "gasLimit": 0,
                "gasPrice": 0,
                "hash": "0x6fb17b265260caed33b4e8f58ad84b508dd8950b9bc93dae8518fc96912f76bb",
                "payload": "",
                "timestamp": 1539931510,
                "to": "0xd5a145191b7ca9cb4f3dc850e426c1e853d2a9f1"
            },
            {
                "accountNonce": 280,
                "amount": 10000,
                "from": "0xec759db47a65f6537d630517f6cd3ca39c6f93d1",
                "gasLimit": 21000,
                "gasPrice": 1,
                "hash": "0xf526dc404145cd409601e951fec4f2222f3abf578381cdaaea9db3a791a79cbd",
                "payload": "",
                "timestamp": 0,
                "to": "0xa00d22dc3624d4696eff8d1641b442f79c3379b1"
            }
        ],
        "txDebts": [
            {
                "Hash": "0xe1c24a636a7c27aea7c384f6eb61eb49168129105f4c081ffa8ca7e77198b3f6",
                "Data": {
                    "TxHash": "0x0b30a6edf95a16933a0a77ffd3eb15680d4e3cb79466f21c1181c013a68eae62",
                    "Shard": 2,
                    "Account": "0x0ea2a45ab5a909c309439b0e004c61b7b2a3e831",
                    "Amount": 10000,
                    "Fee": 0,
                    "Code": ""
                }
            }
        ]
    }
}
```

### GetBlockHeight

This method is used to obtain the height of the blockchain.

| Type    | Template                                   |
| ------- | ------------------------------------------ |
| Console | `client getblockheight --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `result`:`uint64` - current block height

#### Example

```javascript
// Request
client getblockheight

// Result
1928
```

### GetBlockTx

This method is used to obtain the transactions in the block of given block height or block hash.

| Type    | Template                                                                           |
| ------- | ---------------------------------------------------------------------------------- |
| Console | `client getblocktx --height -1 --hash <string>(--height <int>) --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - block hash
* `height`:`string` - block height

#### Returns

* `result`: transaction array

#### Example

```javascript
// Request
client getblocktx --height 10368 

// Result
[
        {
                "transaction 1": {
                        "accountNonce": 0,
                        "amount": 600000000,
                        "from": "0S0000000000000000000000000000000000000000",
                        "gasLimit": 0,
                        "gasPrice": 0,
                        "hash": "0xfdbf16dddfd1267ad97a774cdc937aaf1c64a0219a931a917ac7a8ac37bd0b00",
                        "payload": "",
                        "signature": {
                                "Sig": ""
                        },
                        "to": "1S0117411196d28ba12ef3f60e30b2c902ea8e99d1"
                }
        }
]
```

### GetBlockTxByHash

Similar to [GetBlockTx](#getblocktx).

### GetBlockTxByHeight

Similar to [GetBlockTx](#getblocktx).

### GetBlockTxCount

This method is used to obtain the number of transactions in the block based on block height or hash.

| Type    | Template                                                |
| ------- | ------------------------------------------------------- |
| Console | `client getblocktxcount --height -1 --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - hash value in hex
* `height`:`int64` - block height (default: -1)

#### Returns

* `result`:`int` - number of transaction

#### Example

```javascript
// Request
client getblocktxcount --height 4202

// Result
2

// Request
client getblocktxcount --hash 0x0000015592fab87d6efa10e63d7722f6f359d90a1aff9e70930b291931c34922

// Result
2
```

### GetChangedAccounts

This method is used to obtain the accounts that have a change of status in the block of given block height or block hash

| Type    | Template                                                                        |
| ------- | ------------------------------------------------------------------------------- |
| Console | `client getchangedaccounts --hash <string> (--height <int>) --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - block hash value in hex
* `height`:`int64` - block height

#### Returns

* `account count`:`int64` - the count of the changed accounts &#x20;
* `accounts`:`array` - a list of the changed accounts
* `blockHash`:`string` - block hash

#### Example

```javascript
// Request
client getchangedaccounts --height 15 --address 127.0.0.1:8027

// Result
{
        "account count": 1,
        "accounts": [
                "1S0119911196d28ba12ef3f60e30b2c302ea8e9961"
        ],
        "blockHash": "0x04a77767ce3224ead593a28b89d3f0c51181dc68e6d2ef90076c5ebf996cdb97"
}
```

### GetDebtByHash

This method is used to obtain the content of a debt based on its hash.

| Type    | Template                                                  |
| ------- | --------------------------------------------------------- |
| Console | `client getdebtbyhash --hash <string> --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - hash value in hex

#### Returns

* `blockHash`:`string` - block hash of the block that includes the debt&#x20;
* `blockHeight`:`int64` - block height of the block that includes the debt
* `debt`:`json` - debt json
* `Data`:`json` - debt data
* `Account`:`string` - debt account
* `Amount`:`int64` - debt amount
* `Code`:`string` - debt code
* `Fee`:`int64` - debt fee
* `Shard`:`int` - shard number of SCDO node where the debt is in
* `TxHash`:`string` - txhash in debt
* `Hash`:`string` - debt hash
* `debtIndex`:`json` - debt index json
* `BlockHash`:`string` -block hash of the block that includes the debt
* `Index`:`string` - index of the debt in the block
* `status`:`string` - debt status

#### Example

```javascript
// Request
client getdebtbyhash --hash 0x0da1ed893e7f0ca2558c193b3b82ed20575a6978bea5b14f282309c69fee368e

// Result
{
        "blockHash": "0x000001a8946d75258f9e269d516e797779ca6bd4b190c701f81456c60958c688",
        "blockHeight": 1112,
        "debt": {
                "Data": {
                        "Account": "0x0ea2a45ab5a909c309439b0e004c61b7b2a3e831",
                        "Amount": 10000,
                        "Code": "",
                        "Fee": 0,
                        "Shard": 2,
                        "TxHash": "0x58752f8aeb2c69dd2c32059d3ad8b2d3d860c6d92aa2b3b30ff985e564f60fae"
                },
                "Hash": "0x0da1ed893e7f0ca2558c193b3b82ed20575a6978bea5b14f282309c69fee368e"
        },
        "debtIndex": {
                "BlockHash": "0x000001a8946d75258f9e269d516e797779ca6bd4b190c701f81456c60958c688",
                "Index": 0
        },
        "status": "block"
}
```

### GetDebts

This method returns the pending debts in the debt pool

| Type    | Template                              |
| ------- | ------------------------------------- |
| Console | `client getdebts --address <address>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `result`:`json` - a list of pending debts

### GetInfo

This method returns node information.

| Type    | Template                             |
| ------- | ------------------------------------ |
| Console | `client getinfo --address <address>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `BlockAge`:`int64` - the age of the current block&#x20;
* `Coinbase`:`string` - the coinbase of the node
* `CurrentBlockHeight`:`uint64` - the current block height
* `HeaderHash`:`string` - block hash of the current block
* `MinerStatus`:`string` - miner status
* `PeerCnt`:`string` - total peer connections and peer connections for each shard. 8 (1 2 3 2) means the node is connecting to a total number of 8 peers. Among them, 1 peer is in shard 1, 2 peers is in shard 2, 3 peers is in shard 3, 2 peers is in shard 2.
* `Shard`:`uint64` - shard number of the node
* `Version`:`string` - the version of SCDO node

#### Example

```javascript
// Request
client getinfo

// Result
{
        "BlockAge": 16,
        "Coinbase": "1S01a64ed0a476b1b128e7b196a3ebb34662825231",
        "CurrentBlockHeight": 3007759,
        "HeaderHash": "0xa3a3aa50801e539f51c6b55b1be9cb6319dc826959d8e6960133dd954211ca95",
        "MinerStatus": "Running",
        "PeerCnt": "161 (15 80 23 43)",
        "Shard": 1,
        "Version": "Scdo_V1.0.0"
}
```

### GetLogs

This method gets the event logs by block height, the contract address, and the event name.

| Type    | Template                                                                    |
| ------- | --------------------------------------------------------------------------- |
| Console | `client getlogs --height <block height> --contract <string> --abi <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `height`:`int64` - block height (default: -1)
* `contract`:`string` - contract address
* `abi`:`string` - the abi file of contract
* `event`:`string` - the event name of contract

#### Returns

* `response`:`struct` - response parameter struct
* `Txhash`:`string` - transaction hash
* `LogIndex`:`uint` - log index in receipt's logs
* `Log`:`string` - log json

#### Example

When using the example below, the contract must be deployed first. The solidity code file:

```
pragma solidity ^0.4.0;

contract SimpleStorage {
    uint storedData;
    event getX(uint,uint);

    function SimpleStorage() public{
        storedData = 5;
    }

    function set(uint x) public {
        storedData = x;
    }

    function get() public returns (uint) {
        emit getX(1,2);
        return storedData;
    }
}
```

As you can see, this example is testing the get function. In this situation, the height is the block height of the block containing the get transaction.

```javascript
// Request
client getlogs --height 299 --address 0x40bdd5ab58a26cf761607684bd0230b1ea8200f2 --topic 0x978acaf30839c63aff19afed19ff8f3a430103773a67e3890aa1639af9a71bc4

// Result
[
        {
                "Log": {
                        "address": "0x40bdd5ab58a26cf761607684bd0230b1ea8200f2",
                        "blockNumber": 299,
                        "data": "AAAAAAAAAAAAAAAACleicU4ZO3rFBHXOYl8tz7SD10EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKZ2V0IGdldExvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
                        "topics": [
                                "0x978acaf30839c63aff19afed19ff8f3a430103773a67e3890aa1639af9a71bc4"
                        ],
                        "transactionIndex": 1
                },
                "LogIndex": 0,
                "Txhash": "0x2a06accc3739845451d50c74bc28a66c6152e9e536e263c3549a404abe8259fc"
        }
]
```

### GetNonce

This method is used to obtain the nonce of the account.

| Type    | Template                                                |
| ------- | ------------------------------------------------------- |
| Console | `client getnonce --address <string> --account <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `account`:`string` - account address
* `hash`:`string` - hash value in hex
* `height`:`uint64` - block height or current block height for negative value (default: -1)

#### Returns

* `result`:`uint64` - nonce

#### Example

```javascript
// Request
client getnonce --account 4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21

// Result
3
```

### GetReceipt

This method is used to obtain the receipt contents based on transaction hash.

| Type    | Template                                                              |
| ------- | --------------------------------------------------------------------- |
| Console | `client getreceipt --hash <string> --abi <string> --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - hash value in hex
* `abi`:`string` - the abi file of contract

#### Returns

* `contract`:`string` - contract address
* `failed`:`bool` - transaction executes successfully or not
* `poststate`:`string` - state trie root hash after transaction execution
* `result`:`string` - transaction result
* `totalFee`:`int` - transaction fee
* `txhash`:`string` - transaction hash
* `usedGas`:`int` - transaction gas

#### Example

```javascript
// Request
client getreceipt --hash 0x9c0e2565b8a0b33c3f69aa6eb9bad4a86c3925a1fe12272e2082091b9b1c5609

// Result
{
    "contract": "0x",
    "failed": false,
    "poststate": "0xef59ced1b06d3ec77aa5c3b0fa1bd7cdd83890961f49d06aabe0a2d57583dd3b",
    "result": "0x",
    "totalFee": 21000,
    "txhash": "0x9c0e2565b8a0b33c3f69aa6eb9bad4a86c3925a1fe12272e2082091b9b1c5609",
    "usedGas": 21000
}
```

### GetShardNum

This method is used to get the shard number of the specified account.

| Type    | Template                                |
| ------- | --------------------------------------- |
| Console | `client getshardnum --account <string>` |

#### Parameters

* `account`:`string` - account address

#### Returns

* `shard number`:`uint64` - shard number

#### Example

```javascript
// Request
client getshardnum --account 4S04693a9ca18d7b0e793865b3cd057cf5baea8601

// Result
shard number: 4
```

### GetTxInBlock

This method is used to obtain the transaction content based on block height/hash and transaction index.

| Type    | Template                                                       |
| ------- | -------------------------------------------------------------- |
| Console | `client gettxinblock --height -1 --index 0 --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `hash`:`string` - block hash
* `height`:`int` - block height (default: -1)
* `index`:`int` - transaction index, start with 0 (default: 0)

#### Returns

* `accountNonce`:`unit64` - account nonce
* `amount`:`Int` - transaction amount
* `gasLimit`:`Int` - transaction gas limit
* `gasPrice`:`Int` - transaction gas price
* `from`:`string` - transaction provider
* `to`:`string` - transaction receiver
* `hash`:`string` - transaction hash
* `payload`:`array` - transaction payload
* `timestamp`:`string` - transaction timestamp

#### Example

```javascript
// Request
client gettxinblock --hash 0x0000015592fab87d6efa10e63d7722f6f359d90a1aff9e70930b291931c34922 --height -1 --index 1

// Result
{
        "accountNonce": 0,
        "amount": 150000000,
        "from": "0x0000000000000000000000000000000000000000",
        "gasLimit": 0,
        "gasPrice": 0,
        "hash": "0x473ea3667d073491d5896a93fcf84d7dd822988d07482f21e7a875787539e62e",
        "payload": "",
        "timestamp": 1540178976,
        "to": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21"
}
```

### GetTxByHash

This method returns tx information by hash.

| Type    | Template                                                |
| ------- | ------------------------------------------------------- |
| Console | `client gettxbyhash --hash <string> --address <string>` |

#### Parameters

* `hash`:`string` - hash value in hex
* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `blockHash`:`string` - block hash
* `blockHeight`:`int` - block height
* `status`:`string` - transaction status
* `accountNonce`:`unit64` - account nonce
* `amount`:`Int` - transaction amount
* `gasLimit`:`Int` - transaction gas limit
* `gasPrice`:`Int` - transaction gas price
* `from`:`string` - transaction provider
* `to`:`string` - transaction receiver
* `hash`:`string` - transaction hash
* `payload`:`array` - transaction payload
* `timestamp`:`int64` - transaction timestamp
* `txIndex`:`int` - transaction index in block

#### Example

```javascript
// Request
client gettxbyhash --hash 0x473ea3667d073491d5896a93fcf84d7dd822988d07482f21e7a875787539e62e

// Result
{
        "blockHash": "0x0000009c753570436b0bdd4ea1b9cfb1611f181f7aae82d4ba265761c50c8479",
        "blockHeight": 3608,
        "status": "block",
        "transaction": {
                "accountNonce": 0,
                "amount": 150000000,
                "from": "0x0000000000000000000000000000000000000000",
                "gasLimit": 0,
                "gasPrice": 0,
                "hash": "0x473ea3667d073491d5896a93fcf84d7dd822988d07482f21e7a875787539e62e",
                "payload": "",
                "timestamp": 1540178976,
                "to": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21"
        },
        "txIndex": 0
}
```

### GetTxPoolContent

This method is used to obtain the transaction pool content.

| Type    | Template                                     |
| ------- | -------------------------------------------- |
| Console | `client gettxpoolcontent --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `result`:`struct` - transaction pool content

#### Example

```javascript
// Request
client gettxpoolcontent

// Result
{
    "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21": [
        {
                "accountNonce": 1,
                "amount": 20000,
                "from": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21",
                "gasLimit": 200000,
                "gasPrice": 10,
                "hash": "0x8beb3b116d3488e8ef53c9f19c9b932f7713200124d47052009745cd9a5b457c",
                "payload": "",
                "signature": {
                        "Sig": "9WIUmcU4mAS91jEKOt3qgSihV8spI7hPTht4aLyjaSsWWDk/nLUj2UvM8a2dXd7Nk2dQ/b1QrLW2Qkevnu6I+wA="
                },
                "to": "4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21"
        }

    ]
}
```

### GetTxPoolCount

This method is used to obtain the number of transactions in the transaction pool.

| Type    | Template                                   |
| ------- | ------------------------------------------ |
| Console | `client gettxpoolcount --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `result`:`uint64` - number of transactions in the transaction pool

#### Example

```javascript
// Request
client gettxpoolcount

// Result
1
```

### GetPendingTxs

This method is used to obtain pending transactions in the transaction pool.

| Type    | Template                                  |
| ------- | ----------------------------------------- |
| Console | `client getpendingtxs --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

#### Returns

* `result`:`array` - information of pending transactions

#### Example

```javascript
// Request
client getpendingtxs

// Result
[    
    {
                "accountNonce": 1,
                "amount": 20000,
                "from": "1S015d59bc2629fad04ecc6c76f75fe229abebdf11",
                "gasLimit": 200000,
                "gasPrice": 10,
                "hash": "0x8beb3b116d3488e8ef53c9f19c9b932f7713200124d47052009745cd9a5b457c",
                "payload": "",
                "signature": {
                        "Sig": "9WIUmcU4mAS91jEKOt3qgSihV8spI7hPTht4aLyjaSsWWDk/nLUj2UvM8a2dXd7Nk2dQ/b1QrLW2Qkevnu6I+wA="
                },
                "to": "1S01a2a45ab5a909c309439b0e004c61b7b2a3e831"
        }
]
```

### gettxfromaccount

### gettxtoaccount

### Key

This method is used to generate an address/private key pair and print them out.

| Type    | Template                   |
| ------- | -------------------------- |
| Console | `client key --shard <int>` |

#### Parameters

* `shard`:`uint64` shard number (default: 1)

#### Returns

* `Account`:`string` - account address
* `Private key`:`string` - private key

#### Example

```javascript
// Request
client key

// Result
Account:  1S01931325c1048ed1b425afd68f84187b930919b1
Private key: 0xa54f27d8bdcca6246f63c84d626e21aab2337ce7866611d2587cf18e8d1e4129
```

### Miner

A collection of commands for miners

#### Miner Start

This method starts the miner.

| Type    | Template                                |
| ------- | --------------------------------------- |
| Console | `client miner start --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

true or false

**Example**

```javascript
// Request
client miner start

// Result
true
```

#### Miner Stop

This method stops the miner.

| Type    | Template                               |
| ------- | -------------------------------------- |
| Console | `client miner stop --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

true or false

**Example**

```javascript
// Request
client miner stop

// Result
true
```

#### Miner Status

This method returns the miner's status.

| Type    | Template                                 |
| ------- | ---------------------------------------- |
| Console | `client miner status --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

"Running" or "Stopped"

**Example**

```javascript
// Request
client miner status

// Result
Running
```

#### Miner GetCoinbase

This method is used to obtain the coinbase of miner consensus.

| Type    | Template                                      |
| ------- | --------------------------------------------- |
| Console | `client miner getcoinbase --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

* `result`:`string` - coinbase

**Example**

```javascript
// Request
client miner getcoinbase

// Result
"4S04x0f2cd2159bb432094e3be7e17904c2b4aeb21"
```

#### Miner SetThreads

This method is used to set the threads of miner.

| Type    | Template                                                     |
| ------- | ------------------------------------------------------------ |
| Console | `client miner setthreads --threads <int> --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `threads`:`int` - miner threads (default: 0)

**Returns**

true or false

**Example**

```javascript
// Request
client miner setthreads --threads 2

// Result
true
```

#### Miner SetCoinbase

This method is used to set the coinbase

| Type    | Template                                                          |
| ------- | ----------------------------------------------------------------- |
| Console | `client miner setcoinbase --coinbase <string> --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `coinbase`:`string` coinbase of the miner

**Returns**

true or false

**Example**

```javascript
// Request
client miner setcoinbase --coinbase 1S01fba5fcb9bc4ee7c3b7fed667e41c9a0248da71

// Result
true
```

#### Miner Detrate

This method returns detrate information of the miner

| Type    | Template                                  |
| ------- | ----------------------------------------- |
| Console | `client miner detrate --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

* `result`:`uint64` - number of determinants computed per second by the miner

**Example**

```javascript
// Request
client miner detrate

// Result
392363
```

#### Miner Threads

This method returns threads number of miner

| Type    | Template                                  |
| ------- | ----------------------------------------- |
| Console | `client miner threads --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

* `threads`:`uint64`

**Example**

```javascript
// Request
client miner threads

// Result
2
```

#### Miner GetWork

#### Miner GetWorkHeader

#### Miner SubmitWork

### P2P

p2p commands

| Type    | Template                                                              |
| ------- | --------------------------------------------------------------------- |
| Console | `client p2p command [command options] [arguments] --address <string>` |

#### P2P PeersInfo

This method returns the information of peer nodes.

| Type    | Template                                  |
| ------- | ----------------------------------------- |
| Console | `client p2p peersinfo --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

* `result`: the information of peers

**Example**

```javascript
// Request
client p2p peersinfo

// Result
[
     {
                "caps": [
                        "lightScdo_2/1",
                        "lightScdo_3/1",
                        "lightScdo_4/1",
                        "scdo/1",
                        "lightScdo_1/1"
                ],
                "id": "4S04ff0836d1e01f12ee84667599640fddabe436c1",
                "network": {
                        "localAddress": "74.208.207.184:8057",
                        "remoteAddress": "171.83.146.5:26948"
                },
                "protocols": {
                        "lightScdo_1": {
                                "difficulty": 365868671432,
                                "head": "041d6527dd7dc72636f5adfd56dfa95a20a8ed553a7eec40f5c714c23e8f9399",
                                "version": 1
                        },
                        "lightScdo_2": "handshake",
                        "lightScdo_3": "handshake",
                        "lightScdo_4": {
                                "difficulty": 370476326753,
                                "head": "c6005f47fc54757d9bc8c55bf8d7dd70cb62f1bf0f442a5bb0a02c05ce64be6b",
                                "version": 1
                        },
                        "scdo": {
                                "difficulty": 370476326753,
                                "head": "c6005f47fc54757d9bc8c55bf8d7dd70cb62f1bf0f442a5bb0a02c05ce64be6b",
                                "version": 1
                        }
                },
                "shard": 4
        }

]
```

#### P2P Peers

This method returns the number of peer nodes.

| Type    | Template                              |
| ------- | ------------------------------------- |
| Console | `client p2p peers --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

* `result`:`int` - The number of peer nodes&#x20;

**Example**

```javascript
// Request
client p2p peers

// Result
1
```

#### P2P ProtocolVersion

This method returns the protocol version.

| Type    | Template                                        |
| ------- | ----------------------------------------------- |
| Console | `client p2p protocolversion --address <string>` |

**Parameters**

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`

**Returns**

* `result`:`uint64` - version number

**Example**

```javascript
// Request
client p2p protocolversion

// Result
1
```

#### P2P AddTrustNode

#### P2P GetAddNodeCount

#### P2P GetBlockListCount

#### P2P IsListening

#### P2P NetVersion

#### P2P NetworkId

### Payload

This method generates payload which is used to call a contract's methods.

| Type    | Template                                                          |
| ------- | ----------------------------------------------------------------- |
| Console | `client payload --abi <string> --method <string> --args <string>` |

#### Parameters

* `abi`:`string` the abi file of the contract
* `method`:`string` the method name in the contract
* `args`:`string` the parameters of the contract method

#### Returns

* `payload`:`string` payload data

#### Example

```javascript
// Request
client payload --abi myabifile --method set --args 10

// Result
payload:  0x60fe47b1000000000000000000000000000000000000000000000000000000000000000a
```

### SaveKey

This method saves the private key.

| Type    | Template                                       |
| ------- | ---------------------------------------------- |
| Console | \`client savekey --privatekey  --file  --shard |

#### Parameters

* `privatekey`:`string` - private key of the account
* `file`:`string` -  keystore file name
* `shard`:`uint64` - shard number of the account (default: 1)

#### Returns

* none

#### Example

```javascript
// Request
client savekey --privatekey 0x52117b49022b246ee3921a7ff6771df065594a0dde555e40d8ce940a3ecfb654 --file mykeyfile --shard 1

// Result
Password:
Repeat password:
store key successful
```

### SendTx

This method submits a transaction to the node.

| Type    | Template                                                                                                                                                                 |
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Console | `client sendtx --shard <uint64> --from <string> --to <string>  --amount <uint64> --price <uint64> --gas <uint64> --nonce <uint64> --payload <string> --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `shard`:`uint64` shard number of the sender
* `from`:`string` - the keystore file of the sender's account
* `to`:`string` - the receiver's address
* `amount`:`uint64` - the amount to transfer
* `price`:`uint64` - the gas price in Wen (default: "10")
* `gas`:`uint64` - maximum gas for transaction (default: 200000)
* `nonce`:`int` - transaction nonce (if not given by the user, it will be retrieved from the blockchain database)
* `payload`:`string` - transaction payload, optional

#### Returns

* `Hash`:`string` - transaction hash
* `Data`: transaction data&#x20;

#### Example

```javascript
// Request
client sendtx --from mykeyfile --to 4S04cf0b32593068f2ace7c472d5f127d3422d3b61 --shard 4 --amount 10000 --price 1 --address 127.0.0.1:8026

// Result:
Please input your key file password: 
account 4S046776478e64efb72058ac219be0d5b29af402f1 current nonce: 0, sending nonce: 0
transaction sent successfully
{
    "Hash": "0x9c0e2565b8a0b33c3f69aa6eb9bad4a86c3925a1fe12272e2082091b9b1c5609",
    "Data": {
        "From": "4S046776478e64efb72058ac219be0d5b29af402f1",
        "To": "4S04cf0b32593068f2ace7c472d5f127d3422d3b61",
        "Amount": 10000,
        "AccountNonce": 0,
        "GasPrice": 1,
        "GasLimit": 21000,
        "Timestamp": 0,
        "Payload": ""
    },
    "Signature": {
        "Sig": "N8XzJ/GEpU73dpzW5t5WShmVPFb8gQOrInGdypul8aBaDakmhbZ2rdqekA5bWslHQBfsoafeMukF5b7A1/6JWQA="
    }
}
```

### Sign

This method is used to sign data with your private key.

| Type    | Template                                                                                                                                                                    |
| ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Console | `client sign --shard <uint64> --privatekey <string> --to <string> --amount <uint64> --price <uint64> --gas <uint64> --nonce <uint64> --payload <string> --address <string>` |

#### Parameters

* `address`:`string` - node address for client to request (default: "127.0.0.1:8027"); you can use `-a` instead of `--address`
* `shard`:`uint64` shard number of the sender
* `privatekey`:`string` private key of the sender
* `to`:`string` account address of the receiver
* `amount`:`uint64` the amount to transfer
* `price`:`uint64` transaction gas price in Wen (default: "10")
* `gas`:`int64` maximum gas for transaction (default: 200000)
* `nonce`:`int` - transaction nonce (if not given by the user, it will be retrieved from the blockchain database)
* `payload`:`string` transaction payload, optional

#### Returns

* `result`: transaction data with signature

#### Example

```javascript
// Request
client sign --shard 1 --privatekey 0x3f3a2bf8d1360292d24a23a84d0fceea17a5d18859e1e280a6ed7c4d7172999f --to 1S01a2a45ab5a909c309439b0e004c61b7b2a3e831 --amount 20000 --nonce 1

// Result
account 1S015d59bc2629fad04ecc6c76f75fe229abebdf11, transaction nonce: 1
{
        "Transaction": {
                "accountNonce": 1,
                "amount": 20000,
                "from": "1S015d59bc2629fad04ecc6c76f75fe229abebdf11",
                "gasLimit": 200000,
                "gasPrice": 10,
                "hash": "0x8beb3b116d3488e8ef53c9f19c9b932f7713200124d47052009745cd9a5b457c",
                "payload": "",
                "signature": {
                        "Sig": "9WIUmcU4mAS91jEKOt3qgSihV8spI7hPTht4aLyjaSsWWDk/nLUj2UvM8a2dXd7Nk2dQ/b1QrLW2Qkevnu6I+wA="
                },
                "to": "1S01a2a45ab5a909c309439b0e004c61b7b2a3e831"
        }
}
```
