Web3.py是连接以太坊的python库,它的API从web3.js中派生而来。如果你用过web3.js,你会对它的API很熟悉。但惭愧的是,作为一个以太坊上Dapp的开发者,我几乎没有直接使用过web3.js,也没有看过它的API。
官网:
https://web3py.readthedocs.io/
安装
pip install web3
anaconda可以在环境中openTerninal进行安装
使用
web3py需要通过数据提供商来获取数据,一般有如下几种方式:
1、测试供应商:测试使用,不是真实数据
2、远程供应商:常用的 Infura , Alchemy , QuickNode , or Chainstack
3、本地供应商:通过以太坊客户端将数据同步到本地供web3py使用
使用测试供应商数据测试
from web3 import Web3, EthereumTesterProvider
w3 = Web3(EthereumTesterProvider())
w3.is_connected()
True
使用远程供应商数据
不同远程供应商对比可以参考:https://zhuanlan.zhihu.com/p/514654991
我这里使用的是:alchemy
官网:alchemy.com
可以使用free版本,注册完成后在:https://dashboard.alchemy.com/查看自己的秘钥和通讯地址
from web3 import Web3
w3 = Web3(Web3.HTTPProvider('自己的连接'))
//查看某个地址的余额
print(w3.eth.get_balance('0xd83aB04432AF484Af5aCf9EEE30895C3607F78fD'))
也可以使用其他协议
w3 = Web3(Web3.WebsocketProvider('wss://<your-provider-url>'))
使用本地数据供应商数据
硬件要求很高, 但与以太坊交互的最安全方式是在自己的硬件上运行以太坊客户端。 对于本地运行的节点,IPC连接是最安全的选项,但HTTP和 WebSocket配置也可用。默认情况下,常用的Geth客户机 暴露端口 8545 以服务HTTP请求,暴露端口8546以服务WebSocket请求。连接 到该本地节点可以如下进行:
geth官网:https://geth.ethereum.org/
需要安装并完成数据同步后才能使用,成本很高,截止到22年9月,全节点需要12TB的存储空间。
磁盘空间通常是节点操作员的主要瓶颈。在撰写本文时(2022年9月),建议将2 TB SSD用于运行Geth的完整节点和共识客户端。Geth本身需要>650 GB的磁盘空间用于快照同步的完整节点,并且使用默认缓存大小时,增长速度约为14 GB/周。修剪会将总存储量降低到原来的650 GB。 归档节点需要额外的空间。一个将所有状态保留回Genesis的“完整”归档节点需要超过12 TB的空间。部分归档节点也可以通过在一些初始同步之后关闭垃圾收集器来创建-存储需求取决于保存了多少状态。
from web3 import Web3
# 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
获取最新一个区块的数据
w3.eth.get_block('latest')