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

43次阅读

共计 4898 个字符,预计需要花费 13 分钟才能阅读完成。

因为 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 RPCRPC 参数须要 epoch number 参数?
cfx_gasPriceeth_gasPrice N
cfx_epochNumbereth_blockNumberepoch_numberY
cfx_getBalanceeth_getBalanceaddress,epoch_numberY
cfx_getAdminaddress,epoch_numberY
cfx_getSponsorInfoaddress,epoch_numberY
cfx_getStakingBalanceaddress,epoch_numberY
cfx_getCollateralForStorageaddress,epoch_numberY
cfx_getCodeeth_getCodeaddress,epoch_numberY
cfx_getStorageAteth_getStorageAtaddress,pos,epoch_numberY
cfx_getStorageRootaddress,epoch_numberY
cfx_getBlockByHasheth_getBlockByHashblock_hash,include_txsN
cfx_getBlockByHashWithPivotAssumptionblock_hash, pivot_hash, epoch_number,Y
cfx_getBlockByEpochNumbereth_getBlockByNumberepoch_number, include_txsY
cfx_getBestBlockHash N
cfx_getNextNonceaddress, epoch_numberY
cfx_sendRawTransactioneth_sendRawTransactionraw_txN
cfx_calleth_calltx, epoch_numberY
cfx_getLogseth_getLogsfilterN
cfx_getTransactionByHasheth_getTransactionByHashtx_hashN
cfx_estimateGasAndCollateraleth_estimateGasrequest, epoch_numberY
cfx_checkBalanceAgainstTransactionaccount_addr, contract_addr, gas_limit,gas_price, storage_limit, epochY
cfx_getBlocksByEpochepoch_numberY
cfx_getSkippedBlocksByEpochepoch_numberY
cfx_getTransactionReceipteth_getTransactionReceipttx_hashN
cfx_getAccountaddress, epoch_numberY
cfx_getInterestRateepoch_numberY
cfx_getAccumulateInterestRateepoch_numberY
cfx_getConfirmationRiskByHashblock_hash N
cfx_getStatus N
cfx_getBlockRewardInfoepoch_numberY
cfx_clientVersionweb3_clientVersion N

Local RPC

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

Conflux local rpc对应 Ethereum rpc
txpool_status
tx_inspect
txpool_inspect
txpool_contenteth_newPendingTransactionFilter
getTransactionsFromPool
clear_tx_pool
net_throttling
net_node
net_disconnect_node
net_sessions
current_sync_phase
consensus_graph_state
sync_graph_state
cfx_sendTransactioneth_sendTransaction
accountseth_accounts
new_account
unlock_account
lock_account
signeth_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
正文完
 0