0%

web3.py | Providers 方式

这里介绍 3providers

  • http
  • rpc
  • websocket

参考资料


HTTP(有更多节点支持这种方式)

Web3.HTTPProvider 处理基于 HTTPHTTPSJSON-RPC 服务器的交互。

class web3.providers.rpc.HTTPProvider(endpoint_uri[, request_kwargs])

endpoint_uriRPC 端点的完整 URI,例如 https:// localhost:8545

对于运行在端口 80 上的 HTTP 连接和运行在端口 443 上的 HTTPS 连接的 RPC 服务器,可以从 URI 中省略该端口。

request_kwargs 这应该是关键字参数的字典,该参数将传递到 http/https 请求。

底层调用 python requests 库发送请求,可使用 request_kwargs 对请求就行修改。如下例中,设置超时时间

1
2
3
4
5
6
from web3 import Web3

http_provider=Web3.HTTPProvider(endpoint_uri=url, request_kwargs={'timeout': 60})
print(http_provider) # RPC connection https://xxxxx.org:12345
w3 = Web3(http_provider)
print(w3) # <web3.main.Web3 object at 0x7f8749910950>

IPC(使用本地文件系统:最快,最安全)

Web3.IPCProvider 处理与基于 IPC 套接字的 JSON-RPC 服务器的交互。

class web3.providers.ipc.IPCProvider(ipc_path=None, testnet=False, timeout=10)

ipc_pathIPC 套接字的文件系统路径,如果没有输入参数,则会默认从以下路径中寻找:

1
2
3
4
5
6
7
8
9
10
11
12
 On Linux and FreeBSD:
~/.ethereum/geth.ipc
~/.local/share/io.parity.ethereum/jsonrpc.ipc
~/.local/share/trinity/mainnet/ipcs-eth1/jsonrpc.ipc
 On Mac OS:
~/Library/Ethereum/geth.ipc
~/Library/Application Support/io.parity.ethereum/jsonrpc.ipc
~/.local/share/trinity/mainnet/ipcs-eth1/jsonrpc.ipc
 On Windows:
 \.\pipe\geth.ipc
 \.\pipe\jsonrpc.ipc
from web3 import Web3
w3 = Web3(Web3.IPCProvider("~/Library/Ethereum/geth.ipc"))

Websocket(远程工作,比HTTP快)

Web3.WebsocketProvider 处理与基于 WSWSSJSON-RPC 服务器的交互。

底层调用 python websockets 库发送请求,可使用 websocket_kwargs 对请求就行修改。如下例中,设置超时时间。

class web3.providers.websocket.WebsocketProvider(endpoint_uri[, websocket_kwargs])
1
2
from web3 import Web3
w3 = Web3(Web3.WebsocketProvider("http://127.0.0.1:8546", websocket_kwargs={'timeout': 60}))
Web3.setProviders(provider) 更新

使用新的 provider list 更新当前的 web3 实例。也可接受单个 provider

如果不确定如何决定,可按照以下原则:

  • 如果可以选择在与节点相同的计算机上运行 Web3.py,选择 IPC
  • 如果必须连接到另一台计算机上的节点,使用 Websockets
  • 如果您的节点不支持 Websocket,则使用 HTTP
请我喝杯咖啡吧~