80个版本 (23个重大变更)

0.118.0-rc1 2024年8月19日
0.117.0 2024年7月29日
0.117.0-rc32024年6月21日
0.115.0-rc22024年3月20日
0.1.0 2018年11月2日

#570神奇豆子

Download history 161/week @ 2024-05-01 252/week @ 2024-05-08 20/week @ 2024-05-15 18/week @ 2024-05-22 10/week @ 2024-05-29 113/week @ 2024-06-05 13/week @ 2024-06-12 99/week @ 2024-06-19 16/week @ 2024-06-26 6/week @ 2024-07-03 92/week @ 2024-07-10 119/week @ 2024-07-17 283/week @ 2024-07-24 111/week @ 2024-07-31 8/week @ 2024-08-07 87/week @ 2024-08-14

每月511次下载
4 个crate中使用(直接使用2个)

MIT 许可证

4.5MB
70K SLoC

CKB JSON-RPC协议

RPC接口与节点版本共享相同的版本,该版本在local_node_info中返回。该接口在不同补丁版本之间完全兼容,例如,0.25.0版本的客户端应与0.25.x版本的任何x兼容。

允许任意机器访问JSON-RPC端口(使用rpc.listen_address配置选项)是危险的,并且强烈不建议。请严格限制只有受信任的机器可以访问。

CKB JSON-RPC目前仅支持HTTP。如果需要SSL,请通过Nginx或其他HTTP服务器设置代理。

请参阅项目列表以设置RPC服务器的代理。

订阅需要全双工连接。CKB以TCP(通过rpc.tcp_listen_address配置选项启用)和WebSocket(通过rpc.ws_listen_address配置选项启用)的形式提供此类连接。

JSONRPC弃用过程

CKB RPC方法弃用分为三个步骤。

首先,该方法在CKB发行说明和RPC文档中被标记为已弃用。然而,RPC方法仍然可用。RPC文档将建议替代解决方案。

CKB开发团队将从下一个次要版本开始禁用任何已弃用的RPC方法。用户可以通过配置文件选项rpc.enable_deprecated_rpc启用已弃用的方法。

一旦禁用已弃用方法,CKB开发团队将在未来的次要版本中删除它。

例如,一个方法在0.35.0中被标记为已弃用,它可以在0.36.0中禁用,并在0.37.0中删除。次要版本每月发布一次,因此对于已弃用的RPC方法至少有两个月的时间缓冲。

最小支持的Rust版本策略(MSRV)

软件包ckb-rpc的最小支持的rustc版本是1.71.1。

目录

RPC 模块

模块 Alert

RPC 模块 Alert 用于网络警报。

警报是关于关键问题的消息,将通过 p2p 网络广播到所有节点。

警报必须由 2-of-4 签名签名,其中公钥在源代码中硬编码,属于早期的 CKB 开发者。

方法 send_alert

  • send_alert(alert)
  • 结果: null

发送警报。

此 RPC 在成功时返回 null

错误
示例

请求

{
  "jsonrpc": "2.0",
  "method": "send_alert",
  "params": [
    {
      "id": "0x1",
      "cancel": "0x0",
      "priority": "0x1",
      "message": "An example alert message!",
      "notice_until": "0x24bcca57c00",
      "signatures": [
        "0xbd07059aa9a3d057da294c2c4d96fa1e67eeb089837c87b523f124239e18e9fc7d11bb95b720478f7f937d073517d0e4eb9a91d12da5c88a05f750362f4c214dd0",
        "0x0242ef40bb64fe3189284de91f981b17f4d740c5e24a3fc9b70059db6aa1d198a2e76da4f84ab37549880d116860976e0cf81cd039563c452412076ebffa2e4453"
      ]
    }
  ],
  "id": 42
}

响应

{
  "error": {
    "code": -1000,
    "data": "SigNotEnough",
    "message":"AlertFailedToVerifySignatures: The count of sigs is less than threshold."
  },
  "jsonrpc": "2.0",
  "result": null,
  "id": 42
}

模块 Chain

RPC 模块 Chain 用于与主链相关的功能。

此模块查询有关主链的信息。

主链

主链是累积工作量最多的链。累积工作量是链中所有区块难度的总和。

链重组

当 CKB 找到累积工作量比主链更多的链时,会发生链重组。如果需要,链重组将回滚当前主链中的区块,并将主链切换到更好的链。

活动细胞

如果一个细胞是

  • 在任何交易中被发现作为输出(在 主链 中),并且
  • 在任何交易中都没有被发现作为输入(在主链中)。

方法 get_block

  • get_block(block_hash,verbosity,with_cycles)
    • block_hash: H256
    • verbosity: Uint32 | null
    • with_cycles: boolean | null
  • 结果:BlockResponse | null

通过哈希返回区块信息。

参数
  • block_hash - 区块哈希。
  • verbosity - 结果格式,允许0和2。(可选,默认为2)
  • with_cycles - 是否返回区块交易的循环。(可选,默认为false)
返回值

RPC返回一个区块或null。当RPC返回一个区块时,区块哈希必须等于参数block_hash

如果区块在主链中,RPC必须返回区块信息。否则,行为未定义。RPC可能返回在本地存储中找到的区块,或者简单地返回所有不在主链中的区块的null。并且由于链重组,对于相同的block_hash,RPC有时可能返回null,有时返回区块。

verbosity为2时,它返回一个JSON对象作为result。有关架构,请参阅BlockView

verbosity为0时,它返回一个以0x前缀的十六进制字符串作为result。该字符串使用table Block架构编码了由molecule序列化的区块。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block",
  "params": [
     "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "header": {
      "compact_target": "0x1e083126",
      "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
      "epoch": "0x7080018000001",
      "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
      "nonce": "0x0",
      "number": "0x400",
      "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
      "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x5cd2b117",
      "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
      "version": "0x0"
    },
    "proposals": [],
    "transactions": [
      {
        "cell_deps": [],
        "hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17",
        "header_deps": [],
        "inputs": [
          {
            "previous_output": {
              "index": "0xffffffff",
              "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            },
            "since": "0x400"
          }
        ],
        "outputs": [
          {
            "capacity": "0x18e64b61cf",
            "lock": {
              "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
              "hash_type": "data",
              "args": "0x"
            },
            "type": null
          }
        ],
        "outputs_data": [
          "0x"
        ],
        "version": "0x0",
        "witnesses": [
          "0x450000000c000000410000003500000010000000300000003100000028e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5000000000000000000"
        ]
      }
    ],
    "uncles": []
  }
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x..."
}

指定with_cycles时,响应对象将如下不同

{
    "id": 42,
    "jsonrpc": "2.0",
    "result": {
        "block": <Object> or "0x...",
        "cycles": []
    }
}

方法 get_block_by_number

  • get_block_by_number(区块编号,verbosity,with_cycles)
    • block_number - Uint64
    • verbosity: Uint32 | null
    • with_cycles: boolean | null
  • 结果:BlockResponse | null

返回具有特定区块编号的主链中的区块。

参数
  • block_number - 区块编号。
  • verbosity - 结果格式,允许0和2。(可选,默认为2)
  • with_cycles - 是否返回区块交易的循环。(可选,默认为false)
返回值

block_number小于或等于由get_tip_block_number返回的提示区块编号时,RPC返回区块;否则返回null。

由于链重组,PRC可能在不同的调用中返回null或具有相同block_number的不同区块。

verbosity为2时,它返回一个JSON对象作为result。有关架构,请参阅BlockView

verbosity为0时,它返回一个以0x前缀的十六进制字符串作为result。该字符串使用table Block架构编码了由molecule序列化的区块。

错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block_by_number",
  "params": [
    "0x400"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "header": {
      "compact_target": "0x1e083126",
      "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
      "epoch": "0x7080018000001",
      "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
      "nonce": "0x0",
      "number": "0x400",
      "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
      "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x5cd2b117",
      "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
      "version": "0x0"
    },
    "proposals": [],
    "transactions": [
      {
        "cell_deps": [],
        "hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17",
        "header_deps": [],
        "inputs": [
          {
            "previous_output": {
              "index": "0xffffffff",
              "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            },
            "since": "0x400"
          }
        ],
        "outputs": [
          {
            "capacity": "0x18e64b61cf",
            "lock": {
              "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
              "hash_type": "data",
              "args": "0x"
            },
            "type": null
          }
        ],
        "outputs_data": [
          "0x"
        ],
        "version": "0x0",
        "witnesses": [
          "0x450000000c000000410000003500000010000000300000003100000028e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5000000000000000000"
        ]
      }
    ],
    "uncles": []
  }
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x..."
}

指定with_cycles时,响应对象将如下不同

{
    "id": 42,
    "jsonrpc": "2.0",
    "result": {
        "block": <Object> or "0x...",
        "cycles": []
    }
}

方法 get_header

通过哈希返回区块头信息。

参数
  • block_hash - 区块哈希。
  • verbosity - 结果格式,允许0和1。(可选,默认为1)
返回值

RPC返回一个头或null。当RPC返回一个头时,区块哈希必须等于参数block_hash

如果块位于规范链中,RPC必须返回头部信息。否则,行为未定义。RPC可能返回本地存储中找到的块,或者简单地返回所有不在规范链中的块的null。

verbosity为1时,它以JSON对象的形式返回result。有关模式,请参阅HeaderView

verbosity为0时,它以0x前缀的十六进制字符串作为result返回。该字符串使用table Header模式编码了由molecule序列化的块头部。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_header",
  "params": [
    "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "compact_target": "0x1e083126",
    "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
    "epoch": "0x7080018000001",
    "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "nonce": "0x0",
    "number": "0x400",
    "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
    "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp": "0x5cd2b117",
    "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
    "version": "0x0"
  }
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x..."
}

方法 get_header_by_number

返回具有特定块号的规范链中的块头部。

参数
  • block_number - 块编号
  • verbosity - 结果格式,允许0和1。(可选,默认为1)
返回值

block_number小于或等于get_tip_block_number返回的顶端块号时,RPC返回块头部,否则返回null。

由于链重组,PRC可能在不同调用中返回null或具有相同block_number的不同块头部。

verbosity为1时,它以JSON对象的形式返回result。有关模式,请参阅HeaderView

verbosity为0时,它以0x前缀的十六进制字符串作为result返回。该字符串使用table Header模式编码了由molecule序列化的块头部。

错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_header_by_number",
  "params": [
    "0x400"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "compact_target": "0x1e083126",
    "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
    "epoch": "0x7080018000001",
    "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "nonce": "0x0",
    "number": "0x400",
    "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
    "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp": "0x5cd2b117",
    "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
    "version": "0x0"
  }
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x..."
}

方法 get_block_filter

  • get_block_filter(block_hash)
  • 结果:BlockFilter | null

通过块哈希返回块过滤器。

参数
  • block_hash - 区块哈希。
返回值

块过滤器数据

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block_filter",
  "params": [
    "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

当块具有块过滤器时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
   "data": "0x...",
   "hash": "0x..."
  }
}

方法 get_transaction

返回由交易哈希请求的交易信息。

返回值

如果交易既不在规范链中,也不在交易内存池中,则此RPC返回null。

如果交易在链中,则也返回块哈希。

参数
  • tx_hash - 交易哈希
  • verbosity - 结果格式,允许0、1和2。(可选,默认为2。)
  • only_committed - 是否仅查询已提交的交易。(可选,未设置时,将查询所有交易状态。)
返回值

当verbosity=0时,其响应值与verbosity=2相同,但在transaction字段上返回一个0x前缀的十六进制编码的molecule packed::Transaction。

当verbosity为1时:RPC不返回交易内容,且字段transaction必须为null。

当verbosity为2时:如果tx_status.status为pending、proposed或committed,RPC将作为字段transaction返回交易内容,否则字段为null。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_transaction",
  "params": [
    "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "transaction": {
      "cell_deps": [
        {
          "dep_type": "code",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
          }
        }
      ],
      "hash": "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3",
      "header_deps": [
        "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
      ],
      "inputs": [
        {
          "previous_output": {
            "index": "0x0",
            "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
          },
          "since": "0x0"
        }
      ],
      "outputs": [
        {
          "capacity": "0x2540be400",
          "lock": {
            "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
            "hash_type": "data",
            "args": "0x"
          },
          "type": null
        }
      ],
      "outputs_data": [
        "0x"
      ],
      "version": "0x0",
      "witnesses": []
    },
    "cycles": "0x219",
    "time_added_to_pool" : "0x187b3d137a1",
    "fee": "0x16923f7dcf",
    "min_replace_fee": "0x16923f7f6a",
    "tx_status": {
      "block_hash": null,
      "block_number": null,
      "status": "pending",
      "tx_index": null,
      "reason": null
    }
  }
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "transaction": "0x.....",
    "cycles": "0x219",
    "tx_status": {
      "block_hash": null,
      "block_number": null,
      "status": "pending",
      "tx_index": null,
      "reason": null
    }
  }
}

方法 get_block_hash

  • get_block_hash(区块编号)
  • 结果:H256 | null

返回具有指定block_number规范链中块的哈希。

参数
  • block_number - 块编号
返回值

block_number 小于或等于由 get_tip_block_number 返回的链头区块号时,RPC 返回该区块的哈希值;否则返回 null。

由于 链重组,PRC 可能返回 null,甚至在相同 block_number 下返回不同的区块哈希。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block_hash",
  "params": [
    "0x400"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
}

方法 get_tip_header

返回 规范链 中具有最高区块号的头部。

由于 链重组,返回的区块号可能小于之前的调用,并且不同的调用可能返回具有相同区块号的不同的区块头部。

参数
  • verbosity - 结果格式,允许0和1。(可选,默认为1)
返回值

verbosity 为 1 时,RPC 以 JSON 对象作为 result 返回。有关架构信息,请参阅 HeaderView。

verbosity 为 0 时,它以以 0x 开头的十六进制字符串作为 result 返回。该字符串使用 table Header 架构编码头部序列化。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_tip_header",
  "params": []
}

响应

{
  "jsonrpc": "2.0",
  "result": {
    "compact_target": "0x1e083126",
    "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
    "epoch": "0x7080018000001",
    "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "nonce": "0x0",
    "number": "0x400",
    "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
    "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "timestamp": "0x5cd2b117",
    "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
    "version": "0x0"
  },
  "id": 42
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x..."
}

方法 get_live_cell

  • get_live_cell(out_point,with_data,include_tx_pool)
    • out_point: OutPoint
    • with_data: boolean
    • include_tx_pool: boolean | null
  • 结果: CellWithStatus

返回单元格的状态。如果是 活动单元格,RPC 将返回额外的信息。

返回值

此 RPC 告诉单元格是否是活动的。

如果是活动单元格,RPC 将返回有关单元格的详细信息。否则,结果中的 cell 字段为 null。

如果是活动单元格且 with_data 设置为 false,结果中的 cell.data 字段为 null。

参数
  • out_point - 通过交易哈希和输出索引引用单元格。
  • with_data - RPC 是否应返回单元格数据。单元格数据可能很大,如果客户端不需要数据,它应将此设置为 false 以节省带宽。
  • include_tx_pool - RPC 是否检查 TxPool 中的活动单元格,默认为 false。
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_live_cell",
  "params": [
    {
      "index": "0x0",
      "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
    },
    true
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "cell": {
      "data": {
        "content": "0x7f454c460201010000000000000000000200f3000100000078000100000000004000000000000000980000000000000005000000400038000100400003000200010000000500000000000000000000000000010000000000000001000000000082000000000000008200000000000000001000000000000001459308d00573000000002e7368737472746162002e74657874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000010000000600000000000000780001000000000078000000000000000a0000000000000000000000000000000200000000000000000000000000000001000000030000000000000000000000000000000000000082000000000000001100000000000000000000000000000001000000000000000000000000000000",
        "hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5"
      },
      "output": {
        "capacity": "0x802665800",
        "lock": {
          "code_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "hash_type": "data",
          "args": "0x"
        },
        "type": null
      }
    },
    "status": "live"
  }
}

方法 get_tip_block_number

  • get_tip_block_number()

  • 结果: Uint64

返回 规范链 中的最高区块号。

由于 链重组,返回的区块号可能小于之前调用返回的值。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_tip_block_number",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x400"
}

方法 get_current_epoch

返回 规范链 中具有最高数字的纪元。

请注意,由于 链重组,具有特定区块号的区块可能发生变化,因此此 RPC 可能返回具有相同纪元数字的不同纪元。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_current_epoch",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "compact_target": "0x1e083126",
    "length": "0x708",
    "number": "0x1",
    "start_number": "0x3e8"
  }
}

方法 get_epoch_by_number

  • get_epoch_by_number(epoch_number)
  • 结果: EpochView | null

返回 规范链 中具有特定纪元数字的纪元。

参数
  • epoch_number - 纪元数字
返回值

epoch_number小于或等于由get_current_epoch返回的当前纪元数时,RPC返回该纪元;否则返回null。

由于链重组,对于相同的epoch_number,此RPC可能在不同的调用中返回null或不同的纪元。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_epoch_by_number",
  "params": [
    "0x0"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "compact_target": "0x20010000",
    "length": "0x3e8",
    "number": "0x0",
    "start_number": "0x0"
  }
}

方法 get_block_economic_state

返回区块的增加发行量、矿工奖励以及总交易费。

如果区块不在主链上,此RPC返回null。

CKB延迟为矿工创建CKB。区块N的cellbase输出细胞是为创建区块N - 1 - ProposalWindow.farthest的矿工而创建的。

在主网上,ProposalWindow.farthest为10,因此区块100的输出是奖励给创建区块89的矿工。

由于延迟,如果区块奖励尚未最终确定,此RPC返回null。例如,只有当get_tip_block_number返回的数字大于或等于100时,区块89的经济状态才可用。

参数
  • block_hash - 指定应分析奖励的区块哈希。
返回值

如果具有哈希block_hash的区块位于主链上,并且其奖励已最终确定,则返回此区块的区块奖励分析。一个特殊情况是创世块的返回值为null。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block_economic_state",
  "params": [
    "0x02530b25ad0ff677acc365cb73de3e8cc09c7ddd58272e879252e199d08df83b"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "finalized_at": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "issuance": {
      "primary": "0x18ce922bca",
      "secondary": "0x7f02ec655"
    },
    "miner_reward": {
      "committed": "0x0",
      "primary": "0x18ce922bca",
      "proposal": "0x0",
      "secondary": "0x17b93605"
    },
    "txs_fee": "0x0"
  }
}

