Web3 Dapps通常很慢而笨拙。但是 Websockets 以太坊L2S 可以通过将实时,双向,客户服务器通信带到Web3世界来帮助解决此问题。第三方产品(例如多边形上的Infura的Webockets)可以帮助您创建动态,低延迟,下一代Dapps。
在本文中,我们将详细介绍Websockets“它们是什么,与传统的HTTP相比,以及在某些用例中,它们发亮了最亮。最后,我们将编写一个脚本,该脚本使用Infura的Polygon Websocket获取与我们的加密钱包相关的所有待处理交易的实时更新。
Websockets与HTTP
大多数网络都由 http请求驱动,但是HTTP是一种无状态协议,仅支持单向通信,并且不存在。它们通常涉及客户端(应用程序或浏览器)将请求发送到服务器,并且服务器发送响应以返回。
这些请求足以为大多数网络功能提供供电。例如,显示页面的最新内容,发表评论,发送钱等。
Websockets 另一方面,在客户端和服务器之间建立了持久的连接,与HTTP不同的是,通信转弯发生,WebSockets使代理商可以实时和实时进行双向交流。
您可以猜到,WebSockets是用于网络应用程序的首选技术,例如在线多人游戏,Figma和Miro,例如Figma和Miro,股票市场和实时流媒体应用程序以及推送通知。
但是,在Web3和区块链世界中使用Websocket的使用滞后。但是它们是需要的!使用WebSocket与以太坊L2的可扩展性结合使用,您可以构建受益于即时更新和连续数据流的Web3应用程序。
这里有一些用例,其中WebSocket可以优于传统HTTP:
-
使用实时更新来保留特定智能合约铸造的数字资产/NFT计数。
-
在网络中添加每个新块时,请跟踪汽油价格。
-
跟踪特定钱包的令牌余额。
-
通过跟踪市场交易,订单和最佳出价优惠(BBO)来监视Defi Dapp市场。
Infura的Polygon Websocket
那么您如何使用Websocket?让我们看一下Infura的多边形Websocket。
在当前版本中,支持两种请求:
-
Websockets上的状态订阅(WSCAT -C WSS://)。这些允许您提交eth_subscribe请求,这些请求可以创建双向和实时连接,从而可以在客户端和服务器之间推动数据。您可以收听特定的事件,例如特定日志,未决的交易和纽格。
-
http (https://)上的无状态Websockets。这些允许您使用HTTP连接订阅事件,但是您只会得到一个响应,因为这不是持续的连接。
创建实时钱包交易跟踪器
所以让我们跳入并编码一个例子!我们将使用Infura的Polygon Websocket支持来创建一个可以监视钱包上实时交易的脚本。
步骤1:创建一个infura api键
为了访问多边形Websocket端点,我们将需要create a free Infura account。一旦创建了一个帐户,您将被重定向到主要的Infura仪表板。在右上角,单击创建新的API键。
对于网络,选择默认的Web3 API。您可以将任何想要的密钥命名。
创建钥匙后,您将被重定向到项目仪表板。
在端点选项卡中,向下导航直到找到多边形,然后单击激活附加。
您将重定向到计划和计费页面。初学者的核心核心足以进行本演练。
在网络附加组件中部分,在底部,选择 polygon pos 。就像上面的核心层一样,这是免费的。您可能需要提供信用卡详细信息(尽管您会收取费用)才能完成此请求。
签出了一旦签出,请返回项目的端点部分,您应该看到一个Websockets选项卡。现在,这将包含多边形主网和Testnet(称为孟买)的WSS URL。请注意孟买WSS URL。它应该是形式的 wss:// polygon-mumbai.infura.io/ws/v3/<-YOUR api键 - > 。
接下来,导航返回 https 标签,请注意孟买HTTP URL。
步骤2:创建一个元掩as钱包
现在让我们创建一个钱包,我们的交易可以跟踪。
有很多钱包可用,但让我们坚持最受欢迎的元张。您可以作为免费的浏览器扩展名install the MetaMask wallet。
安装后,MetAmask将引导您完成一系列步骤来设置钱包。一路走来,您将获得一个秘密恢复短语。 将其存储在安全的地方(理想情况下,无论是在数字上还是物理上),因为如果您丢失了它,您将无法恢复钱包。
创建了钱包后,请导航到扩展窗口的右上角,然后单击网络下拉。从这里,切换以显示测试网络。
从下拉菜单中选择孟买多边形。这是我们将在本教程的其余部分处理的网络。
如果这是您第一次使用孟买网络,您将看到0个余额。不用担心;本教程不需要将加密货币添加到钱包中。
步骤3:安装Python和Pip
我们将使用Python 3构建我们的跟踪器3.下载并安装本地机器的OS here。
完成后,检查您的版本号是否正确安装了Python和PIP。
python3 –version
pip3 –version
步骤4:创建一个Python项目
使用Python和Pip安装在我们的机器上,让我们创建我们的项目存储库并安装必要的软件包,即 web3 和 websockets 。
mkdir polygon-ws && cd polygon-ws
pip3 install web3 websockets
touch main.py
在您喜欢的代码编辑器中打开存储库(例如,VS代码)。您应该看到一个名为 main.py 的单个文件。
步骤5:编写跟踪器脚本
在main.py
文件中,添加以下代码:
import asyncio
import json
import requests
from web3 import Web3
from websockets import connect
# Instantiate HTTP and WSS URLs
WSS_URL = '< INFURA WSS MUMBAI URL >'
HTTP_URL = '< INFURA HTTP MUMBAI URL >'
# Define a HTTP web3 provider
web3 = Web3(Web3.HTTPProvider(HTTP_URL))
# Wallet address you want to track transactions of
wallet = '< METAMASK WALLET ADDRESS >'
async def get_event():
async with connect(WSS_URL) as ws:
# Create a websocket connection
await ws.send('{"jsonrpc": "2.0", "id": 1, "method": "eth_subscribe", "params": ["newPendingTransactions"]}')
subscription_response = await ws.recv()
print("Created a new websocket connection:")
print(subscription_response)
while True:
try:
# Check for all pending transactions
message = await asyncio.wait_for(ws.recv(), timeout=15)
response = json.loads(message)
txHash = response['params']['result']
# Monitor transactions to a specific address
tx = web3.eth.get_transaction(txHash)
if tx["to"] == wallet or tx["from"] == wallet:
print("Pending transaction found with the following details:")
print("Txn Hash:", txHash)
pass
except:
pass
if __name__ == "__main__":
loop = asyncio.get_event_loop()
while True:
loop.run_until_complete(get_event())
这是非常简单明了的代码。但是,让我们经历重要的部分:
-
我们使用孟买HTTP URL定义了Web3提供商。该提供商将用于获取有关我们感兴趣的交易的更多信息(即涉及钱包的人)。
-
我们使用孟买WSS URL创建一个WebSocket连接,并订阅Polygon孟买网络上的所有待处理交易。
-
我们从每笔交易中从信息中获取信息,如果涉及我们的钱包,我们会打印交易的详细信息。
其余的是样板代码,我们真的不需要了解。
的详细信息。步骤6:赛道待处理交易
我们全部设定!让我们使用以下命令运行此脚本:
python3 main.py
如果一切顺利,您应该看到看起来像这样的输出:
Created a new websocket connection:
{"jsonrpc":"2.0","id":1,"result":"0xc68a169a0da44750b0f505a77f7bfd99"}
在后台,我们的脚本正在使用WebSocket跟踪所有待处理的交易。现在,让我们使用钱包开始交易,看看是否已通知我们的脚本。
我们可以通过两种方式进行此操作:
-
从水龙头获取钱包的自由摩托车。
-
将Matic发送到另一个钱包。
对于前者,您可以使用可用的水龙头here。
一旦触发了上述任何交易,几秒钟后,您应该看到脚本显示交易的详细信息,这意味着它有效!
Pending transaction found with the following details:
Txn Hash: 0x2e83edfba2fbbc8fc2753ab4675f10d204ff3b740ec47cb6c3a9b6f6dd4ebe95
为了进行理智检查,我们可以在Mumbai Polygonscan上搜索此哈希。
结论
在多边形上使用WebSockets提供了传统HTTP API请求可以匹配的DAPP的用户体验。我们刚刚开始看到这种实时双向通信的用例。使用Infura的Webockets尝试一下,看看您可以构建什么!
过得非常愉快!