这里介绍 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
。