概览
本页面的目的是让您了解 Web3.py 的所有功能,并作为快速参考指南。您可以找到每个功能的摘要,以及了解更多信息的链接。您可能还会对 示例 页面感兴趣,该页面更详细地展示了这些特性。
配置
安装 Web3.py(通过pip install web3
)之后,您需要指定供应商和您想要使用的任何中间件,而不是默认的。
供应商
提供商是 Web3.py 连接到区块链的方式。该库附带了以下内置提供程序:
Web3.IPCProvider
用于连接到基于 ipc 套接字的 JSON-RPC 服务器。Web3.HTTPProvider
用于连接到基于 http 和 https 的 JSON-RPC 服务器。Web3.WebsocketProvider
用于连接到基于 ws 和 wss websocket 的 JSON-RPC 服务器。
>>> 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('ws://127.0.0.1:8546'))
>>> w3.isConnected()
True
有关更多信息,(例如,连接到远程节点、提供程序自动检测、使用测试提供程序)请参见 提供程序 文档。
中间件
您的 Web3.py 实例可以通过中间件进一步配置。
使用洋葱比喻来描述 Web3.py 中间件,其中中间件的每一层都可能影响来自供应商的传入请求和传出响应。这个文档包括了这个想法的一个 可视化 。
几个中间件默认 包含 。您可以添加( add
, inject
, replace
)或禁用( remove
, clear
)任何这些中间件。
你的钥匙
需要私钥来批准代表您进行的任何交易。保护您的密钥的方式将决定您如何在 Web3.py 中创建和发送交易
像 Geth 这样的本地节点可以为你管理你的密钥。您可以使用 web3.eth.accounts
属性来引用这些键。
像 Infura 这样的托管节点不知道您的密钥。在这种情况下,您需要在本地准备好您的私钥来签署交易。
关于按键区别的完整文档可以在 这里 找到。
基础 API
Web3 类包括许多方便的实用函数:
编码和解码助手
- T2
Web3.is_encodable()
- T2
Web3.toBytes()
- T2
Web3.toHex()
- T2
Web3.toInt()
- T2
Web3.toJSON()
- T2
Web3.toText()
地址助手
货币兑换
密码散列法
web3.eth API
与以太坊交互最常用的 API 可以在web3.eth
名称空间下找到。提醒一下, 示例 页面将演示如何使用这些方法。
获取数据
查看帐户余额( get_balance
)、交易( get_transaction
)和块数据( get_block
)是 Web3.py 中一些最常见的起点
API
- T2
web3.eth.get_balance()
- T2
web3.eth.get_block()
- T2
web3.eth.get_block_transaction_count()
- T2
web3.eth.get_code()
- T2
web3.eth.get_proof()
- T2
web3.eth.get_storage_at()
- T2
web3.eth.get_transaction()
- T2
web3.eth.get_transaction_by_block()
- T2
web3.eth.get_transaction_count()
- T2
web3.eth.get_uncle_by_block()
- T2
web3.eth.get_uncle_count()
进行交易
最常见的用例将满足于 send_transaction
或sign_transaction
send_raw_transaction
的组合。
注意
如果与智能合约交互,则存在一个专用的 API。参见下一节, 合约 。
API
- T2
web3.eth.send_transaction()
- T2
web3.eth.sign_transaction()
- T2
web3.eth.send_raw_transaction()
- T2
web3.eth.replace_transaction()
- T2
web3.eth.modify_transaction()
- T2
web3.eth.wait_for_transaction_receipt()
- T2
web3.eth.get_transaction_receipt()
- T2
web3.eth.sign()
- T2
web3.eth.sign_typed_data()
- T2
web3.eth.estimate_gas()
- T2
web3.eth.generate_gas_price()
- T2
web3.eth.set_gas_price_strategy()
### 合约
涉及智能合约的两个最常见的用例是在已部署的合约上部署和执行功能。
部署要求合约已经被编译,并且其字节码和 ABI 可用。这个编译步骤可以在 Remix 或者许多合约开发框架中的一个,比如 Brownie 中完成。
一旦合约对象被实例化,调用 constructor
方法上的transact
将部署一个合约实例:
>>> ExampleContract = w3.eth.contract(abi=abi, bytecode=bytecode)
>>> tx_hash = ExampleContract.constructor().transact()
>>> tx_receipt = w3.eth.wait_for_transaction_receipt(tx_hash)
>>> tx_receipt.contractAddress
'0x8a22225eD7eD460D7ee3842bce2402B9deaD23D3'
一旦加载到合约对象中,已部署合约的功能就可以在functions
名称空间中使用:
>>> deployed_contract = w3.eth.contract(address=tx_receipt.contractAddress, abi=abi)
>>> deployed_contract.functions.myFunction(42).transact()
如果您想从合约中读取数据(或在本地查看交易结果,而不在网络上执行),您可以使用 ContractFunction.call
方法,或更简洁的 ContractCaller
语法:
# Using ContractFunction.call
>>> deployed_contract.functions.getMyValue().call()
42
# Using ContractCaller
>>> deployed_contract.caller().getMyValue()
42
更多信息,请参见完整的 合约 文档。
API
- T2
web3.eth.contract()
- T2
Contract.address
- T2
Contract.abi
- T2
Contract.bytecode
- T2
Contract.bytecode_runtime
- T2
Contract.functions
- T2
Contract.events
- T2
Contract.fallback
- T2
Contract.constructor()
- T2
Contract.encodeABI()
- T2
web3.contract.ContractFunction
- T2
web3.contract.ContractEvents
日志和过滤器
如果您想要对挖掘的新块或由合约发出的特定事件做出反应,您可以利用 Web3.py 过滤器。
# Use case: filter for new blocks
>>> new_filter = web3.eth.filter('latest')
# Use case: filter for contract event "MyEvent"
>>> new_filter = deployed_contract.events.MyEvent.createFilter(fromBlock='latest')
# retrieve filter results:
>>> new_filter.get_all_entries()
>>> new_filter.get_new_entries()
在 过滤 文档中可以找到创建过滤器和轮询日志的更复杂模式。
API
- T2
web3.eth.filter()
- T2
web3.eth.get_filter_changes()
- T2
web3.eth.get_filter_logs()
- T2
web3.eth.uninstall_filter()
- T2
web3.eth.get_logs()
- T2
Contract.events.your_event_name.createFilter()
- T2
Contract.events.your_event_name.build_filter()
- T2
Filter.get_new_entries()
- T2
Filter.get_all_entries()
- T2
Filter.format_entry()
- T2
Filter.is_valid_entry()
Net API
一些基本的网络属性在web3.net
对象上可用:
web3.net.listening
web3.net.peer_count
web3.net.version
ethPM
ethPM 允许您打包合约以便重用,或者使用来自另一个受信任的注册中心的合约。详情见 此处 。
实体
以太坊名称服务(ENS) 为人类可读的地址提供基础设施。举个例子,你可以把资金发给ethereumfoundation.eth
,而不是0xfB6916095ca1df60bB79Ce92cE3Ea74c37c5d359
。Web3.py 对 ENS 有支持,这里记载了T5T7】。