cfx 命名空间
JSON-RPC Spec
There is a JSON-RPC API spec of cfx namespace on GitHub. You can view it in open-rpc playground
CONVENTIONS
十六进制值编码
Two key data types get passed over JSON: unformatted byte arrays and quantities. Both are passed with a hex encoding but with different requirements for formatting.
Quantities
When encoding QUANTITIES (integers, numbers): encode as hex using the most compact representation and prefix with "0x"
. Zero should be represented as "0x0"
. 例如:
0x41
(65 in decimal)0x400
(1024 in decimal)- WRONG:
0x
(should always have at least one digit - zero is"0x0"
) - WRONG:
0x0400
(no leading zeroes allowed) - WRONG:
ff
(missing0x
prefix)
未格式化的数据
当编码未格式化的数据(字节数组、哈希值、字节码数组)时:使用两个十六进制数字表示每个字节,并在前面加上“0x”
作为前缀。 例如:
0x41
(size 1,"A"
)0x004200
(size 3,"\0B\0"
)0x
(size 0,""
)- WRONG:
0xf0f0f
(must be even number of digits) - WRONG:
004200
(missing0x
prefix)
请注意,区块和交易的哈希值是用32个字节来表示的。
Base32 Address
BASE32
:Base32 地址应该编码为一个ASCII字符串,包含42个字符加上网络前缀、分隔符和可选字段。 请注意以下关于base32地址作为RPC参数的限制条件:
- 网络前缀应该与节点的网络匹配,例如:
cfx:acc7uawf5ubtnmezvhu9dhc6sghea0403y2dgpyfjp
可以发送给主网节点,cfxtest:acc7uawf5ubtnmezvhu9dhc6sghea0403ywjz6wtpg
可以发送给测试网节点。 值得注意的是,这两个示例地址对应于不同网络上的同一个账户。 - 无论包含还是省去地址类型都是可以接受的,例如:
cfx:aarc9abycue0hhzgyrr53m6cxedgccrmmyybjgh4xg
和cfx:type.user:aarc9abycue0hhzgyrr53m6cxedgccrmmyybjgh4xg
是等价的。 但是,类型不正确的地址,例如:cfx:type.contract:aarc9abycue0hhzgyrr53m6cxedgccrmmyybjgh4xg
,会被拒绝。 - 全大写或者全小写地址都是可以接受的,例如:
cfx:aarc9abycue0hhzgyrr53m6cxedgccrmmyybjgh4xg
和CFX:AARC9ABYCUE0HHZGYRR53M6CXEDGCCRMMYYBJGH4XG
都是有效的。 但混合大小写地址会被拒绝。
Refer to Addresses for more knowledge about Base32 addresses.
默认的 epochNumber (纪元数) 参数
有几个RPC方法有一个epoch number参数。 Epoch的概念在Conflux中有点类似于其他账本中的区块号(高度),但是一个epoch可能包含多个区块。
Epoch number指定了在一个时间点时,系统的相应状态,这些状态受到共识的约束。 Epoch number参数有以下几种可能的选项:
HEX String
- 整数纪元数。 例如,0x3e8
是epoch 1000。String “earliest”
表示创世区块的epoch。String “latest_checkpoint”
表示存储在内存中的最早的epoch。String “latest_finalized”
- 表示最新的已经确定(通过PoS)的epoch。 (添加自conflux-rustv2.0.0
)String “latest_confirmed”
- 表示最新的已经确认的epoch(使用确认计量器的估计值)。string "latest_state"
- 表示已经执行的最新纪元。String “latest_mined”
- 表示最新的已知epoch。
请注意,由于性能优化,最新的已知epoch没有被执行,所以这些epoch没有可用的状态。 对于大多数与状态查询有关的RPC,推荐使用"latest_state"
。 (Refer to transaction lifecycle for more information about transaction life cycle in Conflux).
EIP-1898 style Conflux epochNumber parameter
Conflux core space supports epoch number parameter in EIP-1898 style for certain RPCs. The EIP-1898 style epoch number parameter is an object with 3 optional fields:
epochNumber
. Corresponding to EIP-1898 definedblockNumber
blockHash
. Same as EIP-1898blockHash
requirePivot
. Corresponding to EIP-1898requireCanonical
. Defaults totrue
例如:
{
"blockHash": "0x692373025c7315fa18b2d02139d08e987cd7016025920f59ada4969c24e44e06",
"requirePivot": false
}
The EIP-1898 style epoch number parameter is now usable in following RPCs:
CURL EXAMPLES
下面提供了通过向Conflux节点发出 curl 请求来使用 JSON_RPC 应用程序接口的示例。 每个示例都包括对特定端点、其参数、返回类型的描述,以及应该如何使用它的工作示例。
Curl 请求可能会返回与内容类型相关的错误消息。 这是因为 --data
选项将内容类型设置为 application/x-www-form-urlencoded
。 如果你的节点确实抱怨此问题,请通过在调用开始时放置 -H "Content-Type: application/json"
来手动设置标头。 这些示例也未包括网址/互联网协议与端口组合,该组合必须是 curl 的最后一个参数(例如 127.0.0.1:12537
)。 包含这些附加数据的完整 curl 请求采用以下形式:
$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"cfx_clientVersion","params":[],"id":67}' 127.0.0.1:12537
本文档剩余部分的示例将使用 HTTP endpoint。
State and transaction availability
Conflux的归档节点和全节点会删除历史状态树,以减少存储空间的占用。 全节点也会丢弃历史区块的交易和收据。 因此,一些RPC接口可能无法用于历史查询。
下面是Conflux RPC API的列表,以及它们在归档节点和全节点上的可用性。 *“recent”表示该RPC只支持最近的项目,“OK”*表示它应该对任何有效的输入都能正常工作。
RPC | 归档节点 | 全节点 |
---|---|---|
cfx_call | recent | recent |
cfx_checkBalanceAgainstTransaction | recent | recent |
cfx_clientVersion | OK | OK |
cfx_epochNumber | OK | OK |
cfx_estimateGasAndCollateral | recent | recent |
cfx_gasPrice | OK | OK |
cfx_getAccount | recent | recent |
cfx_getAccumulateInterestRate | OK | OK |
cfx_getAdmin | recent | recent |
cfx_getBalance | recent | recent |
cfx_getBestBlockHash | OK | OK |
cfx_getBlockByEpochNumber | OK | recent |
cfx_getBlockByHash | OK | recent |
cfx_getBlockByHashWithPivotAssumption | OK | recent |
cfx_getBlockRewardInfo | OK | recent |
cfx_getBlocksByEpoch | OK | OK |
cfx_getCode | recent | recent |
cfx_getCollateralForStorage | recent | recent |
cfx_getConfirmationRiskByHash | OK | recent |
cfx_getDepositList | recent | recent |
cfx_getInterestRate | recent | recent |
cfx_getLogs | OK | recent |
cfx_getNextNonce | recent | recent |
cfx_getSkippedBlocksByEpoch | OK | OK |
cfx_getSponsorInfo | recent | recent |
cfx_getStakingBalance | recent | recent |
cfx_getStatus | OK | OK |
cfx_getStorageAt | recent | recent |
cfx_getStorageRoot | recent | recent |
cfx_getTransactionByHash | OK | recent |
cfx_getTransactionReceipt | OK | recent |
cfx_getVoteList | recent | recent |
cfx_sendRawTransaction | OK | OK |
If you query a state entry that is unavailable on the node, you will get an error response:
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"cfx_getBalance","params":["cfx:type.user:aarc9abycue0hhzgyrr53m6cxedgccrmmyybjgh4xg", "earliest"],"id":1}' -H "Content-Type: application/json" localhost:12539
// Result
{
"jsonrpc": "2.0",
"error": {
"code": -32016,
"message": "Error processing request: State for epoch (number=0 hash=0x24dcc768132dc7f651d7cb35c52e7bba632eda073d8743f81cfe905ff7e4157a) does not exist: out-of-bound StateAvailabilityBoundary { synced_state_height: 0, lower_bound: 9510001, upper_bound: 9569393, optimistic_executed_height: Some(9569392) }"
},
"id": 1
}
In this example, we are told that the earliest available state is at epoch 9510001
(0x911c71
).
从以太坊 JSON-RPC 迁移
以太坊和 Conflux 的一些 JSON-RPC 有对应关系。 即使 JSON-RPC 的细节可能有所不同,但以下映射表在从以太坊迁移到 Conflux 时可能会有所帮助:
Ethereum | Conflux |
---|---|
eth_blockNumber | cfx_epochNumber |
eth_call | cfx_call |
eth_estimateGas | cfx_estimateGasAndCollateral |
eth_gasPrice | cfx_gasPrice |
eth_getBalance | cfx_getBalance |
eth_getBlockByHash | cfx_getBlockByHash |
eth_getBlockByNumber | cfx_getBlockByEpochNumber |
eth_getCode | cfx_getCode |
eth_getLogs | cfx_getLogs |
eth_getStorageAt | cfx_getStorageAt |
eth_getTransactionByHash | cfx_getTransactionByHash |
eth_getTransactionCount | cfx_getNextNonce |
eth_getTransactionReceipt | cfx_getTransactionReceipt |
eth_sendRawTransaction | cfx_sendRawTransaction |
GOSSIP, STATE, HISTORY
一些核心的 JSON-RPC 方法需要从 Conflux 网络获取数据,它们可以分为三个主要类别:Gossip, State 和 History。 你可以使用这些部分中的链接跳转到每个方法,或者使用目录来浏览所有方法的列表。
Gossip 方法
这些方法跟踪链的头部。 这是交易在网络中传播、进入区块的方式,以及客户端发现新区块的方式。
- cfx_getStatus
- cfx_epochNumber
- cfx_sendRawTransaction
State 方法
这些方法报告存储的所有数据的当前状态。 “状态”就像一块大的共享内存,包括账户余额、合约数据和 gas 估算。
- cfx_getBalance
- cfx_getStorageAt
- cfx_getNonce
- cfx_getCode
- cfx_call
- cfx_estimateGasAndCollateral
History 方法
获取从创世区块开始的每个区块的历史记录。 This is like one large append-only file, and includes all block headers, block bodies, and transaction receipts.
- cfx_getBlockByHash
- cfx_getBlockByEpochNumber
- cfx_getTransactionByHash
- cfx_getTransactionReceipt
JSON-RPC methods
cfx_getTransactionByHash
Returns information about a transaction, identified by its hash.
参数
DATA
, 32 Bytes - hash of a transaction
params: [
"0x88df016429689c079f3b2f6ad39fa052532c56795b733da78a91ebe6a713944b"
]
Returns
Object
- a transaction object, or null
when no transaction was found:
blockHash
:DATA
, 32 字节 - 包含并执行了这个交易的区块的哈希。null
when the transaction is pending.chainId
:QUANTITY
- the chain ID specified by the sender.contractCreated
:BASE32
- 创建的合约的地址。null
when it is not a contract deployment transaction.data
:DATA
- the data sent along with the transaction.epochHeight
:QUANTITY
- the epoch proposed by the sender. Note that this is NOT the epoch of the block containing this transaction.from
:BASE32
- 发送者的地址。gas
:QUANTITY
- gas provided by the sender.gasPrice
:QUANTITY
- gas price provided by the sender in Drip.hash
:DATA
, 32 Bytes - hash of the transaction.nonce
:QUANTITY
- the number of transactions made by the sender prior to this one.r
:DATA
, 32 Bytes - ECDSA signature r.s
:DATA
, 32 Bytes - ECDSA signature s.status
:QUANTITY
- 0 for success, 1 if an error occurred, 2 for skiped,null
when the transaction is skipped or not packed.storageLimit
:QUANTITY
- the storage limit specified by the sender.to
:BASE32
- 接收者的地址。null
when it is a contract deployment transaction.transactionIndex
:QUANTITY
- the transaction's position in the block.null
when the transaction is pending.v
:QUANTITY
- ECDSA recovery id.value
:QUANTITY
- value transferred in Drip.
Note that the fields blockHash
, contractCreated
, status
, and transactionIndex
are provided by the node as they depend on the transaction's position within the ledger. The rest of the fields are included in or derived from the original transaction.
示例
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"cfx_getTransactionByHash","params":["0x497755f45baef13a35347933c48c0b8940f2cc3347477b5ed9f165581b082699"],"id":1}' -H "Content-Type: application/json" localhost:12539
// Result
{
"jsonrpc": "2.0",
"result": {
"blockHash": "0x564750c06c7afb10de8beebcf24411cc73439295d5abb1264d2c9b90eee5606f",
"chainId": "0x2",
"contractCreated": null,
"data": "0x0",
"epochHeight": "0x909c9f",
"from": "CFX:TYPE.USER:AARC9ABYCUE0HHZGYRR53M6CXEDGCCRMMYYBJGH4XG",
"gas": "0xf4240",
"gasPrice": "0x174876e800",
"hash": "0x497755f45baef13a35347933c48c0b8940f2cc3347477b5ed9f165581b082699",
"nonce": "0x3b518",
"r": "0x14da6cff1a3cd864b04d1b16f480fa023f449322e318b04bb1109b5754b516ce",
"s": "0x304070abe6488c3532ecb66f4be32b88ee35ce48a4607b8d0c86461987a79fc7",
"status": "0x0",
"storageLimit": "0x100",
"to": "CFX:TYPE.CONTRACT:ACC7UAWF5UBTNMEZVHU9DHC6SGHEA0403Y2DGPYFJP",
"transactionIndex": "0x0",
"v": "0x1",
"value": "0x3635c9adc5dea00000"
},
"id": 1
}
cfx_getBlockByHash
Returns information about a block, identified by its hash.
参数
DATA
, 32 Bytes - hash of a block.Boolean
- iftrue
, it returns the full transaction objects. Iffalse
, only the hashes of the transactions are returned.
params: [
"0xe670ec64341771606e55d6b4ca35a1a6b75ee3d5145a99d05921026d1527331",
true
]
Returns
Object
- A block object, or null
when no block was found:
adaptive
:Boolean
-true
if the weight of the block is adaptive under the GHAST rule.blame
:QUANTITY
- if 0, then this block does not blame any blocks on its parent path. If it isn > 0
, then this block blames itsn
predecessors on its parent path, e.g. whenn = 1
, then the block blames its parent but not its parent's parent.deferredLogsBloomHash
:DATA
, 32 Bytes - the hash of the logs bloom after deferred execution at the block's epoch (assuming it is the pivot block).deferredReceiptsRoot
:DATA
, 32 Bytes - the Merkle root of the receipts after deferred execution at the block's epoch (assuming it is the pivot block).deferredStateRoot
:DATA
, 32 Bytes - the hash of the state trie root triplet after deferred execution at the block's epoch (assuming it is the pivot block).difficulty
:QUANTITY
- the PoW difficulty of this block.epochNumber
:QUANTITY
- the number of the epoch containing this block in the node's view of the ledger.null
when the epoch number is not determined (e.g. the block is not in the best block's past set).gasLimit
:QUANTITY
- the maximum gas allowed in this block.gasUsed
:QUANTITY
- the total gas used in this block.null
when the block is pending.hash
:DATA
, 32 Bytes - hash of the block.height
:QUANTITY
- the height of the block.miner
:BASE32
- the address of the beneficiary to whom the mining rewards were given.nonce
:DATA
, 8 Bytes - hash of the generated proof-of-work.parentHash
:DATA
, 32 Bytes - hash of the parent block.powQuality
:DATA
- the PoW quality.null
when the block is pending.refereeHashes
:Array
- array of referee block hashes.size
:QUANTITY
- the size of this block in bytes, excluding the block header.timestamp
:QUANTITY
- the unix timestamp for when the block was created.transactions
:Array
- array of transaction objects, or 32-byte transaction hashes, depending on the second parameter.transactionsRoot
:DATA
, 32 Bytes - the Merkle root of the transactions in this block.custom
:Array
- customized information. Note from v2.0custom
's type has changed from array ofnumber array
to array ofhex string
.blockNumber
:QUANTITY
- the number of this block's total order in the tree-graph.null
when the order is not determined. Added fromConflux-rust v1.1.5
posReference
:DATA
, 32 Bytes - the hash of the PoS newest committed block. Added fromConflux-rust v2.0.0
Note that the fields epochNumber
and gasUsed
are provided by the node as they depend on the ledger. The rest of the fields are included in or derived from the block header directly.
示例
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"cfx_getBlockByHash","params":["0x692373025c7315fa18b2d02139d08e987cd7016025920f59ada4969c24e44e06", false],"id":1}' -H "Content-Type: application/json" localhost:12539
// Result
{
"jsonrpc": "2.0",
"result": {
"adaptive": false,
"blame": 0,
"deferredLogsBloomHash": "0xd397b3b043d87fcd6fad1291ff0bfd16401c274896d8c63a923727f077b8e0b5",
"deferredReceiptsRoot": "0x522717233b96e0a03d85f02f8127aa0e23ef2e0865c95bb7ac577ee3754875e4",
"deferredStateRoot": "0xd449df4ba49f5ab02abf261e976197beecf93c5198a6f0b6bd2713d84115c4ec",
"difficulty": "0xeee440",
"epochNumber": "0x1394cb",
"gasLimit": "0xb2d05e00",
"gasUsed": "0xad5ae8",
"hash": "0x692373025c7315fa18b2d02139d08e987cd7016025920f59ada4969c24e44e06",
"height": "0x1394c9",
"miner": "CFX:TYPE.USER:AARC9ABYCUE0HHZGYRR53M6CXEDGCCRMMYYBJGH4XG",
"nonce": "0x329243b1063c6773",
"parentHash": "0xd1c2ff79834f86eb4bc98e0e526de475144a13719afba6385cf62a4023c02ae3",
"powQuality": "0x2ab0c3513",
"refereeHashes": [
"0xcc103077ede14825a5667bddad79482d7bbf1f1a658fed6894fa0e9287fc6be1"
],
"size": "0x180",
"timestamp": "0x5e8d32a1",
"transactions": [
"0xedfa5b9c38ba51e791cc72b8f75ff758533c8c38f426eddee3fd95d984dd59ff"
],
"custom": ["0x12"],
"transactionsRoot": "0xfb245dae4539ea49812e822adbffa9dd2ee9b3de8f3d9a7d186d351dcc9a6ed4",
"posReference": "0xd1c2ff79834f86eb4bc98e0e526de475144a13719afba6385cf62a4023c02ae3",
},
"id": 1
}
cfx_getBlockByEpochNumber
返回一个区块的信息,该区块由它的纪元号(epoch number)标识。
参数
QUANTITY|TAG
- the epoch number, or the string"latest_mined"
,"latest_state"
,"latest_confirmed"
,"latest_checkpoint"
or"earliest"
, see the epoch number parameter.Boolean
- iftrue
, it returns the full transaction objects. Iffalse
, only the hashes of the transactions are returned
params: [
"latest_mined",
true
]
Returns
See cfx_getBlockByHash.
示例
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"cfx_getBlockByEpochNumber","params":["latest_mined", false],"id":1}' -H "Content-Type: application/json" localhost:12539
Result see cfx_getBlockByHash.
cfx_getBestBlockHash
返回最佳区块的哈希值。
参数
None.
Returns
DATA
, 32 Bytes - hash of the best block.
示例
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"cfx_getBestBlockHash","id":1}' -H "Content-Type: application/json" localhost:12539
// Result
{
"jsonrpc" : "2.0",
"result" : "0x7d54c03f4fe971d5c45d95dddc770a0ec8d5bd27d57c049ce8adc469269e35a4",
"id" : 1
}
cfx_epochNumber
返回给定标签对应的纪元号。
参数
TAG
- (optional, default:"latest_mined"
) String"latest_mined"
,"latest_state"
,"latest_confirmed"
,"latest_checkpoint"
or"earliest"
, see the epoch number parameter.
Returns
QUANTITY
- the integer epoch number corresponding to the given tag.
示例
// Request
curl -X POST --data '{"jsonrpc":"2.0","method":"cfx_epochNumber","params":["latest_mined"],"id":1}' -H "Content-Type: application/json" localhost:12539
// Result
{
"jsonrpc" : "2.0",
"result" : "0x49",
"id" : 1
}
cfx_gasPrice
返回当前每单位gas的价格,单位为Drip。