方法 get_transaction_proof

返回一个Merkle证明,证明交易包含在区块中。

参数
  • tx_hashes - 交易哈希,所有交易必须位于同一区块中
  • block_hash - 可选参数,如果指定,则在具有此哈希的区块中查找交易
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_transaction_proof",
  "params": [
    [ "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3" ]
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "block_hash": "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed",
    "proof": {
      "indices": [ "0x0" ],
      "lemmas": []
    },
    "witnesses_root": "0x2bb631f4a251ec39d943cc238fc1e39c7f0e99776e8a1e7be28a03c70c4f4853"
  }
}

方法 verify_transaction_proof

验证证明指向区块中的交易,返回其承诺的交易哈希。

参数
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "verify_transaction_proof",
  "params": [
    {
      "block_hash": "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed",
      "proof": {
        "indices": [ "0x0" ],
        "lemmas": []
      },
      "witnesses_root": "0x2bb631f4a251ec39d943cc238fc1e39c7f0e99776e8a1e7be28a03c70c4f4853"
    }
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": [
    "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
  ]
}

方法 get_transaction_and_witness_proof

返回一个包含在区块中的交易见证的Merkle证明。

参数
  • tx_hashes - 交易哈希,所有交易必须位于同一区块中
  • block_hash - 可选参数,如果指定,则在具有此哈希的区块中查找交易
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_transaction_and_witness_proof",
  "params": [
    [ "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3" ]
  ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
        "block_hash": "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed",
        "transactions_proof": {
            "indices": [ "0x0" ],
            "lemmas": []
        },
        "witnesses_proof": {
            "indices": [
                "0x0"
            ],
            "lemmas": []
        }
    },
    "id": 42
}

方法 verify_transaction_and_witness_proof

验证证明指向区块中的交易,返回其承诺的交易哈希。

参数
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "verify_transaction_and_witness_proof",
  "params": [
    {
      "block_hash": "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed",
        "transactions_proof": {
            "indices": [ "0x0" ],
            "lemmas": []
        },
        "witnesses_proof": {
            "indices": [
                "0x0"
            ],
            "lemmas": []
        }
    }
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": [
    "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
  ]
}

方法 get_fork_block

通过哈希返回分叉区块的信息。

参数
  • block_hash - 分叉区块的哈希。
  • verbosity - 结果格式,允许0和2。(可选,默认为2)
返回值

RPC返回分叉区块或null。当RPC返回区块时,区块哈希必须等于参数block_hash

请注意,由于点对点同步的技术性质,即使在完全同步到主链的情况下,RPC也可能在不同的节点上返回null或分叉区块结果,即使它们具有相同的block_hash。此外,由于链重组,对于相同的block_hash,RPC有时可能返回null,有时返回分叉区块。

verbosity为2时,它返回一个JSON对象作为result。有关架构,请参阅BlockView

verbosity为0时,它返回一个以0x前缀的十六进制字符串作为result。该字符串使用table Block架构编码了由molecule序列化的区块。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_fork_block",
  "params": [
    "0xdca341a42890536551f99357612cef7148ed471e3b6419d0844a4e400be6ee94"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "header": {
      "compact_target": "0x1e083126",
      "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
      "epoch": "0x7080018000001",
      "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "hash": "0xdca341a42890536551f99357612cef7148ed471e3b6419d0844a4e400be6ee94",
      "nonce": "0x0",
      "number": "0x400",
      "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
      "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
      "timestamp": "0x5cd2b118",
      "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
      "version": "0x0"
    },
    "proposals": [],
    "transactions": [
      {
        "cell_deps": [],
        "hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17",
        "header_deps": [],
        "inputs": [
          {
            "previous_output": {
              "index": "0xffffffff",
              "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            },
            "since": "0x400"
          }
        ],
        "outputs": [
          {
            "capacity": "0x18e64b61cf",
            "lock": {
              "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
              "hash_type": "data",
              "args": "0x"
            },
            "type": null
          }
        ],
        "outputs_data": [
          "0x"
        ],
        "version": "0x0",
        "witnesses": [
          "0x450000000c000000410000003500000010000000300000003100000028e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5000000000000000000"
        ]
      }
    ],
    "uncles": []
  }
}

verbosity为0时,响应如下。

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x..."
}

方法 get_consensus

返回各种共识参数。

返回值

如果有任何硬分叉功能有epoch=null,则表示该功能将永远不会被激活。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_consensus",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
        "block_version": "0x0",
        "cellbase_maturity": "0x10000000000",
        "dao_type_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "epoch_duration_target": "0x3840",
        "genesis_hash": "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed",
        "hardfork_features": [
            { "rfc": "0028", "epoch_number": "0x1526" },
            { "rfc": "0029", "epoch_number": "0x0" },
            { "rfc": "0030", "epoch_number": "0x0" },
            { "rfc": "0031", "epoch_number": "0x0" },
            { "rfc": "0032", "epoch_number": "0x1526" },
            { "rfc": "0036", "epoch_number": "0x0" },
            { "rfc": "0038", "epoch_number": "0x0" },
            { "rfc": "0048", "epoch_number": null },
            { "rfc": "0049", "epoch_number": null }
         ],
        "id": "main",
        "initial_primary_epoch_reward": "0x71afd498d000",
        "max_block_bytes": "0x91c08",
        "max_block_cycles": "0xd09dc300",
        "max_block_proposals_limit": "0x5dc",
        "max_uncles_num": "0x2",
        "median_time_block_count": "0x25",
        "orphan_rate_target": {
            "denom": "0x28",
            "numer": "0x1"
        },
        "permanent_difficulty_in_dummy": false,
        "primary_epoch_reward_halving_interval": "0x2238",
        "proposer_reward_ratio": {
            "denom": "0xa",
            "numer": "0x4"
        },
        "secondary_epoch_reward": "0x37d0c8e28542",
        "secp256k1_blake160_multisig_all_type_hash": null,
        "secp256k1_blake160_sighash_all_type_hash": null,
        "softforks": {
            "testdummy": {
                "status": "rfc0043",
                "rfc0043": {
                    "bit": 1,
                    "min_activation_epoch": "0x0",
                    "period": "0xa",
                    "start": "0x0",
                    "threshold": {
                        "denom": "0x4",
                        "numer": "0x3"
                    },
                    "timeout": "0x0"
                }
            }
        },
        "tx_proposal_window": {
            "closest": "0x2",
            "farthest": "0xa"
        },
        "tx_version": "0x0",
        "type_id_code_hash": "0x00000000000000000000000000000000000000000000000000545950455f4944"
    }
}

方法 get_block_median_time

  • get_block_median_time(block_hash)
  • 结果: Uint64 | null

通过区块哈希返回过去的中位数时间。

参数
  • block_hash - 对于连续的区块序列计算一个中位数时间。 block_hash指示序列的最高区块。
返回值

当给定的区块哈希不在当前的主链上时,此RPC返回null;否则返回连续37个区块的中位数时间,其中给定区块哈希具有最高的高度。

请注意,给定的区块包含在中位数时间内。包含的区块编号范围是[MAX(区块 - 36, 0), 区块]

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block_median_time",
  "params": [
    "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x5cd2b105"
}

方法 estimate_cycles

estimate_cycles运行一个事务并返回执行消耗的周期数。

此方法不会检查事务的有效性,而只会运行锁脚本和类型脚本,然后返回执行周期数。

它用于估计脚本消耗了多少周期。

错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "estimate_cycles",
  "params": [
    {
      "cell_deps": [
        {
          "dep_type": "code",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
          }
        }
      ],
      "header_deps": [
        "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
      ],
      "inputs": [
        {
          "previous_output": {
            "index": "0x0",
            "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
          },
          "since": "0x0"
        }
      ],
      "outputs": [
        {
          "capacity": "0x2540be400",
          "lock": {
            "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
            "hash_type": "data",
            "args": "0x"
          },
          "type": null
        }
      ],
      "outputs_data": [
        "0x"
      ],
      "version": "0x0",
      "witnesses": []
    }
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "cycles": "0x219"
  }
}

方法 get_fee_rate_statics

👎自0.109.0版本起已弃用:请使用RPC方法 get_fee_rate_statistics 替代

返回链上已确认区块的费率统计信息

参数
  • target - 指定要计算的已确认区块的数量(1 - 101)。如果数字是偶数,则自动加一。如果未指定,则默认为21
返回值

如果查询找到相应的历史数据,则返回相应的统计数据,包含平均值和中位数,以每千字节的沙恩纳为单位。如果没有,则返回null。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_fee_rate_statics",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "mean": "0xe79d",
    "median": "0x14a8"
   }
}

方法 get_fee_rate_statistics

返回链上已确认区块的费率统计信息

参数
  • target - 指定要计算的已确认区块的数量(1 - 101)。如果数字是偶数,则自动加一。如果未指定,则默认为21
返回值

如果查询找到相应的历史数据,则返回相应的统计数据,包含平均值和中位数,以每千字节的沙恩纳为单位。如果没有,则返回null。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_fee_rate_statistics",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "mean": "0xe79d",
    "median": "0x14a8"
   }
}

模块 Debug

内部RPC方法的RPC模块调试。

本模块仅适用于CKB开发者,不会保证兼容性。 这里的方法可能会在没有提前通知的情况下被更改或删除。

方法 jemalloc_profiling_dump

  • jemalloc_profiling_dump()

  • 结果: string

将jemalloc内存分析信息输出到文件。

该文件存储在运行CKB节点的服务器上。

成功时返回输出文件的路径,失败时返回错误。

方法 update_main_logger

在CKB运行时更改主日志配置选项。

方法 set_extra_logger

  • set_extra_logger(名称,配置选项)
  • 结果: null

为额外日志记录器设置配置选项。

CKB节点允许设置额外的日志记录器。这些日志记录器将有自己的日志文件,并且它们只会将日志追加到自己的日志文件中。

参数
  • name - 额外日志记录器名称
  • config_opt - 当此值不为null时,添加新日志记录器或更新现有日志记录器。当此值为null时,删除日志记录器。

模块 Experiment

用于实验方法的RPC模块实验。

EXPERIMENTAL警告

这里的方法可能在未来的版本中删除或更改,而不会提前通知。

方法 dry_run_transaction

👎自0.105.1版本起已弃用:请使用RPC方法 estimate_cycles 替代

执行事务的干运行并返回执行周期。

此方法不会检查事务的有效性,而只会运行锁脚本和类型脚本,然后返回执行周期数。

用于调试事务脚本和查询脚本消耗了多少周期。

错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "dry_run_transaction",
  "params": [
    {
      "cell_deps": [
        {
          "dep_type": "code",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
          }
        }
      ],
      "header_deps": [
        "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
      ],
      "inputs": [
        {
          "previous_output": {
            "index": "0x0",
            "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
          },
          "since": "0x0"
        }
      ],
      "outputs": [
        {
          "capacity": "0x2540be400",
          "lock": {
            "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
            "hash_type": "data",
            "args": "0x"
          },
          "type": null
        }
      ],
      "outputs_data": [
        "0x"
      ],
      "version": "0x0",
      "witnesses": []
    }
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "cycles": "0x219"
  }
}

方法 calculate_dao_maximum_withdraw

根据引用的DAO单元格和提款区块哈希,计算可以获得的最高提款金额。

参数
  • out_point - 对DAO单元格的引用,存款事务的输出。
  • kind - 两种DAO提款金额计算选项。

选项1,假设提款阶段1事务的参考区块哈希,此区块必须在 规范链 上,占用容量的计算将基于存款事务的输出,假设阶段1事务的输出与存款事务的输出相同。

选项2,提款阶段1事务的出点,占用容量的计算将基于相应的阶段1事务的输出。

返回值

RPC返回当使用区块哈希或提款阶段1事务出点作为参考时,使用out_point提款后的最终容量。

在CKB中,脚本无法获取事务提交在哪个区块的信息。一种解决方案是让事务引用一个区块哈希,这样脚本就知道事务至少在参考区块之后提交。

错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "calculate_dao_maximum_withdraw",
  "params": [
    {
      "index": "0x0",
      "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
    },
    "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x4a8b4e8a4"
}

模块 Indexer

RPC模块Indexer。

方法 get_indexer_tip

返回索引的提示

返回值
  • block_hash - 索引提示区块哈希
  • block_number - 索引提示区块号
示例

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_indexer_tip"
}

响应

{
  "jsonrpc": "2.0",
  "result": {
    "block_hash": "0x4959d6e764a2edc6038dbf03d61ebcc99371115627b186fdcccb2161fbd26edc",
    "block_number": "0x5b513e"
  },
  "id": 2
}

方法 get_cells

通过锁定脚本或类型脚本返回活动单元格集合。

参数
  • search_key
    • script - 脚本,支持前缀搜索
    • script_type - 枚举,锁定 | 类型
    • script_search_mode - 枚举,前缀 | 精确
    • filter - 根据以下条件过滤单元格,所有条件都是可选的
      • script: 如果搜索脚本类型是锁定,则通过类型脚本前缀过滤单元格,反之亦然
      • script_len_range: [u64; 2],通过脚本长度范围过滤单元格,[包含,不包含]
      • output_data: 通过输出数据过滤单元格
      • output_data_filter_mode: 枚举,前缀 | 精确 | 部分
      • output_data_len_range: [u64; 2],通过输出数据长度范围过滤单元格,[包含,不包含]
      • output_capacity_range: [u64; 2],通过输出容量范围过滤单元格,[包含,不包含]
      • block_range: [u64; 2],通过区块号范围过滤单元格,[包含,不包含]
    • with_data - bool,可选默认是 true,如果with_data设置为false,则结果中返回单元格.output_data字段为null
  • order: 枚举,asc | desc
  • limit: 结果大小限制
  • after: 分页参数,可选
返回值

如果对象的数目小于请求的 limit,则表示这是get_cells的最后页面。

  • objects
    • output: 输出单元格的字段
    • output_data: 单元格数据
    • out_point: 通过交易哈希和输出索引引用单元格
    • block_number: 交易提交到区块中的数量
    • tx_index: 交易提交到区块中的位置索引
  • last_cursor: 分页参数
示例
  • 通过锁定脚本获取单元格

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_cells",
    "params": [
        {
            "script": {
                "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
                "hash_type": "type",
                "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223"
            },
            "script_type": "lock"
        },
        "asc",
        "0x64"
    ]
}

