乐趣区

关于区块链:Conflux-rpc与以太坊rpc的区别

因为 Conflux 实现构造与 Ethereum 不同,所以概念上及实现上也有很大的区别,本文次要介绍针对 Conflux RPC 应用与以太坊 RPC 应用的区别

概念介绍

Epoch

以太坊区块链中只有主链上的交易是无效的,所以可认为以太坊区块账本是一条单链,从前往后每个区块都有一个编号,叫做区块号(block number),conflux 开发了一种全新的账本构造: 树图,实现了高吞吐,低提早。

在树图区块构造中,如果只看父边他是一个 Tree,如果父边援用边都看则是一个 Graph。正是这种构造使得 Conflux 网络能够并收回块,即多个区块能够都在某个区块之后生成。因而在 Conflux 是没有 block number 的概念。但为了实现全序,Conflux 通过 GHAST 规定从创世区块开始,在其所有子区块中抉择最重子树 block 为 pivot block,所有的 pivot block 链到一块也造成一条链 定义为 pivot chain,如果只看 pivot chain 其跟一般的区块链构造统一,在这条链上基于每个 pivot block 定义一个 Epoch,因而你能够把 conflux 中的 Epoch 了解为跟 block number 对应的概念,只不过 conflux 中的每个 epoch 中可能会有多个 block。

Storage Limit

在事实世界中,发动交易须要领取人力、物力、工夫、手续费等老本,而在区块链网络中发送交易须要给矿工付手续费,在 Conflux、以太坊中同样如此。具体来讲,Conflux、ETH 网络的交易最终是由矿工 运行的 VM 执行的,gas 是用来掂量一笔交易执行的工作量(能够了解为工作的工时),交易发送者,发送交易时能够指定违心给每个工作量付的价格即 gasPrice。因而最终一笔交易的手续费为 gas * gasPrice。在发送一笔交易时指定的 gas 则是一个限度值,即发送方最大违心为一笔交易领取 gas 这么多的工时,如果交易须要的工作量超过 gas,则不会再付钱,交易不会被执行。

在 Dapp 零碎中,交易执行除了须要 Node 进行计算付出计算资源外,还须要 Node 存储合约的状态,因而须要付出存储资源。在 Conflux 零碎中发送交易时,还须要为状态存储 抵押一部分费用,因而在 conflux 中发送交易时会比以太坊多一个 storageLimit 参数,用于设置违心为某笔交易存储所抵押的费用下限。在合约开释掉应用的存储空间之后,抵押的费用 也会失去返还。

RPC 相干参数介绍

Epoch Number 可选项

当发送 RPC 申请时,有些 RPC 须要携带 Epoch Number 参数,Epoch Number 示意要申请在哪个 Epoch 的状态。以下是参数 Epoch Number 的可选项:

格局 意义
16 进制字符串 epoch number 整形数值(如 ”0x1000″ 示意 Epoch number 4096)
字符串 “earliest” 创世块所在的 Epoch 高度
字符串 “latest_checkpoint” 以后 checkpoint 的第一个 Epoch 高度
字符串 “latest_state” 最近执行的区块所在的 Epoch 高度
字符串 “latest_mined” 最新挖出的区块所在的 Epoch 高度

留神,出于性能优化的思考,最新的 Epoch 是不可执行的,所以在这些 Epoch 里没有可用的状态。对于大多数与状态查问无关的 RPCs,倡议应用 ”latest_state”。

数据的 16 进制编码规定

发送 RPC 申请时,无格局的字节数组和数值,两种要害数据类型是通过 JSON 格局数据进行传输。两者都以十六进制编码传输,但格局稍有不同:

1. 对数值编码

当编码数值(整数,数字)时:编码为前缀为 ”0x” 的十六进制,应用最紧凑的表现形式(例外:零示意为 ”0x0″)。示例如下:

正确示例:

  • 0x41(十进制数字 65)
  • 0x400(十进制数字 1024)

谬误示例:

  • 谬误: 0x(需至多有一位数字 – 零为 “0x0″)
  • 谬误: 0x0400(不容许以零结尾)
  • 谬误: ff(必须以 0x 为前缀)

2. 对无格局数据编码

当编码无格局数据(字节数组,帐户地址,哈希值,字节码数组)时也是应用前缀为 ”0x” 的十六进制编码,与数值编码的区别是:每个字节必须蕴含应用两位十六进制数字。示例如下:

正确示例:

  • 0x41 (长度为 1,示意字符串 ”A”)
  • 0x004200 (长度为 3,示意字符串 ”\0B\0″)
  • 0x (长度为 0,示意字符串 ””)

谬误示例

  • 谬误: 0xf0f0f (必须为偶数位数)
  • 谬误: 004200 (必须以 0x 结尾)

设置 GasLimit & StorageLimit & EpochHeight

