参考以太坊官方博客文档:https://blog.ethereum.org/2021/03/03/geth-v1-10-0/
1.问题说明
以太坊geth客户端更新至:Geth v1.10.0,再次发送交易时,报错如下:
err="only replay-protected (EIP-155) transactions allowed over RPC"
2.问题原因
Geth v1.10.0版本更改了通过JSON-RPC接受事务的方式,并允许禁止不具有EIP-155规定(即未提供chainId)的事务。
此版本为禁止未受保护的交易奠定了基础,但是官方目前将继续允许不受保护的交易,直到下一个主要版本。
该标志–require-tx-replay-protection已添加,默认情况下设置为false。
3.问题解决
- 1、临时方案:在其节点上运行此参数:–rpc.allow-unprotected-txs 即以下命令:
geth --rpcapi "db,eth,net,web3,personal,admin,miner" --rpc --rpcaddr "0.0.0.0" --cache 2048 --maxpeers 30 --allow-insecure-unlock --rpc.allow-unprotected-txs
注:此方案是因为以太坊开发人员意识到发布不受保护的交易的人员/工具不可能一夜之间发生变化,因此Geth v1.10.0支持恢复到旧的行为,通过接受非EIP155交易可使用参数:–rpc.allow-unprotected-txs
但请注意,这是一个临时机制,v1.10.0后的版本将删除此方案。
- 2、永久解决
将chain ID添加到事务中,以免交易在其他链上被重播
注意:使用web 3j的签名包需要使用最新版本