这是使用 web3 和 Alchemy 发送以太坊交易的初学者友好指南。 要向以太坊区块链发送交易,主要有三个步骤:创建、签署和广播。 我们将对这三个方面进行讨论,希望能回答您可能遇到的所有问题!
注:本指南用于在后端为您的应用程序进行交易,如果您想在前端集成签署您的交易,请查看将 Alchemy Web3 与浏览器服务提供器集成。
基本概念
像大多数区块链开发人员刚开始的时候一样,您可能已经对如何发送交易(应该非常简单)进行了一些研究,然后阅读了大量的指南,发现每个人有不同的解读,让您有点不知所措和困惑。 如果您已上了那条船,就不要担心,我们在某些时候都会这样! 所以,在开始之前,让我们弄清楚一些事情:
1. Alchemy 不会存储您的私钥
- 这意味着 Alchemy 无法代表您签署和发送交易。 这样做的原因是出于安全考虑。 Alchemy 绝不会要求您分享您的私钥,您也绝不应该与托管节点(或任何人)分享您的私钥。
- 您可以使用 Alchemy 的核心 API 读取区块链,但要写入区块链,则需要使用其他东西来签署您的交易,然后再通过 Alchemy 发送交易。
2. 什么是 “签名者”?
- 签名者将使用您的私钥为您签署交易。 在本教程中,我们将使用 alchemy web3 来签署我们的交易,但您也可以使用任何其他 web3 库。
- 在前端,metamask 就是一个签名者的好例子,它将代表您签署和发送交易。
3. 为什么我需要在我的交易上签名?
- 每个想要在以太坊网络上发送交易的用户都必须在交易上签名(使用他们的私钥),以验证交易的来源是其所声称的那个人。
- 保护这个私钥非常重要,因为拥有这个私钥就可以完全控制您的以太坊帐户,允许您(或任何有权限的人)代表您进行交易。
4. 如何保护我的私钥?
- 有许多方法来保护您的私钥,并使用它来发送交易。 在本教程中,我们将使用一个.env 文件。 然而,你也可以使用一个单独的存储私钥的服务提供器,使用一个密钥库文件,或其他选项。
5. eth_sendTransaction
和 eth_sendRawTransaction
之间有什么区别?
eth_sendTransaction
和 eth_sendRawTransaction
都是 Ethereum API 函数,用于将交易广播到 Ethereum 网络,以便将其添加到未来的区块中。 它们在处理交易签名的方式上有所不同。
eth_sendTransaction
用于发送未签名的交易,这意味着您发送到的节点必须管理您的私钥,以便它能够在将交易广播到链中之前对交易进行签名。 由于 Alchemy 并不持有用户的私钥,所以我们不支持这种方法。eth_sendRawTransactions
用于广播已经签名的交易。 这意味着您首先必须使用signTransaction(tx, private_key)
,然后将结果发送到eth_sendRawTransaction
。
当使用 web3 时,通过调用函数 web3.eth.sendSignedTransaction 来访问eth_sendRawTransaction
。
这是我们将在教程中使用的方法。
6. Web3 库是什么?
- Web3.js 是一个围绕标准 JSON-RPC 调用的封装库,在以太坊开发中使用相当普遍。
- 有许多针对不同语言的 web3 库。 在本教程中,我们将使用 Alchemy Web3,它是用 JavaScript 编写的。 您可以在这里查看其他选项 。
好了,现在我们把这些问题都解决了,让我们继续学习教程。 请随时在我们的 discord 中提问!
注:本指南假设您已有一个 Alchemy 帐户、一个以太坊地址或 MetaMask 钱包,并已安装 NodeJs 和 npm。 如果没有,按以下步骤操作:
- 创建一个免费的 Alchemy 帐户
- 创建 MetaMask 帐户(或获取一个 Ethereum 地址)
- 按照这些步骤安装 NodeJs 和 NPM
发送交易的步骤
1. 在 Rinkeby 测试网上创建一个 Alchemy 程序
导航到您的 Alchemy 仪表板并创建一个新的应用程序,选择 Rinkeby(或任何其他测试网)作为您的网络。
2. 从 Rinkeby faucet 请求 ETH
按照 Rinkeby faucet 上的指示来接收 ETH。 您必须要在社交媒体上分享这个特定的 faucet。 确保包括您的 Rinkeby 以太坊地址(来自 MetaMask)而不是其他网络。 按照说明操作后,仔细检查您的钱包是否已经收到了 ETH。
3. 创建一个新的项目目录,并使用 cd
命令进入该目录。
从命令行(macs 终端)创建一个新的项目目录并导航到这个目录:
4. 安装 Alchemy Web3(或任何 web3 库)。
在您的项目目录中运行以下命令,以安装 Alchemy Web3。
5. 安装 dotenv
我们将使用一个 .env 文件来安全存储我们的 API 密钥和私钥。
6. 创建 .env 文件
在您的项目目录中创建一个 .env 文件,并添加如下内容(替换“您的 api-url
” 和 “您的私人密钥
“)
- 要找到您的 Alchemy API URL,请导航到您刚刚在仪表板上创建的应用程序详细信息页面。 点击右上角的“查看密钥”,然后获取 HTTP URL。
7. 创建 sendTx.js
文件
很好,我们在 .env 文件中保护了我们的敏感数据,让我们现在开始编码吧。 对于我们的发送交易示例,我们将把 ETH 发送回 Rinkeby faucet。
创建一个 sendTx.js
文件,这是我们将配置和发送我们的示例交易的地方,并在文件中添加以下几行代码:
在我们开始运行这段代码之前,让我们谈谈这里的一些组件。
nonce
: nonce 规范用于跟踪从您的地址发送的交易数量。 为了安全起见,我们需要这样做,以防止重放攻击。 要获得从您的地址发送的交易数量,我们使用 getTransactionCount。transaction
: 交易对象有几个方面需要我们指定to
: 这是我们要发送 ETH 的地址。 在这种情况下,我们将 ETH 发送回我们最初请求的 Rinkeby faucet。value
: 这是我们希望发送的金额,以 wei 为单位,10^18 wei = 1 ETH。gas
: 有多种方法来确定与您的交易相关的 gas 的正确数量。 Alchemy 甚至有一个矿工费出价的 webhook,当矿工费出价落在某个阈值内时,它可以通知您。 对于主网交易, 最好检查一下像 ETH Gas Station 这样的 gas 估计器,以确定要包含的正确的 gas 数量。 21000 是以太坊操作所使用的最小 gas 数量,所以为了确保我们的交易得以执行,我们在这里输入 30000。nonce
: 参见上面的 nonce 定义。 Nonce 从零开始计数。signedTx
: 要签署交易对象,我们将使用signTransaction
方法和我们的PRIVATE_KEY
sendSignedTransaction
:一旦我们有一个已签名的交易。 我们可以通过使用sendSignedTransaction
将其发送出去,以包含在后续区块中
8. 使用 节点 sendTx.js
运行代码
返回到您的终端或命令行并运行:
9. 在内存池中查看您的交易
在您的 Alchemy 仪表板上打开 内存池页面,并通过您创建的应用程序进行过滤,以找到您的交易。 我们可以在这里观看交易从待处理状态转换到被挖矿状态(如果成功),或者如果失败,则从待处理状态转换到被丢弃状态。 确保将其保持在“全部”,这样您就能捕捉到“被挖矿”、“待处理”和“被丢弃”的交易。 您还可以通过寻找发送到地址 0x31b98d14007bdee6372980898a0bbd31184523
的交易来搜索您的交易。
要在找到交易后查看交易的详细信息,请选择 tx 哈希值,您将看到这样的视图:
在视图里,您可以通过点击红色圆圈圈出的图标,在 Etherscan 上查看您的交易!
太好了! 您刚刚使用 Alchemy 发送了您的第一笔以太坊交易 🎉
评论(1)
怎么看不见代码?