今天使用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:
然后回去再运行,就成功了!!!