发送交易时,倡议先应用 RPC cfx_estimateGasAndCollateral 返回预估的 gas 应用数量和存储抵押数量;然而因为理论执行耗费与预估后果有差别,为了避免交易执行失败,倡议在理论发送交易时,设置 gaslimit 与 storage_limit 的值为 预估值 * 4/3

参数 EpochHeight 示意这笔交易将会在 Epoch 为 [EpochHeight-100000 , EpochHeight+100000] 的区间内执行,当超出这个区间这笔交易将被抛弃,倡议设置以后 Epoch 值即可。

Conflux VS Ethereum JSONRPC

以下是对 Conflux 与 Ethereum 的 JSON RPC 的应用比拟,Conflux RPC 具体介绍请参见 JSON RPC 开发者文档

Public RPC

Conflux Public RPC 对应 Ethereum RPC RPC 参数 须要 epoch number 参数?
cfx_gasPrice eth_gasPrice N
cfx_epochNumber eth_blockNumber epoch_number Y
cfx_getBalance eth_getBalance address,epoch_number Y
cfx_getAdmin address,epoch_number Y
cfx_getSponsorInfo address,epoch_number Y
cfx_getStakingBalance address,epoch_number Y
cfx_getCollateralForStorage address,epoch_number Y
cfx_getCode eth_getCode address,epoch_number Y
cfx_getStorageAt eth_getStorageAt address,pos,epoch_number Y
cfx_getStorageRoot address,epoch_number Y
cfx_getBlockByHash eth_getBlockByHash block_hash,include_txs N
cfx_getBlockByHashWithPivotAssumption block_hash, pivot_hash, epoch_number, Y
cfx_getBlockByEpochNumber eth_getBlockByNumber epoch_number, include_txs Y
cfx_getBestBlockHash N
cfx_getNextNonce address, epoch_number Y
cfx_sendRawTransaction eth_sendRawTransaction raw_tx N
cfx_call eth_call tx, epoch_number Y
cfx_getLogs eth_getLogs filter N
cfx_getTransactionByHash eth_getTransactionByHash tx_hash N
cfx_estimateGasAndCollateral eth_estimateGas request, epoch_number Y
cfx_checkBalanceAgainstTransaction account_addr, contract_addr, gas_limit,gas_price, storage_limit, epoch Y
cfx_getBlocksByEpoch epoch_number Y
cfx_getSkippedBlocksByEpoch epoch_number Y
cfx_getTransactionReceipt eth_getTransactionReceipt tx_hash N
cfx_getAccount address, epoch_number Y
cfx_getInterestRate epoch_number Y
cfx_getAccumulateInterestRate epoch_number Y
cfx_getConfirmationRiskByHash block_hash N
cfx_getStatus N
cfx_getBlockRewardInfo epoch_number Y
cfx_clientVersion web3_clientVersion N

Local RPC

Conflux 除了公共 rpc 外,还有一部分 rpc 出于平安及性能方面的思考限度只能在本地拜访

Conflux local rpc 对应 Ethereum rpc
txpool_status
tx_inspect
txpool_inspect
txpool_content eth_newPendingTransactionFilter
getTransactionsFromPool
clear_tx_pool
net_throttling
net_node
net_disconnect_node
net_sessions
current_sync_phase
consensus_graph_state
sync_graph_state
cfx_sendTransaction eth_sendTransaction
accounts eth_accounts
new_account
unlock_account
lock_account
sign eth_sign

暂无对应关系的以太坊 RPC

以下是以太坊中有的,Conflux 临时还没有对应关系的 RPC

  • web3_sha3
  • net_version
  • net_peerCount
  • net_listening
  • eth_protocolVersion
  • eth_coinbase
  • eth_mining
  • eth_hashrate
  • eth_getTransactionCount
  • eth_getBlockTransactionCountByHash
  • eth_getBlockTransactionCountByNumber
  • eth_getUncleCountByBlockHash
  • eth_getUncleCountByBlockNumber
  • eth_signTransaction
  • eth_getTransactionByBlockHashAndIndex
  • eth_getTransactionByBlockNumberAndIndex
  • eth_getUncleByBlockHashAndIndex
  • eth_getUncleByBlockNumberAndIndex
  • eth_getCompilers
  • eth_compileLLL
  • eth_compileSolidity
  • eth_compileSerpent
  • eth_newFilter
  • eth_newBlockFilter
  • eth_uninstallFilter
  • eth_getFilterChanges
  • eth_getWork
  • eth_submitWork
  • eth_submitHashrate
  • db_putString
  • db_getString
  • db_putHex
  • db_getHex
  • shh_post
  • shh_version
  • shh_newIdentity
  • shh_hasIdentity
  • shh_newGroup
  • shh_addToGroup
  • shh_newFilter
  • shh_uninstallFilter
  • shh_getFilterChanges
  • shh_getMessages
  • eth_syncing
退出移动版