如何使用Ethers.js、Web3.py和Metamask发送交易

  • tenderly
  • 发布于 2022-12-15 18:42
  • 阅读 36

本文介绍了如何使用Metamask、Ethers.js和Web3.py通过Tenderly Web3 Gateway向以太坊区块链发送交易。文章详细说明了如何设置Tenderly Node,并通过代码示例展示了使用Ethers.js和Web3.py发送交易的具体步骤,包括安装依赖、配置环境变量、编写和运行脚本,以及如何利用Tenderly的调试工具来检查交易。

如何使用 Ethers.js、Web3.py 和 Metamask 发送交易

学习使用 Metamask、Ethers.js 和 Web3.py 通过 Tenderly Web3 网关生产节点向 Ethereum 区块链发送交易的基础知识。

如何使用 Ethers.js、Web3.py & Metamask 发送交易

在学习 Web3 开发时,初学者通常从尝试在链上发送简单交易开始。这是与 Ethereum 区块链交互的几种基本方式之一。

但是要发送交易,你需要一个区块链的入口点——一个 Ethereum 节点。你可以自己安装并运行一个节点,或者使用一个托管节点作为服务解决方案,例如 Tenderly Node

托管节点解决方案使得发送交易的过程更加方便和简化。它消除了你安装或管理自己的节点基础设施的需求,这可能会很棘手。

在这个快速教程中,你将学习如何在不依赖第三方交易所的情况下,将 Ether 从一个钱包发送到另一个钱包。为此,你将学习如何使用 Metamask、Ethers.js、Web3.py 和 Tenderly Node 作为发送交易的基础设施解决方案。

🔥 最新动态

使用新发布的 Tenderly 节点扩展 自定义你如何通过 Tenderly 节点与区块链交互。创建超出标准 API 集的自定义 RPC。

尝试节点扩展

前提条件

要学习本教程,你应该熟悉:

  • Ethereum 区块链基础知识(Ether、钱包、水龙头、主网和测试网等)
  • JavaScript 或 Python(包含代码片段)
  • 命令行界面 (CLI)

你还需要一个 Tenderly 帐户,你可以 在此处免费创建

Tenderly 是一个一体化的 Web3 开发平台,是 Web3 技术栈的重要组成部分。它使开发人员能够构建、测试、监控和运营智能合约,从它们诞生到大规模采用。

该平台为你提供深入的调试工具,结合可观察性和基础设施构建块,以加速智能合约开发。

设置 Tenderly 节点

在继续之前,你首先需要设置 Tenderly 节点,这将使你可以访问区块链并发送交易。

登录到你的 Tenderly 帐户或免费创建一个,然后转到 Tenderly 节点界面

在最顶部,你将看到一个受支持网络的列表。

本教程将演示如何在 Sepolia 测试网上发送交易,而无需花费真钱。但是,如果你致力于发送真正的 Ether,则可以使用主网 RPC URL。这两种方法的步骤相同。

找到 Sepolia 测试网络并复制 RPC URL。

一个警告: RPC URL 的最后一部分包含你的安全访问Token。确保不要公开它。如果你这样做了,请向下滚动到访问控制以重置它。

要在 Sepolia 网络上发送交易,如果你的钱包中还没有 SEP(Sepolia 上使用的货币),你还需要向你的钱包中添加 SEP。你可以使用 Sepolia 水龙头 来挖掘一些免费的 SEP。

通过 Tenderly 节点使用 Metamask 发送交易

你的 Tenderly 节点设置完成后,让我们继续将其连接到 Metamask。

Metamask 允许你通过不同的节点提供商通过 JSON-RPC 在主网和流行的测试网络上发送和接收交易。要访问 Sepolia 测试网,你需要手动将 Tenderly 节点作为 Metamask 中的一个网络添加。

打开 Metamask,然后从顶部单击网络下拉列表,然后单击添加网络

这将打开 Metamask 设置。

向下滚动并单击手动添加网络