响应

   {
    "jsonrpc": "2.0",
    "result": {
      "last_cursor": "0x409bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8015989ae415bb667931a99896e5fbbfad9ba53a22300000000005b0f8c0000000100000000",
      "objects": [
        {
          "block_number": "0x5b0e6d",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xe8f2180dfba0cb15b45f771d520834515a5f8d7aa07f88894da88c22629b79e9"
          },
          "output": {
            "capacity": "0x189640200",
            "lock": {
              "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223",
              "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0e90",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xece3a27409bde2914fb7a1555d6bfca453ee46af73e665149ef549fd46ec1fc6"
          },
          "output": {
            "capacity": "0x189640200",
            "lock": {
              "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223",
              "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0ead",
          "out_point": {
            "index": "0x1",
            "tx_hash": "0x5c48768f91e3795b418c53211c76fd038c464a24c4aa7e35bbbb6ac5b219f581"
          },
          "output": {
            "capacity": "0xe36dceec20",
            "lock": {
              "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223",
              "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0eeb",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0x90e6981d6a5692d92e54344dc0e12d213447710fa069cc19ddea874619b9ba48"
          },
          "output": {
            "capacity": "0x174876e800",
            "lock": {
              "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223",
              "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0f8c",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0x9ea14510219ae97afa0275215fa77c3c015905281c953a3917a7fd036767429c"
          },
          "output": {
            "capacity": "0x189640200",
            "lock": {
              "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223",
              "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x1"
        }
      ]
    },
    "id": 2
  }
  • 通过锁定脚本和类型脚本过滤获取单元格

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_cells",
    "params": [
        {
            "script": {
                "code_hash": "0x58c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63",
                "hash_type": "type",
                "args": "0x2a49720e721553d0614dff29454ee4e1f07d0707"
            },
            "script_type": "lock",
            "filter": {
                "script": {
                    "code_hash": "0xc5e5dcf215925f7ef4dfaf5f4b4f105bc321c02776d6e7d52a1db3fcd9d011a4",
                    "hash_type": "type",
                    "args": "0x8462b20277bcbaa30d821790b852fb322d55c2b12e750ea91ad7059bc98dda4b"
                }
            }
        },
        "asc",
        "0x64"
    ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
      "last_cursor": "0x4058c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63012a49720e721553d0614dff29454ee4e1f07d070700000000002adf870000000100000001",
      "objects": [
        {
          "block_number": "0x2adf87",
          "out_point": {
            "index": "0x1",
            "tx_hash": "0x04ecbc2df39e3682326a3b23c1bd2465e07eae2379ac0cc713834a1f79753779"
          },
          "output": {
            "capacity": "0x436d81500",
            "lock": {
              "args": "0x2a49720e721553d0614dff29454ee4e1f07d0707",
              "code_hash": "0x58c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63",
              "hash_type": "type"
            },
            "type": {
              "args": "0x8462b20277bcbaa30d821790b852fb322d55c2b12e750ea91ad7059bc98dda4b",
              "code_hash": "0xc5e5dcf215925f7ef4dfaf5f4b4f105bc321c02776d6e7d52a1db3fcd9d011a4",
              "hash_type": "type"
            }
          },
          "output_data": "0x0040d20853d746000000000000000000",
          "tx_index": "0x1"
        }
      ]
    },
    "id": 2
}
  • 通过锁定脚本和设置script_len_range为[0, 1)过滤空类型脚本,script_len是通过(code_hash + hash_type + args).len计算的

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_cells",
    "params": [
        {
            "script": {
                "code_hash": "0x58c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63",
                "hash_type": "type",
                "args": "0x2a49720e721553d0614dff29454ee4e1f07d0707"
            },
            "script_type": "lock",
            "filter": {
                "script_len_range": ["0x0", "0x1"]
            }
        },
        "asc",
        "0x64"
    ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
      "last_cursor": "0x4058c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63012a49720e721553d0614dff29454ee4e1f07d070700000000002adf830000000200000001",
      "objects": [
        {
          "block_number": "0x2adf83",
          "out_point": {
            "index": "0x1",
            "tx_hash": "0x23ec897027c1d2a2b39e2446162bac182f18581be048cb3896ad695559b6839e"
          },
          "output": {
            "capacity": "0x54b42b70b4",
            "lock": {
              "args": "0x2a49720e721553d0614dff29454ee4e1f07d0707",
              "code_hash": "0x58c5f491aba6d61678b7cf7edf4910b1f5e00ec0cde2f42e0abb4fd9aff25a63",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x2"
        }
      ]
    },
    "id": 2
}
  • 通过锁定脚本和过滤容量范围获取单元格

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_cells",
    "params": [
        {
            "script": {
                "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
                "hash_type": "type",
                "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223"
            },
            "script_type": "lock",
            "filter": {
                "output_capacity_range": ["0x0", "0x174876e801"]
            }
        },
        "asc",
        "0x64"
    ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
      "last_cursor": "0x409bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8015989ae415bb667931a99896e5fbbfad9ba53a22300000000005b59df0000000100000001",
      "objects": [
        {
          "block_number": "0x5b59df",
          "out_point": {
            "index": "0x1",
            "tx_hash": "0x21c4632a41140b828e9347ff80480b3e07be4e0a0b8d577565e7421fd5473194"
          },
          "output": {
            "capacity": "0xe815b81c0",
            "lock": {
              "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223",
              "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
              "hash_type": "type"
            },
            "type": null
          },
          "output_data": "0x",
          "tx_index": "0x1"
        }
      ]
    },
    "id": 2
}

方法 get_transactions

通过锁定脚本或类型脚本返回交易集合。

  • search_key
    • script - 脚本,当group_by_transaction为false时支持前缀搜索
    • script_type - 枚举,锁定 | 类型
    • script_search_mode - 枚举,前缀 | 精确
    • filter - 根据以下条件过滤单元格,所有条件都是可选的
      • script: 如果搜索脚本类型是锁定,则通过类型脚本过滤单元格,反之亦然
      • block_range: [u64; 2],通过区块号范围过滤单元格,[包含,不包含]
    • group_by_transaction - 布尔类型,可选参数,默认值为 false,如果将 group_by_transaction 设置为 true,则返回的对象将按 tx 哈希分组
  • order: 枚举,asc | desc
  • limit: 结果大小限制
  • after: 分页参数,可选
返回值

如果对象的数量少于请求的 limit,则表示这些是 get_transactions 的最后一页。

  • objects - 枚举类型,未分组的 TxWithCell | 分组的 TxWithCells
    • TxWithCell
      • tx_hash: 交易哈希,
      • block_number: 交易提交到区块中的数量
      • tx_index: 交易提交到区块中的位置索引
      • io_type: 枚举类型,输入 | 输出
      • io_index: 单元在交易输入或输出中的位置索引
    • TxWithCells
      • tx_hash: 交易哈希,
      • block_number: 交易提交到区块中的数量
      • tx_index: 交易提交到区块中的位置索引
      • cells: Array [[io_type, io_index]]
  • last_cursor - 分页参数
示例
  • 通过锁脚本获取交易

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_transactions",
    "params": [
        {
            "script": {
                "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
                "hash_type": "type",
                "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223"
            },
            "script_type": "lock"
        },
        "asc",
        "0x64"
    ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
      "last_cursor": "0x809bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8015989ae415bb667931a99896e5fbbfad9ba53a22300000000005b59df000000010000000101",
      "objects": [
        {
          "block_number": "0x5b033a",
          "io_index": "0x0",
          "io_type": "output",
          "tx_hash": "0x556060b62d16386da53f8a4b458314dfa2d1988a7bcc5c96c3bb2a350a3453a1",
          "tx_index": "0x4"
        },
        {
          "block_number": "0x5b0671",
          "io_index": "0x0",
          "io_type": "input",
          "tx_hash": "0x8205b2b4cd6380d7e332c7a5b49bf776a0322ba19f46dc6ca1f8c59f7daee08d",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0671",
          "io_index": "0x1",
          "io_type": "output",
          "tx_hash": "0x8205b2b4cd6380d7e332c7a5b49bf776a0322ba19f46dc6ca1f8c59f7daee08d",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0e6d",
          "io_index": "0x0",
          "io_type": "output",
          "tx_hash": "0xe8f2180dfba0cb15b45f771d520834515a5f8d7aa07f88894da88c22629b79e9",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0e90",
          "io_index": "0x0",
          "io_type": "output",
          "tx_hash": "0xece3a27409bde2914fb7a1555d6bfca453ee46af73e665149ef549fd46ec1fc6",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0ead",
          "io_index": "0x0",
          "io_type": "input",
          "tx_hash": "0x5c48768f91e3795b418c53211c76fd038c464a24c4aa7e35bbbb6ac5b219f581",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0ead",
          "io_index": "0x1",
          "io_type": "output",
          "tx_hash": "0x5c48768f91e3795b418c53211c76fd038c464a24c4aa7e35bbbb6ac5b219f581",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0eeb",
          "io_index": "0x0",
          "io_type": "output",
          "tx_hash": "0x90e6981d6a5692d92e54344dc0e12d213447710fa069cc19ddea874619b9ba48",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0f8c",
          "io_index": "0x0",
          "io_type": "output",
          "tx_hash": "0x9ea14510219ae97afa0275215fa77c3c015905281c953a3917a7fd036767429c",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b5638",
          "io_index": "0x0",
          "io_type": "input",
          "tx_hash": "0x9346da4caa846cc035c182ecad0c17326a587983d25fb1e12a388f1a9c5c56b4",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b5638",
          "io_index": "0x1",
          "io_type": "input",
          "tx_hash": "0x9346da4caa846cc035c182ecad0c17326a587983d25fb1e12a388f1a9c5c56b4",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b5638",
          "io_index": "0x1",
          "io_type": "output",
          "tx_hash": "0x9346da4caa846cc035c182ecad0c17326a587983d25fb1e12a388f1a9c5c56b4",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b5638",
          "io_index": "0x2",
          "io_type": "input",
          "tx_hash": "0x9346da4caa846cc035c182ecad0c17326a587983d25fb1e12a388f1a9c5c56b4",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59c2",
          "io_index": "0x0",
          "io_type": "input",
          "tx_hash": "0x5b58f90fb3309333bf0bec878f3a05038c7fe816747300ecdac37a9da76c4128",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59c2",
          "io_index": "0x1",
          "io_type": "output",
          "tx_hash": "0x5b58f90fb3309333bf0bec878f3a05038c7fe816747300ecdac37a9da76c4128",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59cc",
          "io_index": "0x0",
          "io_type": "input",
          "tx_hash": "0x57ca2822c28e02b199424a731b2efd2c9bf752f07b7309f555f2e71abe83ba26",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59cc",
          "io_index": "0x1",
          "io_type": "input",
          "tx_hash": "0x57ca2822c28e02b199424a731b2efd2c9bf752f07b7309f555f2e71abe83ba26",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59cc",
          "io_index": "0x1",
          "io_type": "output",
          "tx_hash": "0x57ca2822c28e02b199424a731b2efd2c9bf752f07b7309f555f2e71abe83ba26",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59df",
          "io_index": "0x0",
          "io_type": "input",
          "tx_hash": "0x21c4632a41140b828e9347ff80480b3e07be4e0a0b8d577565e7421fd5473194",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59df",
          "io_index": "0x1",
          "io_type": "output",
          "tx_hash": "0x21c4632a41140b828e9347ff80480b3e07be4e0a0b8d577565e7421fd5473194",
          "tx_index": "0x1"
        }
      ]
    },
    "id": 2
}
  • 通过锁脚本和按 tx 哈希分组获取交易

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_transactions",
    "params": [
        {
            "script": {
                "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
                "hash_type": "type",
                "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223"
            },
            "script_type": "lock",
            "group_by_transaction": true
        },
        "asc",
        "0x64"
    ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
      "last_cursor": "0x809bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8015989ae415bb667931a99896e5fbbfad9ba53a22300000000005b59df000000010000000101",
      "objects": [
        {
          "block_number": "0x5b033a",
          "cells": [
            [
              "output",
              "0x0"
            ]
          ],
          "tx_hash": "0x556060b62d16386da53f8a4b458314dfa2d1988a7bcc5c96c3bb2a350a3453a1",
          "tx_index": "0x4"
        },
        {
          "block_number": "0x5b0671",
          "cells": [
            [
              "input",
              "0x0"
            ],
            [
              "output",
              "0x1"
            ]
          ],
          "tx_hash": "0x8205b2b4cd6380d7e332c7a5b49bf776a0322ba19f46dc6ca1f8c59f7daee08d",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0e6d",
          "cells": [
            [
              "output",
              "0x0"
            ]
          ],
          "tx_hash": "0xe8f2180dfba0cb15b45f771d520834515a5f8d7aa07f88894da88c22629b79e9",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0e90",
          "cells": [
            [
              "output",
              "0x0"
            ]
          ],
          "tx_hash": "0xece3a27409bde2914fb7a1555d6bfca453ee46af73e665149ef549fd46ec1fc6",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0ead",
          "cells": [
            [
              "input",
              "0x0"
            ],
            [
              "output",
              "0x1"
            ]
          ],
          "tx_hash": "0x5c48768f91e3795b418c53211c76fd038c464a24c4aa7e35bbbb6ac5b219f581",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0eeb",
          "cells": [
            [
              "output",
              "0x0"
            ]
          ],
          "tx_hash": "0x90e6981d6a5692d92e54344dc0e12d213447710fa069cc19ddea874619b9ba48",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b0f8c",
          "cells": [
            [
              "output",
              "0x0"
            ]
          ],
          "tx_hash": "0x9ea14510219ae97afa0275215fa77c3c015905281c953a3917a7fd036767429c",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b5638",
          "cells": [
            [
              "input",
              "0x0"
            ],
            [
              "input",
              "0x1"
            ],
            [
              "output",
              "0x1"
            ],
            [
              "input",
              "0x2"
            ]
          ],
          "tx_hash": "0x9346da4caa846cc035c182ecad0c17326a587983d25fb1e12a388f1a9c5c56b4",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59c2",
          "cells": [
            [
              "input",
              "0x0"
            ],
            [
              "output",
              "0x1"
            ]
          ],
          "tx_hash": "0x5b58f90fb3309333bf0bec878f3a05038c7fe816747300ecdac37a9da76c4128",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59cc",
          "cells": [
            [
              "input",
              "0x0"
            ],
            [
              "input",
              "0x1"
            ],
            [
              "output",
              "0x1"
            ]
          ],
          "tx_hash": "0x57ca2822c28e02b199424a731b2efd2c9bf752f07b7309f555f2e71abe83ba26",
          "tx_index": "0x1"
        },
        {
          "block_number": "0x5b59df",
          "cells": [
            [
              "input",
              "0x0"
            ],
            [
              "output",
              "0x1"
            ]
          ],
          "tx_hash": "0x21c4632a41140b828e9347ff80480b3e07be4e0a0b8d577565e7421fd5473194",
          "tx_index": "0x1"
        }
      ]
    },
    "id": 2
}

方法 get_cells_capacity

根据锁或类型脚本返回实时单元容量。

参数
  • search_key
    • script - 脚本
    • script_type - 枚举,锁定 | 类型
    • script_search_mode - 枚举,前缀 | 精确
    • filter - 根据以下条件过滤单元格,所有条件都是可选的
      • script: 如果搜索脚本类型是锁定,则通过类型脚本前缀过滤单元格,反之亦然
      • script_len_range: [u64; 2],通过脚本长度范围过滤单元格,[包含,不包含]
      • output_data: 通过输出数据过滤单元格
      • output_data_filter_mode: 枚举,前缀 | 精确 | 部分
      • output_data_len_range: [u64; 2],通过输出数据长度范围过滤单元格,[包含,不包含]
      • output_capacity_range: [u64; 2],通过输出容量范围过滤单元格,[包含,不包含]
      • block_range: [u64; 2],通过区块号范围过滤单元格,[包含,不包含]
返回值
  • capacity - 总容量
  • block_hash - 索引提示区块哈希
  • block_number - 索引提示区块号
示例

请求

{
    "id": 2,
    "jsonrpc": "2.0",
    "method": "get_cells_capacity",
    "params": [
        {
            "script": {
                "code_hash": "0x9bd7e06f3ecf4be0f2fcd2188b23f1b9fcc88e5d4b65a8637b17723bbda3cce8",
                "hash_type": "type",
                "args": "0x5989ae415bb667931a99896e5fbbfad9ba53a223"
            },
            "script_type": "lock"
        }
    ]
}

响应

{
    "jsonrpc": "2.0",
    "result": {
      "block_hash": "0xbc52444952dc5eb01a7826aaf6bb1b660db01797414e259e7a6e6d636de8fc7c",
      "block_number": "0x5b727a",
      "capacity": "0xf0e8e4b4a0"
    },
    "id": 2
}

Module Integration_test

集成测试的 RPC

方法 process_block_without_verify

  • process_block_without_verify(data,broadcast)
    • data: Block
    • broadcast: boolean
  • 结果:H256 | null

不进行任何块验证的情况下处理块。

参数
  • data - 块数据(二进制)。

  • broadcast - true 以启用广播(中继)块到其他对等节点。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "process_block_without_verify",
  "params": [
   {
	"header": {
		"compact_target": "0x1e083126",
		"dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
		"epoch": "0x7080018000001",
		"extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
		"nonce": "0x0",
		"number": "0x400",
		"parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
		"proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
		"timestamp": "0x5cd2b117",
		"transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
		"version": "0x0"
	},
	"proposals": [],
	"transactions": [{
		"cell_deps": [],
		"header_deps": [],
		"inputs": [{
			"previous_output": {
				"index": "0xffffffff",
				"tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
			},
			"since": "0x400"
		}],
		"outputs": [{
			"capacity": "0x18e64b61cf",
			"lock": {
				"code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
				"hash_type": "data",
				"args": "0x"
			},
			"type": null
		}],
		"outputs_data": [
			"0x"
		],
		"version": "0x0",
		"witnesses": [
			"0x450000000c000000410000003500000010000000300000003100000028e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5000000000000000000"
		]
	}],
	"uncles": []
    },
    true
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
}

方法 truncate

  • truncate(target_tip_hash)
    • target_tip_hash: H256
  • 结果: null

将链截断到指定的 tip 哈希,每次只能截断少于 50000 个块。

参数
  • target_tip_hash - 指定的头部哈希
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "truncate",
  "params": [
    "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 generate_block

  • generate_block()

  • result: H256

生成块(进行验证)并广播块。

请注意,如果并发调用,它可能返回相同块的哈希。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "generate_block",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x60dd3fa0e81db3ee3ad41cf4ab956eae7e89eb71cd935101c26c4d0652db3029"
}

方法 generate_epochs

  • generate_epochs(num_epochs)
  • 结果: Uint64

在开发期间生成周期,可用于测试 DAO 相关功能的场景。

返回生成指定数量周期后的更新周期号。

参数
  • num_epochs - 要生成的周期数。
示例

请求

生成 2 个周期

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "generate_epochs",
  "params": ["0x2"]
}

输入参数 "0x2" 将在方法中规范化为 "0x10000000002"(正确的 EpochNumberWithFraction 类型)。因此,如果您想以整数的形式生成周期,只需传递整数即可,只要它不超过 16777215(24 位)。

生成 1/2 个周期

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "generate_epochs",
  "params": ["0x20001000000"]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa0001000003"
}

方法 notify_transaction

将交易添加到 tx-pool。

参数
  • transaction - 要添加的指定交易
示例

请求

{
	"id": 42,
	"jsonrpc": "2.0",
	"method": "notify_transaction",
	"params":
    [
         {
			"cell_deps": [{
				"dep_type": "code",
				"out_point": {
					"index": "0x0",
					"tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
				}
			}],
			"header_deps": [
				"0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
			],
			"inputs": [{
				"previous_output": {
					"index": "0x0",
					"tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
				},
				"since": "0x0"
			}],
			"outputs": [{
				"capacity": "0x2540be400",
				"lock": {
					"code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
					"hash_type": "data",
					"args": "0x"
				},
				"type": null
			}],
			"outputs_data": [
				"0x"
			],
			"version": "0x0",
			"witnesses": []
		}
	]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3"
}

方法 generate_block_with_template

  • generate_block_with_template(block_template)
  • result: H256

使用块模板生成块,附加计算后的 dao 字段以构建新块,

然后处理块并广播块。

参数
  • block_template - 要添加的指定交易
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "generate_block_with_template",
  "params": [
   {
    "bytes_limit": "0x91c08",
    "cellbase": {
      "cycles": null,
      "data": {
        "cell_deps": [],
        "header_deps": [],
        "inputs": [
          {
            "previous_output": {
              "index": "0xffffffff",
              "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            },
            "since": "0x401"
          }
        ],
       "outputs": [
         {
           "capacity": "0x18e64efc04",
            "lock": {
              "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
              "hash_type": "data",
              "args": "0x"
            },
            "type": null
          }
        ],
        "outputs_data": [
          "0x"
        ],
        "version": "0x0",
        "witnesses": [
          "0x650000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac30c00000054455354206d657373616765"
        ]
      },
      "hash": "0xbaf7e4db2fd002f19a597ca1a31dfe8cfe26ed8cebc91f52b75b16a7a5ec8bab"
    },
    "compact_target": "0x1e083126",
    "current_time": "0x174c45e17a3",
    "cycles_limit": "0xd09dc300",
    "dao": "0xd495a106684401001e47c0ae1d5930009449d26e32380000000721efd0030000",
    "epoch": "0x7080019000001",
    "extension": "0xb0a0079f3778c0ba0d89d88b389c602cc18b8a0355d16c0713f8bfcee64b5f84",
    "number": "0x401",
    "parent_hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "proposals": ["0xa0ef4eb5f4ceeb08a4c8"],
    "transactions": [],
    "uncles": [
      {
        "hash": "0xdca341a42890536551f99357612cef7148ed471e3b6419d0844a4e400be6ee94",
        "header": {
          "compact_target": "0x1e083126",
          "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
          "epoch": "0x7080018000001",
          "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "nonce": "0x0",
          "number": "0x400",
          "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
          "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "timestamp": "0x5cd2b118",
          "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
          "version":"0x0"
        },
        "proposals": [],
        "required": false
      }
    ],
    "uncles_count_limit": "0x2",
    "version": "0x0",
    "work_id": "0x0"
   }
 ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0x899541646ae412a99fdbefc081e1a782605a7815998a096af16e51d4df352c75"
}

方法 calculate_dao_field

根据指定的块模板返回计算后的 dao 字段。

参数
  • block_template - 指定的块模板
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "calculate_dao_field",
  "params": [
   {
    "bytes_limit": "0x91c08",
    "cellbase": {
      "cycles": null,
      "data": {
        "cell_deps": [],
        "header_deps": [],
        "inputs": [
          {
            "previous_output": {
              "index": "0xffffffff",
              "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            },
            "since": "0x401"
          }
        ],
       "outputs": [
         {
           "capacity": "0x18e64efc04",
            "lock": {
              "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
              "hash_type": "data",
              "args": "0x"
            },
            "type": null
          }
        ],
        "outputs_data": [
          "0x"
        ],
        "version": "0x0",
        "witnesses": [
          "0x650000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac30c00000054455354206d657373616765"
        ]
      },
      "hash": "0xbaf7e4db2fd002f19a597ca1a31dfe8cfe26ed8cebc91f52b75b16a7a5ec8bab"
    },
    "compact_target": "0x1e083126",
    "current_time": "0x174c45e17a3",
    "cycles_limit": "0xd09dc300",
    "dao": "0xd495a106684401001e47c0ae1d5930009449d26e32380000000721efd0030000",
    "epoch": "0x7080019000001",
    "extension": "0xb0a0079f3778c0ba0d89d88b389c602cc18b8a0355d16c0713f8bfcee64b5f84",
    "number": "0x401",
    "parent_hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "proposals": ["0xa0ef4eb5f4ceeb08a4c8"],
    "transactions": [],
    "uncles": [
      {
        "hash": "0xdca341a42890536551f99357612cef7148ed471e3b6419d0844a4e400be6ee94",
        "header": {
          "compact_target": "0x1e083126",
          "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
          "epoch": "0x7080018000001",
          "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "nonce": "0x0",
          "number": "0x400",
          "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
          "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "timestamp": "0x5cd2b118",
          "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
          "version":"0x0"
        },
        "proposals": [],
        "required": false
      }
    ],
    "uncles_count_limit": "0x2",
    "version": "0x0",
    "work_id": "0x0"
   }
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xd495a106684401001e47c0ae1d5930009449d26e32380000000721efd0030000"
}

方法 send_test_transaction

向交易池提交一个新的测试本地事务,仅供测试。如果事务已经在池中,则重新广播给对等节点。

参数
  • transaction - 交易。
  • outputs_validator - 在进入交易池之前验证交易输出。(可选,默认为"passthrough")。
错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "send_test_transaction",
  "params": [
    {
      "cell_deps": [
        {
          "dep_type": "code",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
          }
        }
      ],
      "header_deps": [
        "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
      ],
      "inputs": [
        {
          "previous_output": {
            "index": "0x0",
            "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
          },
          "since": "0x0"
        }
      ],
      "outputs": [
        {
          "capacity": "0x2540be400",
          "lock": {
            "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
            "hash_type": "data",
            "args": "0x"
          },
          "type": null
        }
      ],
      "outputs_data": [
        "0x"
      ],
      "version": "0x0",
      "witnesses": []
    },
    "passthrough"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3"
}

模块 Miner

RPC 模块 Miner 用于矿工。

矿工从 CKB 获取模板,可选地选择交易,解决 PoW 拼图,并提交找到的新块。

方法 get_block_template

  • get_block_template(bytes_limit,proposals_limit,max_version)
  • result: BlockTemplate

返回矿工的块模板。

矿工可以从模板中组装新块。该 RPC 设计允许矿工从块中移除交易并添加新交易。

参数
  • bytes_limit - 块的最大序列化大小(以字节为单位)。(可选: 默认为共识限制。)
  • proposals_limit - 最大提案数量。(可选: 默认为共识限制。)
  • max_version - 最大块版本。(可选: 默认为当前客户端版本中配置的一个。)
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_block_template",
  "params": [
    null,
    null,
    null
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "bytes_limit": "0x91c08",
    "cellbase": {
      "cycles": null,
      "data": {
        "cell_deps": [],
        "header_deps": [],
        "inputs": [
          {
            "previous_output": {
              "index": "0xffffffff",
              "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
            },
            "since": "0x401"
          }
        ],
        "outputs": [
          {
            "capacity": "0x18e64efc04",
            "lock": {
              "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
              "hash_type": "data",
              "args": "0x"
            },
            "type": null
          }
        ],
        "outputs_data": [
          "0x"
        ],
        "version": "0x0",
        "witnesses": [
          "0x6a0000000c00000055000000490000001000000030000000310000001892ea40d82b53c678ff88312450bbb17e164d7a3e0a90941aa58839f56f8df20114000000b2e61ff569acf041b3c2c17724e2379c581eeac311000000000000002054455354206d657373616765"
        ]
      },
      "hash": "0xbaf7e4db2fd002f19a597ca1a31dfe8cfe26ed8cebc91f52b75b16a7a5ec8bab"
    },
    "compact_target": "0x1e083126",
    "current_time": "0x174c45e17a3",
    "cycles_limit": "0xd09dc300",
    "dao": "0xd495a106684401001e47c0ae1d5930009449d26e32380000000721efd0030000",
    "epoch": "0x7080019000001",
    "extension": "0xb0a0079f3778c0ba0d89d88b389c602cc18b8a0355d16c0713f8bfcee64b5f84",
    "number": "0x401",
    "parent_hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "proposals": ["0xa0ef4eb5f4ceeb08a4c8"],
    "transactions": [],
    "uncles": [
      {
        "hash": "0xdca341a42890536551f99357612cef7148ed471e3b6419d0844a4e400be6ee94",
        "header": {
          "compact_target": "0x1e083126",
          "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
          "epoch": "0x7080018000001",
          "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "nonce": "0x0",
          "number": "0x400",
          "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
          "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
          "timestamp": "0x5cd2b118",
          "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
          "version":"0x0"
        },
        "proposals": [],
        "required": false
      }
    ],
    "uncles_count_limit": "0x2",
    "version": "0x0",
    "work_id": "0x0"
  }
}

方法 submit_block

  • submit_block(work_id,block)
    • work_id: string
    • block: Block
  • result: H256

将新块提交到网络。

参数
  • work_id - 与从 get_block_template 返回的相同的作业ID。
  • block - 从区块模板组装的区块,其中PoW谜题已被解决。
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "submit_block",
  "params": [
    "work_id_example",
    {
      "header": {
        "compact_target": "0x1e083126",
        "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
        "epoch": "0x7080018000001",
        "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "nonce": "0x0",
        "number": "0x400",
        "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
        "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
        "timestamp": "0x5cd2b117",
        "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
        "version": "0x0"
      },
      "proposals": [],
      "transactions": [
        {
          "cell_deps": [],
          "header_deps": [],
          "inputs": [
            {
              "previous_output": {
                "index": "0xffffffff",
                "tx_hash": "0x0000000000000000000000000000000000000000000000000000000000000000"
              },
              "since": "0x400"
            }
          ],
          "outputs": [
            {
              "capacity": "0x18e64b61cf",
              "lock": {
                "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
                "hash_type": "data",
                "args": "0x"
              },
              "type": null
            }
          ],
          "outputs_data": [
            "0x"
          ],
          "version": "0x0",
          "witnesses": [
            "0x450000000c000000410000003500000010000000300000003100000028e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5000000000000000000"
          ]
        }
      ],
      "uncles": []
    }
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40"
}

模块 Net

P2P网络的RPC模块Net。

方法 local_node_info

返回本地节点信息。

本地节点是指提供RPC服务的节点本身。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "local_node_info",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "active": true,
    "addresses": [
      {
        "address": "/ip4/192.168.0.2/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS",
        "score": "0xff"
      },
      {
        "address": "/ip4/0.0.0.0/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS",
        "score": "0x1"
      }
    ],
    "connections": "0xb",
    "node_id": "QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS",
    "protocols": [
      {
        "id": "0x0",
        "name": "/ckb/ping",
        "support_versions": [
          "0.0.1"
        ]
      },
      {
        "id": "0x1",
        "name": "/ckb/discovery",
        "support_versions": [
          "0.0.1"
        ]
      }
    ],
    "version": "0.34.0 (f37f598 2020-07-17)"
  }
}

