【以太坊】使用Go部署智能合约时报错:only replay-protected (EIP-155) transactions allowe......

今天使用abigen部署智能合约时报了下面这个错:
在这里插入图片描述

百思不得其解,试过各种方法,国内外网站都走了一遍,没有遇到使用golang开发时报了这个错然后解决成功的帖子,最终在翻go-ethereum源代码的时候终于解决了它,感觉快哭了,必须开个贴记录一下这个报错,国内网站应该还没有能解决这个错误的帖子

走到这一步的小伙伴估计前面也是摸爬滚打的够了,直接开始吧~

首先来看报错的函数,源代码是这样写的:
在这里插入图片描述

这里参考的是geth官方文档的写法:
在这里插入图片描述

不得不吐槽一下,官方文档也是够拉啊,这个函数半年前就更新了,现在文档居然还不更新,不知道冥冥之中坑了多少用golang的同学!

经过无尽的搜索,终于扒到这么一篇文档,捕获到一个关键信息:

在这里插入图片描述

这句话的意思是,go更新后现在绑定交易时用户可以指定chainID来提高交易的安全性,经过其它网页也初步判定了是chainID绑定出了问题,如何改呢?顺藤摸瓜,找到这篇帖子。 这是geth_v1.10.0更新的文档,往下翻啊翻,翻到这么一段关键信息:

在这里插入图片描述
意思是说,go-ethreum的库中现在包含了额外的签证者构造函数,允许创建chainID绑定的事务处理程序,EIP155这个报错可能是使用了旧版的函数,OK,那就去翻go-ethereum源代码

经过不懈努力,来到/accounts/abi/bind/auto.go,找到这个函数:

在这里插入图片描述

而这就是我们报错的函数!可以看到,这里也给了一个log.warn,但是shell中并没有提示,它告诉我们要调用新版函数NewTransactorWithChainID,再继续往下翻,终于翻到这个函数:

在这里插入图片描述

这才是正确的函数调用,如何使用这个函数呢?网上参考到一篇博客,他是这么写的:

在这里插入图片描述

于是知道怎么调用这个函数后,也把自己的函数进行修改,配置上本地chainID:

在这里插入图片描述

然后回去再运行,就成功了!!!

在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值