当前位置: 首页 > 工具软件 > web3.py > 使用案例 >

Python web3.py 的使用(未完、稍等)

阳狐若
2023-12-01

web3.Web3

class web3.Web3(provider)

每个 web3 实例都会有以下这些 APIs:

Providers
Attributes
Encoding and Decoding Helpers
Currency Conversions
Addresses

Providers

Providers provider 是 web3 与区块链对话的方式,通过接受 JSON-RPC 请求并返回响应。

Providers 用于配置你想要的连接方式,然后用于初始化 Web3 实例。

from web3 import Web3
my_provider = Web3.HTTPProvider(url)
w3 = Web3(my_provider)

大多数节点都有多种连接方式,以下连接到节点的最常见方法,选择如何连接到你的以太坊节点。

  1. 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 对请求就行修改。如下例中,设置超时时间

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>
  1. IPC(使用本地文件系统:最快,最安全)
    Web3.IPCProvider 处理与基于 IPC 套接字的 JSON-RPC 服务器的交互。

class web3.providers.ipc.IPCProvider(ipc_path=None, testnet=False, timeout=10)
ipc_path 是 IPC 套接字的文件系统路径,如果没有输入参数,则会默认从以下路径中寻找:

  • 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"))
  1. Websocket(远程工作,比HTTP快)
    Web3.WebsocketProvider 处理与基于 WS 或 WSS 的 JSON-RPC 服务器的交互。
    底层调用 python websockets 库发送请求,可使用 websocket_kwargs 对请求就行修改。如下例中,设置超时时间。

class web3.providers.websocket.WebsocketProvider(endpoint_uri[, websocket_kwargs])

from web3 import Web3
w3 = Web3(Web3.WebsocketProvider("http://127.0.0.1:8546", websocket_kwargs={'timeout': 60}))
  1. Web3.setProviders(provider) 更新
    使用新的 provider list 更新当前的 web3 实例。也可接受单个 provider。

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

  • 如果可以选择在与节点相同的计算机上运行 Web3.py,选择 IPC。
  • 如果必须连接到另一台计算机上的节点,使用 Websockets。
  • 如果您的节点不支持 Websocket,则使用 HTTP。
 类似资料: