Skip to main content

Estimation isn't accurate: transaction is reverted

发送交易前通常会调用 cfx_estimateGasAndCollateral 方法,来预估交易执行所需要的 gasstorageLimit。该方法本质是对交易进行了模拟执行,然后统计交易执行完之后实际的 gas 和 storage 使用量。但交易的模拟执行并不是都会成功的,部分交易由于某些原因会执行失败,这时该方法会返回 Estimation isn't accurate: transaction is reverted 错误:

{
		"code": -32015,
		"message": "Estimation isn't accurate: transaction is reverted. Innermost error is at CFX:TYPE.CONTRACT:ACDUZTJBPM9PPP9F0K5VT3PJU0EJUDNHP2ZM7WS35N: Vm reverted. .",
		"data": "CFX:TYPE.CONTRACT:ACDUZTJBPM9PPP9F0K5VT3PJU0EJUDNHP2ZM7WS35N: Vm reverted. \nCFX:TYPE.CONTRACT:ACD5E6SPRGMDVG15FDXF2B8AH7DAN7GMZAGXA10EPZ: Vm reverted. "
}

遇到该错误意味着合约方法代码无法成功执行,交易被 reverted。导致此错误的可能较多,比如:发送合约代币或 NFT 余额不够;合约方法传参错误;没有权限或授权,等等。

如果合约执行时抛出了错误 message,这时 RPC 的错误信息中可以看到合约执行失败的具体原因,比如如下错误是在进行 NFT(1155)转账时,余额不足合约返回的错误:

Estimation isn't accurate: transaction is reverted: ERC1155: insufficient balance for transfer. Innermost error is at xxxx: Vm reverted. ERC1155: insufficient balance for transfer

参考