• 以太坊:升级geth


    之前一直都在用着 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. 升级私链

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

    在 $GOPATHsrcgithub.comgo-ethereumcmddevp2pinternalethtest estdatagenesis.json 有一个 genesis,我以为这个是可以用的,就拿过来稍微修改了一下。

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

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

  • 相关阅读:
    windows 下的 Apache SSL证书配置
    javascript xml字符串转为json对象
    php 服务端允许跨域访问
    前端自动化构建工具 gulp 学习笔记 一、
    mysql使用select语句导出表数据时,报error 1290解决方法
    批量操作系统服务的脚本(windows关闭服务脚本)
    Dism++备份还原系统
    Win10开启蓝屏信息记录及文件查看位置的方法
    MySql 8.0服务端安装后,用navicat12连接时报2059错误_解决
    软件测试之细节功能测试_注意点
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/14636614.html
Copyright © 2020-2023  润新知