使用Infura的Polygon Websocket构建更好的DAPP
#编程 #教程 #python #web3

Article Image

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:

  1. 使用实时更新来保留特定智能合约铸造的数字资产/NFT计数。

  2. 在网络中添加每个新块时,请跟踪汽油价格。

  3. 跟踪特定钱包的令牌余额。

  4. 通过跟踪市场交易,订单和最佳出价优惠(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。您可以将任何想要的密钥命名。

Image #4

创建钥匙后,您将被重定向到项目仪表板。

端点选项卡中,向下导航直到找到多边形,然后单击激活附加

Image #1

您将重定向到计划和计费页面。初学者的核心核心足以进行本演练。

网络附加组件中部分,在底部,选择 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将引导您完成一系列步骤来设置钱包。一路走来,您将获得一个秘密恢复短语。 将其存储在安全的地方(理想情况下,无论是在数字上还是物理上),因为如果您丢失了它,您将无法恢复钱包。

创建了钱包后,请导航到扩展窗口的右上角,然后单击网络下拉。从这里,切换以显示测试网络。

从下拉菜单中选择孟买多边形。这是我们将在本教程的其余部分处理的网络。

Image #5

如果这是您第一次使用孟买网络,您将看到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跟踪所有待处理的交易。现在,让我们使用钱包开始交易,看看是否已通知我们的脚本。

我们可以通过两种方式进行此操作:

  1. 从水龙头获取钱包的自由摩托车。

  2. 将Matic发送到另一个钱包。

对于前者,您可以使用可用的水龙头here

一旦触发了上述任何交易,几秒钟后,您应该看到脚本显示交易的详细信息,这意味着它有效!

Pending transaction found with the following details:
Txn Hash: 0x2e83edfba2fbbc8fc2753ab4675f10d204ff3b740ec47cb6c3a9b6f6dd4ebe95

为了进行理智检查,我们可以在Mumbai Polygonscan上搜索此哈希。

Image #2

结论

在多边形上使用WebSockets提供了传统HTTP API请求可以匹配的DAPP的用户体验。我们刚刚开始看到这种实时双向通信的用例。使用Infura的Webockets尝试一下,看看您可以构建什么!

过得非常愉快!