方法 get_peers

返回连接的节点信息。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_peers",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": [
    {
      "addresses": [
        {
          "address": "/ip6/::ffff:18.185.102.19/tcp/8115/p2p/QmXwUgF48ULy6hkgfqrEwEfuHW7WyWyWauueRDAYQHNDfN",
          "score": "0x64"
        },
        {
          "address": "/ip4/18.185.102.19/tcp/8115/p2p/QmXwUgF48ULy6hkgfqrEwEfuHW7WyWyWauueRDAYQHNDfN",
          "score": "0x64"
        }
      ],
      "connected_duration": "0x2f",
      "is_outbound": true,
      "last_ping_duration": "0x1a",
      "node_id": "QmXwUgF48ULy6hkgfqrEwEfuHW7WyWyWauueRDAYQHNDfN",
      "protocols": [
        {
          "id": "0x4",
          "version": "0.0.1"
        },
        {
          "id": "0x2",
          "version": "0.0.1"
        },
        {
          "id": "0x1",
          "version": "0.0.1"
        },
        {
          "id": "0x64",
          "version": "1"
        },
        {
          "id": "0x6e",
          "version": "1"
        },
        {
          "id": "0x66",
          "version": "1"
        },
        {
          "id": "0x65",
          "version": "1"
        },
        {
          "id": "0x0",
          "version": "0.0.1"
        }
      ],
      "sync_state": {
        "best_known_header_hash": null,
        "best_known_header_number": null,
        "can_fetch_count": "0x80",
        "inflight_count": "0xa",
        "last_common_header_hash": null,
        "last_common_header_number": null,
        "unknown_header_list_size": "0x20"
      },
      "version": "0.34.0 (f37f598 2020-07-17)"
    },
    {
      "addresses": [
        {
          "address": "/ip4/174.80.182.60/tcp/52965/p2p/QmVTMd7SEXfxS5p4EEM5ykTe1DwWWVewEM3NwjLY242vr2",
          "score": "0x1"
        }
      ],
      "connected_duration": "0x95",
      "is_outbound": true,
      "last_ping_duration": "0x41",
      "node_id": "QmSrkzhdBMmfCGx8tQGwgXxzBg8kLtX8qMcqECMuKWsxDV",
      "protocols": [
        {
          "id": "0x0",
          "version": "0.0.1"
        },
        {
          "id": "0x2",
          "version": "0.0.1"
        },
        {
          "id": "0x6e",
          "version": "1"
        },
        {
          "id": "0x66",
          "version": "1"
        },
        {
          "id": "0x1",
          "version": "0.0.1"
        },
        {
          "id": "0x65",
          "version": "1"
        },
        {
          "id": "0x64",
          "version": "1"
        },
        {
          "id": "0x4",
          "version": "0.0.1"
        }
      ],
      "sync_state": {
        "best_known_header_hash": "0x2157c72b3eddd41a7a14c361173cd22ef27d7e0a29eda2e511ee0b3598c0b895",
        "best_known_header_number": "0xdb835",
        "can_fetch_count": "0x80",
        "inflight_count": "0xa",
        "last_common_header_hash": "0xc63026bd881d880bb142c855dc8153187543245f0a94391c831c75df31f263c4",
        "last_common_header_number": "0x4dc08",
        "unknown_header_list_size": "0x1f"
      },
      "version": "0.30.1 (5cc1b75 2020-03-23)"
    }
  ]
}

方法 get_banned_addresses

  • get_banned_addresses()

  • 结果: Array< BannedAddr >

返回所有被禁用的IP/Subnet。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_banned_addresses",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": [
    {
      "address": "192.168.0.2/32",
      "ban_reason": "",
      "ban_until": "0x1ac89236180",
      "created_at": "0x16bde533338"
    }
  ]
}

方法 clear_banned_addresses

  • clear_banned_addresses()

  • 结果: null

清除所有被禁用的IP/Subnet。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "clear_banned_addresses",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 set_ban

  • set_ban(address,command,ban_time,absolute,reason)
    • address: string
    • command: string
    • ban_time: Uint64 | null
    • absolute: boolean | null
    • reason: string | null
  • 结果: null

在禁止列表中插入或删除IP/Subnet

参数
  • address - 带有可选子网掩码的IP/Subnet(默认为/32 = 单个IP)。示例
    • "192.168.0.2" 禁用一个单个IP
    • "192.168.0.0/24" 禁用从"192.168.0.0"到"192.168.0.255"的IP。
  • command - insert 将IP/Subnet插入列表,delete 从列表中删除IP/Subnet。
  • ban_time - 以毫秒为单位的时间(如果设置了[absolute],则为直到何时),IP被禁止的时间,可选参数,null表示使用默认时间24小时
  • absolute - 如果设置,则ban_time必须是从纪元以来的绝对时间戳(毫秒),可选参数。
  • reason - 禁止原因,可选参数。
错误
  • InvalidParams(-32602)
    • 期望 address 是一个有效的IP地址,可选子网掩码。
    • 期望 command 在列表 [insert, delete] 中。
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "set_ban",
  "params": [
    "192.168.0.2",
    "insert",
    "0x1ac89236180",
    true,
    "set_ban example"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 sync_state

返回此节点的链同步状态。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "sync_state",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "assume_valid_target": "0x0000000000000000000000000000000000000000000000000000000000000000",
    "assume_valid_target_reached": true,
    "best_known_block_number": "0x400",
    "best_known_block_timestamp": "0x5cd2b117",
    "fast_time": "0x3e8",
    "ibd": true,
    "inflight_blocks_count": "0x0",
    "low_time": "0x5dc",
    "min_chain_work": "0x0",
    "min_chain_work_reached": true,
    "normal_time": "0x4e2",
    "orphan_blocks_count": "0x0",
    "tip_hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "tip_number": "0x400",
    "unverified_tip_hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "unverified_tip_number": "0x400"
  }
}

方法 set_network_active

  • set_network_active(state)
    • state: boolean
  • 结果: null

禁用/启用所有P2P网络活动

参数
  • state - true启用网络,false禁用
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "set_network_active",
  "params": [
    false
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 add_node

  • add_node(peer_id,address)
    • peer_id: string
    • address: string
  • 结果: null

尝试将节点添加到节点列表并尝试连接到它。

参数
  • peer_id - 节点ID。
  • address - 节点地址。

完整的P2P地址通常显示为address/peer_id,例如在日志中

2020-09-16 15:31:35.191 +08:00 NetworkRuntime INFO ckb_network::network
  Listen on address: /ip4/192.168.2.100/tcp/8114/QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS

和在RPC local_node_info

{
  "addresses": [
    {
      "address": "/ip4/192.168.2.100/tcp/8114/QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS",
      "score": "0xff"
    }
  ]
}

在这两个例子中,

  • peer_idQmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS
  • 并且 address/ip4/192.168.2.100/tcp/8114
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "add_node",
  "params": [
    "QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS",
    "/ip4/192.168.2.100/tcp/8114"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 remove_node

  • remove_node(peer_id)
    • peer_id: string
  • 结果: null

尝试从对等列表中删除节点并尝试与之断开连接。

参数
  • peer_id - 节点的对等ID。

这是完整P2P地址的最后一部分。例如,在地址 "/ip4/192.168.2.100/tcp/8114/QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS" 中,peer_idQmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "remove_node",
  "params": [
    "QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 ping_peers

  • ping_peers()

  • 结果: null

请求向所有连接的对等节点发送ping,以测量ping时间。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "ping_peers",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

模块 Pool

事务内存池的RPC模块池。

方法 send_transaction

将新事务提交到事务池。如果事务已在池中,则重新广播到对等节点。

请注意,send_transaction 是一个异步过程。 send_transaction 的返回值不表示事务已被完全验证。如果您想跟踪事务的状态,请使用 get_transaction rpc。

参数
  • transaction - 交易。
  • outputs_validator - 在进入交易池之前验证交易输出。(可选,默认为"passthrough")。
错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "send_transaction",
  "params": [
    {
      "cell_deps": [
        {
          "dep_type": "code",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
          }
        }
      ],
      "header_deps": [
        "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
      ],
      "inputs": [
        {
          "previous_output": {
            "index": "0x0",
            "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
          },
          "since": "0x0"
        }
      ],
      "outputs": [
        {
          "capacity": "0x2540be400",
          "lock": {
            "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
            "hash_type": "data",
            "args": "0x"
          },
          "type": null
        }
      ],
      "outputs_data": [
        "0x"
      ],
      "version": "0x0",
      "witnesses": []
    },
    "passthrough"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3"
}

方法 test_tx_pool_accept

测试事务池是否可以接受事务,而无需将其插入池或重新广播到对等节点。此方法的方法参数和错误与 send_transaction 相同。

参数
  • transaction - 交易。
  • outputs_validator - 在进入交易池之前验证交易输出。(可选,默认为"passthrough")。
错误
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "test_tx_pool_accept",
  "params": [
    {
      "cell_deps": [
        {
          "dep_type": "code",
          "out_point": {
            "index": "0x0",
            "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
          }
        }
      ],
      "header_deps": [
        "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
      ],
      "inputs": [
        {
          "previous_output": {
            "index": "0x0",
            "tx_hash": "0x075fe030c1f4725713c5aacf41c2f59b29b284008fdb786e5efd8a058be51d0c"
          },
          "since": "0x0"
        }
      ],
      "outputs": [
        {
          "capacity": "0x2431ac129",
          "lock": {
            "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
            "hash_type": "data",
            "args": "0x"
          },
          "type": null
        }
      ],
      "outputs_data": [
        "0x"
      ],
      "version": "0x0",
      "witnesses": []
    },
    "passthrough"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "cycles": "0x219",
    "fee": "0x2a66f36e90"
  }
}

如果事务池检查失败,则响应如下

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null,
  "error": {
    "code": -1107,
    "data": "Duplicated(Byte32(0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3))",
    "message": "PoolRejectedDuplicatedTransaction: Transaction(Byte32(0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3)) already exists in transaction_pool"
  }
}

方法 remove_transaction

  • remove_transaction(tx_hash)
  • 结果: boolean

