当前位置:   article > 正文

web3.py的配置和启动以及web3.is_connected()报错: False_python导入web3.py

python导入web3.py

1、安装web3(官方建议最好在虚拟环境中)

我在linux中用conda create了一个虚拟环境,并激活的虚拟环境。

我在linux的python项目虚拟环境中下载:

pip install web3

验证 pip list 看到是1.10.0版本。

2、导入web3和测试提供商

在pycharm中导入web3,EthereumTesterProvider

记住,测试提供商需要先安装eth-tester:

pip install eth-tester

再导入web3,EthereumTesterProvider

  1. from web3 import Web3, EthereumTesterProvider
  2. w3 = Web3(EthereumTesterProvider())
  3. print(w3.is_connected())

 3、导入本地提供商

  1. from web3 import Web3, AsyncWeb3
  2. # IPCProvider:
  3. w3 = Web3(Web3.IPCProvider('./path/to/geth.ipc'))
  4. # HTTPProvider:
  5. w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
  6. # WebsocketProvider:
  7. w3 = Web3(Web3.WebsocketProvider('wss://127.0.0.1:8546'))
  8. w3.is_connected()
  9. True
  10. # AsyncHTTPProvider:
  11. w3 = AsyncWeb3(AsyncWeb3.AsyncHTTPProvider('http://127.0.0.1:8545'))
  12. await w3.is_connected()
  13. True

4、导入远程提供商

需注册Infura

与以太坊区块链交互的最快方法是使用远程节点提供商。可以通过指定终端节点连接到远程节点:

  1. >>> from web3 import Web3, AsyncWeb3
  2. >>> w3 = Web3(Web3.HTTPProvider('https://<your-provider-url>'))
  3. >>> w3 = AsyncWeb3(AsyncWeb3.AsyncHTTPProvider('https://<your-provider-url>'))
  4. >>> w3 = Web3(Web3.WebsocketProvider('wss://<your-provider-url>'))

from web3 import Web3

rpc = 'https://mainnet.infura.io/v3/infura提供的节点密钥'

w3 = Web3(Web3.HTTPProvider(rpc))

验证节点是否连接:

print(w3.is_connected())

在使用infura提供的节点的时候,有时候会报错w3.is_connected(): False。

是因为连接infura提供的rpc服务,是http请求,而infura是国外站点,所以请求被墙了。科学上网即可解决。

5、获取区块链信息 

w3.eth.get_block('latest')

但是这里会报错,说poa没有引入,需要将poa引入,因为我是启动的本地poa共识的geth节点。

要解决这个问题,你可以参考错误提示中提供的链接:http://web3py.readthedocs.io/en/stable/middleware.html#proof-of-authority。在链接中,可以找到有关如何处理POA链的详细信息。  具体来说,你需要使用适当的中间件来处理POA链。你可以尝试添加 web3.middleware.geth_poa_middleware 中间件到你的代码中,如下所示:

  1. from web3.middleware import geth_poa_middleware web3.middleware_onion.inject(geth_poa_middleware, layer=0)

这将为你的代码添加一个中间件层,用于处理POA链的特殊要求。添加这个中间件后,再次运行你的代码,应该就能够正常获取最新的区块了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/55804
推荐阅读
相关标签
  

闽ICP备14008679号