zoukankan      html  css  js  c++  java
  • 以太坊:升级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,加入之后应该就可以了。

  • 相关阅读:
    今日确定开源近两年来的EA程序
    升级了NinjaLoveFish Excel量化表格
    到家第一件事就是脱衣服
    对挑选完成的股票,进行批量建仓
    lua 学习之错误处理
    lua 学习之编译
    Lambda 演算入门
    lua学习之深入函数第二篇
    lua学习之深入函数第一篇
    lua学习之复习汇总篇
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/14636614.html
Copyright © 2011-2022 走看看