跳转至主要内容

使用 Web3 发送交易

交易web3.jsalchemy
初学者
Elan Halpern
Alchemy 文档(opens in a new tab)
2020年11月4日
14 分钟阅读 minute read

本文是面向初学者的指南,介绍如何用 Web3 发送以太坊交易。 向以太坊区块链发送交易主要有三个步骤:创建、签署和广播。 我们将对这三个方面进行讨论,希望能回答你可能遇到的所有问题! 在本教程中,我们将使用 Alchemy(opens in a new tab) 将我们的交易发送到以太坊链。 可以点击此处创建一个免费 Alchemy 帐户(opens in a new tab)

注意:本指南适用于在应用程序后端签署交易。 如果想在前端集成交易签署,请查看将 Web3 与浏览器提供程序集成(opens in a new tab)

基本概念

像大多数区块链开发人员刚开始的时候一样,你可能已经对如何发送交易(应该非常简单)进行了一些研究,然后阅读了大量的指南,发现每个人有不同的解读,让你有点不知所措和困惑。 如果你已上了那条船,就不要担心,我们在某些时候都会这样! 所以,在开始之前,让我们弄清楚一些事情:

1. Alchemy 不会存储你的私钥

  • 这意味着 Alchemy 无法代表你签署和发送交易。 这样做的原因是出于安全考虑。 Alchemy 绝不会要求你分享你的私钥,你也绝不应该与托管节点(或任何人)分享你的私钥。
  • 你可以使用 Alchemy 的核心应用程序接口读取区块链,但要写入它,你需要使用其他方式签署交易然后通过 Alchemy 发送它们(任何其他节点服务也是如此)。

2. 什么是“签名者”?

3. 为什么我需要在我的交易上签名?

  • 每个想要在以太坊网络上发送交易的用户都必须在交易上签名(使用他们的私钥),以验证交易的来源是其所声称的那个人。
  • 保护这个私钥非常重要,因为拥有这个私钥就可以完全控制你的以太坊帐户,允许你(或任何有权限的人)代表你进行交易。

4. 如何保护我的私钥?

  • 有许多方法来保护你的私钥,并使用它来发送交易。 在本教程中,我们将使用 .env 文件。 然而,你也可以使用一个单独的存储私钥的服务提供器,使用一个密钥库文件,或其他选项。

5. eth_sendTransactioneth_sendRawTransaction之间有什么区别?

eth_sendTransactioneth_sendRawTransaction 都是 Ethereum API 函数,用于将交易广播到 Ethereum 网络,以便将其添加到未来的区块中。 它们在处理交易签名的方式上有所不同。

当使用 web3 时,通过调用函数 web3.eth.sendSignedTransaction(opens in a new tab) 来访问 eth_sendRawTransaction

这就是我们将在本教程中使用的函数。

6. Web3 库是什么?

好了,现在我们把这些问题都解决了,让我们继续学习教程。 请随时在 Alchemy discord(opens in a new tab) 中提问!

7. 如何发起安全、燃料优化且私密的交易? {how-to-send-secure-gas-optimized-and-private-transactions}

注意:本指南需要使用 Alchemy 帐户、以太坊地址或安装 MetaMask 钱包、NodeJs 和 npm。 如果没有,按以下步骤操作:

  1. 创建一个免费的 Alchemy 帐户(opens in a new tab)
  2. 创建 MetaMask 帐户(opens in a new tab)(或获取以太坊地址)
  3. 按照这些步骤安装 NodeJs 和 NPM(opens in a new tab)

发送交易的步骤

1. 在 Sepolia 测试网上创建一个 Alchemy 应用程序

导航到你的 Alchemy 仪表板(opens in a new tab)并创建一个新的应用程序,选择 Sepolia(或任何其他测试网)作为你的网络。

2. 从 Sepolia 水龙头请求以太币

请参考 Alchemy Sepolia(opens in a new tab) 的说明来接收以太币。 确保包含你的 Sepolia 以太坊地址(来自 MetaMask),而不是其他网络。 按照说明操作后,请仔细检查你是否已在钱包中收到以太币。

3. 创建一个新的项目目录,并使用 cd命令进入该目录。

从命令行(macs 终端)创建一个新的项目目录并导航到这个目录:

