python通过web3py连接以太坊区块链节点方式

一、连接方式介绍

Providers
provider是web3与区块链对话的方式。提供程序接受JSON-RPC请求并返回响应。通常通过将请求提交到基于HTTP或IPC套接字的服务器来完成。

Note

Web3.py每个实例支持一个提供程序。如果您有需要多个提供程序的高级用例,请为每个连接创建并配置一个新的web3实例。

如果您已经很高兴地连接到以太坊节点,则可以跳过“提供者”部分的其余部分。

选择如何连接到您的节点

大多数节点具有多种连接方式。如果您尚未决定要使用哪种节点,请直接转到“我如何选择要使用的节点”?

连接到节点的最常见方法是:

1. IPC(使用本地文件系统:最快,最安全)
2. Websocket(远程工作,比HTTP快)
3. HTTP(更多节点支持它)

如果不确定如何决定,请选择以下方式:

  • 如果可以选择在与节点相同的机器上运行Web3.py,请选择IPC。

  • 如果必须连接到另一台计算机上的节点,请使用Websockets。

  • 如果您的节点不支持Websocket,请使用HTTP。

大多数节点都有一种“关闭”连接选项的方式。我们建议关闭所有未使用的连接选项。这提供了更安全的设置:它减少了恶意黑客尝试窃取您的以太币的方式。

确定连接方式后,即可使用提供程序指定详细信息。提供程序是为所需的连接类型配置的Web3.py类。


以上摘自官方开发文档(详细介绍可自行前往查看):
https://web3py.readthedocs.io/en/stable/providers.html


二、具体连接方法

      在连接以太坊区块链节点前必须要做的一件事是使用geth命令启动以太坊私链服务,不同的连接方式,对应着不同的geth启动命令,如果启动命令不对,用python连接的时候就会出现各种错误。

      下面将着重介绍HTTP和WebSocket这两种连接方式和可能会遇到的问题

1.HTTP方式

geth命令

geth --datadir data0 --networkid 1108 --rpc console --port 30304 --rpcport 8545 --allow-insecure-unlock --rpc.allow-unprotected-txs

HTTP连接方式比较方便也比较简单,geth命令启动不需要太多的参数,不需要最后两个参数也可以连上。

重点参数解释:

--allow-insecure-unlock

功能:Allow insecure account unlocking when account-related RPCs are exposed by http
翻译:当http暴露与帐户相关的RPC时,允许不安全的帐户解锁

如果后期进行离线签名的时候,使用的是HTTP连接,默认情况下是不允许通过HTTP解锁账户的。

无此参数情况下,python离线签名遇到的错误
Fatal:Account unlock with HTTP access is forbidden!


--rpc.allow-unprotected-txs

功能:Allow for unprotected (non EIP155 signed) transactions to be submitted via RPC
翻译:允许通过RPC提交不受保护(非EIP155签名)的事务。

无此参数情况下,python离线签名遇到的错误:
only replay-protected (EIP-155) transactions allowed over RPC.

python代码:


from web3 import Web3

web3 = Web3(Web3.HTTPProvider("http://127.0.0.1:8545"))

if web3.eth.getBlock(0) is None:
    print("failure")
elif web3.isConnected():
    print("successfully")


2.Websocket方式

经过上述可以发现,通过HTTP方式连接到后期使用离线签名的话会遇到诸多麻烦,下面将介绍Websocket方式。

geth命令:

geth  --datadir data0 --networkid 1108 --rpc console --port 30304 --rpccorsdomain "*" --ws --ws.port 8545 --ws.origins "*" --ws.addr "127.0.0.1" --ws.api "eth,web3,personal,net"

部分参数解释:

参数功能
–ws启用WS-RPC服务器
–ws.addrWS-RPC服务器侦听接口(默认值:“ localhost”)
–ws.portWS-RPC服务器侦听端口(默认值:8546)
–ws.api通过WS-RPC接口提供的API
–ws.origins接受websocket请求的来源

以上几个都是比较重要的参数,如果没有使用可能会导致python在连接的时候出现错误。

例如:
websockets.exceptions.InvalidStatusCode: server rejected WebSocket connection: HTTP 200

python代码:

from web3 import Web3

web3 = Web3(Web3.WebsocketProvider("ws://127.0.0.1:8545", websocket_timeout=60))

if web3.eth.getBlock(0) is None:
    print("failure")
elif web3.isConnected():
    print("successfully")

提示:如果不明白以上geth命令中 --datadir data0 是什么意思,可以参考我的另一篇博客:geth搭建私有链节点,并开始挖矿


三、附言

关于geth命令的各参数可以使用如下命令:

geth -h > gethArgs.txt

这样就可以得到一个写有全部参数的文本文档。

或者需要查找某个具体参数用法,可以用:

geth -h | findstr (需要查找的参数名称)

如果还想了解更多web3py中API的用法可以前往官方开发文档查看:https://web3py.readthedocs.io/en/stable/

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值