赞
踩
我在linux中用conda create了一个虚拟环境,并激活的虚拟环境。
我在linux的python项目虚拟环境中下载:
pip install web3
验证 pip list 看到是1.10.0版本。
2、导入web3和测试提供商
记住,测试提供商需要先安装eth-tester:
pip install eth-tester
再导入web3,EthereumTesterProvider
- from web3 import Web3, EthereumTesterProvider
- w3 = Web3(EthereumTesterProvider())
- print(w3.is_connected())
- from web3 import Web3, AsyncWeb3
-
- # IPCProvider:
- w3 = Web3(Web3.IPCProvider('./path/to/geth.ipc'))
-
- # HTTPProvider:
- w3 = Web3(Web3.HTTPProvider('http://127.0.0.1:8545'))
-
- # WebsocketProvider:
- w3 = Web3(Web3.WebsocketProvider('wss://127.0.0.1:8546'))
-
- w3.is_connected()
- True
-
- # AsyncHTTPProvider:
- w3 = AsyncWeb3(AsyncWeb3.AsyncHTTPProvider('http://127.0.0.1:8545'))
-
- await w3.is_connected()
- True
需注册Infura
与以太坊区块链交互的最快方法是使用远程节点提供商。可以通过指定终端节点连接到远程节点:
- >>> from web3 import Web3, AsyncWeb3
-
- >>> w3 = Web3(Web3.HTTPProvider('https://<your-provider-url>'))
-
- >>> w3 = AsyncWeb3(AsyncWeb3.AsyncHTTPProvider('https://<your-provider-url>'))
-
- >>> 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是国外站点,所以请求被墙了。科学上网即可解决。
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
中间件到你的代码中,如下所示:
-
- from web3.middleware import geth_poa_middleware web3.middleware_onion.inject(geth_poa_middleware, layer=0)
这将为你的代码添加一个中间件层,用于处理POA链的特殊要求。添加这个中间件后,再次运行你的代码,应该就能够正常获取最新的区块了。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。