1mkdir sendtx-example
2cd sendtx-example

4. 安装 Alchemy Web3(或任何 web3 库)。

在你的项目目录中运行以下命令,以安装 Alchemy Web3(opens in a new tab)

注意,如果你想要使用 ethers.js 库, 请按照这里(opens in a new tab)的说明操作。

1npm install @alch/alchemy-web3

5. 安装 dotenv

我们将使用 .env 文件安全地存储我们的应用程序接口密钥和私钥。

1npm install dotenv --save

6. 创建 .env文件

在你的项目目录中创建一个 .env 文件并添加以下内容(替换“your-api-url”和“your-private-key”)

1API_URL = "your-api-url"
2PRIVATE_KEY = "your-private-key"
不要提交 .env! 请确保永远不要与任何人共享或公开你的 .env 文件,因为这样做会泄露你的私钥。 如果你使用版本控制,请将你的 .env 添加到 gitignore(opens in a new tab) 文件中。

7. 创建 sendTx.js文件

太好了,既然我们已经在 .env 文件中保护了敏感数据,我们开始编码吧。 为了发起示例交易,我们将以太币发送回Sepolia 水龙头。

创建一个 sendTx.js 文件,我们将在其中配置和发送我们的示例交易,并在该文件中添加以下几行代码:

1async function main() {
2 require('dotenv').config();
3 const { API_URL, PRIVATE_KEY } = process.env;
4 const { createAlchemyWeb3 } = require("@alch/alchemy-web3");
5 const web3 = createAlchemyWeb3(API_URL);
6 const myAddress = '0x610Ae88399fc1687FA7530Aac28eC2539c7d6d63' //TODO: replace this address with your own public address
7
8 const nonce = await web3.eth.getTransactionCount(myAddress, 'latest'); // nonce starts counting from 0
9
10 const transaction = {
11 'to': '0x31B98D14007bDEe637298086988A0bBd31184523', // faucet address to return eth
12 'value': 1000000000000000000, // 1 ETH
13 'gas': 30000,
14 'nonce': nonce,
15 // optional data field to send message or execute smart contract
16 };
17
18 const signedTx = await web3.eth.accounts.signTransaction(transaction, PRIVATE_KEY);
19
20 web3.eth.sendSignedTransaction(signedTx.rawTransaction, function(error, hash) {
21 if (!error) {
22 console.log("🎉 The hash of your transaction is: ", hash, "\n Check Alchemy's Mempool to view the status of your transaction!");
23 } else {
24 console.log("❗Something went wrong while submitting your transaction:", error)
25 }
26 });
27}
28
29main();
显示全部

确保将第 6 行中的地址替换为你自己的公共地址。

现在,在我们开始运行这段代码之前,我们先来谈谈其中的一些组件。

关于数据的注释 有两种主要类型的交易可以在以太坊中发送。

8. 使用 node sendTx.js运行代码

返回到你的终端或命令行并运行:

1node sendTx.js

9. 在内存池中查看你的交易

在你的 Alchemy 仪表板上打开内存池页面(opens in a new tab),并通过你创建的应用程序筛选,以找到你的交易。 我们可以在这里看到交易从待处理状态转换到已开采状态(如果成功),或者从待处理状态转换到被丢弃状态(如果失败)。 确保页面保持在“All”视图下,这样你就能捕捉到“已开采”、“待处理”和“被丢弃”的交易。 你还可以通过查找发送到地址 0x31b98d14007bdee637298086988a0bbd31184523 的交易来搜索你的交易。

要在找到交易后查看交易的详细信息,请选择交易哈希值,你将看到这样的视图:

内存池监视器截图

在此处,你可以通过单击红色圆圈中的图标,在 Etherscan 上查看你的交易!

太好了! 你刚刚使用 Alchemy 发送了你的第一笔以太坊交易 🎉

如有关于本指南的反馈和建议,请在 Alchemy 的 Discord(opens in a new tab) 上给 Elan 留言!

最初发表在 https://docs.alchemyapi.io/tutorials/sending-transactions-using-web3-and-alchemy(opens in a new tab) 上。

上次修改时间: @nhsz(opens in a new tab), 2023年8月15日

本教程对你有帮助吗?