如果存在,则从事务池中删除事务及其所有依赖事务。

参数
  • tx_hash - 事务的哈希。
返回值

如果存在事务,则返回 true;否则返回 false。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "remove_transaction",
  "params": [
    "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3"
  ]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": true
}

方法 tx_pool_info

返回事务池信息。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "tx_pool_info",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "last_txs_updated_at": "0x0",
    "min_fee_rate": "0x3e8",
    "min_rbf_rate": "0x5dc",
    "max_tx_pool_size": "0xaba9500",
    "orphan": "0x0",
    "pending": "0x1",
    "proposed": "0x0",
    "tip_hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
    "tip_number": "0x400",
    "total_tx_cycles": "0x219",
    "total_tx_size": "0x112",
    "tx_size_limit": "0x7d000",
    "verify_queue_size": "0x0"
  }
}

方法 clear_tx_pool

  • clear_tx_pool()

  • 结果: null

从事务池中删除所有事务。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "clear_tx_pool",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": null
}

方法 get_raw_tx_pool

  • get_raw_tx_pool(verbose)
    • verbose: boolean | null
  • 结果: RawTxPool

以字符串事务ID的json数组形式返回事务池中的所有事务ID。

参数
  • verbose - 如果为json对象,则为 true,如果为数组,则为 false,默认为 false
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_raw_tx_pool",
  "params": [true]
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result":
   {
       "pending": {
           "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3": {
               "cycles": "0x219",
               "size": "0x112",
               "fee": "0x16923f7dcf",
               "ancestors_size": "0x112",
               "ancestors_cycles": "0x219",
               "ancestors_count": "0x1",
               "timestamp": "0x17c983e6e44"
           }
       },
       "conflicted": [],
       "proposed": {}
   }
}

方法 get_pool_tx_detail_info

查询并返回池中事务的详细信息,仅用于故障排除

参数
  • tx_hash - 交易哈希
示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_pool_tx_detail_info",
  "params": [
    "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3"
  ]
}

响应

{
   "jsonrpc": "2.0",
   "result": {
       "ancestors_count": "0x0",
       "descendants_count": "0x0",
       "entry_status": "pending",
       "pending_count": "0x1",
       "proposed_count": "0x0",
       "rank_in_pending": "0x1",
       "score_sortkey": {
           "ancestors_fee": "0x16923f7dcf",
           "ancestors_weight": "0x112",
           "fee": "0x16923f7dcf",
           "weight": "0x112"
       },
       "timestamp": "0x18aa1baa54c"
   },
   "id": 42
}

方法 tx_pool_ready

  • tx_pool_ready()

  • 结果: boolean

返回tx-pool服务是否已启动,是否准备接收请求。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "tx_pool_ready",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": true
}

模块 Rich_indexer

RPC模块富索引器。

方法 get_indexer_tip

返回索引的提示。

返回值
  • block_hash - 索引提示区块哈希
  • block_number - 索引提示区块号
示例

与CKB索引器相同。

方法 get_cells

通过锁定脚本或类型脚本返回活动单元格集合。

与原始CKB索引器不同的是,script_search_mode 参数接受 partial 枚举值。这意味着可以在 scriptargs 上执行部分搜索。

参数
  • search_key
    • script - 脚本,支持前缀搜索
    • script_type - 枚举,锁定 | 类型
    • script_search_mode - 枚举,prefix | exact | partial
    • filter - 根据以下条件过滤单元格,所有条件都是可选的
      • script: 如果搜索脚本类型是锁定,则通过类型脚本前缀过滤单元格,反之亦然
      • script_len_range: [u64; 2],通过脚本长度范围过滤单元格,[包含,不包含]
      • output_data: 通过输出数据过滤单元格
      • output_data_filter_mode: 枚举,前缀 | 精确 | 部分
      • output_data_len_range: [u64; 2],通过输出数据长度范围过滤单元格,[包含,不包含]
      • output_capacity_range: [u64; 2],通过输出容量范围过滤单元格,[包含,不包含]
      • block_range: [u64; 2],通过区块号范围过滤单元格,[包含,不包含]
    • with_data - bool,可选默认是 true,如果with_data设置为false,则结果中返回单元格.output_data字段为null
  • order: 枚举,asc | desc
  • limit: 结果大小限制
  • after: 分页参数,可选
返回值

如果对象的数目小于请求的 limit,则表示这是get_cells的最后页面。

  • objects
    • output: 输出单元格的字段
    • output_data: 单元格数据
    • out_point: 通过交易哈希和输出索引引用单元格
    • block_number: 交易提交到区块中的数量
    • tx_index: 交易提交到区块中的位置索引
  • last_cursor: 分页参数
示例

与CKB索引器相同。

方法 get_transactions

通过锁定脚本或类型脚本返回交易集合。

与原始CKB索引器不同的是,filter 中的 script_search_modeoutput_data_filter_mode 都可以接受 partial 枚举值。这意味着可以在 scriptargs 和单元格 output_data 上执行部分搜索。

  • search_key
    • script - 脚本,当group_by_transaction为false时支持前缀搜索
    • script_type - 枚举,锁定 | 类型
    • script_search_mode - 枚举,prefix | exact | partial
    • filter - 根据以下条件过滤单元格,所有条件都是可选的
      • script: 如果搜索脚本类型是锁定,则通过类型脚本过滤单元格,反之亦然
      • script_len_range: [u64; 2],通过脚本长度范围过滤单元格,[包含,不包含]
      • output_data: 通过输出数据过滤单元格
      • output_data_filter_mode: 枚举,前缀 | 精确 | 部分
      • output_data_len_range: [u64; 2],通过输出数据长度范围过滤单元格,[包含,不包含]
      • output_capacity_range: [u64; 2],通过输出容量范围过滤单元格,[包含,不包含]
      • block_range: [u64; 2],通过区块号范围过滤单元格,[包含,不包含]
    • group_by_transaction - 布尔类型,可选参数,默认值为 false,如果将 group_by_transaction 设置为 true,则返回的对象将按 tx 哈希分组
  • order: 枚举,asc | desc
  • limit: 结果大小限制
  • after: 分页参数,可选
返回值

如果对象的数量少于请求的 limit,则表示这些是 get_transactions 的最后一页。

  • objects - 枚举类型,未分组的 TxWithCell | 分组的 TxWithCells
    • TxWithCell
      • tx_hash: 交易哈希,
      • block_number: 交易提交到区块中的数量
      • tx_index: 交易提交到区块中的位置索引
      • io_type: 枚举类型,输入 | 输出
      • io_index: 单元在交易输入或输出中的位置索引
    • TxWithCells
      • tx_hash: 交易哈希,
      • block_number: 交易提交到区块中的数量
      • tx_index: 交易提交到区块中的位置索引
      • cells: Array [[io_type, io_index]]
  • last_cursor - 分页参数
示例

与CKB索引器相同。

方法 get_cells_capacity

根据锁或类型脚本返回实时单元容量。

与原始CKB索引器不同的是,script_search_mode 参数接受 partial 枚举值。这意味着可以在 scriptargs 上执行部分搜索。

参数
  • search_key
    • script - 脚本
    • script_type - 枚举,锁定 | 类型
    • script_search_mode - 枚举,prefix | exact | partial
    • filter - 根据以下条件过滤单元格,所有条件都是可选的
      • script: 如果搜索脚本类型是锁定,则通过类型脚本前缀过滤单元格,反之亦然
      • script_len_range: [u64; 2],通过脚本长度范围过滤单元格,[包含,不包含]
      • output_data: 通过输出数据过滤单元格
      • output_data_filter_mode: 枚举,前缀 | 精确 | 部分
      • output_data_len_range: [u64; 2],通过输出数据长度范围过滤单元格,[包含,不包含]
      • output_capacity_range: [u64; 2],通过输出容量范围过滤单元格,[包含,不包含]
      • block_range: [u64; 2],通过区块号范围过滤单元格,[包含,不包含]
返回值
  • capacity - 总容量
  • block_hash - 索引提示区块哈希
  • block_number - 索引提示区块号
示例

与CKB索引器相同。

模块 Stats

用于获取各种统计数据的RPC模块Stats。

方法 get_blockchain_info

返回有关链的统计信息。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_blockchain_info",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "alerts": [
      {
        "id": "0x2a",
        "message": "An example alert message!",
        "notice_until": "0x24bcca57c00",
        "priority": "0x1"
      }
    ],
    "chain": "ckb",
    "difficulty": "0x1f4003",
    "epoch": "0x7080018000001",
    "is_initial_block_download": true,
    "median_time": "0x5cd2b105"
  }
}

方法 get_deployments_info

返回有关链的统计信息。

示例

请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "get_deployments_info",
  "params": []
}

响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": {
    "epoch": "0x1",
    "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
       "deployments": {
           "testdummy": {
               "bit": 1,
               "min_activation_epoch": "0x0",
               "period": "0xa",
               "since": "0x0",
               "start": "0x0",
               "state": "failed",
               "timeout": "0x0",
               "threshold": {
                    "numer": "0x3",
                    "denom": "0x4"
                }
           }
       }
  }
}

RPC模块订阅:CKB节点将向订阅者推送新消息,支持WebSocket或TCP。

RPC订阅需要全双工连接。CKB通过TCP(通过配置选项rpc.tcp_listen_address启用)和WebSocket(通过配置选项rpc.ws_listen_address启用)提供此类连接。

示例

TCP RPC订阅

telnet localhost 18114
> {"id": 2, "jsonrpc": "2.0", "method": "subscribe", "params": ["new_tip_header"]}
< {"jsonrpc":"2.0","result":"0x0","id":2}
< {"jsonrpc":"2.0","method":"subscribe","params":{"result":"...block header json...",
"subscription":0}}
< {"jsonrpc":"2.0","method":"subscribe","params":{"result":"...block header json...",
"subscription":0}}
< ...
> {"id": 2, "jsonrpc": "2.0", "method": "unsubscribe", "params": ["0x0"]}
< {"jsonrpc":"2.0","result":true,"id":2}

WebSocket RPC订阅

let socket = new WebSocket("ws://127.0.0.1:28114")

socket.onmessage = function(event) {
  console.log(`Data received from server: ${event.data}`);
}

socket.send(`{"id": 2, "jsonrpc": "2.0", "method": "subscribe", "params": ["new_tip_header"]}`)

socket.send(`{"id": 2, "jsonrpc": "2.0", "method": "unsubscribe", "params": ["0x0"]}`)

方法 subscribe

订阅一个主题。

参数
  • topic - 订阅主题(枚举:new_tip_header | new_tip_block | new_transaction | proposed_transaction | rejected_transaction)
返回值

此RPC将订阅ID作为结果返回。CKB节点将订阅的主题中的消息推送到当前RPC连接。订阅ID也作为params.subscription附加在推送消息中。

示例推送消息

{
  "jsonrpc": "2.0",
  "method": "subscribe",
  "params": {
    "result": { ... },
    "subscription": "0x2a"
  }
}
主题
new_tip_header

每当有块被附加到主链时,CKB节点将向订阅者发布该块头。

推送消息中params.result的类型是HeaderView

new_tip_block

每当有块被附加到主链时,CKB节点将向订阅者发布整个块。

推送消息中params.result的类型是BlockView

new_transaction

当有新交易提交到池中时,订阅者将收到通知。

推送消息中params.result的类型是PoolTransactionEntry

proposed_transaction

当链提出池中的交易时,订阅者将收到通知。

推送消息中params.result的类型是PoolTransactionEntry

rejected_transaction

当待处理交易被tx-pool拒绝时,订阅者将收到通知。

推送消息中params.result的类型是一个包含

推送消息中params.result的类型是一个包含两个元素的数组,其中

示例

订阅请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "subscribe",
  "params": [
    "new_tip_header"
  ]
}

订阅响应

{
  "id": 42,
  "jsonrpc": "2.0",
  "result": "0xf3"
}

方法 unsubscribe

  • 取消订阅(id)
    • id: string
  • 结果: boolean

取消订阅已订阅的主题。

参数
  • id - 订阅ID
示例

取消订阅请求

{
  "id": 42,
  "jsonrpc": "2.0",
  "method": "unsubscribe",
  "params": [
    "0xf3"
  ]
}

取消订阅响应

{
 "id": 42,
 "jsonrpc": "2.0",
 "result": true
}

RPC 类型

类型 Alert

警报是关于关键问题的消息,将通过 p2p 网络广播到所有节点。

示例

JSON示例

 {
   "id": "0x1",
   "cancel": "0x0",
   "min_version": "0.1.0",
   "max_version": "1.0.0",
   "priority": "0x1",
   "message": "An example alert message!",
   "notice_until": "0x24bcca57c00",
   "signatures": [
     "0xbd07059aa9a3d057da294c2c4d96fa1e67eeb089837c87b523f124239e18e9fc7d11bb95b720478f7f937d073517d0e4eb9a91d12da5c88a05f750362f4c214dd0",
     "0x0242ef40bb64fe3189284de91f981b17f4d740c5e24a3fc9b70059db6aa1d198a2e76da4f84ab37549880d116860976e0cf81cd039563c452412076ebffa2e4453"
   ]
 }

字段

Alert是一个包含以下字段的JSON对象。

  • cancel: Uint32 - 取消之前发送的警报。

  • id: Uint32 - 警报的标识符。客户端使用id来过滤重复的警报。

  • message: string - 警报信息。

  • notice_until: Uint64 - 警报在此时间戳后过期。

  • priorityUint32 - 优先级排序警报,优先级最高优先显示。

  • signaturesArray< JsonBytes > - 必要签名列表。

类型 AlertId

用于过滤重复警报的警报标识符。

这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。

类型 AlertId

用于过滤重复警报的警报标识符。

这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。

类型 AlertMessage

由RPC send_alert发送的警报。

字段

AlertMessage是一个包含以下字段的JSON对象。

  • idUint32 - 唯一的警报ID。

  • message: string - 警报信息。

  • notice_until: Uint64 - 警报在此时间戳后过期。

  • priorityUint32 - 优先级排序警报,优先级最高优先显示。

类型 AlertPriority

警报按优先级排序。较大的整数表示较高的优先级。

这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。

类型 AlertPriority

警报按优先级排序。较大的整数表示较高的优先级。

这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。

类型 AncestorsScoreSortKey

作为tx-pool排序键的结构。

字段

AncestorsScoreSortKey是一个包含以下字段的JSON对象。

  • ancestors_feeUint64 - 祖先费用

  • ancestors_weightUint64 - 祖先权重

  • feeUint64 - 费用

  • weightUint64 - 权重

类型 BannedAddr

禁止的P2P地址。

字段

BannedAddr是一个包含以下字段的JSON对象。

  • addressstring - P2P地址。

    示例:"/ip4/192.168.0.2/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS"

  • ban_reasonstring - 原因。

  • ban_untilUint64 - 地址被禁止直到此时间。

  • created_atUint64 - 当此地址被禁止时。

类型 Block

在RPC中作为参数使用的Block的JSON视图。

字段

Block是一个包含以下字段的JSON对象。

  • headerHeader - 区块头。

  • proposalsArray< ProposalShortId > - 区块体中的提案ID。

  • transactionsArray< Transaction > - 区块体中的交易。

  • unclesArray< UncleBlock > - 区块体中的叔父块。

类型 BlockEconomicState

区块经济状态。

它包括奖励细节及其何时最终确定。

字段

BlockEconomicState是一个包含以下字段的JSON对象。

  • finalized_atH256 - 创建奖励作为其cellbase交易中的cells的区块的区块哈希。

  • issuanceBlockIssuance - 区块基础奖励。

  • miner_rewardMinerReward - 矿工的区块奖励。

  • txs_feeUint64 - 区块中所有提交的交易的总费用。

类型 BlockFilter

区块过滤器数据和哈希。

字段

BlockFilter 是一个具有以下字段的 JSON 对象。

  • dataJsonBytes - 区块的十六进制编码的过滤器数据。

  • hashByte32 - 过滤器哈希,为父区块过滤器哈希和过滤器数据的 blake2b 哈希,即 blake2b(parent_block_filter_hash | current_block_filter_data)。

类型 BlockIssuance

区块基础奖励。

字段

BlockIssuance 是一个具有以下字段的 JSON 对象。

  • primaryUint64 - 主要基础奖励。

  • secondaryUint64 - 次要基础奖励。

类型 BlockNumber

从 0 开始的连续区块号。

这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。

类型 BlockResponse

包装器代表 get_blockget_block_by_number 的响应,返回一个带有周期的区块。

类型 BlockTemplate

矿工的区块模板。

矿工可以可选地选择交易,然后组装最终的区块。

字段

BlockTemplate 是一个具有以下字段的 JSON 对象。

  • bytes_limitUint64 - 区块序列化大小限制。

    矿工必须将区块大小保持在此限制以下,否则,CKB 节点将拒绝区块提交。

    如果矿工不添加新的交易承诺,则保证区块不超过此限制。

  • cellbaseCellbaseTemplate - 提供的 cellbase 交易模板。

    矿工必须将其作为 cellbase 交易在组装的区块中使用,不得更改。

  • compact_targetUint32 - 新区块的压缩难度目标。

    矿工必须在不更改的情况下在组装的区块中使用它。

  • current_timeUint64 - 新区块的时间戳。

    CKB 节点保证此时间戳大于前 37 个区块的中位数。

    矿工可以将其增加到当前时间。不建议降低它,因为这可能会违反中值区块时间戳共识规则。

  • cycles_limitUint64 - 周期限制。

    矿工必须将总周期保持在此限制以下,否则,CKB 节点将拒绝区块提交。

    如果矿工不向区块添加新交易,则保证区块不超过此限制。

  • daoByte32 - 参考DAO字段。

    此字段仅在矿工使用模板中提供的所有交易并且只使用这些交易时有效。当矿工想要选择交易时,必须更新两个字段:

    • S_i,字节 16 到 23
    • U_i,字节 24 到 31

    参见RFC Nervos DAO的存取款

  • epochUint64 - 新块的新纪进步度信息。

    矿工必须在不更改的情况下在组装的区块中使用它。

  • numberUint64 - 新块块号。

    矿工必须在不更改的情况下在组装的区块中使用它。

  • parent_hashH256 - 新块父块哈希。

    矿工必须在不更改的情况下在组装的区块中使用它。

  • proposalsArray< ProposalShortId > - 新块中提供的交易提案ID列表。

  • transactionsArray< TransactionTemplate > - 可以在新块中提交的有效交易。

    矿工必须在组装的新块中包含标记为required的交易。

  • unclesArray< UncleTemplate > - 提供的有效叔块候选列表。

    矿工必须在组装的新块中包含标记为required的叔块。

  • uncles_count_limitUint64 - 叔块数量限制。

    矿工必须将叔块数量保持在此限制以下,否则,CKB节点将拒绝提交块。

  • versionUint32 - 块版本。

    矿工必须在不更改的情况下在组装的区块中使用它。

  • work_idUint64 - 工作ID。矿工必须使用相同的工作ID提交新组装和解析的块。

