80个版本 (23个重大变更)
新 0.118.0-rc1 | 2024年8月19日 |
---|---|
0.117.0 | 2024年7月29日 |
0.117.0-rc3 | 2024年6月21日 |
0.115.0-rc2 | 2024年3月20日 |
0.1.0 | 2018年11月2日 |
#570 在 神奇豆子
每月511次下载
在 4 个crate中使用(直接使用2个)
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。
目录
-
-
- 方法
get_block
- 方法
get_block_by_number
- 方法
get_header
- 方法
get_header_by_number
- 方法
get_block_filter
- 方法
get_transaction
- 方法
get_block_hash
- 方法
get_tip_header
- 方法
get_live_cell
- 方法
get_tip_block_number
- 方法
get_current_epoch
- 方法
get_epoch_by_number
- 方法
get_block_economic_state
- 方法
get_transaction_proof
- 方法
verify_transaction_proof
- 方法
get_transaction_and_witness_proof
- 方法
verify_transaction_and_witness_proof
- 方法
get_fork_block
- 方法
get_consensus
- 方法
get_block_median_time
- 方法
estimate_cycles
- 方法
get_fee_rate_statics
- 方法
get_fee_rate_statistics
- 方法
-
- 类型
Alert
- 类型
AlertId
- 类型
AlertId
- 类型
AlertMessage
- 类型
AlertPriority
- 类型
AlertPriority
- 类型
AncestorsScoreSortKey
- 类型
BannedAddr
- 类型
Block
- 类型
BlockEconomicState
- 类型
BlockFilter
- 类型
BlockIssuance
- 类型
BlockNumber
- 类型
BlockResponse
- 类型
BlockTemplate
- 类型
BlockView
- 类型
BlockWithCyclesResponse
- 类型
Buried
- 类型
Byte32
- 类型
Capacity
- 类型
CellData
- 类型
CellDep
- 类型
CellInfo
- 类型
CellInput
- 类型
CellOutput
- 类型
CellWithStatus
- 类型
CellbaseTemplate
- 类型
ChainInfo
- 类型
Consensus
- 类型
Cycle
- 类型
DaoWithdrawingCalculationKind
- 类型
DepType
- 类型
Deployment
- 类型
DeploymentInfo
- 类型
DeploymentState
- 类型
DeploymentsInfo
- 类型
EntryCompleted
- 类型
EpochNumber
- 类型
EpochNumber
- 类型
EpochNumberWithFraction
- 类型
EpochView
- 类型
EstimateCycles
- 类型
ExtraLoggerConfig
- 类型
FeeRateStatistics
- 类型
H256
- 类型
HardForkFeature
- 类型
HardForks
- 类型
Header
- 类型
HeaderView
- 类型
IndexerCell
- 类型
IndexerCellType
- 类型
IndexerCellsCapacity
- 类型
IndexerOrder
- 类型
IndexerPagination<IndexerCell>
- 类型
IndexerPagination<IndexerTx>
- 类型
IndexerRange
- 类型
IndexerScriptType
- 类型
IndexerSearchKey
- 类型
IndexerSearchKeyFilter
- 类型
IndexerSearchMode
- 类型
IndexerTip
- 类型
IndexerTx
- 类型
IndexerTxWithCell
- 类型
IndexerTxWithCells
- 类型
JsonBytes
- 类型
LocalNode
- 类型
LocalNodeProtocol
- 类型
MainLoggerConfig
- 类型
MerkleProof
- 类型
MinerReward
- 类型
NodeAddress
- 类型
OutPoint
- 类型
OutputsValidator
- 类型
PeerSyncState
- 类型
PoolTransactionReject
- 类型
PoolTxDetailInfo
- 类型
ProposalShortId
- 类型
ProposalWindow
- 类型
Ratio
- 类型
RationalU256
- 类型
RawTxPool
- 类型
RemoteNode
- 类型
RemoteNodeProtocol
- 类型
ResponseFormat<BlockView>
- 类型
ResponseFormat<HeaderView>
- 类型
ResponseFormat<TransactionView>
- 类型
Rfc0043
- 类型
Script
- 类型
ScriptHashType
- 类型
SerializedBlock
- 类型
SerializedHeader
- 类型
SoftFork
- 类型
SoftForkStatus
- 类型
Status
- 类型
SyncState
- 类型
Timestamp
- 类型
Transaction
- 类型
TransactionAndWitnessProof
- 类型
TransactionProof
- 类型
TransactionTemplate
- 类型
TransactionView
- 类型
TransactionWithStatusResponse
- 类型
TxPoolEntries
- 类型
TxPoolEntry
- 类型
TxPoolIds
- 类型
TxPoolInfo
- 类型
TxStatus
- 类型
U256
- 类型
Uint128
- 类型
Uint32
- 类型
Uint64
- 类型
UncleBlock
- 类型
UncleBlockView
- 类型
UncleTemplate
- 类型
Version
- 类型
RPC 模块
模块 Alert
RPC 模块 Alert 用于网络警报。
警报是关于关键问题的消息,将通过 p2p 网络广播到所有节点。
警报必须由 2-of-4 签名签名,其中公钥在源代码中硬编码,属于早期的 CKB 开发者。
方法 send_alert
send_alert(alert)
alert
:Alert
- 结果:
null
发送警报。
此 RPC 在成功时返回 null
。
错误
AlertFailedToVerifySignatures (-1000)
- 请求中的一些签名无效。P2PFailedToBroadcast (-101)
- 警报已保存到本地,但未能广播到 P2P 网络。InvalidParams (-32602)
-alert.notice_until
中指定的日期必须在将来。
示例
请求
{
"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)
- 结果:
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)
- 结果:
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序列化的区块。
错误
ChainIndexIsInconsistent (-201)
- 索引不一致。它表示一个区块哈希在主链中,但不能从数据库中读取它。DatabaseIsCorrupt (-202)
- 从数据库中读取的数据是脏的。请将其报告为错误。
示例
请求
{
"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
get_header(block_hash,verbosity)
- 结果:
ResponseFormat<HeaderView>
|
null
通过哈希返回区块头信息。
参数
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
get_header_by_number(区块编号,verbosity)
- 结果:
ResponseFormat<HeaderView>
|
null
返回具有特定块号的规范链中的块头部。
参数
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序列化的块头部。
错误
ChainIndexIsInconsistent (-201)
- 索引不一致。它表示一个区块哈希在主链中,但不能从数据库中读取它。
示例
请求
{
"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)
block_hash
:H256
- 结果:
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
get_transaction(tx_hash,verbosity,only_committed)
- 结果:
TransactionWithStatusResponse
返回由交易哈希请求的交易信息。
返回值
如果交易既不在规范链中,也不在交易内存池中,则此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
返回具有指定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
get_tip_header(verbosity)
verbosity
:Uint32
|
null
- 结果:
ResponseFormat<HeaderView>
返回 规范链 中具有最高区块号的头部。
由于 链重组,返回的区块号可能小于之前的调用,并且不同的调用可能返回具有相同区块号的不同的区块头部。
参数
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
-
get_current_epoch()
-
结果:
EpochView
返回 规范链 中具有最高数字的纪元。
请注意,由于 链重组,具有特定区块号的区块可能发生变化,因此此 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
返回 规范链 中具有特定纪元数字的纪元。
参数
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
get_block_economic_state(block_hash)
block_hash
:H256
- 结果:
BlockEconomicState
|
null
返回区块的增加发行量、矿工奖励以及总交易费。
如果区块不在主链上,此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
get_transaction_proof(tx_hashes,block_hash)
- 结果:
TransactionProof
返回一个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
verify_transaction_proof(tx_proof)
tx_proof
:TransactionProof
- 结果:
Array<
H256
>
验证证明指向区块中的交易,返回其承诺的交易哈希。
参数
transaction_proof
- 由get_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
get_transaction_and_witness_proof(tx_hashes,block_hash)
- 结果:
TransactionAndWitnessProof
返回一个包含在区块中的交易见证的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
verify_transaction_and_witness_proof(tx_proof)
tx_proof
:TransactionAndWitnessProof
- 结果:
Array<
H256
>
验证证明指向区块中的交易,返回其承诺的交易哈希。
参数
tx_proof
- 由get_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
get_fork_block(block_hash,verbosity)
- 结果:
ResponseFormat<BlockView>
|
null
通过哈希返回分叉区块的信息。
参数
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
-
get_consensus()
-
结果:
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
通过区块哈希返回过去的中位数时间。
参数
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(tx)
tx
:Transaction
- 结果:
EstimateCycles
estimate_cycles
运行一个事务并返回执行消耗的周期数。
此方法不会检查事务的有效性,而只会运行锁脚本和类型脚本,然后返回执行周期数。
它用于估计脚本消耗了多少周期。
错误
TransactionFailedToResolve (-301)
- 无法解决事务中用作输入或依赖的引用单元格和头信息。TransactionFailedToVerify (-302)
- 有一个脚本返回了错误。
示例
请求
{
"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
get_fee_rate_statics(target)
target
:Uint64
|
null
- 结果:
FeeRateStatistics
|
null
👎自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
get_fee_rate_statistics(target)
target
:Uint64
|
null
- 结果:
FeeRateStatistics
|
null
返回链上已确认区块的费率统计信息
参数
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
update_main_logger(配置)
config
:MainLoggerConfig
- 结果:
null
在CKB运行时更改主日志配置选项。
方法 set_extra_logger
set_extra_logger(名称,配置选项)
name
:string
config_opt
:ExtraLoggerConfig
|
null
- 结果:
null
为额外日志记录器设置配置选项。
CKB节点允许设置额外的日志记录器。这些日志记录器将有自己的日志文件,并且它们只会将日志追加到自己的日志文件中。
参数
name
- 额外日志记录器名称config_opt
- 当此值不为null时,添加新日志记录器或更新现有日志记录器。当此值为null时,删除日志记录器。
模块 Experiment
用于实验方法的RPC模块实验。
EXPERIMENTAL警告
这里的方法可能在未来的版本中删除或更改,而不会提前通知。
方法 dry_run_transaction
dry_run_transaction(tx)
tx
:Transaction
- 结果:
EstimateCycles
👎自0.105.1版本起已弃用:请使用RPC方法 estimate_cycles
替代
执行事务的干运行并返回执行周期。
此方法不会检查事务的有效性,而只会运行锁脚本和类型脚本,然后返回执行周期数。
用于调试事务脚本和查询脚本消耗了多少周期。
错误
TransactionFailedToResolve (-301)
- 无法解决事务中用作输入或依赖的引用单元格和头信息。TransactionFailedToVerify (-302)
- 有一个脚本返回了错误。
示例
请求
{
"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
calculate_dao_maximum_withdraw(out_point,类型)
out_point
:OutPoint
kind
:DaoWithdrawingCalculationKind
- 结果:
Uint64
根据引用的DAO单元格和提款区块哈希,计算可以获得的最高提款金额。
参数
out_point
- 对DAO单元格的引用,存款事务的输出。kind
- 两种DAO提款金额计算选项。
选项1,假设提款阶段1事务的参考区块哈希,此区块必须在 规范链 上,占用容量的计算将基于存款事务的输出,假设阶段1事务的输出与存款事务的输出相同。
选项2,提款阶段1事务的出点,占用容量的计算将基于相应的阶段1事务的输出。
返回值
RPC返回当使用区块哈希或提款阶段1事务出点作为参考时,使用out_point
提款后的最终容量。
在CKB中,脚本无法获取事务提交在哪个区块的信息。一种解决方案是让事务引用一个区块哈希,这样脚本就知道事务至少在参考区块之后提交。
错误
DaoError (-5)
- 给定的出点不是DAO计算的合法单元格。CKBInternalError (-1)
- 数学溢出。
示例
请求
{
"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
-
get_indexer_tip()
-
结果:
IndexerTip
|
null
返回索引的提示
返回值
- 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
get_cells(search_key,order,limit,after)
search_key
:IndexerSearchKey
order
:IndexerOrder
limit
:Uint32
after
:JsonBytes
|
null
- 结果:
IndexerPagination<IndexerCell>
通过锁定脚本或类型脚本返回活动单元格集合。
参数
- 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
get_transactions(search_key,order,limit,after)
search_key
:IndexerSearchKey
order
:IndexerOrder
limit
:Uint32
after
:JsonBytes
|
null
- 结果:
IndexerPagination<IndexerTx>
通过锁定脚本或类型脚本返回交易集合。
- 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]]
- TxWithCell
- 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
get_cells_capacity(search_key)
search_key
:IndexerSearchKey
- result:
IndexerCellsCapacity
|
null
根据锁或类型脚本返回实时单元容量。
参数
- 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
不进行任何块验证的情况下处理块。
参数
-
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
在开发期间生成周期,可用于测试 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
notify_transaction(transaction)
transaction
:Transaction
- result:
H256
将交易添加到 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)
block_template
:BlockTemplate
- 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
calculate_dao_field(block_template)
block_template
:BlockTemplate
- result:
Byte32
根据指定的块模板返回计算后的 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
send_test_transaction(tx,outputs_validator)
tx
:Transaction
outputs_validator
:OutputsValidator
|
null
- result:
H256
向交易池提交一个新的测试本地事务,仅供测试。如果事务已经在池中,则重新广播给对等节点。
参数
transaction
- 交易。outputs_validator
- 在进入交易池之前验证交易输出。(可选,默认为"passthrough")。
错误
PoolRejectedTransactionByOutputsValidator (-1102)
- 交易被outputs_validator
指定的验证器拒绝。如果您确实想发送具有高级脚本的交易,请将outputs_validator
设置为"passthrough"。PoolRejectedTransactionByMinFeeRate (-1104)
- 交易费率必须大于或等于配置选项tx_pool.min_fee_rate
。PoolRejectedTransactionByMaxAncestorsCountLimit (-1105)
- 祖先数量必须大于或等于配置选项tx_pool.max_ancestors_count
。PoolIsFull (-1106)
- 池已满。PoolRejectedDuplicatedTransaction (-1107)
- 交易已在池中。TransactionFailedToResolve (-301)
- 无法解决事务中用作输入或依赖的引用单元格和头信息。TransactionFailedToVerify (-302)
- 验证交易失败。
示例
请求
{
"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
将新块提交到网络。
参数
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
-
local_node_info()
-
结果:
LocalNode
返回本地节点信息。
本地节点是指提供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
-
get_peers()
-
结果:
Array<
RemoteNode
>
返回连接的节点信息。
示例
请求
{
"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
-
sync_state()
-
结果:
SyncState
返回此节点的链同步状态。
示例
请求
{
"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_id
是QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS
,- 并且
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_id
是 QmUsZHPbjjzU627UZFt4k8j6ycEcNvXRnVGxCPKqwbAfQS
。
示例
请求
{
"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(tx,outputs_validator)
tx
:Transaction
outputs_validator
:OutputsValidator
|
null
- result:
H256
将新事务提交到事务池。如果事务已在池中,则重新广播到对等节点。
请注意,send_transaction
是一个异步过程。 send_transaction
的返回值不表示事务已被完全验证。如果您想跟踪事务的状态,请使用 get_transaction
rpc。
参数
transaction
- 交易。outputs_validator
- 在进入交易池之前验证交易输出。(可选,默认为"passthrough")。
错误
PoolRejectedTransactionByOutputsValidator (-1102)
- 交易被outputs_validator
指定的验证器拒绝。如果您确实想发送具有高级脚本的交易,请将outputs_validator
设置为"passthrough"。PoolRejectedTransactionByMinFeeRate (-1104)
- 交易费率必须大于或等于配置选项tx_pool.min_fee_rate
。PoolRejectedTransactionByMaxAncestorsCountLimit (-1105)
- 祖先数量必须大于或等于配置选项tx_pool.max_ancestors_count
。PoolIsFull (-1106)
- 池已满。PoolRejectedDuplicatedTransaction (-1107)
- 交易已在池中。TransactionFailedToResolve (-301)
- 无法解决事务中用作输入或依赖的引用单元格和头信息。TransactionFailedToVerify (-302)
- 验证交易失败。
示例
请求
{
"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
test_tx_pool_accept(tx,outputs_validator)
tx
:Transaction
outputs_validator
:OutputsValidator
|
null
- 结果:
EntryCompleted
测试事务池是否可以接受事务,而无需将其插入池或重新广播到对等节点。此方法的方法参数和错误与 send_transaction
相同。
参数
transaction
- 交易。outputs_validator
- 在进入交易池之前验证交易输出。(可选,默认为"passthrough")。
错误
PoolRejectedTransactionByOutputsValidator (-1102)
- 交易被outputs_validator
指定的验证器拒绝。如果您确实想发送具有高级脚本的交易,请将outputs_validator
设置为"passthrough"。PoolRejectedTransactionByMinFeeRate (-1104)
- 交易费率必须大于或等于配置选项tx_pool.min_fee_rate
。PoolRejectedTransactionByMaxAncestorsCountLimit (-1105)
- 祖先数量必须大于或等于配置选项tx_pool.max_ancestors_count
。PoolIsFull (-1106)
- 池已满。PoolRejectedDuplicatedTransaction (-1107)
- 交易已在池中。TransactionFailedToResolve (-301)
- 无法解决事务中用作输入或依赖的引用单元格和头信息。TransactionFailedToVerify (-302)
- 验证交易失败。
示例
请求
{
"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)
tx_hash
:H256
- 结果:
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
-
tx_pool_info()
-
结果:
TxPoolInfo
返回事务池信息。
示例
请求
{
"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
get_pool_tx_detail_info(tx_hash)
tx_hash
:H256
- 结果:
PoolTxDetailInfo
查询并返回池中事务的详细信息,仅用于故障排除
参数
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
-
get_indexer_tip()
-
结果:
IndexerTip
|
null
返回索引的提示。
返回值
- block_hash - 索引提示区块哈希
- block_number - 索引提示区块号
示例
与CKB索引器相同。
方法 get_cells
get_cells(search_key,order,limit,after)
search_key
:IndexerSearchKey
order
:IndexerOrder
limit
:Uint32
after
:JsonBytes
|
null
- 结果:
IndexerPagination<IndexerCell>
通过锁定脚本或类型脚本返回活动单元格集合。
与原始CKB索引器不同的是,script_search_mode
参数接受 partial
枚举值。这意味着可以在 script
的 args
上执行部分搜索。
参数
- 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
get_transactions(search_key,order,limit,after)
search_key
:IndexerSearchKey
order
:IndexerOrder
limit
:Uint32
after
:JsonBytes
|
null
- 结果:
IndexerPagination<IndexerTx>
通过锁定脚本或类型脚本返回交易集合。
与原始CKB索引器不同的是,filter
中的 script_search_mode
和 output_data_filter_mode
都可以接受 partial
枚举值。这意味着可以在 script
的 args
和单元格 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]]
- TxWithCell
- last_cursor - 分页参数
示例
与CKB索引器相同。
方法 get_cells_capacity
get_cells_capacity(search_key)
search_key
:IndexerSearchKey
- result:
IndexerCellsCapacity
|
null
根据锁或类型脚本返回实时单元容量。
与原始CKB索引器不同的是,script_search_mode
参数接受 partial
枚举值。这意味着可以在 script
的 args
上执行部分搜索。
参数
- 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
-
get_blockchain_info()
-
结果:
ChainInfo
返回有关链的统计信息。
示例
请求
{
"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
-
get_deployments_info()
-
结果:
DeploymentsInfo
返回有关链的统计信息。
示例
请求
{
"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
的类型是一个包含两个元素的数组,其中
- 第一个项目类型是
PoolTransactionEntry
, - 第二个项目类型是
PoolTransactionReject
。
示例
订阅请求
{
"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
- 警报在此时间戳后过期。 -
priority
:Uint32
- 优先级排序警报,优先级最高优先显示。 -
signatures
:Array<
JsonBytes
>
- 必要签名列表。
类型 AlertId
用于过滤重复警报的警报标识符。
这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。
类型 AlertId
用于过滤重复警报的警报标识符。
这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。
类型 AlertMessage
由RPC send_alert
发送的警报。
字段
AlertMessage
是一个包含以下字段的JSON对象。
-
id
:Uint32
- 唯一的警报ID。 -
message
:string
- 警报信息。 -
notice_until
:Uint64
- 警报在此时间戳后过期。 -
priority
:Uint32
- 优先级排序警报,优先级最高优先显示。
类型 AlertPriority
警报按优先级排序。较大的整数表示较高的优先级。
这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。
类型 AlertPriority
警报按优先级排序。较大的整数表示较高的优先级。
这是一个32位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。请参阅Uint32的示例。
类型 AncestorsScoreSortKey
作为tx-pool排序键的结构。
字段
AncestorsScoreSortKey
是一个包含以下字段的JSON对象。
类型 BannedAddr
禁止的P2P地址。
字段
BannedAddr
是一个包含以下字段的JSON对象。
-
address
:string
- P2P地址。示例:"/ip4/192.168.0.2/tcp/8112/p2p/QmTRHCdrRtgUzYLNCin69zEvPvLYdxUZLLfLYyHVY3DZAS"
-
ban_reason
:string
- 原因。 -
ban_until
:Uint64
- 地址被禁止直到此时间。 -
created_at
:Uint64
- 当此地址被禁止时。
类型 Block
在RPC中作为参数使用的Block的JSON视图。
字段
Block
是一个包含以下字段的JSON对象。
-
header
:Header
- 区块头。 -
proposals
:Array<
ProposalShortId
>
- 区块体中的提案ID。 -
transactions
:Array<
Transaction
>
- 区块体中的交易。 -
uncles
:Array<
UncleBlock
>
- 区块体中的叔父块。
类型 BlockEconomicState
区块经济状态。
它包括奖励细节及其何时最终确定。
字段
BlockEconomicState
是一个包含以下字段的JSON对象。
-
finalized_at
:H256
- 创建奖励作为其cellbase交易中的cells的区块的区块哈希。 -
issuance
:BlockIssuance
- 区块基础奖励。 -
miner_reward
:MinerReward
- 矿工的区块奖励。 -
txs_fee
:Uint64
- 区块中所有提交的交易的总费用。
类型 BlockFilter
区块过滤器数据和哈希。
字段
BlockFilter
是一个具有以下字段的 JSON 对象。
-
data
:JsonBytes
- 区块的十六进制编码的过滤器数据。 -
hash
:Byte32
- 过滤器哈希,为父区块过滤器哈希和过滤器数据的 blake2b 哈希,即 blake2b(parent_block_filter_hash | current_block_filter_data)。
类型 BlockIssuance
区块基础奖励。
字段
BlockIssuance
是一个具有以下字段的 JSON 对象。
类型 BlockNumber
从 0 开始的连续区块号。
这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。
类型 BlockResponse
包装器代表 get_block
或 get_block_by_number
的响应,返回一个带有周期的区块。
类型 BlockTemplate
矿工的区块模板。
矿工可以可选地选择交易,然后组装最终的区块。
字段
BlockTemplate
是一个具有以下字段的 JSON 对象。
-
bytes_limit
:Uint64
- 区块序列化大小限制。矿工必须将区块大小保持在此限制以下,否则,CKB 节点将拒绝区块提交。
如果矿工不添加新的交易承诺,则保证区块不超过此限制。
-
cellbase
:CellbaseTemplate
- 提供的 cellbase 交易模板。矿工必须将其作为 cellbase 交易在组装的区块中使用,不得更改。
-
compact_target
:Uint32
- 新区块的压缩难度目标。矿工必须在不更改的情况下在组装的区块中使用它。
-
current_time
:Uint64
- 新区块的时间戳。CKB 节点保证此时间戳大于前 37 个区块的中位数。
矿工可以将其增加到当前时间。不建议降低它,因为这可能会违反中值区块时间戳共识规则。
-
cycles_limit
:Uint64
- 周期限制。矿工必须将总周期保持在此限制以下,否则,CKB 节点将拒绝区块提交。
如果矿工不向区块添加新交易,则保证区块不超过此限制。
-
dao
:Byte32
- 参考DAO字段。此字段仅在矿工使用模板中提供的所有交易并且只使用这些交易时有效。当矿工想要选择交易时,必须更新两个字段:
S_i
,字节 16 到 23U_i
,字节 24 到 31
参见RFC Nervos DAO的存取款。
-
epoch
:Uint64
- 新块的新纪进步度信息。矿工必须在不更改的情况下在组装的区块中使用它。
-
number
:Uint64
- 新块块号。矿工必须在不更改的情况下在组装的区块中使用它。
-
parent_hash
:H256
- 新块父块哈希。矿工必须在不更改的情况下在组装的区块中使用它。
-
proposals
:Array<
ProposalShortId
>
- 新块中提供的交易提案ID列表。 -
transactions
:Array<
TransactionTemplate
>
- 可以在新块中提交的有效交易。矿工必须在组装的新块中包含标记为
required
的交易。 -
uncles
:Array<
UncleTemplate
>
- 提供的有效叔块候选列表。矿工必须在组装的新块中包含标记为
required
的叔块。 -
uncles_count_limit
:Uint64
- 叔块数量限制。矿工必须将叔块数量保持在此限制以下,否则,CKB节点将拒绝提交块。
-
version
:Uint32
- 块版本。矿工必须在不更改的情况下在组装的区块中使用它。
-
work_id
:Uint64
- 工作ID。矿工必须使用相同的工作ID提交新组装和解析的块。
类型 BlockView
包括头部和主体的块的JSON视图。
字段
BlockView
是一个包含以下字段的JSON对象。
-
header
:HeaderView
- 块头部。 -
proposals
:Array<
ProposalShortId
>
- 区块体中的提案ID。 -
transactions
:Array<
TransactionView
>
- 块主体中的交易。 -
uncles
:Array<
UncleBlockView
>
- 块主体中的叔块。
类型 BlockWithCyclesResponse
带周期格式的BlockResponse包装器
字段
BlockWithCyclesResponse
是一个包含以下字段的JSON对象。
block
:ResponseFormat<BlockView>
- 块结构
类型 Buried
表示软分叉部署,其中激活纪元硬编码到客户端实现中
字段
Buried
是一个包含以下字段的JSON对象。
-
active
:boolean
- 规则是否有效 -
epoch
:Uint64
- 规则将开始实施的第一纪元 -
status
:SoftForkStatus
- 软分叉状态
类型 Byte32
固定长度为32字节的二进制编码,以0x前缀的十六进制字符串形式表示在JSON中。
类型 Capacity
单元格的容量是单元格在Shannons中的值。它也是单元格占用存储大小的上限,每100,000,000 Shannons提供1字节存储。
这是一个 64 位无符号整数类型,在 JSON 中编码为以 0x 为前缀的十六进制字符串。请参阅 Uint64 的示例。
类型 CellData
单元格数据内容和哈希。
示例
{
"content": "0x7f454c460201010000000000000000000200f3000100000078000100000000004000000000000000980000000000000005000000400038000100400003000200010000000500000000000000000000000000010000000000000001000000000082000000000000008200000000000000001000000000000001459308d00573000000002e7368737472746162002e74657874000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b000000010000000600000000000000780001000000000078000000000000000a0000000000000000000000000000000200000000000000000000000000000001000000030000000000000000000000000000000000000082000000000000001100000000000000000000000000000001000000000000000000000000000000",
"hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5"
}
字段
CellData
是一个JSON对象,具有以下字段。
类型 CellDep
事务的单元格依赖关系。
示例
{
"dep_type": "code",
"out_point": {
"index": "0x0",
"tx_hash": "0xa4037a893eb48e18ed4ef61034ce26eba9c585f15c9cee102ae58505565eccc3"
}
}
字段
CellDep
是一个JSON对象,具有以下字段。
类型 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对象,具有以下字段。
-
previous_output
:OutPoint
- 对输入单元格的引用。 -
since
:Uint64
- 限制事务可以提交到链中的时间。参见RFC Transaction valid since。
类型 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 之后的所有区块。
-
threshold
:Ratio
- 激活该功能所需的版本位被设置的块的比例 -
timeout
:Uint64
- 指定矿工信号结束的时期。一旦达到这个时期,如果软分叉尚未 locked_in(不包括这个时期的区块位状态),则认为所有后裔块的部署失败。
类型 DeploymentState
可能的软分叉部署状态
这是一个枚举值,来自以下之一
- defined:每个软分叉开始的第一状态。对于每个部署,0 时期定义为这个状态。
- started:对于 start_epoch 之后的时期。
- locked_in:对于第一个周期后的一周期,其中 STARTED 时期至少 threshold 个块的版本中相关位被设置。
- active:对于 LOCKED_IN 期之后的所有时期。
- failed:如果未达到 LOCKED_IN,则在 timeout_epoch 之后的一周期。
类型 DeploymentsInfo
链信息。
字段
DeploymentsInfo
是一个 JSON 对象,具有以下字段。
-
deployments
:-{ [ key:
DeploymentPos
]:
DeploymentInfo
}
部署信息 -
epoch
:Uint64
- 请求的区块时期 -
hash
:H256
- 请求的区块哈希
类型 EntryCompleted
test_tx_pool_accept 对事务的验证结果
字段
EntryCompleted
是一个 JSON 对象,具有以下字段。
类型 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_target
:Uint32
- 当前纪元的任意区块的难度目标。 -
length
:Uint64
- 当前纪元的区块数量。 -
number
:Uint64
- 从0开始的连续纪元编号。 -
start_number
:Uint64
- 纪元中第一个区块的区块号。它也等于所有纪元中区块数量总和,其中纪元编号小于当前纪元。
类型 EstimateCycles
RPC方法estimate_cycles
的响应结果。
字段
EstimateCycles
是一个包含以下字段的JSON对象。
cycles
:Uint64
- VM验证此交易所消耗的周期数。
类型 ExtraLoggerConfig
运行时日志配置,用于额外的日志记录器。
字段
ExtraLoggerConfig
是一个包含以下字段的JSON对象。
-
filter
:string
- 设置不同模块的日志级别。示例
将所有模块的日志级别设置为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对象。
rfc
:string
- 相关的RFC ID。
类型 HardForks
硬分叉信息
字段
HardForks
是一个包含以下字段的JSON对象。
inner
:Array<
HardForkFeature
>
类型 Header
区块头。
参考RFC CKB Block Structure。
字段
Header
是一个包含以下字段的JSON对象。
-
compact_target
:Uint32
- 区块难度目标。它可以转换为256位目标。矿工必须确保头部的Eaglesong在目标范围内。
-
dao
:Byte32
- DAO字段。参见RFC Nervos DAO的存取款。
-
epoch
:Uint64
- 此区块的纪元信息。有关详细信息,请参阅
EpochNumberWithFraction
。 -
extra_hash
:H256
- 块体中叔父和扩展的哈希。当叔父为空时,叔父哈希为全零,或所有叔父头哈希拼接的哈希。扩展哈希是扩展的哈希。额外哈希是叔父哈希和扩展哈希拼接的哈希。
注意
自0.100.0以来,此字段已从
uncles_hash
重命名为。更多详细信息请参阅CKB RFC 0031。 -
nonce
:Uint128
- 矿工可以修改此字段以找到合适的值,使得头部的Eaglesong值在由compact_target
编码的目标值内。 -
number
:Uint64
- 从0开始的连续区块号。 -
parent_hash
:H256
- 父区块的头哈希。 -
proposals_hash
:H256
- 区块体中proposals
的哈希。当
proposals
为空时,它全部为零,或所有字节连接在一起后的哈希。 -
timestamp
:Uint64
- 区块时间戳。它是毫秒(1秒=1000毫秒)的Unix时间戳。
矿工应将区块创建的时间放入头部,然而,精度无法保证。具有更高区块号的区块甚至可能具有更小的时间戳。
-
transactions_root
:H256
- 区块中所有交易的承诺。它是两个Merkle树根的哈希。
- CKB Merkle树的根,其中的项目是区块中所有交易的交易哈希。
- CKB Merkle树的根,但项目是区块中所有交易的交易见证哈希。
-
version
:Uint32
- 区块版本。它现在必须等于0,并保留供将来升级使用。
类型 HeaderView
Header的JSON视图。
此结构被序列化为一个JSON对象,其中包含字段 hash
和 Header
中的所有字段。
示例
{
"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_target
:Uint32
- 区块难度目标。它可以转换为256位目标。矿工必须确保头部的Eaglesong在目标范围内。
-
dao
:Byte32
- DAO字段。参见RFC Nervos DAO的存取款。
-
epoch
:Uint64
- 此区块的纪元信息。有关详细信息,请参阅
EpochNumberWithFraction
。 -
extra_hash
:H256
- 块体中叔父和扩展的哈希。当叔父为空时,叔父哈希为全零,或所有叔父头哈希拼接的哈希。扩展哈希是扩展的哈希。额外哈希是叔父哈希和扩展哈希拼接的哈希。
注意
自0.100.0以来,此字段已从
uncles_hash
重命名为。更多详细信息请参阅CKB RFC 0031。 -
hash
:H256
- 头部哈希。也称为区块哈希。 -
nonce
:Uint128
- 矿工可以修改此字段以找到合适的值,使得头部的Eaglesong值在由compact_target
编码的目标值内。 -
number
:Uint64
- 从0开始的连续区块号。 -
parent_hash
:H256
- 父区块的头哈希。 -
proposals_hash
:H256
- 区块体中proposals
的哈希。当
proposals
为空时,它全部为零,或所有字节连接在一起后的哈希。 -
timestamp
:Uint64
- 区块时间戳。它是毫秒(1秒=1000毫秒)的Unix时间戳。
矿工应将区块创建的时间放入头部,然而,精度无法保证。具有更高区块号的区块甚至可能具有更小的时间戳。
-
transactions_root
:H256
- 区块中所有交易的承诺。它是两个Merkle树根的哈希。
- CKB Merkle树的根,其中的项目是区块中所有交易的交易哈希。
- CKB Merkle树的根,但项目是区块中所有交易的交易见证哈希。
-
version
:Uint32
- 区块版本。它现在必须等于0,并保留供将来升级使用。
类型 IndexerCell
活细胞
字段
IndexerCell
是一个JSON对象,具有以下字段。
-
block_number
:Uint64
- 区块中提交的交易数量 -
out_point
:OutPoint
- 通过交易哈希和输出索引引用的单元格 -
output
:CellOutput
- 输出单元格的字段 -
tx_index
:Uint32
- 区块中提交的交易的位置索引
类型 IndexerCellType
单元格类型
这是一个枚举值,来自以下之一
- 输入:Input
- 输出:Output
类型 IndexerCellsCapacity
单元格容量
字段
IndexerCellsCapacity
是一个JSON对象,具有以下字段。
类型 IndexerOrder
排序 Desc | Asc
这是一个枚举值,来自以下之一
- desc:降序
- asc:升序
类型 IndexerPagination<IndexerCell>
IndexerPagination封装对象数组以及last_cursor以提供分页
字段
IndexerPagination<IndexerCell>
是一个JSON对象,具有以下字段。
-
last_cursor
:JsonBytes
- 分页参数 -
objects
:Array<
IndexerCell
>
- 对象集合
类型 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 对象。
-
script
:Script
- 脚本 -
script_type
:IndexerScriptType
- 脚本类型
类型 IndexerSearchKeyFilter
IndexerSearchKeyFilter 代表索引器参数 filter
字段
IndexerSearchKeyFilter
是一个具有以下字段的 JSON 对象。
block_range
:IndexerRange
|
null
按区块号范围过滤单元格output_capacity_range
:IndexerRange
|
null
按输出容量范围过滤单元格output_data
:JsonBytes
|
null
按输出数据过滤单元格output_data_filter_mode
:IndexerSearchMode
|
null
输出数据过滤模式,可选默认为prefix
output_data_len_range
:IndexerRange
|
null
按输出数据长度范围过滤单元格script
:Script
|
null
如果搜索脚本类型是 lock,则按类型脚本前缀过滤单元格,反之亦然script_len_range
:IndexerRange
|
null
按脚本长度范围过滤单元格
类型 IndexerSearchMode
IndexerSearchMode 代表搜索模式,默认为前缀搜索
这是一个枚举值,来自以下之一
- prefix : Mode
prefix
使用前缀搜索 - exact : Mode
exact
使用精确匹配搜索 - partial : Mode
partial
使用部分匹配搜索
类型 IndexerTip
Indexer 提示信息
字段
IndexerTip
是一个具有以下字段的 JSON 对象。
类型 IndexerTx
Indexer 事务对象
类型 IndexerTxWithCell
未分组事务内部类型
字段
IndexerTxWithCell
是一个具有以下字段的 JSON 对象。
-
block_number
:Uint64
- 区块中提交的交易数量 -
io_index
:Uint32
- 单元格在事务输入或输出中的位置索引 -
io_type
:IndexerCellType
- io 类型 -
tx_hash
:H256
- 交易哈希 -
tx_index
:Uint32
- 区块中提交的交易的位置索引
类型 IndexerTxWithCells
分组交易内部类型
字段
IndexerTxWithCells
是一个包含以下字段的 JSON 对象。
-
block_number
:Uint64
- 区块中提交的交易数量 -
cells
:Array<
(IndexerCellType
,Uint32
)>
- Array [(io_type, io_index)] -
tx_hash
:H256
- 交易哈希 -
tx_index
:Uint32
- 区块中提交的交易的位置索引
类型 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对象。
类型 OutputsValidator
交易输出验证器,用于防止常见错误。
这是一个枚举值,来自以下之一
- passthrough:默认验证器,绕过输出检查,因此允许任何类型的交易输出。
- well_known_scripts_only:限制锁脚本和类型脚本的用法,更多信息请参阅https://github.com/nervosnetwork/ckb/wiki/Transaction-%C2%BB-Default-Outputs-Validator
类型 PeerSyncState
本地节点和远程节点之间的链同步状态。
字段
PeerSyncState
是一个包含以下字段的JSON对象。
-
can_fetch_count
:Uint64
- 可用于并行下载的区块数量。 -
inflight_count
:Uint64
- 正在并行下载的区块数量。 -
unknown_header_list_size
:Uint64
- 未知头列表的总大小。已弃用:这是一个内部状态,将在未来的版本中删除。
类型 PoolTransactionReject
交易拒绝消息,PoolTransactionReject
是一个具有以下字段的 JSON 对象。
type
:以下枚举值的拒绝类型description
:string
- 关于交易被拒绝的详细描述。
来自以下之一的枚举值
LowFeeRate
:交易费低于配置ExceededMaximumAncestorsCount
:交易超过了最大祖先计数限制ExceededTransactionSizeLimit
:交易超过了最大大小限制Full
:由于池已满,交易被替换Duplicated
:交易已存在于交易池中Malformed
:格式不正确的交易DeclaredWrongCycles
:声明了错误的周期Resolve
:解决失败Verification
:验证失败Expiry
:交易已过期RBFRejected
:RBF 被拒绝Invalidated
:被撤销的拒绝
类型 PoolTxDetailInfo
tx-pool 中的交易详情信息。
字段
PoolTxDetailInfo
是一个具有以下字段的 JSON 对象。
-
ancestors_count
:Uint64
- 交易祖先计数 -
descendants_count
:Uint64
- 交易后代计数 -
entry_status
:string
- 交易池中的详细状态,pending
、gap
、proposed
-
pending_count
:Uint64
- 等待数(pending
和gap
) -
proposed_count
:Uint64
- 提案数 -
rank_in_pending
:Uint64
- 等待中的排名,从 0 开始 -
score_sortkey
:AncestorsScoreSortKey
- 分数键的详细信息,有助于调试 -
timestamp
:Uint64
- 添加到交易池的时间
类型 ProposalShortId
作为 0x 前缀的十六进制字符串编写的 10 字节固定长度二进制编码。
示例
0xa0ef4eb5f4ceeb08a4c8
类型 ProposalWindow
两个协议参数 closest
和 farthest
定义了交易提案和承诺之间的链上最近和最远距离。
如果满足以下所有条件,非 cellbase 交易将在高度 h_c 处提交
- 它在同一链的高度 h_p 上被提出,其中 w_close <= h_c − h_p <= w_far ;
- 它位于高度 h_c 的主链区块的承诺区域内;
ProposalWindow { closest: 2, farthest: 10 }
propose
\
\
13 14 [15 16 17 18 19 20 21 22 23]
\_______________________/
\
commit
字段
ProposalWindow
是一个具有以下字段的 JSON 对象。
类型 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对象。
inner
:Either<BlockView | JsonBytes>
- 内部值。
类型 ResponseFormat<HeaderView>
这是一个JSON序列化的包装器,用于在Json和十六进制格式之间选择格式。
示例
ResponseFormat<BlockView>
返回以其Json格式或分子序列化的十六进制格式表示的块。
字段
ResponseFormat<HeaderView>
是一个包含以下字段的JSON对象。
inner
:Either<HeaderView | JsonBytes>
- 内部值。
类型 ResponseFormat<TransactionView>
这是一个JSON序列化的包装器,用于在Json和十六进制格式之间选择格式。
示例
ResponseFormat<BlockView>
返回以其Json格式或分子序列化的十六进制格式表示的块。
字段
ResponseFormat<TransactionView>
是一个包含以下字段的JSON对象。
inner
:Either<TransactionView | JsonBytes>
- 内部值。
类型 Rfc0043
表示由rfc0043信号控制激活的软分叉部署。
字段
Rfc0043
是一个JSON对象,包含以下字段。
-
rfc0043
:Deployment
- RFC0043部署参数 -
status
:SoftForkStatus
- 软分叉状态
类型 Script
描述了一个单元格的锁定脚本和类型脚本。
示例
{
"code_hash": "0x28e83a1277d48add8e72fadaa9248559e1b632bab2bd60b27955ebc4c03800a5",
"hash_type": "data",
"args": "0x"
}
字段
Script
是一个JSON对象,包含以下字段。
-
args
:JsonBytes
- 脚本的参数。 -
code_hash
:H256
- 用于匹配脚本代码的哈希。 -
hash_type
:ScriptHashType
- 指定如何使用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对象,包含字段 hash
和 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": []
}
字段
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对象。
tx_status
:TxStatus
- 交易状态。
类型 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对象。
类型 TxPoolInfo
交易池信息。
字段
TxPoolInfo
是一个包含以下字段的JSON对象。
-
last_txs_updated_at
:Uint64
- 最后更新时间。这是毫秒级的Unix时间戳。 -
max_tx_pool_size
:Uint64
- 交易池中交易大小的总限制 -
min_fee_rate
:Uint64
- 交易费率阈值。池将拒绝费率低于此阈值的交易。单位是每1000字节交易序列化大小在区块中的Shannons。
-
min_rbf_rate
:Uint64
- RBF费率阈值。池将拒绝费率低于此阈值的交易。如果min_rbf_rate > min_fee_rate,则在节点上启用RBF。
单位是每1000字节交易序列化大小在区块中的Shannons。
-
orphan
:Uint64
- 孤立交易数量。孤立交易具有来自不在链中也不在交易池中的交易的输入单元格。
-
pending
:Uint64
- 等待状态交易数量。等待状态的交易必须首先在新的区块中提出。
-
proposed
:Uint64
- 提出状态交易数量。提出状态的交易在
tip_hash
区块之后准备好在新区块中提交。 -
tip_hash
:H256
- 相关链尾区块的哈希。交易池是有状态的。它管理在此区块之后可以提交的有效交易。
-
tip_number
:Uint64
-tip_hash
区块的区块号。 -
total_tx_cycles
:Uint64
- 池中所有交易的总消耗的VM周期(不包括孤立交易)。 -
total_tx_size
:Uint64
- 池中不同状态的总交易数量(不包括孤立交易)。 -
tx_size_limit
:Uint64
- 限制交易到tx_size_limit接近区块大小限制的大交易可能不会被打包,因为区块头和cellbase已经占用,因此交易池限制接受交易的大小不超过tx_size_limit。
-
verify_queue_size
:Uint64
- verify_queue大小
类型 TxStatus
交易状态以及如果已提交则对应的区块哈希。
字段
TxStatus
是一个包含以下字段的JSON对象。
status
:Status
- 交易状态,允许的值:"pending","proposed" "committed" "unknown" 和 "rejected"。
类型 U256
256位无符号整数类型,在JSON中以0x前缀的十六进制字符串编码。
类型 Uint128
Uint128
是uint128
类型 Uint32
Uint32
是uint32
类型 Uint64
Uint64
是uint64
类型 UncleBlock
作为RPC参数使用的叔父区块。
链只存储叔父区块的头和提案ID。头确保区块被PoW覆盖并可以通过叔父区块的共识规则。提案ID存在是因为一个区块可以提交叔父区块中提出的交易。
如果满足以下所有条件,则区块B1被认为是区块B2的叔父:
- 它们处于同一时代,具有相同的难度;
- B2的区块号大于B1;
- B1的父区块要么是B2的祖先,要么是B2中嵌入的叔父或B2的任何祖先。
- B2是其链中第一个引用B1的区块。
字段
UncleBlock
是一个具有以下字段的JSON对象。
-
header
:Header
- 叔块的头信息。 -
proposals
:Array<
ProposalShortId
>
- 叔块体中的提案ID。
类型 UncleBlockView
叔块。
链只存储叔父区块的头和提案ID。头确保区块被PoW覆盖并可以通过叔父区块的共识规则。提案ID存在是因为一个区块可以提交叔父区块中提出的交易。
如果满足以下所有条件,则区块B1被认为是区块B2的叔父:
- 它们处于同一时代,具有相同的难度;
- B2的区块号大于B1;
- B1的父区块要么是B2的祖先,要么是B2中嵌入的叔父或B2的任何祖先。
- B2是其链中第一个引用B1的区块。
字段
UncleBlockView
是一个具有以下字段的JSON对象。
-
header
:HeaderView
- 叔块的头信息。 -
proposals
:Array<
ProposalShortId
>
- 叔块体中的提案ID。
类型 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