这里介绍 3 种 providers。
- http
- rpc
- websocket
参考资料
HTTP(有更多节点支持这种方式)
Web3.HTTPProvider 处理基于 HTTP 或 HTTPS 的 JSON-RPC 服务器的交互。
class web3.providers.rpc.HTTPProvider(endpoint_uri[, request_kwargs])endpoint_uri 是 RPC 端点的完整 URI,例如 https:// localhost:8545 。
对于运行在端口 80 上的 HTTP 连接和运行在端口 443 上的 HTTPS 连接的 RPC 服务器,可以从 URI 中省略该端口。
request_kwargs 这应该是关键字参数的字典,该参数将传递到 http/https 请求。
底层调用 python requests 库发送请求,可使用 request_kwargs 对请求就行修改。如下例中,设置超时时间
1 | from web3 import Web3 |
IPC(使用本地文件系统:最快,最安全)
Web3.IPCProvider 处理与基于 IPC 套接字的 JSON-RPC 服务器的交互。
class web3.providers.ipc.IPCProvider(ipc_path=None, testnet=False, timeout=10)ipc_path 是 IPC 套接字的文件系统路径,如果没有输入参数,则会默认从以下路径中寻找:
1 | On Linux and FreeBSD: |
w3 = Web3(Web3.IPCProvider("~/Library/Ethereum/geth.ipc"))Websocket(远程工作,比HTTP快)
Web3.WebsocketProvider 处理与基于 WS 或 WSS 的 JSON-RPC 服务器的交互。
底层调用 python websockets 库发送请求,可使用 websocket_kwargs 对请求就行修改。如下例中,设置超时时间。
class web3.providers.websocket.WebsocketProvider(endpoint_uri[, websocket_kwargs])1 | from web3 import Web3 |
Web3.setProviders(provider) 更新使用新的 provider list 更新当前的 web3 实例。也可接受单个 provider。
如果不确定如何决定,可按照以下原则:
- 如果可以选择在与节点相同的计算机上运行
Web3.py,选择IPC。 - 如果必须连接到另一台计算机上的节点,使用
Websockets。 - 如果您的节点不支持
Websocket,则使用HTTP。