类型 BlockView

包括头部和主体的块的JSON视图。

字段

BlockView是一个包含以下字段的JSON对象。

类型 BlockWithCyclesResponse

带周期格式的BlockResponse包装器

字段

BlockWithCyclesResponse是一个包含以下字段的JSON对象。

类型 Buried

表示软分叉部署,其中激活纪元硬编码到客户端实现中

字段

Buried是一个包含以下字段的JSON对象。

  • activeboolean - 规则是否有效

  • epochUint64 - 规则将开始实施的第一纪元

  • statusSoftForkStatus - 软分叉状态

类型 Byte32

固定长度为32字节的二进制编码,以0x前缀的十六进制字符串形式表示在JSON中。

类型 Capacity

单元格的容量是单元格在Shannons中的值。它也是单元格占用存储大小的上限,每100,000,000 Shannons提供1字节存储。

这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。

类型 CellData

单元格数据内容和哈希。

示例
 {
   "content": "0x7f454c460201010000000000000000000200f3000100000078000100000000004000000000000000980000000000000005000000400038000100400003000200010000000500000000000000000000000000010000000000000001000000000082000000000000008200000000000000001000000000000001459308d00573000000002e7368737472746162002e74657874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000010000000600000000000000780001000000000078000000000000000a0000000000000000000000000000000200000000000000000000000000000001000000030000000000000000000000000000000000000082000000000000001100000000000000000000000000000001000000000000000000000000000000",
   "hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5"
 }

字段

CellData是一个JSON对象,具有以下字段。

  • content: JsonBytes - 单元格内容。

  • hash: H256 - 单元格内容哈希。

类型 CellDep

事务的单元格依赖关系。

示例
 {
   "dep_type": "code",
   "out_point": {
     "index": "0x0",
     "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
   }
 }

字段

CellDep是一个JSON对象,具有以下字段。

  • dep_type: DepType - 依赖类型。

  • out_point: OutPoint - 对单元格的引用。

类型 CellInfo

结合单元格输出和单元格数据的单元格的JSON视图。

示例
 {
   "data": {
     "content": "0x7f454c460201010000000000000000000200f3000100000078000100000000004000000000000000980000000000000005000000400038000100400003000200010000000500000000000000000000000000010000000000000001000000000082000000000000008200000000000000001000000000000001459308d00573000000002e7368737472746162002e74657874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000010000000600000000000000780001000000000078000000000000000a0000000000000000000000000000000200000000000000000000000000000001000000030000000000000000000000000000000000000082000000000000001100000000000000000000000000000001000000000000000000000000000000",
     "hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5"
   },
   "output": {
     "capacity": "0x802665800",
     "lock": {
       "args": "0x",
       "code_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
       "hash_type": "data"
     },
     "type": null
   }
 }

字段

CellInfo是一个JSON对象,具有以下字段。

  • output: CellOutput - 单元格字段出现在事务outputs数组中。

类型 CellInput

事务的输入单元格。

示例
 {
   "previous_output": {
     "index": "0x0",
     "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
   },
   "since": "0x0"
 }

字段

CellInput是一个JSON对象,具有以下字段。

类型 CellOutput

输出单元格的字段,除了单元格数据。

示例
 {
   "capacity": "0x2540be400",
   "lock": {
     "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
     "hash_type": "data",
     "args": "0x"
   },
   "type": null
 }

字段

CellOutput是一个JSON对象,具有以下字段。

  • capacity: Uint64 - 单元格容量。

    单元格的容量是单元格在Shannons中的值。它也是单元格占用存储大小的上限,每100,000,000 Shannons提供1字节存储。

  • lock: Script - 锁脚本。

类型 CellWithStatus

带有其状态信息的单元格的JSON视图。

示例
 {
   "cell": {
     "data": {
       "content": "0x7f454c460201010000000000000000000200f3000100000078000100000000004000000000000000980000000000000005000000400038000100400003000200010000000500000000000000000000000000010000000000000001000000000082000000000000008200000000000000001000000000000001459308d00573000000002e7368737472746162002e74657874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000010000000600000000000000780001000000000078000000000000000a0000000000000000000000000000000200000000000000000000000000000001000000030000000000000000000000000000000000000082000000000000001100000000000000000000000000000001000000000000000000000000000000",
       "hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5"
     },
     "output": {
       "capacity": "0x802665800",
       "lock": {
         "args": "0x",
         "code_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
         "hash_type": "data"
       },
       "type": null
     }
   },
   "status": "live"
 }
 {
   "cell": null,
   "status": "unknown"
 }

字段

CellWithStatus是一个JSON对象,具有以下字段。

  • status: string - 单元格的状态。

    允许值:"live","dead","unknown"。

    • live - 创建此单元格的事务在链中,且在链中未找到使用此单元格作为输入的事务。
    • dead - (已弃用:自0.36.0以来,将删除dead状态,请勿依赖区分dead和unknown单元格的逻辑。) 创建此单元格的事务在链中,且在链中找到一个使用此单元格作为输入的事务。
    • unknown - CKB不知道单元格的状态。要么创建此单元格的事务尚未在链中,要么它不再是活跃的。

类型 CellbaseTemplate

为矿工提供的新区块单元格base事务模板。

字段

CellbaseTemplate是一个JSON对象,具有以下字段。

  • data: Transaction - 单元格base事务。

  • hash: H256 - 单元格base事务哈希。

类型 ChainInfo

链信息。

字段

ChainInfo是一个JSON对象,具有以下字段。

  • alerts: Array< AlertMessage > - 存储在本地节点中的活动警报。

  • chain: string - 网络名称。

    示例

    • "ckb" - Mirana 主网。
    • "ckb_testnet" - Pudge 测试网。
  • difficulty: string - 当前难度。

    compact_target 中解码。

  • epoch: Uint64 - 链上最新区块的 epoch 信息。

  • is_initial_block_download: boolean - 本地节点是否处于 IBD,初始区块下载。

    当节点启动且其链上最新区块时间戳远落后于系统时钟时,将进入 IBD 状态,直到同步完成。

    在 IBD 期间,本地节点仅与一个选定的远程节点同步链,并停止响应大部分 P2P 请求。

  • median_time: Uint64 - 包括最新区块在内的最后 37 个区块的中值时间。

类型 Consensus

共识定义了各种参数,这些参数会影响链共识。

字段

Consensus 是一个包含以下字段的 JSON 对象。

  • block_version: Uint32 - 支持的区块版本号

  • cellbase_maturity: Uint64 - Cellbase 成熟度

  • dao_type_hash: H256 - DAO 类型哈希

  • epoch_duration_target: Uint64 - 预期的 epoch_duration

  • genesis_hash: H256 - 创世区块哈希

  • hardfork_features: HardForks - 硬分叉特性

  • id: string - 命名网络。

  • initial_primary_epoch_reward: Uint64 - 初始 primary_epoch_reward

  • max_block_bytes: Uint64 - 整个区块使用的最大字节数

  • max_block_cycles: Uint64 - 所有提交交易中所有脚本可以使用的最大周期数

  • max_block_proposals_limit: Uint64 - 每个区块的提案数量限制

  • max_uncles_num: Uint64 - 块允许的最大叔父数

  • median_time_block_count: Uint64 - 此参数表示用于中值时间计算的过去区块数量

  • orphan_rate_target: string - 预期的 orphan_rate

  • permanent_difficulty_in_dummy: boolean - 如果 pow 是虚拟的,则保持难度为永久

  • primary_epoch_reward_halving_interval: Uint64 - 每个 halving_interval epoch 会将主要奖励减半

  • proposer_reward_ratio: string - 两步交易确认的提案奖励比例

  • secondary_epoch_reward: Uint64 - 二级 primary_epoch_reward

  • softforks: - HashMap<DeploymentPos, SoftFork> - 软分叉

  • tx_proposal_window: ProposalWindow - 两步交易确认的提案窗口

  • tx_version: Uint32 - 支持的交易版本号

  • type_id_code_hash: H256 - 十六进制的 "TYPE_ID"

类型 Cycle

CKB虚拟机运行脚本消耗的周期数。

这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。

类型 DaoWithdrawingCalculationKind

一个枚举,用于表示两种DAO提款金额计算选项。 DaoWithdrawingCalculationKind 等同于 H256 | OutPoint

类型 DepType

依赖细胞类型。允许的值:"code" 和 "dep_group"。

这是一个枚举值,来自以下之一

  • code : 类型 "code"。

使用单元格本身作为依赖单元格。

  • dep_group : 类型 "dep_group"。

该单元格是一个依赖组,其成员是单元格。这些成员用作依赖单元格,而不是组本身。

依赖组在单元格数据中存储通过molecule序列化的OutPoint数组。每个OutPoint指向一个单元格成员。

类型 Deployment

RFC0043部署参数

字段

Deployment是一个包含以下字段的JSON对象。

  • bit: integer - 确定在区块的version字段中哪个比特位用于指示软分叉锁定和激活。它从集合{0,1,2,...,28}中选择。

  • min_activation_epoch: Uint64 - 指定软分叉允许激活的纪元。

  • period: Uint64 - 指定信号期纪元的长度。

  • start: Uint64 - 指定比特位获得意义的第一个纪元。

  • threshold: Ratio - 指定period中每period的最小比率,指示软分叉在period期间的锁定_in。

  • timeout: Uint64 - 指定矿工信号结束的纪元。一旦达到这个纪元,如果软分叉尚未锁定_in(不包括这个纪元块的字节状态),则认为部署在所有块的后代上失败。

类型 DeploymentInfo

包含有关共识更改部署的各种状态信息的对象

字段

DeploymentInfo是一个包含以下字段的JSON对象。

  • bit: integer - 确定在区块的version字段中哪个比特位用于指示软分叉锁定和激活。它从集合{0,1,2,...,28}中选择。

  • min_activation_epoch: Uint64 - 指定软分叉允许激活的纪元。

  • period: Uint64 - 信号期的长度,以纪元为单位

  • since: Uint64 - 当前状态应用的第一个纪元

  • start: Uint64 - 指定比特位获得意义的第一个纪元。

  • state: DeploymentState - 对于每个纪元和软分叉,我们关联一个部署状态。可能的状态有

    • DEFINED 是每个软分叉开始时的第一个状态。对于每个部署,0纪元的块定义为这个状态。
    • STARTED 当所有区块达到或超过 start_epoch 时。
    • LOCKED_IN 在第一个周期后的一周期内,第一个周期有 STARTED 区块,其中至少 threshold 个块的版本中相关位被设置。
    • ACTIVE 在 LOCKED_IN 期之后的所有区块。
    • FAILED 如果没有达到 LOCKED_IN,则在 timeout_epoch 之后的所有区块。
  • thresholdRatio - 激活该功能所需的版本位被设置的块的比例

  • timeoutUint64 - 指定矿工信号结束的时期。一旦达到这个时期,如果软分叉尚未 locked_in(不包括这个时期的区块位状态),则认为所有后裔块的部署失败。

类型 DeploymentState

可能的软分叉部署状态

这是一个枚举值,来自以下之一

  • defined:每个软分叉开始的第一状态。对于每个部署,0 时期定义为这个状态。
  • started:对于 start_epoch 之后的时期。
  • locked_in:对于第一个周期后的一周期,其中 STARTED 时期至少 threshold 个块的版本中相关位被设置。
  • active:对于 LOCKED_IN 期之后的所有时期。
  • failed:如果未达到 LOCKED_IN,则在 timeout_epoch 之后的一周期。

类型 DeploymentsInfo

链信息。

字段

DeploymentsInfo 是一个 JSON 对象,具有以下字段。

类型 EntryCompleted

test_tx_pool_accept 对事务的验证结果

字段

EntryCompleted 是一个 JSON 对象,具有以下字段。

  • cyclesUint64 - 缓存的交易周期

  • feeUint64 - 缓存的交易费用

类型 EpochNumber

从 0 开始的连续时期号。

这是一个 64 位无符号整数类型,在 JSON 中编码为 0x 前缀的十六进制字符串。请参阅 Uint64 的示例。

类型 EpochNumber

从 0 开始的连续时期号。

这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。

类型 EpochNumberWithFraction

区块的时期指示器。它显示区块所在的时期,以及添加此区块后的已过时期分数。

这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。

时期字段的低 56 位分为 3 部分(按从高到低的顺序列出)

  • 最高 16 位表示时期长度
  • 下一个 16 位表示当前区块在时期中的索引,从 0 开始。
  • 最低 24 位表示当前时期号。

假设有一个区块,编号为 11555,位于时期 50。时期 50 从区块 11000 开始,有 1000 个区块。该特定区块的时期字段将是 1,099,520,939,130,930,计算方式如下

50 | ((11555 - 11000) << 24) | (1000 << 40)

类型 EpochView

时期的 JSON 视图。

CKB 根据时期调整难度。

示例
 {
   "compact_target": "0x1e083126",
   "length": "0x708",
   "number": "0x1",
   "start_number": "0x3e8"
 }

字段

EpochView 是一个 JSON 对象,具有以下字段。

  • compact_targetUint32 - 当前纪元的任意区块的难度目标。

  • lengthUint64 - 当前纪元的区块数量。

  • numberUint64 - 从0开始的连续纪元编号。

  • start_numberUint64 - 纪元中第一个区块的区块号。

    它也等于所有纪元中区块数量总和,其中纪元编号小于当前纪元。

类型 EstimateCycles

RPC方法estimate_cycles的响应结果。

字段

EstimateCycles是一个包含以下字段的JSON对象。

  • cyclesUint64 - VM验证此交易所消耗的周期数。

类型 ExtraLoggerConfig

运行时日志配置,用于额外的日志记录器。

字段

ExtraLoggerConfig是一个包含以下字段的JSON对象。

  • filterstring - 设置不同模块的日志级别。

    示例

    将所有模块的日志级别设置为info。

    info
    

    将列出模块的日志级别设置为debug,其他模块为info。

    info,ckb-rpc=debug,ckb-sync=debug,ckb-relay=debug,ckb-tx-pool=debug,ckb-network=debug
    

类型 FeeRateStatistics

费用率统计数据,包括平均值和中位数,单位:每千权重沙纳。

字段

FeeRateStatistics是一个包含以下字段的JSON对象。

类型 H256

在JSON中以0x前缀的十六进制字符串编码的256位二进制数据。

类型 HardForkFeature

有关一个硬分叉功能的详细信息。

字段

HardForkFeature是一个包含以下字段的JSON对象。

  • rfcstring - 相关的RFC ID。

类型 HardForks

硬分叉信息

字段

HardForks是一个包含以下字段的JSON对象。

类型 Header

区块头。

参考RFC CKB Block Structure

字段

Header是一个包含以下字段的JSON对象。

  • compact_targetUint32 - 区块难度目标。

    它可以转换为256位目标。矿工必须确保头部的Eaglesong在目标范围内。

  • daoByte32 - DAO字段。

    参见RFC Nervos DAO的存取款

  • epochUint64 - 此区块的纪元信息。

    有关详细信息,请参阅EpochNumberWithFraction

  • extra_hashH256 - 块体中叔父和扩展的哈希。

    当叔父为空时,叔父哈希为全零,或所有叔父头哈希拼接的哈希。扩展哈希是扩展的哈希。额外哈希是叔父哈希和扩展哈希拼接的哈希。

    注意

    自0.100.0以来,此字段已从uncles_hash重命名为。更多详细信息请参阅CKB RFC 0031

  • nonceUint128 - 矿工可以修改此字段以找到合适的值,使得头部的Eaglesong值在由 compact_target 编码的目标值内。

  • numberUint64 - 从0开始的连续区块号。

  • parent_hashH256 - 父区块的头哈希。

  • proposals_hashH256 - 区块体中 proposals 的哈希。

    proposals 为空时,它全部为零,或所有字节连接在一起后的哈希。

  • timestampUint64 - 区块时间戳。

    它是毫秒(1秒=1000毫秒)的Unix时间戳。

    矿工应将区块创建的时间放入头部,然而,精度无法保证。具有更高区块号的区块甚至可能具有更小的时间戳。

  • transactions_rootH256 - 区块中所有交易的承诺。

    它是两个Merkle树根的哈希。

    • CKB Merkle树的根,其中的项目是区块中所有交易的交易哈希。
    • CKB Merkle树的根,但项目是区块中所有交易的交易见证哈希。
  • versionUint32 - 区块版本。

    它现在必须等于0,并保留供将来升级使用。

类型 HeaderView

Header的JSON视图。

此结构被序列化为一个JSON对象,其中包含字段 hashHeader 中的所有字段。

示例
 {
   "compact_target": "0x1e083126",
   "dao": "0xb5a3e047474401001bc476b9ee573000c0c387962a38000000febffacf030000",
   "epoch": "0x7080018000001",
   "hash": "0xa5f5c85987a15de25661e5a214f2c1449cd803f071acc7999820f25246471f40",
   "nonce": "0x0",
   "number": "0x400",
   "parent_hash": "0xae003585fa15309b30b31aed3dcf385e9472c3c3e93746a6c4540629a6a1ed2d",
   "proposals_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
   "timestamp": "0x5cd2b117",
   "transactions_root": "0xc47d5b78b3c4c4c853e2a32810818940d0ee403423bea9ec7b8e566d9595206c",
   "extra_hash": "0x0000000000000000000000000000000000000000000000000000000000000000",
   "version": "0x0"
 }

字段

