Web3.py错误 - The field extraData is 97 bytes, but should be 32

Posted 新缸中之脑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web3.py错误 - The field extraData is 97 bytes, but should be 32相关的知识,希望对你有一定的参考价值。

当使用web3.py接入采用POA共识的以太坊节点时,可能会出现错误The field extraData is 97 bytes, but should be 32...,本文将介绍如何解决这一问题。

用自己熟悉的语言学习 以太坊开发Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、Web3.py ExtraData故障现象

当使用Web3.py接入Rrinkeby测试链或接入使用geth --dev命令启动的开发私链时,代码会提示如下错误信息:

web3.exceptions.ExtraDataLengthError: The field extraData is 97 bytes, 
but should be 32. It is quite likely that you are connected to a POA chain. 
Refer to http://web3py.readthedocs.io/en/stable/middleware.html#geth-style-proof-of-authority 
for more details. 

The full extraData is: HexBytes('0xd88301010084676...21465292f')

这是因为POA共识算法在extraData字段添加了一些额外的数据从而导致该字段超过以太坊的黄皮书约定的32字节长度,而Web3.py默认情况下是按照以太坊黄皮书的约定来检查extraData字段的长度,这造成了不一致并抛出异常。

2、Web3.py ExtraData故障的解决方法

Web3.py提供了中间件geth_poa_middleware来解决这一兼容性问题,只要引入该中间件并将其注入web3对象即可,例如:

from web3 import Web3
from web3.middleware import geth_poa_middleware

w3 = Web3('http://localhost:8545')
w3.middleware_onion.inject(geth_poa_middleware, layer=0)  # 注入poa中间件

原文链接:The field extraData is 97 bytes, but should be 32 — 汇智网

以上是关于Web3.py错误 - The field extraData is 97 bytes, but should be 32的主要内容,如果未能解决你的问题,请参考以下文章

安装 web3.py 时如何消除错误

如何“捕捉 web3.py 中的错误”

安装 web3.py 时收到错误

尝试将 SmartContract 写入 Pancakeswap 路由器时出现 Web3.py “未知帐户”错误

使用 web3.py 查询远程以太坊节点时出现间歇性“读取超时”错误

在 web3.py 中检测还原的事务