CIP-37(Conflux-rust v1.1.1 )更新对开发者的影响

本次更新为兼容版本更新,公链的共识层没有发生改变

本次升级临近中国假期,贸然升级可能无法得到足够多的技术支持,建议大家谨慎升级。 建议所有Conflux生态产品在2月22日之后升级新节点。Conflux-rust 从版本 v1.1.1 开始将会使用新地址格式,凡是请求参数,返回结果中包含地址的地方,均使用新格式地址。

Conflux基金会建议未来Conflux生态逐渐淘汰旧版hex40格式地址(0x开头),统一更新为 base32格式的地址(以网络标识开头,如cfx:),ConfluxScan会有新旧地址转换。

新旧地址格式只是做了一次编码转换,原有的私钥和助记词可以正常登陆Conflux钱包账户,不会对个人资产有任何影响。

CIP37 详细内容参见: https://github.com/Conflux-Chain/CIPs/blob/master/CIPs/cip-37.md

中文翻译参见: https://forum.conflux.fun/t/topic/4745

v1.1.1升级的内容

不兼容变更

  • CIP-37:Conflux 地址将变更为 base32 地址格式。RPC与全节点的交互中不支持与以太坊格式类似的十六进制地址。
  • 把所有的数据(包括目录 storage_db、 blockchain_db和 net_config)都存储在一个通过“conflux_data_dir”配置的目录中(默认目录名为 blockchain_data)。

兼容 RPC 变更

  • 添加 cfx_getSupplyInfo,返回 CFX 供应量。
  • 在 cfx_getStatus响应中包括 networkId。
  • 在 cfx_getAccount 响应中包括 address。

改进

  • 在 mining_author参数中支持 CIP-37 地址格式。
  • 减少日志“发布-订阅”中的延迟,现在我们在日志可用之后立即将其发出。
  • 实现执行跟踪功能,包括详细的由转账触发的调用/创建/返回/内部转账事件等,检查踪迹信息可以让ConfluxScan之类的应用能够追踪 CFX 转移的精确踪迹。
  • 优化了测试框架,解决了一些随机测试失败的问题。

我是Conflux生态开发者,我需要做什么?

Conflux官方将于2月5日更新完毕升级教程和各版本SDK,但建议2月22号之前所有的生态应用、钱包、交易所、矿场不要更新新的节点(RPC)。使用官方节点(RPC)的用户可以暂时保持不动,同时官方会推出新版本的RPC,旧的RPC会至少保留到三月底。

更新节点(RPC)后,需要更新使用新的SDK,之后不加额外适配的情况下只能同base32格式的地址(以网络标识开头,如cfx:)交互,请各生态应用、钱包、交易所、矿场注意提示用户。

对前端页面的影响

Portal

  • Portal更新为0.5.11 版本后,api 返回旧版hex40格式地址(0x开头),签名只支持旧版hex40格式地址(0x开头),转账转到旧版hex40格式地址(0x开头)时会有提示。
  • Portal更新为 0.6 版本后,api 只返回 base32 地址,签名同时支持旧版hex40格式地址(0x开头)和base32格式的地址(以网络标识开头,如cfx:)。
  • DApp 需要考虑用户可能不升级 Portal 新版本,api 返回新老地址共存的情况。

SDK如何适配参考

Conflux Javascript SDK如何适配CIP37:https://github.com/Conflux-Chain/js-conflux-sdk/blob/master/docs/conflux_checksum_address.md

中文版参考: https://juejin.cn/post/6922723243811930119

对后端服务程序的影响

SDK如何适配参考

Conflux Java SDK如何适配CIP37:https://github.com/Conflux-Chain/java-conflux-sdk/blob/master/docs/cfx-address.md

中文版参考: https://juejin.cn/post/6922724320191971342

Conflux Golang SDK如何适配CIP37:https://github.com/Conflux-Chain/go-conflux-sdk

中文版参考:https://juejin.cn/post/6922763171941842958/

节点文档配置

配置说明

v1.1.1之后的版本
run/tethys.toml 文件中

mining_author="个人钱包地址"

填写新旧格式的地址都可以

注意:

目前Conflux-rustv1.1.1里mining_author填写新地址时需要带引号才能识别,如

mining_author='"cfx:aampumd7hpufe4krfpsur645xt1cewtkpybkhyn7fc"'

之后将发布的 Conflux-rust v1.1.2 将可以直接输入地址,如

mining_author="cfx:aampumd7hpufe4krfpsur645xt1cewtkpybkhyn7fc"

目录变化:

v1.1.1之后的版本所有的数据都放在了conflux_data_dir这个参数配置的目录下,默认路径为./blockchain_data.

v1.1.0及以前版本的默认目录结构:

├── blockchain_db
├── net_config
├── storage_db
├── conflux
├── log
├── log.yaml
├── start.bat
├── start.sh
├── stderr.txt
├── tethys.toml

v1.1.1之后的默认目录结构

├── blockchain_data
│   ├── blockchain_db
│   ├── net_config
│   └── storage_db
├── conflux
├── log
├── log.yaml
├── start.bat
├── start.sh
├── stderr.txt
├── tethys.toml

适配方法1(推荐):

新建目录blockchain_data,并将blockchain_db, net_config, storage_db 三个目录移动到blockchain_data 下。不用修改配置文件tethys.toml.

适配方法2:

不移动目录,在配置文件tethys.toml里设置

conflux_data_dir = "."
netconf_dir = "./net_config"
block_db_dir = "./blockchain_db"


【CIP-37更新对Conflux普通用户的影响】:https://forum.conflux.fun/t/topic/4798

最近看经常遇到生态合作伙伴咨询通过api查寻交易和节点数据存放的问题

常出现

{
    "id": 1,
    "jsonrpc": "2.0",
    "result": null
}

返回是null .

通常这种情况是需要自己的节点需要打开 persit_index 配置。而自己运行节点时,这个配置很容易忽略。
具体方法如下:
HTTP RPC端口在toml配置文件里通过jsonrpc_tcp_port指定,其它还有jsonrpc_ws_port、jsonrpc_tcp_port、jsonrpc_http_port、jsonrpc_local_tcp_port、jsonrpc_local_http_port。可以参考release里提供的tethys.toml默认配置文件。默认的数据存放在运行路径(pwd)下的blockchain_db和storage_db里。可以通过配置文件里的conflux_data_dir和block_db_dir分别配置。需要注意如果需要访问老的receipt数据的话,需要把persist_tx_index设置为true.