HeaderView 是一个JSON对象,具有以下字段。

  • compact_targetUint32 - 区块难度目标。

    它可以转换为256位目标。矿工必须确保头部的Eaglesong在目标范围内。

  • daoByte32 - DAO字段。

    参见RFC Nervos DAO的存取款

  • epochUint64 - 此区块的纪元信息。

    有关详细信息,请参阅EpochNumberWithFraction

  • extra_hashH256 - 块体中叔父和扩展的哈希。

    当叔父为空时,叔父哈希为全零,或所有叔父头哈希拼接的哈希。扩展哈希是扩展的哈希。额外哈希是叔父哈希和扩展哈希拼接的哈希。

    注意

    自0.100.0以来,此字段已从uncles_hash重命名为。更多详细信息请参阅CKB RFC 0031

  • hashH256 - 头部哈希。也称为区块哈希。

  • nonceUint128 - 矿工可以修改此字段以找到合适的值,使得头部的Eaglesong值在由 compact_target 编码的目标值内。

  • numberUint64 - 从0开始的连续区块号。

  • parent_hashH256 - 父区块的头哈希。

  • proposals_hashH256 - 区块体中 proposals 的哈希。

    proposals 为空时,它全部为零,或所有字节连接在一起后的哈希。

  • timestampUint64 - 区块时间戳。

    它是毫秒(1秒=1000毫秒)的Unix时间戳。

    矿工应将区块创建的时间放入头部,然而,精度无法保证。具有更高区块号的区块甚至可能具有更小的时间戳。

  • transactions_rootH256 - 区块中所有交易的承诺。

    它是两个Merkle树根的哈希。

    • CKB Merkle树的根,其中的项目是区块中所有交易的交易哈希。
    • CKB Merkle树的根,但项目是区块中所有交易的交易见证哈希。
  • versionUint32 - 区块版本。

    它现在必须等于0,并保留供将来升级使用。

类型 IndexerCell

活细胞

字段

IndexerCell 是一个JSON对象,具有以下字段。

  • block_numberUint64 - 区块中提交的交易数量

  • out_pointOutPoint - 通过交易哈希和输出索引引用的单元格

  • outputCellOutput - 输出单元格的字段

  • tx_indexUint32 - 区块中提交的交易的位置索引

类型 IndexerCellType

单元格类型

这是一个枚举值,来自以下之一

  • 输入:Input
  • 输出:Output

类型 IndexerCellsCapacity

单元格容量

字段

IndexerCellsCapacity 是一个JSON对象,具有以下字段。

  • block_hashH256 - 索引的提示区块哈希

  • block_numberUint64 - 索引的提示区块号

  • capacityUint64 - 总容量

类型 IndexerOrder

排序 Desc | Asc

这是一个枚举值,来自以下之一

  • desc:降序
  • asc:升序

类型 IndexerPagination<IndexerCell>

IndexerPagination封装对象数组以及last_cursor以提供分页

字段

IndexerPagination<IndexerCell> 是一个JSON对象,具有以下字段。

类型 IndexerPagination<IndexerTx>

IndexerPagination封装对象数组以及last_cursor以提供分页

字段

IndexerPagination<IndexerTx> 是一个具有以下字段的 JSON 对象。

类型 IndexerRange

一个数组表示由 [start, end) 纳入和排除的范围。

示例
JSON 范围
["0x0", "0x2"] [0, 2)
["0x0", "0x174876e801"] [0, 100000000001)

类型 IndexerScriptType

ScriptType Lock | Type

这是一个枚举值,来自以下之一

  • lock : Lock
  • type : Type

类型 IndexerSearchKey

SearchKey 代表索引器支持参数

字段

IndexerSearchKey 是一个具有以下字段的 JSON 对象。

类型 IndexerSearchKeyFilter

IndexerSearchKeyFilter 代表索引器参数 filter

字段

IndexerSearchKeyFilter 是一个具有以下字段的 JSON 对象。

  • block_rangeIndexerRange | null 按区块号范围过滤单元格
  • output_capacity_rangeIndexerRange | null 按输出容量范围过滤单元格
  • output_dataJsonBytes | null 按输出数据过滤单元格
  • output_data_filter_modeIndexerSearchMode | null 输出数据过滤模式,可选默认为 prefix
  • output_data_len_rangeIndexerRange | null 按输出数据长度范围过滤单元格
  • scriptScript | null 如果搜索脚本类型是 lock,则按类型脚本前缀过滤单元格,反之亦然
  • script_len_rangeIndexerRange | null 按脚本长度范围过滤单元格

类型 IndexerSearchMode

IndexerSearchMode 代表搜索模式,默认为前缀搜索

这是一个枚举值,来自以下之一

  • prefix : Mode prefix 使用前缀搜索
  • exact : Mode exact 使用精确匹配搜索
  • partial : Mode partial 使用部分匹配搜索

类型 IndexerTip

Indexer 提示信息

字段

IndexerTip 是一个具有以下字段的 JSON 对象。

  • block_hashH256 - 索引的提示区块哈希

  • block_numberUint64 - 索引的提示区块号

类型 IndexerTx

Indexer 事务对象

类型 IndexerTxWithCell

未分组事务内部类型

字段

IndexerTxWithCell 是一个具有以下字段的 JSON 对象。

  • block_numberUint64 - 区块中提交的交易数量

  • io_indexUint32 - 单元格在事务输入或输出中的位置索引

  • io_typeIndexerCellType - io 类型

  • tx_hash: H256 - 交易哈希

  • tx_indexUint32 - 区块中提交的交易的位置索引

类型 IndexerTxWithCells

分组交易内部类型

字段

IndexerTxWithCells 是一个包含以下字段的 JSON 对象。

  • block_numberUint64 - 区块中提交的交易数量

  • cells: Array< (IndexerCellType , Uint32) > - Array [(io_type, io_index)]

  • tx_hash: H256 - 交易哈希

  • tx_indexUint32 - 区块中提交的交易的位置索引

类型 JsonBytes

可变长度二进制编码为以 0x 前缀的十六进制字符串。

示例
JSON 二进制
"0x" 空二进制
"0x00" 单个字节 0
"0x636b62" 3 个字节,UTF-8 编码的 ckb
"00" 无效,需要 0x
"0x0" 无效,每个字节需要两位数字

类型 LocalNode

节点自身的相关信息。

示例
 {
   "active": true,
   "addresses": [
     {
       "address": "/ip4/192.168.0.2/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS",
       "score": "0xff"
     },
     {
       "address": "/ip4/0.0.0.0/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS",
       "score": "0x1"
     }
   ],
   "connections": "0xb",
   "node_id": "QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS",
   "protocols": [
     {
       "id": "0x0",
       "name": "/ckb/ping",
       "support_versions": [
         "0.0.1"
       ]
     },
     {
       "id": "0x1",
       "name": "/ckb/discovery",
       "support_versions": [
         "0.0.1"
       ]
     }
   ],
   "version": "0.34.0 (f37f598 2020-07-17)"
 }

字段

LocalNode 是一个包含以下字段的 JSON 对象。

  • active: boolean - 是否此节点处于活动状态。

    非活动节点会忽略传入的 p2p 消息并丢弃发出的消息。

  • addresses: Array< NodeAddress > - 此节点的 P2P 地址。

    一个节点可以有多个地址。

  • connections: Uint64 - 当前连接的节点数。

  • node_id: string - 由 p2p 私钥派生的唯一节点 ID。

    私钥在第一次启动时随机生成。

  • protocols: Array< LocalNodeProtocol > - 支持的协议。

  • version: string - CKB 节点版本。

    示例: "version": "0.34.0 (f37f598 2020-07-17)"

类型 LocalNodeProtocol

本地节点支持的 P2P 协议的相关信息。

字段

LocalNodeProtocol 是一个包含以下字段的 JSON 对象。

  • id: Uint64 - 唯一协议 ID。

  • name: string - 可读的协议名称。

  • support_versions: Array< string > - 支持的版本。

    有关如何指定版本的说明,请参阅 语义版本

类型 MainLoggerConfig

运行时日志配置。

字段

MainLoggerConfig 是一个包含以下字段的 JSON 对象。

  • color: boolean | null 是否在将日志打印到进程的 stdout 时使用颜色。

    null 表示保持当前选项不变。

  • filter: string | null 为不同的模块设置日志级别。

    null 表示保持当前选项不变。

    示例

    将所有模块的日志级别设置为info。

    info
    

    将列出模块的日志级别设置为debug,其他模块为info。

    info,ckb-rpc=debug,ckb-sync=debug,ckb-relay=debug,ckb-tx-pool=debug,ckb-network=debug
    
  • to_file: boolean | null 是否将日志追加到日志文件。

    null 表示保持当前选项不变。

  • to_stdout: boolean | null 是否将日志打印到进程的 stdout。

    null 表示保持当前选项不变。

类型 MerkleProof

CKB Merkle 树的证明。

CKB梅克尔树(Merkle Tree)是一种使用CKB的blake2b哈希作为合并函数的CBMT(Merkle Tree)。

字段

MerkleProof是一个包含以下字段的JSON对象。

  • indices: Array< Uint32 > - 在CBMT中已证明存在于区块的叶子索引。

    这些是CBMT树中的索引,而不是区块中交易索引。

  • lemmas: Array< H256 > - 到根路径上所有兄弟节点的哈希。

类型 MinerReward

矿工的区块奖励。

字段

MinerReward是一个包含以下字段的JSON对象。

  • committed: Uint64 - 由于交易在区块中提交而奖励给矿工的交易费用。

    矿工从每个提交到区块的交易中获得交易费用的60%。

  • primary: Uint64 - 分配给矿工的主要基础区块奖励。

  • proposal: Uint64 - 由于交易在区块或其叔父中提出而奖励给矿工的交易费用。

    矿工从每个在区块中提出并在其活跃提交窗口中稍后提交的交易中获得交易费用的40%。

  • secondary: Uint64 - 分配给矿工的次要基础区块奖励。

类型 NodeAddress

节点P2P地址和分数。

字段

NodeAddress是一个包含以下字段的JSON对象。

  • address: string - P2P地址。

    这是在ckb.toml中的白名单中使用的相同地址。

    示例:"/ip4/192.168.0.2/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS"

  • score: Uint64 - 地址分数。

    分数越高,成功连接的概率越高。

类型 OutPoint

通过交易哈希和输出索引引用单元格。

示例
 {
   "index": "0x0",
   "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
 }

字段

OutPoint是一个包含以下字段的JSON对象。

  • index: Uint32 - 由tx_hash指定的交易中单元格的输出索引。

  • tx_hash: H256 - 单元格是输出的事务的哈希。

类型 OutputsValidator

交易输出验证器,用于防止常见错误。

这是一个枚举值,来自以下之一

类型 PeerSyncState

本地节点和远程节点之间的链同步状态。

字段

PeerSyncState是一个包含以下字段的JSON对象。

  • can_fetch_count: Uint64 - 可用于并行下载的区块数量。

  • inflight_count: Uint64 - 正在并行下载的区块数量。

  • unknown_header_list_sizeUint64 - 未知头列表的总大小。

    已弃用:这是一个内部状态,将在未来的版本中删除。

类型 PoolTransactionReject

交易拒绝消息,PoolTransactionReject 是一个具有以下字段的 JSON 对象。

  • type:以下枚举值的拒绝类型
  • descriptionstring - 关于交易被拒绝的详细描述。

来自以下之一的枚举值

  • LowFeeRate:交易费低于配置
  • ExceededMaximumAncestorsCount:交易超过了最大祖先计数限制
  • ExceededTransactionSizeLimit:交易超过了最大大小限制
  • Full:由于池已满,交易被替换
  • Duplicated:交易已存在于交易池中
  • Malformed:格式不正确的交易
  • DeclaredWrongCycles:声明了错误的周期
  • Resolve:解决失败
  • Verification:验证失败
  • Expiry:交易已过期
  • RBFRejected:RBF 被拒绝
  • Invalidated:被撤销的拒绝

类型 PoolTxDetailInfo

tx-pool 中的交易详情信息。

字段

