Common FAQs

如何判断交易执行成功

通过 cfx_getTransactionByHash 获取 transaction 信息,只有 status = 0 一种情况表示交易被成功执行了。

Invalid parameters: request, data: "network prefix unexpected: ours cfx, got cfxtest"

调用 cfx_call 方法时,如果调用合约地址的网络,跟节点的网络不一致,会返回此错误

如何在智能合约里面保证线程安全, 或者有没有方法锁之类的修饰 ?

合约是单线程执行的,没有线程安全问题

Conflux 目前 Oracle 服务有哪些

有没有 API 可以查询某个合约的所有交易记录?

ConfluxScan 提供 OPENAPI 支持查询某账户最多 1W 调交易记录。

为什么同一笔交易会出现在多个区块当中?

Conflux 的账本结构为树图结构,区块并行产生,因此会导致一笔交易被多个区块打包的情况;但最终账本全排序之后,只有交易所在的第一个区块中的交易是有效交易。

去重方式参看 Next One

Conflux (树图账本)如何扫块获取所有交易?

Conflux 账本有一个 epoch 编号,epoch 从 0 开始自增。每个 epoch 中可能有多个区块,区块中包含交易。因此扫描交易可按照 epoch 一次获取其中的所有区块,以及区块中所有的交易。

  1. cfx_getBlocksByEpoch 获取某 epoch 的所有区块hash
  2. cfx_getBlockByHash 获取区块内的交易

另外树图结构账本,有交易被多个区块重复打包的情况,可采用如下方式之一去重:

  1. 同时验证区块中交易的 blockHash 是否与区块的 hash 相同,不同则需要过滤掉
  2. 判断 tx.status 若值为 0x0 或 0x1 为有效交易,为 null 或者 0x2 则需要过滤掉

采用以上两种方式之一均可。

Note: 另外还需要注意 latest_confirm 到 latest_state 之间的交易,可能由于 pivot chain switch 而发生变化.


Revision #18
Created 11 June 2022 09:28:52 by Pana
Updated 15 November 2022 11:13:35 by Pana