以太坊:升级geth

以太坊:升级geth,第1张

概述之前一直都在用着2019年版本的geth,当时Solidity最新版都是0.4来着……然后最近在用web3.py的时候遇到各种问题,于是决定把geth和私链都升级一遍。 0.遇到了什么问题?部署合约的时候是没什么问题的,但是调用合约的任何函数的时候,都会返回空信息,导致根本无法和合约交互。

之前一直都在用着 2019 年版本的 geth,当时 solidity 最新版都是 0.4 来着……然后最近在用web3.py的时候遇到各种问题,于是决定把 geth 和私链都升级一遍。

 

0. 遇到了什么问题?

部署合约的时候是没什么问题的,但是调用合约的任何函数的时候,都会返回空信息,导致根本无法和合约交互。

这个错误的特征是在 abi 有 returns 列表的时候,出现一个 web3.exceptions.BadFunctionCallOutput,如果没有 returns 列表那么就什么都不发生。

查询了一下网上的信息,几乎没有什么帮助,唯一的提示在于这大概不是 web3 的问题,而是 geth 后端的问题。

于是就只能对 geth 进行一波升级了。

 

1. 升级 Golang 11.0 -> 16.0

golang 的升级还算顺利,下载了 .msi 之后各种点击就行了。

只是卸载老版本的时候,卡在了 Status: Removing shortcut 阶段……

于是开任务管理器一顿骚 *** 作,重新来一次。

要注意的是升级之后要注意用 Get-Command go 检查一下是否升级成功,因为有可能 GOROOT 和新版本不一致,所以要把各种环境变量都修改一次。

 

2. 升级 geth

新版本的 geth 多出了一些依赖,为了编译顺利我把 GOPATH 都清空了,只剩下一个 github.com/go-ethereum,但是众所周知 go 依赖的下载是一件很麻烦的事情,怎么办呢?

我按之前的方法,尝试了 netsh winhttp set proxy,git config --global http.proxy,但是都没有用。

最后发现新版本的 Go 已经支持内部实现的代理机制了,只需要按 goproxy.io 上面的说明配置,即可顺利安装各类依赖。太爽了!

 

3. 升级私链

私链本体是没法升级的,但是反正重建没成本,就直接删除老的私链,然后重新建一个。

在 $GOPATH\src\github.com\go-ethereum\cmd\devp2p\internal\ethtest\testdata\genesis.Json 有一个 genesis,我以为这个是可以用的,就拿过来稍微修改了一下。

结果在最新的 0.8 的 solidity 合约中出现了 invalID opcode SHR 的错误。

原来是那个 genesis 的 config 中没有包括 "constantinopleBlock": 0,加入之后应该就可以了。

 

总结

以上是内存溢出为你收集整理的以太坊:升级geth全部内容,希望文章能够帮你解决以太坊:升级geth所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1241512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存