将交易发送到以太坊区块链需要三个主要步骤:创建、签名和广播。
我们将完成所有三个,希望能回答您可能遇到的任何问题!在本教程中,我们将使用 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
都是将交易广播到以太坊网络的以太坊 API 函数,因此它将被添加到未来的区块中。它们在处理交易签名的方式上有所不同。
eth_sendTransaction
发送未签名的交易,这意味着您要发送到的节点必须管理您的私钥,以便它可以在将交易广播到链之前对其进行签名。由于 Alchemy 不保存用户的私钥,因此我们不支持这种方法。用于eth_sendRawTransaction
广播已经签署的交易。这意味着您首先必须使用signTransaction(tx, private_key)
,然后将结果传入eth_sendRawTransaction
.
使用 web3 时,eth_sendRawTransaction
通过调用函数访问。这就是我们将在教程中使用的内容。web3.eth.sendSignedTransaction
好的,现在我们已经解决了其中一些问题,让我们继续学习教程。
注意: 本指南假设您已安装Alchemy 帐户、以太坊地址或 Metamask 钱包、NodeJs 和 npm。如果没有,请创建一个并按照以下步骤 *** 作:
创建Metamask 账户(或获取以太坊账户)安装 NodeJS 和 NPM接下来,我们将通过几个步骤了解如何发送您的交易。
1. 在 Rinkeby 测试网上创建一个 Alchemy 应用程序导航到您的Alchemy 仪表板并创建一个新应用程序,为您的网络选择 Rinkeby(实际上,您可以使用您的任何testnet
选择,但对于本指南,我们坚持使用 Rinkeby)。
按照水龙头主页上的说明接收 Eth。您必须在社交媒体上为这个特定的水龙头分享您的公共地址。确保包含您的 Rinkeby 以太坊地址(来自 Metamask),而不是其他网络。按照说明 *** 作后,请仔细检查您是否已在钱包中收到 Eth。
3.设置一个新的项目目录从命令行创建一个新的项目目录并导航到它:
mkdir sendtx-example
cd sendtx-example
4. 安装 Alchemy Web3(或任何 web3 库)
在您的项目目录中运行以下命令:
npm install @alch/alchemy-web3
5.安装dotenv
我们将使用 .env 文件来安全地存储我们的 API 密钥和私钥。
npm install dotenv — 保存
6. 创建 .env 文件
在您的项目目录中创建一个.env
文件并添加以下内容(替换your-api-key
和your-private-key
)
API URL
,请导航到您刚刚在仪表板上创建的应用程序的应用程序详细信息页面,单击右上角的“查看密钥”,然后获取 HTTP URL。要使用 Metamask 查找您的私钥,请查看本指南。
API_URL = “https://eth-rinkeby.alchemyapi.io/v2/your-api-key”
PRIVATE_KEY = “你的私钥”
7. 创建 sendTx.js 文件
太好了,既然我们已经在一个.env
文件中保护了我们的敏感数据,让我们开始编码吧。对于我们的发送交易示例,我们将把 Eth 发送回 Rinkeby 水龙头。
创建一个sendTx.js
文件,我们将在其中配置和发送示例事务,并向其中添加以下代码行:
请务必将第 6 行的地址替换为您自己的公共地址。
现在,在我们开始运行这段代码之前,让我们先谈谈这里的一些组件:
nonce
:nonce 规范用于跟踪从您的地址发送的交易数量。出于安全目的和防止重放攻击,我们需要它。要获取从您的地址发送的交易数量,我们使用.getTransactionCount
transaction
: 交易对象有几个方面我们需要指定to
:这是我们要将 Eth 发送到的地址。在这种情况下,我们将 Eth 发送回我们最初请求的Rinkeby 水龙头。value
:这是我们希望发送的金额,在wei
哪里指定10¹⁸ wei = 1 ETH
gas
:有很多方法可以确定包含在您的交易中的正确汽油量。Alchemy 甚至有一个gas price webhook可以在 gas 价格低于某个阈值时通知您。对于mainnet
交易,最好检查像Eth Gas Station这样的气体估算器,以确定要包含的正确数量的气体。21000 是在以太坊上的 *** 作将使用的最低气体量,因此为了确保我们的交易能够执行,我们将 30000 放在这里。maxFeePerGas
:这是您愿意为执行交易支付的每笔 gas 金额。自 EIP 1559 起,此字段或该maxPriorityFeePerGas
字段是必需的。nonce
: 见上面的 nonce 定义。Nonce 从零开始计数。data
:这是可选的,用于在您的转账中发送附加信息,或调用智能合约,余额转账不需要,请查看下面的注释。signedTx
:要签署我们的交易对象,我们将使用我们的signTransaction
方法PRIVATE_KEY
sendSignedTransaction
:一旦我们有一个签名的交易,我们可以通过使用将其发送到后续块中sendSignedTransaction
数据注释
以太坊可以发送两种主要类型的交易:
余额转移:将 eth 从一个地址发送到另一个地址。不需要数据字段,但是,如果您想在交易中发送其他信息,您可以在此字段中包含 HEX 格式的信息。例如,假设我们想将 IPFS 文档的哈希写入以太坊链,以便为其提供不可变的时间戳。我们的数据字段应如下所示data: web3.utils.toHex(‘IPFS hash‘)
。现在任何人都可以查询该链并查看该文档是何时添加的。智能接触交易:在链上执行一些智能合约代码。在这种情况下,数据字段应包含您希望执行的智能功能以及任何参数。有关实际示例,请查看此Hello World 教程中的第 8 步。
8. 使用节点 sendTx.js 运行代码
导航回您的终端或命令行并运行:
节点 sendTx.js
9. 在内存池中查看您的交易
在您的 Alchemy 仪表板中打开Mempool 页面并按您创建的应用程序进行筛选以查找您的交易。在这里,我们可以看到我们的事务从挂起状态转换到挖掘状态(如果成功)或如果不成功则丢弃状态。
确保将其保持为“全部”,以便捕获“已开采”、“待处理”和“已丢弃”交易。您还可以通过查找发送到地址的交易来搜索您的交易0x31b98d14007bdee637298086988a0bbd31184523
(替换为您的地址)。
要在找到交易后查看交易的详细信息,请选择 tx 哈希,它应该会带您进入如下所示的视图:
在 Alchemy Mempool Watcher 上查看您的交易
从那里您可以通过单击红色圆圈图标查看您在 Etherscan 上的交易!
恭喜!您刚刚使用 Alchemy 发送了您的第一笔以太坊交易。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)