使用以下信息填写可用字段:

  • 网络名称: 这可以是任何东西
  • 新的 RPC URL: 在此处粘贴你从 Tenderly 节点复制的 Sepolia RPC URL
  • 链 ID: Sepolia 的链 ID 是 “11155111”(在此处查找 所有链 ID 的列表
  • 货币符号: SEP(Sepolia 测试网上使用的货币)
  • 区块浏览器 URL: https://sepolia.etherscan.io/

完成后,单击保存

现在,你可以开始使用 Tenderly 节点作为你访问 Sepolia 测试网的入口点,从 Metamask 发送转换。

通过 Tenderly 节点使用 Ethers.js 发送交易

Ethers.js 是一个 JavaScript 库,它允许你构建去中心化应用程序 (dapp) 并与 Ethereum 区块链交互。它为你提供了一组实用程序,用于在网络上创建、部署智能合约并与之交互。

你还可以使用 Ethers.js 发送简单的交易,例如在主网上转移 Ether 以及其他基于 EVM 的网络以及测试网使用的货币。

要使用 Ethers.js 以编程方式发送交易,你需要在你的系统上安装 npm 和 Node.js。

如果你已经安装了所有这些,你可以继续执行以下步骤。

步骤 1:创建一个新目录,进入该目录并初始化项目

mkdir tenderly-tx

cd tenderly-tx

npm init -y

步骤 2:安装 Ethers.js

npm install --save-dev ethers dotenv

步骤 3:创建一个 .env 文件来存储你的密钥

touch .env

将以下变量添加到 .env 文件并为它们分配适当的值。

TENDERLY_URL = XXXXXXXXXXX

PRIVATE_KEY = XXXXXXXXXXX

要获取 Tenderly URL,请转到 Tenderly 仪表板并复制 Sepolia RPC URL,它具有以下结构:

https://{NETWORK_NAME}.gateway.tenderly.co/{ACCESS_TOKEN}

PRIVATE_KEY 是你的私钥钱包密钥。

步骤 4:创建脚本

现在,让我们构建使用 Ethers.js 通过 Tenderly 节点发送 ETH 的脚本。如果你正在寻找复制/粘贴方法,请 访问我们的 GitHub 仓库 以获取完整的脚本。

在文件顶部,你需要引入 ethers 库和 .env 文件,并定义接收方钱包的地址。

const { ethers } = require ("ethers");
require ("dotenv").config();

// 添加接收资金的钱包地址
const destinationAddress = "";

接下来,定义 main 函数并添加以下配置。

你需要指定提供程序,在本例中是 Tenderly 节点。RPC URL 存储在 TENDERLY_URL 变量中,该变量从 .env 文件中提取。

provider = new ethers.providers.JsonRpcProvider(process.env.TENDERLY_URL);

你还需要指定将发送交易的钱包的地址,并将其存储在变量 sender 中。此数据也从 .env 文件中提取。

const sender = new ethers.Wallet(process.env.PRIVATE_KEY, provider);

接下来,定义一个变量 balanceBefore 以检索发送方钱包上的余额。你可以添加一个简单的 console.log 语句,以在终端中输出此信息。

const balanceBefore = await provider.getBalance(destinationAddress);

console.log(`发送前的目标余额:${ethers.utils.formatEther(balanceBefore)} ETH`);
console.log("正在发送...\n");

以下步骤涉及定义一个变量 tx,以指定你想要发送到目标钱包的货币数量。例如,让我们发送 0.001 SEP。

为了跟踪交易执行情况,你可以添加 console.log 语句,以在你发送交易时通知你,并获取交易的哈希值和收据。

const tx = await sender.sendTransaction({to: destinationAddress, value: ethers.utils.parseEther("0.001")});
console.log("已发送!🎉");
console.log(`交易哈希:${tx.hash}`);
console.log("等待收据...");

下一行代码等待包含交易的区块或 150 秒后验证一个区块。console.log 语句将记录交易哈希的链接,你可以在 Tenderly 中打开该链接以更详细地检查转换。

await provider.waitForTransaction(tx.hash, 1, 150000).then(() => {});
console.log(`交易详情:https://dashboard.tenderly.co/tx/sepolia/${tx.hash}\n`);

为了确认价值变化已经发生,你可以使用下面的代码片段将目标钱包中的新余额记录到控制台。

const balanceAfter = await provider.getBalance(destinationAddress);
console.log(`发送后的目标余额:${ethers.utils.formatEther(balanceAfter)} ETH`);

最后,调用 main() 函数以确保代码得到执行。

main ()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

要运行脚本,只需通过 Node.js 执行它。

node tenderly_tx.js

如果你的交易成功,你将在终端中看到交易哈希,以及指向 Tenderly 中交易的链接。

复制此链接并将其粘贴到浏览器中,以使用 Tenderly 检查交易,在调试器中打开它,或 在 Fork 上重新模拟它

通过 Tenderly 节点使用 Web3.py 发送交易

Web3.py 是一个用于与 Ethereum 区块链交互的 Python 库。与 Ethers.js 类似,它允许你部署智能合约、发送交易以及与区块链交互,但使用 Python。

要继续,你需要在你的系统上安装 Python 和 pip3。

步骤 1:创建一个新目录,导航到该目录中,然后安装 Web3 库

mkdir python-tx

cd python-tx

pip3 install web3

步骤 2:设置 Tenderly 节点和你的钱包私钥的环境变量

将你的钱包私钥放在 PRIVATE_KEY 变量中,并将你从 Tenderly 节点接口复制的 RPC URL 放在 TENDERLY_URL 变量中。

确保不要将变量的值存储在引号中。

如果你使用的是 Linux 或 Mac,请从终端运行以下命令:

export TENDERLY_URL=https://sepolia.gateway.tenderly.co/XXXXXXXXXXX

export PRIVATE_KEY=XXXXXXXXXXX

要获取 Tenderly URL,请转到 Tenderly 仪表板并复制 Sepolia RPC URL,它具有以下结构:

https://{NETOWKR_NAME}.gateway.tenderly.co/{ACCESS_TOKEN}

步骤 3:创建脚本

仍然在 python-tx 目录中,创建一个名为 send_tx.py 的 Python 文件。你将在此处编写脚本代码。

touch send_tx.py

如果你想跳过下面的解释,请随时从 我们的 GitHub 仓库 复制/粘贴此脚本的最终代码。

你需要做的第一件事是导入发送交易所需的必要库。

import os
from web3 import Web3
from web3.gas_strategies.rpc import rpc_gas_price_strategy

接下来,定义变量 web3,它将设置 Tenderly 节点作为你的节点提供程序。RPC URL 从你在步骤 2 中定义的 TENDERLY_URL 环境变量中提取。

web3 = Web3(Web3.HTTPProvider(os.getenv("TENDERLY_URL")))

你还需要定义私钥以及发送方和接收方地址,并将此信息存储在相应的变量中,如下所示:

sender = {
    "private_key": os.getenv("PRIVATE_KEY"),
    "address": "",
}
receiver = ""

接下来,你可以查询区块链以获取接收方钱包上的余额,并将此信息打印到终端,如下所示:

receiverBalance = web3.eth.getBalance(receiver)
receiverBalanceETH = web3.fromWei(receiverBalance, "ether")
print(f'转移前的目标余额:{receiverBalanceETH} ETH')

为方便起见,你可以要求提供程序使用 Web3.py 库建议 gas 价格。

web3.eth.set_gas_price_strategy(rpc_gas_price_strategy)

现在是有趣的部分!

让我们创建交易并将其存储在变量 tx_create 中并签名。此变量需要采用字典的形式,并包含诸如 nonce、gas 价格、to 和 from 地址、我们要发送的货币数量以及 Sepolia 测试网的 ID 等信息。

tx_create = web3.eth.account.sign_transaction(
    {
        "nonce": web3.eth.get_transaction_count(sender["address"]),
        "gasPrice": web3.eth.generate_gas_price(),
        "gas": 21000,
        "to": receiver,
        "value": web3.toWei("0.001", "ether"),
        "chainId": 11155111,

    sender["private_key"],
)

下一步是发送交易并等待收据。

tx_hash = web3.eth.send_raw_transaction(tx_create.rawTransaction)
print("已发送!🎉")
print(f"TX hash: { tx_hash.hex() }")
print("等待收据...")
tx_receipt = web3.eth.wait_for_transaction_receipt(tx_hash)

最后,让我们打印指向交易哈希的链接,你可以在 Tenderly 中打开该链接以进一步检查它。

print(f"TX details: https://dashboard.tenderly.co/tx/sepolia/{tx_hash.hex()}")
receiverBalance = web3.eth.getBalance(receiver)
receiverBalanceETH = web3.fromWei(receiverBalance, "ether")
print(f'转移后的目标余额:{receiverBalanceETH} ETH')

要运行脚本,只需使用以下命令通过 Python 执行它:

python3 send_tx.py

如果交易成功,脚本会将以下输出打印到控制台,以及指向 Tenderly 仪表板的链接。

你可以复制此链接并将其粘贴到浏览器中,以在 Tenderly 中打开交易,并使用调试器进一步检查它,或在 Fork 上重新模拟它。

开始使用 Tenderly 节点

Tenderly 节点是一种托管的节点即服务解决方案,可为你提供安全、可靠和一致的区块链访问。它与强大的 Tenderly 开发工具和可观察性完全集成。

要开始通过 Tenderly 节点发送请求和交易,你只需将一个 RPC URL 添加到你的代码中,正如你在此教程中所见。

如果你有一个 Tenderly 帐户,你已经可以免费访问 Tenderly 节点。使用此链接 直接转到 Tenderly 节点并开始发送交易。

  • 原文链接: blog.tenderly.co/how-to-...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
tenderly
tenderly
江湖只有他的大名,没有他的介绍。