简介
@ethersproject/transactions 是 Ethereum 以太坊区块链上交易编码和解码的 JavaScript 库,用于构成、发送、签名和读取交易。该库的目标是使开发者容易构建 Ethers.js 和 Web3.js 应用程序,从而实现最终用户体验的增强和安全性。
安装
可以使用以下命令安装 @ethersproject/transactions:
npm install @ethersproject/transactions
或者使用 yarn:
yarn add @ethersproject/transactions
快速开始
在你的 JavaScript 代码中,需要引入 @ethersproject/transactions:
import { ethers } from 'ethers'; import { Transaction } from '@ethersproject/transactions';
接下来,我们可以构造一个简单的交易,这个交易从 A 地址向 B 地址转移 0.1 个以太币。我们可以使用以下代码来构造此交易:
-- -------------------- ---- ------- ----- -- - - --- -------- ------ ------------------------------ -- ----- -------- - ----- --------------------------- ----- ----------- - --- ---------------------- ---------------- ---- --- - - ------------------
上面代码中,我们首先构建一个简单的交易,然后使用钱包来签署该交易,最后构建了一个 @ethersproject/transactions 中的 Transaction 对象,并输出交易的哈希。
详细介绍
交易是 Ethereum 区块链上的最基本操作之一。交易包含一些元数据,如发送方地址、接收方地址、转移金额等。发送方为了验证转账交易的有效性,需要对交易进行数字签名,确保交易未被篡改。在 Ethereum 区块链上完成转账通常需要以下步骤:
- 构造一笔交易(填写交易元数据,例如:发送地址、接收地址、转账金额等)
- 对交易进行数字签名(使用发送方的私钥对交易进行签名)
- 广播交易(将交易发送到全网进行验证和确认)
使用 @ethersproject/transactions 很容易地实现这些流程。下面我们来看每一步的详细使用方法。
构造交易
构造交易时,我们需要填写交易的元数据,例如发送地址、接收地址、转账量等:
const tx = { to: '0x...', value: ethers.utils.parseEther('0.1') };
在这里我们使用了 Ethers.js 中的 ethers.utils.parseEther 函数将转账金额从以太转换为 wei(以太坊中的最小货币单位)。这里 value 应该是一个自然数字符串或 BigNumber 对象。
签名交易
签名交易时,我们需要使用发送方的私钥对交易进行签名:
const signedTx = await wallet.signTransaction(tx);
在代码中,wallet 是一个钱包对象,我们可以使用以下代码创建:
const wallet = new ethers.Wallet(privateKey);
在这里我们假设 privateKey 变量包含了一个有效的私钥字符串。
构造 Transaction 对象
在处理交易之前,我们需要从已签名的交易计算交易哈希值。可以使用以下代码计算交易哈希:
const transaction = new Transaction(signedTx); console.log('交易的哈希值为:' + transaction.hash);
这里的哈希值是十六进制字符串,你可以使用 Ethers.js 库提供的其他方法来处理这个哈希值。
广播交易
我们可以使用 Ethers.js 库提供的几种不同的方法来发送交易,例如 sendTransaction()、send() 或 wait()。具体使用哪种方法取决于您想要的交互度和信息反馈。下面我们介绍其中一个方法:使用 sendTransaction() 发送交易。
const provider = ethers.getDefaultProvider(); const response = await provider.sendTransaction(signedTx); console.log('交易的 hash 值为:' + response.hash);
在这里我们首先获取默认的区块链节点信息,然后将签名过的交易发送到该节点,最后输出交易的哈希值。sendTransaction() 函数返回的是一个 Promise 对象,当节点正确处理交易后,该 Promise 对象将被解决。
总结
本文介绍了如何使用 @ethersproject/transactions 来编码和解码 Ethereum 区块链上的交易。我们首先快速地介绍了如何安装该库,并提供了一个简单的示例程序。然后我们深入剖析了构建、签名和广播交易的过程。
由于 Ethereum 区块链是动态和复杂的,因此我们强烈建议您在使用该库之前了解一些 Ethereum 和区块链基础知识。但是,如果您已经了解了这些知识,那么使用 @ethersproject/transactions 库可以大大提高您的工作效率。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/5eedc1c5b5cbfe1ea0611ef6