Conflux 网络(Tethys) 1.1.4版本升级公告

不兼容的更改:收据/跟踪中存储的某些错误信息已被更改。本次更改将会影响某些RPC的返回信息格式。点击此链接以了解详细信息:Conflux-Chain/CIPs#70

改进:

RPC改进

  • 添加一个新的RPC cfx_getAccountPendingTransactions 以获取给定账户的待交易任务。
  • 令VM跟踪器记录执行失败的原因。
  • cfx_estimateGasAndCollateral 返回错误堆栈,以防子调用中发生错误。
  • 在虚拟调用( cfx_callcfx_estimateGasAndCollateral )中使用随机的矿工地址,而不是特殊的空地址。

配置改进

  • 允许使用 jsonrpc_ws_max_payload_bytes 设置最大WebSocket响应的有效负载大小。默认值为30MB。

漏洞修复

  • 修复了导致重新打包无用交易的漏洞。
  • 修复了导致配置 sync_state_starting_epoch 在存档节点上无效的漏洞。
  • 修复了可能使 cfx_getStatus 返回意外错误的漏洞。

下载

我是节点运营者/矿工,我需要做什么?

如果已启动了节点,需先暂停这个节点的运行,然后将原节点程序中的 run 目录下的名为"conflux"的可执行文件,替换为 Conflux v1.1.4节点程序的 Conflux 的可执行文件。随后可重新启动。

如新启动节点,可以下载最新版的 Conflux v1.1.4,运行即可。

如不升级节点、不参与本次升级,会出现什么情况?

一般情况下不会出现问题,本次升级不涉及共识层的内容,可以选择不用更新。

对普通用户会有什么影响?

正在链上运行的节点升级过程中,部分服务可能会受到影响而延迟。在节点升级完成后会恢复正常。

感谢您的支持!

衷心感谢 Conflux 社区以及所有 Conflux 生态的开发者们,感谢你们的努力、思考和贡献,为 Conflux 带来了更好的明天。

我译一下关于 RPC 的修改吧,不过我试了一下,官方 RPC 似乎还没升级。

1. estimateGasAndCollateral 的返回值

在交易发生 revert 时,estimateGasAndCollateral 函数返回的错误信息会发生变化。ConfluxScan 会对返回的错误信息做解析和加工。

升级前

Revert 但没有提供原因

{code: -32015, code: "Estimation isn't accurate: transaction is reverted. Execution output ", data: "0x..."}

Revert 且提供了原因

{code: -32015, code: "Estimation isn't accurate: transaction is reverted. Execution output Reason provided by the contract: 'ERC20: transfer amount exceeds allowance'", data: "0x..."}

改动后

Revert 且提供了原因

{code: -32015, code: "Estimation isn't accurate: transaction is reverted: ERC20: transfer amount exceeds allowance.", data: "0x..."}

Revert 没有提供原因。但是更内层的调用提供了一个原因。

比如说,如果一个合约调用了 USDT_contract 合约的函数 USDT_contract.transferFrom(from, to, value). 在执行期间,transferFrom 发生了 reverted,理由是 ‘ERC20: transfer amount exceeds allowance’. 但是调用 USDT_contract 那个合约没有提供任何理由。这种情况下的返回将是。

{code: -32015, code: "Estimation isn't accurate: transaction is reverted. Innermost error is at cfx:type.contract:achc8nxj7r451c223m18w2dwjnmhkd6rxawrvkvsy2: ERC20: transfer amount exceeds allowance.", data: "0x..."}

cfx:type.contract:achc8nxj7r451c223m18w2dwjnmhkd6rxawrvkvsy2 是 USDT 合约的地址。

Revert 没有提供理由, 内层调用也没有提供理由

{code: -32015, code: "Estimation isn't accurate: transaction is reverted.", data: "0x..."}

Revert 提供了理由,子调用也提供了一个理由

比如说,你使用 safeTransferFrom 函数调用 USDT 合约。这个 safeTransferFrom 函数来自 OpenZeppelin, 会去调用 USDT 合约的 transferFrom. 如果 USDT 合约 revert 了,理由是 “ERC20: transfer amount exceeds allowance”. 那么作为调用者,safeTransferFrom 也会返回一个错误原因 “SafeERC20: low-level call failed”. (详见 OpenZeppelin 的实现细节)

那么此时的返回值会是

{code: -32015, code: "Estimation isn't accurate: transaction is reverted: SafeERC20: low-level call failed. Innermost error is at cfx:type.contract:achc8nxj7r451c223m18w2dwjnmhkd6rxawrvkvsy2: ERC20: transfer amount exceeds allowance.", data: "0x..."}

2. Receipt 中的返回值

如果交易 revert, Receipt 中的 error message 会改变。

升级前

"Vm reverted, Reason provided by the contract: 'ERC20: transfer amount exceeds allowance'"

升级后

"Vm reverted, ERC20: transfer amount exceeds allowance"

3. Trace

目前没有公开的 rpc 提供 trace 访问,所以我们假定开发者不会读取和 block trace 相关的内容。如果需要了解 trace 相关的修改,请阅读原文档。

5.1假期交易卡很久的问题修复了吗?是这个问题吗(修复了导致重新打包无用交易的漏洞)

是的,修复的是这个问题

1 Like