本文介绍了如何使用Metamask、Ethers.js和Web3.py通过Tenderly Web3 Gateway向以太坊区块链发送交易。文章详细说明了如何设置Tenderly Node,并通过代码示例展示了使用Ethers.js和Web3.py发送交易的具体步骤,包括安装依赖、配置环境变量、编写和运行脚本,以及如何利用Tenderly的调试工具来检查交易。
学习使用 Metamask、Ethers.js 和 Web3.py 通过 Tenderly Web3 网关生产节点向 Ethereum 区块链发送交易的基础知识。
在学习 Web3 开发时,初学者通常从尝试在链上发送简单交易开始。这是与 Ethereum 区块链交互的几种基本方式之一。
但是要发送交易,你需要一个区块链的入口点——一个 Ethereum 节点。你可以自己安装并运行一个节点,或者使用一个托管节点作为服务解决方案,例如 Tenderly Node。
托管节点解决方案使得发送交易的过程更加方便和简化。它消除了你安装或管理自己的节点基础设施的需求,这可能会很棘手。
在这个快速教程中,你将学习如何在不依赖第三方交易所的情况下,将 Ether 从一个钱包发送到另一个钱包。为此,你将学习如何使用 Metamask、Ethers.js、Web3.py 和 Tenderly Node 作为发送交易的基础设施解决方案。
🔥 最新动态
使用新发布的 Tenderly 节点扩展 自定义你如何通过 Tenderly 节点与区块链交互。创建超出标准 API 集的自定义 RPC。
前提条件
要学习本教程,你应该熟悉:
你还需要一个 Tenderly 帐户,你可以 在此处免费创建 。
Tenderly 是一个一体化的 Web3 开发平台,是 Web3 技术栈的重要组成部分。它使开发人员能够构建、测试、监控和运营智能合约,从它们诞生到大规模采用。
该平台为你提供深入的调试工具,结合可观察性和基础设施构建块,以加速智能合约开发。
在继续之前,你首先需要设置 Tenderly 节点,这将使你可以访问区块链并发送交易。
登录到你的 Tenderly 帐户或免费创建一个,然后转到 Tenderly 节点界面。
在最顶部,你将看到一个受支持网络的列表。
本教程将演示如何在 Sepolia 测试网上发送交易,而无需花费真钱。但是,如果你致力于发送真正的 Ether,则可以使用主网 RPC URL。这两种方法的步骤相同。
找到 Sepolia 测试网络并复制 RPC URL。
一个警告: RPC URL 的最后一部分包含你的安全访问Token。确保不要公开它。如果你这样做了,请向下滚动到访问控制以重置它。
要在 Sepolia 网络上发送交易,如果你的钱包中还没有 SEP(Sepolia 上使用的货币),你还需要向你的钱包中添加 SEP。你可以使用 Sepolia 水龙头 来挖掘一些免费的 SEP。
你的 Tenderly 节点设置完成后,让我们继续将其连接到 Metamask。
Metamask 允许你通过不同的节点提供商通过 JSON-RPC 在主网和流行的测试网络上发送和接收交易。要访问 Sepolia 测试网,你需要手动将 Tenderly 节点作为 Metamask 中的一个网络添加。
打开 Metamask,然后从顶部单击网络下拉列表,然后单击添加网络。
这将打开 Metamask 设置。
向下滚动并单击手动添加网络。
使用以下信息填写可用字段:
完成后,单击保存。
现在,你可以开始使用 Tenderly 节点作为你访问 Sepolia 测试网的入口点,从 Metamask 发送转换。
Ethers.js 是一个 JavaScript 库,它允许你构建去中心化应用程序 (dapp) 并与 Ethereum 区块链交互。它为你提供了一组实用程序,用于在网络上创建、部署智能合约并与之交互。
你还可以使用 Ethers.js 发送简单的交易,例如在主网上转移 Ether 以及其他基于 EVM 的网络以及测试网使用的货币。
要使用 Ethers.js 以编程方式发送交易,你需要在你的系统上安装 npm
和 Node.js。
如果你已经安装了所有这些,你可以继续执行以下步骤。
mkdir tenderly-tx
cd tenderly-tx
npm init -y
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
是你的私钥钱包密钥。
现在,让我们构建使用 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 上重新模拟它。
Web3.py 是一个用于与 Ethereum 区块链交互的 Python 库。与 Ethers.js 类似,它允许你部署智能合约、发送交易以及与区块链交互,但使用 Python。
要继续,你需要在你的系统上安装 Python 和 pip3。
mkdir python-tx
cd python-tx
pip3 install web3
将你的钱包私钥放在 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}
仍然在 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 节点发送请求和交易,你只需将一个 RPC URL 添加到你的代码中,正如你在此教程中所见。
如果你有一个 Tenderly 帐户,你已经可以免费访问 Tenderly 节点。使用此链接 直接转到 Tenderly 节点并开始发送交易。
- 原文链接: blog.tenderly.co/how-to-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!