Go项目引入web3-multicall-go包编译报错:Unpack方法调用异常
解决web3-multicall-go包编译错误
错误分析
你遇到的两个编译错误本质是依赖版本冲突:
assignment mismatch:编译器认为wrapperArgs.Unpack仅返回1个值,但代码里试图接收2个值(data和err)too many arguments:调用Unpack时传入的参数数量和当前依赖的go-ethereum库中abi.Arguments.Unpack方法要求的参数数量不匹配
问题出在web3-multicall-go v0.0.15依赖的go-ethereum版本,和你项目中实际使用的go-ethereum版本不一致,导致Unpack方法的签名(参数、返回值)发生了变化。
修复方案
方案1:锁定兼容的go-ethereum版本
web3-multicall-go v0.0.15兼容go-ethereum v1.10.26,在项目中执行以下命令同步依赖:
go get github.com/ethereum/go-ethereum@v1.10.26 go mod tidy
方案2:修改包代码适配当前依赖
如果你不想降级go-ethereum,可以直接修改本地缓存的包代码:
- 打开路径
C:\Users\usr01\go\pkg\mod\github.com\alethio\web3-multicall-go@v0.0.15\multicall\viewcall.go - 找到第259行,根据当前
go-ethereum的Unpack签名调整代码:
若当前Unpack签名为func (a Arguments) Unpack(dst interface{}, data []byte) error,修改为:
注意:这种方式在包更新后会失效,仅作为临时解决方案。var data []interface{} err := wrapperArgs.Unpack(&data, rawBytes)
方案3:升级web3-multicall-go到最新版本
尝试升级包到最新版,看是否已适配新的go-ethereum版本:
go get github.com/alethio/web3-multicall-go@latest go mod tidy
内容的提问来源于stack exchange,提问作者rihekopo
相关产品推荐
相关产品推荐