PoolTxDetailInfo 是一个具有以下字段的 JSON 对象。

  • ancestors_countUint64 - 交易祖先计数

  • descendants_countUint64 - 交易后代计数

  • entry_statusstring - 交易池中的详细状态,pendinggapproposed

  • pending_countUint64 - 等待数(pendinggap

  • proposed_countUint64 - 提案数

  • rank_in_pendingUint64 - 等待中的排名,从 0 开始

  • score_sortkeyAncestorsScoreSortKey - 分数键的详细信息,有助于调试

  • timestampUint64 - 添加到交易池的时间

类型 ProposalShortId

作为 0x 前缀的十六进制字符串编写的 10 字节固定长度二进制编码。

示例
 0xa0ef4eb5f4ceeb08a4c8

类型 ProposalWindow

两个协议参数 closestfarthest 定义了交易提案和承诺之间的链上最近和最远距离。

如果满足以下所有条件,非 cellbase 交易将在高度 h_c 处提交

  1. 它在同一链的高度 h_p 上被提出,其中 w_close <= h_c − h_p <= w_far ;
  2. 它位于高度 h_c 的主链区块的承诺区域内;
   ProposalWindow { closest: 2, farthest: 10 }
       propose
          \
           \
           13 14 [15 16 17 18 19 20 21 22 23]
                  \_______________________/
                               \
                             commit

字段

ProposalWindow 是一个具有以下字段的 JSON 对象。

  • closestUint64 - 提案和承诺之间的最近距离。

  • farthestUint64 - 提案和承诺之间的最远距离。

类型 Ratio

表示比值分子 / 分母,其中分子分母均为无符号64位整数。

字段

Ratio是一个包含以下字段的JSON对象。

类型 RationalU256

分子和分母都是256位无符号整数的比值。

类型 RawTxPool

tx-pool中的所有交易。

RawTxPool等同于TxPoolIds | TxPoolEntries

类型 RemoteNode

远程节点的信息。

远程节点通过P2P网络连接到本地节点。通常称为对等节点。

示例
 {
   "addresses": [
     {
       "address": "/ip6/::ffff:18.185.102.19/tcp/8115/p2p/QmXwUgF48ULy6hkgfqrEwEfuHW7WyWyWauueRDAYQHNDfN",
       "score": "0x64"
     },
     {
       "address": "/ip4/18.185.102.19/tcp/8115/p2p/QmXwUgF48ULy6hkgfqrEwEfuHW7WyWyWauueRDAYQHNDfN",
       "score": "0x64"
     }
   ],
   "connected_duration": "0x2f",
   "is_outbound": true,
   "last_ping_duration": "0x1a",
   "node_id": "QmXwUgF48ULy6hkgfqrEwEfuHW7WyWyWauueRDAYQHNDfN",
   "protocols": [
     {
       "id": "0x4",
       "version": "0.0.1"
     },
     {
       "id": "0x2",
       "version": "0.0.1"
     },
     {
       "id": "0x1",
       "version": "0.0.1"
     },
     {
       "id": "0x64",
       "version": "1"
     },
     {
       "id": "0x6e",
       "version": "1"
     },
     {
       "id": "0x66",
       "version": "1"
     },
     {
       "id": "0x65",
       "version": "1"
     },
     {
       "id": "0x0",
       "version": "0.0.1"
     }
   ],
   "sync_state": {
     "best_known_header_hash": null,
     "best_known_header_number": null,
     "can_fetch_count": "0x80",
     "inflight_count": "0xa",
     "last_common_header_hash": null,
     "last_common_header_number": null,
     "unknown_header_list_size": "0x20"
   },
   "version": "0.34.0 (f37f598 2020-07-17)"
 }

字段

RemoteNode是一个包含以下字段的JSON对象。

  • addresses: Array< NodeAddress > - 远程节点地址。

  • connected_duration: Uint64 - 自远程节点连接以来的经过时间(毫秒)。

  • is_outbound: boolean - 这是否是一个出站远程节点。

    如果连接是由本地节点建立的,则is_outbound为true。

  • node_id: string - 由其P2P私钥派生的远程节点ID。

  • protocols: Array< RemoteNodeProtocol > - 活跃协议。

    CKB使用Tentacle多路复用网络框架。多个协议在连接中同时运行。

  • version: string - 远程节点版本。

类型 RemoteNodeProtocol

有关正在运行的活动协议的信息。

字段

RemoteNodeProtocol是一个包含以下字段的JSON对象。

  • id: Uint64 - 唯一协议 ID。

  • version: string - 活跃协议版本。

类型 ResponseFormat<BlockView>

这是一个JSON序列化的包装器,用于在Json和十六进制格式之间选择格式。

示例

ResponseFormat<BlockView>返回以其Json格式或分子序列化的十六进制格式表示的块。

字段

ResponseFormat<BlockView>是一个包含以下字段的JSON对象。

类型 ResponseFormat<HeaderView>

这是一个JSON序列化的包装器,用于在Json和十六进制格式之间选择格式。

示例

ResponseFormat<BlockView>返回以其Json格式或分子序列化的十六进制格式表示的块。

字段

ResponseFormat<HeaderView>是一个包含以下字段的JSON对象。

类型 ResponseFormat<TransactionView>

这是一个JSON序列化的包装器,用于在Json和十六进制格式之间选择格式。

示例

ResponseFormat<BlockView>返回以其Json格式或分子序列化的十六进制格式表示的块。

字段

ResponseFormat<TransactionView>是一个包含以下字段的JSON对象。

类型 Rfc0043

表示由rfc0043信号控制激活的软分叉部署。

字段

Rfc0043是一个JSON对象,包含以下字段。

类型 Script

描述了一个单元格的锁定脚本和类型脚本。

示例
 {
   "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
   "hash_type": "data",
   "args": "0x"
 }

字段

Script是一个JSON对象,包含以下字段。

  • argsJsonBytes - 脚本的参数。

  • code_hashH256 - 用于匹配脚本代码的哈希。

  • hash_typeScriptHashType - 指定如何使用code_hash来匹配脚本代码。

类型 ScriptHashType

指定了如何使用脚本code_hash来匹配脚本代码以及如何执行代码。

允许的类型:"data"、"type"、"data1"和"data2"。

请参考《CKB交易结构》RFC中的代码定位可升级脚本部分。

哈希类型分为高7位和低1位,当低1位为1时,表示类型,当低1位为0时,表示数据,然后依靠高7位来指示数据实际上对应的是版本。

这是一个枚举值,来自以下之一

  • data:类型"data"通过单元格数据哈希匹配脚本代码,并在v0 CKB VM中运行脚本代码。
  • type:类型"type"通过单元格类型脚本哈希匹配脚本代码。
  • data1:类型"data1"通过单元格数据哈希匹配脚本代码,并在v1 CKB VM中运行脚本代码。
  • data2:类型"data2"通过单元格数据哈希匹配脚本代码,并在v2 CKB VM中运行脚本代码。

类型 SerializedBlock

这是一个0x前缀的十六进制字符串。它是使用table Block模式序列化的molecule块。

类型 SerializedHeader

这是一个0x前缀的十六进制字符串。它是使用table Header模式序列化的molecule块头。

类型 SoftFork

软分叉信息

类型 SoftForkStatus

SoftForkStatus可以是buried(对于激活时代硬编码到客户端实现的软分叉部署),或者rfc0043(对于由rfc0043信号控制的激活的软分叉部署)。

这是一个枚举值,来自以下之一

  • buried:激活时代硬编码到客户端实现
  • rfc0043:激活由rfc0043信号控制

类型 Status

事务状态

这是一个枚举值,来自以下之一

  • pending:状态"pending"。事务在池中,尚未提出。
  • proposed:状态"proposed"。事务在池中并且已被提出。
  • committed:状态"committed"。事务已被提交到主链。
  • unknown:状态"unknown"。节点尚未看到事务,或它应该被拒绝但被清除,因为存储限制。
  • rejected:状态"rejected"。事务最近已被从池中移除。由于存储限制,节点只能保留最近移除的事务。

类型 SyncState

此本地节点的整体链同步状态。

字段

SyncState是一个JSON对象,包含以下字段。

  • assume_valid_target: Byte32 - ckb指定的假设有效目标,如果没有假设有效目标,则此值为全零。

  • assume_valid_target_reached: boolean - ckb是否达到假设有效目标?如果没有假设有效目标,则此值为true。

  • best_known_block_number: Uint64 - 这是本地节点从P2P网络观察到的最佳已知区块编号。

    这里的“最佳”意味着该区块领导着一个具有最佳已知累积难度的链。

    这可以用来估计同步进度。如果此RPC返回B,并且RPC get_tip_block_number返回T,则节点已经同步了T/B个区块。

  • best_known_block_timestamp: Uint64 - 这是与best_known_block_number中描述的同一区块相关的时间戳。

  • fast_time: Uint64 - 下载调度器的时间分析数据,快速是截止点的1/3,单位为毫秒

  • ibd: boolean - 本地节点是否处于IBD(初始区块下载)状态。

    当节点启动且其链上最新区块时间戳远落后于系统时钟时,将进入 IBD 状态,直到同步完成。

    在IBD期间,本地节点只与一个选定的远程节点同步链,并停止响应大多数P2P请求。

  • inflight_blocks_count: Uint64 - 正在下载的区块数量。

  • low_time: Uint64 - 下载调度器的时间分析数据,低是截止点的9/10,单位为毫秒

  • min_chain_work: Uint128 - 此字段作为安全措施,确保节点只与投入了大量计算工作在其上的其他节点同步,从而防止某些类型的攻击并确保网络完整性。只有主网为此字段使用硬编码的值。

  • min_chain_work_reached: boolean - ckb是否达到min_chain_work?

  • normal_time: Uint64 - 下载调度器的时间分析数据,正常是截止点的4/5,单位为毫秒

  • orphan_blocks_count: Uint64 - 本地节点下载的孤立区块数量。

    本地节点同时下载多个区块,但区块必须连续连接。如果一个后代在其祖先之前被下载,它就成为一个孤立区块。

    如果这个数字太高,这表明块下载在某个区块上卡住了。

  • tip_hash: H256 - 当前提示区块的区块哈希

  • tip_number: Uint64 - 当前提示区块的区块编号

  • unverified_tip_hash: H256 - 当前未经验证的提示区块的区块哈希

  • unverified_tip_number: Uint64 - 当前未经验证的提示区块的区块编号

类型 Timestamp

以毫秒为单位的Unix时间戳(1秒是1000毫秒)。

例如,1588233578000是Thu, 30 Apr 2020 07:59:38 +0000

这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。

类型 Transaction

交易。

请参阅RFC CKB交易结构

字段

Transaction 是一个包含以下字段的 JSON 对象。

  • cell_deps: Array< CellDep > - 一个 cell 依赖的数组。

    CKB 通过 cell 依赖定位 lock 脚本和 type 脚本代码。脚本还可以使用 syscall 在此处读取 cell。

    与输入不同,活动 cell 可以在多个交易中用作 cell 依赖。

  • header_deps: Array< H256 > - 一个 header 依赖的数组。

    该区块必须已经存在于主链中。

    lock 脚本和 type 脚本可以读取此处列出的区块的 header 信息。

  • inputs: Array< CellInput > - 输入 cell 的数组。

    在主链中,任何 cell 只能作为一次输入出现。

  • outputs: Array< CellOutput > - 输出 cell 的数组。

  • outputs_data: Array< JsonBytes > - 输出 cell 数据。

    这是一个与输出并行的数组。输出 i 的 cell 容量、lock 和 type 为 outputs[i],其数据为 outputs_data[i]

  • version: Uint32 - 为未来使用保留。在当前版本中必须等于 0。

  • witnesses: Array< JsonBytes > - 可变长度二进制数据的数组。

    lock 脚本和 type 脚本可以在此处读取数据以验证交易。

    例如,捆绑的 secp256k1 lock 脚本需要在 witnesses 中存储签名。

类型 TransactionAndWitnessProof

区块中交易见证的 Merkle 证明。

字段

TransactionAndWitnessProof 是一个包含以下字段的 JSON 对象。

  • block_hash: H256 - 块哈希

  • transactions_proof: MerkleProof - 所有交易哈希的 Merkle 证明

  • witnesses_proof: MerkleProof - 交易见证的 Merkle 证明

类型 TransactionProof

区块中交易的 Merkle 证明。

字段

TransactionProof 是一个包含以下字段的 JSON 对象。

  • block_hash: H256 - 块哈希

  • proof: MerkleProof - 所有交易哈希的 Merkle 证明

  • witnesses_root: H256 - 所有交易见证哈希的 Merkle 根

类型 TransactionTemplate

准备好在新块中提交的交易模板。

字段

TransactionTemplate 是一个包含以下字段的 JSON 对象。

  • data: Transaction - 交易。

    矿工在将其包含在新块中时必须保持其不变。

  • hash: H256 - 交易哈希。

  • required: boolean - 矿工是否必须将此交易包含在新块中。

类型 TransactionView

交易的JSON视图。

此结构序列化为一个JSON对象,包含字段 hashTransaction 中的所有字段。

示例
 {
   "cell_deps": [
     {
       "dep_type": "code",
       "out_point": {
         "index": "0x0",
         "tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
       }
     }
   ],
   "hash": "0xa0ef4eb5f4ceeb08a4c8524d84c5da95dce2f608e0ca2ec8091191b0f330c6e3",
   "header_deps": [
     "0x7978ec7ce5b507cfb52e149e36b1a23f6062ed150503c85bbf825da3599095ed"
   ],
   "inputs": [
     {
       "previous_output": {
         "index": "0x0",
         "tx_hash": "0x365698b50ca0da75dca2c87f9e7b563811d3b5813736b8cc62cc3b106faceb17"
       },
       "since": "0x0"
     }
   ],
   "outputs": [
     {
       "capacity": "0x2540be400",
       "lock": {
         "code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
         "hash_type": "data",
         "args": "0x"
       },
       "type": null
     }
   ],
   "outputs_data": [
     "0x"
   ],
   "version": "0x0",
   "witnesses": []
 }

字段

TransactionView 是一个包含以下字段的JSON对象。

  • cell_deps: Array< CellDep > - 一个 cell 依赖的数组。

    CKB 通过 cell 依赖定位 lock 脚本和 type 脚本代码。脚本还可以使用 syscall 在此处读取 cell。

    与输入不同,活动 cell 可以在多个交易中用作 cell 依赖。

  • hash: H256 - 交易哈希。

  • header_deps: Array< H256 > - 一个 header 依赖的数组。

    该区块必须已经存在于主链中。

    lock 脚本和 type 脚本可以读取此处列出的区块的 header 信息。

  • inputs: Array< CellInput > - 输入 cell 的数组。

    在主链中,任何 cell 只能作为一次输入出现。

  • outputs: Array< CellOutput > - 输出 cell 的数组。

  • outputs_data: Array< JsonBytes > - 输出 cell 数据。

    这是一个与输出并行的数组。输出 i 的 cell 容量、lock 和 type 为 outputs[i],其数据为 outputs_data[i]

  • version: Uint32 - 为未来使用保留。在当前版本中必须等于 0。

  • witnesses: Array< JsonBytes > - 可变长度二进制数据的数组。

    lock 脚本和 type 脚本可以在此处读取数据以验证交易。

    例如,捆绑的 secp256k1 lock 脚本需要在 witnesses 中存储签名。

类型 TransactionWithStatusResponse

交易的JSON视图以及其状态。

字段

TransactionWithStatusResponse 是一个包含以下字段的JSON对象。

类型 TxPoolEntries

交易池条目对象

字段

TxPoolEntries 是一个包含以下字段的JSON对象。

  • conflicted: Array< H256 > - 矛盾的交易哈希向量

  • pending: - 等待的交易详细信息

  • proposed: - 提议的交易详细信息

类型 TxPoolEntry

交易条目信息

字段

TxPoolEntry 是一个包含以下字段的JSON对象。

  • ancestors_count: Uint64 - 在交易池中祖先交易的数量

  • ancestors_cycles: Uint64 - 在交易池中祖先交易的周期

  • ancestors_size: Uint64 - 在交易池中祖先交易的大小

  • cycles: Uint64 - 消耗的周期。

  • fee: Uint64 - 交易费用。

  • size: Uint64 - 在块中序列化的交易大小。

  • timestamp: Uint64 - 进入Txpool时的Unix时间戳,单位:毫秒

类型 TxPoolIds

交易ID数组

字段

TxPoolIds 是一个包含以下字段的JSON对象。

  • pending: Array< H256 > - 等待的交易ID

  • proposed: Array< H256 > - 提议的交易ID

类型 TxPoolInfo

交易池信息。

字段

TxPoolInfo 是一个包含以下字段的JSON对象。

  • last_txs_updated_at: Uint64 - 最后更新时间。这是毫秒级的Unix时间戳。

  • max_tx_pool_size: Uint64 - 交易池中交易大小的总限制

  • min_fee_rateUint64 - 交易费率阈值。池将拒绝费率低于此阈值的交易。

    单位是每1000字节交易序列化大小在区块中的Shannons。

  • min_rbf_rateUint64 - RBF费率阈值。

    池将拒绝费率低于此阈值的交易。如果min_rbf_rate > min_fee_rate,则在节点上启用RBF。

    单位是每1000字节交易序列化大小在区块中的Shannons。

  • orphanUint64 - 孤立交易数量。

    孤立交易具有来自不在链中也不在交易池中的交易的输入单元格。

  • pendingUint64 - 等待状态交易数量。

    等待状态的交易必须首先在新的区块中提出。

  • proposedUint64 - 提出状态交易数量。

    提出状态的交易在tip_hash区块之后准备好在新区块中提交。

  • tip_hashH256 - 相关链尾区块的哈希。

    交易池是有状态的。它管理在此区块之后可以提交的有效交易。

  • tip_numberUint64 - tip_hash区块的区块号。

  • total_tx_cyclesUint64 - 池中所有交易的总消耗的VM周期(不包括孤立交易)。

  • total_tx_sizeUint64 - 池中不同状态的总交易数量(不包括孤立交易)。

  • tx_size_limitUint64 - 限制交易到tx_size_limit

    接近区块大小限制的大交易可能不会被打包,因为区块头和cellbase已经占用,因此交易池限制接受交易的大小不超过tx_size_limit。

  • verify_queue_sizeUint64 - verify_queue大小

类型 TxStatus

交易状态以及如果已提交则对应的区块哈希。

字段

TxStatus是一个包含以下字段的JSON对象。

  • statusStatus - 交易状态,允许的值:"pending","proposed" "committed" "unknown" 和 "rejected"。

类型 U256

256位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。

类型 Uint128

Uint128uint128

类型 Uint32

Uint32uint32

类型 Uint64

Uint64uint64

类型 UncleBlock

作为RPC参数使用的叔父区块。

链只存储叔父区块的头和提案ID。头确保区块被PoW覆盖并可以通过叔父区块的共识规则。提案ID存在是因为一个区块可以提交叔父区块中提出的交易。

如果满足以下所有条件,则区块B1被认为是区块B2的叔父:

  1. 它们处于同一时代,具有相同的难度;
  2. B2的区块号大于B1;
  3. B1的父区块要么是B2的祖先,要么是B2中嵌入的叔父或B2的任何祖先。
  4. B2是其链中第一个引用B1的区块。

字段

UncleBlock是一个具有以下字段的JSON对象。

  • header: Header - 叔块的头信息。

  • proposals: Array< ProposalShortId > - 叔块体中的提案ID。

类型 UncleBlockView

叔块。

链只存储叔父区块的头和提案ID。头确保区块被PoW覆盖并可以通过叔父区块的共识规则。提案ID存在是因为一个区块可以提交叔父区块中提出的交易。

如果满足以下所有条件,则区块B1被认为是区块B2的叔父:

  1. 它们处于同一时代,具有相同的难度;
  2. B2的区块号大于B1;
  3. B1的父区块要么是B2的祖先,要么是B2中嵌入的叔父或B2的任何祖先。
  4. B2是其链中第一个引用B1的区块。

字段

UncleBlockView是一个具有以下字段的JSON对象。

类型 UncleTemplate

为矿工提供的新块叔块模板。

字段

UncleTemplate是一个具有以下字段的JSON对象。

  • hash: H256 - 叔块的哈希。

  • header: Header - 叔块的头信息。

    矿工在包含此叔块到新块中时必须保持此信息不变。

  • proposals: Array< ProposalShortId > - 叔块的提案。

    矿工在包含此叔块到新块中时必须保持此信息不变。

  • required: boolean - 矿工是否必须将此叔块包含在提交的块中。

类型 Version

简单的递增整数版本。

这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。

RPC 错误

CKB RPC错误代码。

CKB RPC遵循关于错误对象的JSON RPC规范。

除了预定义的错误之外,所有CKB定义的错误都列在这里。

以下是预定义错误的参考

code message meaning
-32700 解析错误 服务器收到无效的JSON。
-32600 无效请求 发送的JSON不是一个有效的请求对象。
-32601 方法未找到 该方法不存在或不可用。
-32602 无效参数 无效的方法参数。
-32603 内部错误 内部JSON-RPC错误。
-32000到-32099 服务器错误 保留供实现定义的服务器错误。

CKB应用程序定义的错误遵循某些模式来分配代码

  • -1 ~ -999是通用错误
  • -1000 ~ -2999是模块特定的错误。每个模块通常获得100个保留错误代码。

除非另有说明,所有错误都返回可选的详细信息,作为错误对象中的data字段中的string

ERROR CKBInternalError

(-1): CKB内部错误被认为永远不会发生或仅在系统资源耗尽时发生。

ERROR Deprecated

(-2): CKB方法已被弃用并禁用。

在配置文件中将rpc.enable_deprecated_rpc设置为true以启用所有已弃用的方法。

ERROR Invalid

(-3): 错误代码-3不再使用。

在v0.35.0之前,CKB使用错误代码-3返回所有RPC错误。自v0.35.0以来,CKB不再使用-3。

ERROR RPCModuleIsDisabled

(-4): RPC方法未启用。

CKB将RPC方法分组到模块中,并且只有当模块在配置文件中明确启用时,方法才被启用。

ERROR DaoError

(-5): 与DAO相关的错误。

ERROR IntegerOverflow

(-6): 整数运算溢出。

ERROR ConfigError

(-7): 错误是由配置文件选项引起的。

用户必须编辑配置文件来修复错误。

错误 P2PFailedToBroadcast

(-101):CKB本地节点未能向其对等节点广播消息。

错误 DatabaseError

(-200):内部数据库错误。

CKB节点将数据持久化到数据库。这是来自底层数据库模块的错误。

错误 ChainIndexIsInconsistent

(-201):链索引不一致。

不一致索引的一个例子是,链索引表明一个区块哈希在链中,但无法从数据库中读取该区块。

这是一个通常由于严重错误导致的致命错误。请备份数据目录并从头开始重新同步链。

错误 DatabaseIsCorrupt

(-202):底层数据库已损坏。

这是一个通常由CKB使用的底层数据库引起的致命错误。请备份数据目录并从头开始重新同步链。

错误 TransactionFailedToResolve

(-301):未能解析交易中引用的单元格和头信息,作为输入或依赖。

错误 TransactionFailedToVerify

(-302):未能验证交易。

错误 AlertFailedToVerifySignatures

(-1000):提交警报中的一些签名无效。

错误 PoolRejectedTransactionByOutputsValidator

(-1102):交易被由RPC参数指定的输出验证器拒绝。

错误 PoolRejectedTransactionByIllTransactionChecker

(-1103):池拒绝了一些似乎包含无效VM指令的交易。请参阅错误消息中的问题链接以获取详细信息。

错误 PoolRejectedTransactionByMinFeeRate

(-1104):交易费用率必须大于或等于配置选项 tx_pool.min_fee_rate

费用率计算如下

 fee / (1000 * tx_serialization_size_in_block_in_bytes)

错误 PoolRejectedTransactionByMaxAncestorsCountLimit

(-1105):池中祖先数量必须小于或等于配置选项 tx_pool.max_ancestors_count

池拒绝大量链式交易以避免某些类型的DoS攻击。

错误 PoolIsFull

(-1106):由于池已达到其限制,交易被拒绝。

错误 PoolRejectedDuplicatedTransaction

(-1107):交易已在池中。

错误 PoolRejectedMalformedTransaction

(-1108):由于在上下文中没有意义,交易被拒绝。

例如,不允许在 send_transaction RPC中使用cellbase交易。

错误 TransactionExpired

(-1109):交易在 expiry_hours 之后从tx-pool中过期。

错误 PoolRejectedTransactionBySizeLimit

(-1110):交易超过了最大大小限制。

错误 PoolRejectedRBF

(-1111):由于RBF检查,交易被拒绝。

错误 PoolRejectedInvalidated

(-1112):由于引用单元格消耗,交易被拒绝。

错误 Indexer

(-1200):索引器错误。

依赖项

~105–145MB
~3M SLoC