Solana Web3.js开发入门
Solana 是一个新兴的区块链,在本指南中,我们将学习如何使用web3.js连接到 Solana、在其开发网络上获取资金以及使用这项令人兴奋的新技术发送交易。
一键发币: SOL | BNB | ETH | BASE | Blast | ARB | OP | POLYGON | AVAX | FTM | OK
Solana 是一个新兴的区块链,旨在改进当前生态系统的解决方案,以解决提供安全、可扩展、去中心化共识协议的复杂问题。 Solana 拥有无数的技术,它正在利用这些技术从其老大哥以太坊那里获得一些市场份额。 在本指南中,我们将学习如何连接到 Solana、在其开发网络上获取资金以及使用这项令人兴奋的新技术发送交易。
1、设置项目
在开始进行 Solana 交易之前,我们需要先设置项目。
首先,创建一个目录。 我们将在本指南中将其命名为 SolanaTransaction,但你可以随意命名它。 创建新的项目文件夹后,我们将需要一个用于编写代码的文件。 同样,你可以将其命名为任何名称,只要它以 .js 后缀结尾即可,但我们将调用我们的 sendSol.js。 在控制台中输入以下命令以继续。
mkdir SolanaTransaction
cd SolanaTransaction
touch sendSol.js
完成此操作后,使用您最喜欢的文本编辑器打开 sendSol.js 文件。
2、连接到 Solana 集群
要在 Solana 上进行构建,你需要一个 API 端点来连接网络。 你可以使用公共节点或部署和管理自己的基础设施; 本文使用QuickNode。 我们将使用 Solana Devnet 端点。
复制 HTTP 提供程序链接:
要连接到 Solana 提供的开发网络,我们需要安装 @solana/web3.js
库。 为此,请运行以下命令:
npm i @solana/web3.js
安装了 Solana 的 JavaScript 库后,我们现在可以连接到网络。
//sendSol.js
const web3 = require("@solana/web3.js");
// Connect to cluster
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
代码的快速分解:
- 第 2 行:导入 solana/web3.js 库。
- 第 4-6 行:创建一个新的连接对象。 连接的构造函数采用端点 URL(我们在上一步中生成)。
配置连接常量后,现在将能够调用 Solana 网络。 如果想测试连接是否正常工作,可以使用 console.log(connection)
来查看 connection
对象。
3、生成地址和初始资金
通过连接到网络,我们需要获取工具来生成地址并获取初始资金。 首先,我们需要使用solana 客户端工具生成一个新的密钥对并空投一些 SOL。
最后,我们将生成一个随机地址作为转账的目标地质,代码应如下所示:
//sendSol.js
const web3 = require("@solana/web3.js");
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
const secret=[00, ... 00]; // Replace with your secret key
const from = web3.Keypair.fromSecretKey(new Uint8Array(secret));
// Generate a random address to send to
const to = web3.Keypair.generate();
浏览一下这段代码:
- Secret:这是我们在上一步中生成的密钥。 它用于签署交易—我们已经将一些 devnet SOL 存入该帐户。
- from:创建从密钥的unit8array派生的新密钥对。
- to:创建一个新的密钥对,我们将向其发送资金。
完成前面的所有步骤后,现在应该具备了:
- 与 Solana 网络的连接。
- 用于发送 SOL 的帐户。
- 将 SOL 发送到的帐户地址。
事实证明,有了所有这些组件,现在就可以完成交易了!
4、发送交易
继续有趣的部分! 我们现在可以在网络上发送交易。 这个过程有两个部分。 首先,我们需要创建一个新的事务对象。 其次,我们必须将该交易发送给另一个用户并添加我们的签名。 下面的异步代码块将向我们展示具体如何做到这一点:
(async () => {
const transaction = new web3.Transaction().add(
web3.SystemProgram.transfer({
fromPubkey: from.publicKey,
toPubkey: to.publicKey,
lamports: web3.LAMPORTS_PER_SOL / 100,
}),
);
// Sign transaction, broadcast, and confirm
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[from],
);
console.log('SIGNATURE', signature);
})()
4.1 创建交易
在这里你可以看到前面的每个步骤都有其自己的功能。 我们可以从第一个函数 web3.Transaction().add(web3.SystemProgram.transfer({}))
开始。 这相当冗长,需要分解成更小的部分才能完全理解。
web3.Transaction()
- 创建空的 Transaction 对象。
add()
- 提供一个方法,我们可以在其中向 Transaction 对象添加指令。
web3.SystemProgram.transfer()
- 这是负责将资金从一个帐户发送到另一个帐户的方法。 这需要几个参数。 这代表我们存储在事务常量中的第一个函数的第 2-6 行。参数如下:
fromPubkey
- 我们从中发送资金的帐户的公钥。toPubkey
- 从交易接收资金的帐户的公钥。lamports
: - 要发送的 lamports 数量。 你可以认为 lamports 之于 Sol,就像 gwei 之于 Ether 一样。
4.2 交易签名
交易对象准备就绪后,现在需要通过使用我们的密钥对其进行签名来授权交易。 上面代码块中的第二个函数负责该过程中的这一步。 我们可以将其分解,以便更好地了解正在发生的事情。
- 第 10 行:声明签名常量,它将存储
sendAndConfirmTransaction()
的结果 - 第 11-13 行:为前面提到的函数提供参数。 按顺序,参数是连接对象、要发送的交易以及由数组表示的发送者的私钥/公钥对。
- 第 15 行:记录成功的签名,由交易哈希表示。
完成所有这些后,现在就可以运行代码了。 我将在此处添加最终的代码片段,它应该是完成的项目的样子。
//sendSol.js
const web3 = require("@solana/web3.js");
const connection = new web3.Connection(
"<YOUR_QUICKNODE_URL_HERE>",
'confirmed',
);
const secret=[00, ... 00]; // Replace with your secret key
const from = web3.Keypair.fromSecretKey(new Uint8Array(secret));
// Generate a random address to send to
const to = web3.Keypair.generate();
(async () => {
const transaction = new web3.Transaction().add(
web3.SystemProgram.transfer({
fromPubkey: from.publicKey,
toPubkey: to.publicKey,
lamports: web3.LAMPORTS_PER_SOL / 100,
}),
);
// Sign transaction, broadcast, and confirm
const signature = await web3.sendAndConfirmTransaction(
connection,
transaction,
[from],
);
console.log('SIGNATURE', signature);
})()
您现在可以在终端中运行 sendSol.js 文件并获得与此类似的输出!
5、结束语
恭喜! 如果你完成了这一部分,现在已经成功在 Solana 网络上发送了一笔交易。 Solana 是一个非常有趣的区块链,它似乎在用户体验方面对以太坊网络进行了改进。 交易发生得更快,费用也更低。 Solana 尚未像以太坊那样经过实战测试,但它确实值得关注。 更重要的是,你已经处于领先地位! 没有多少人可以说他们已经使用 JavaScript 在 Solana 上发送了交易,但你可以!
原文链接:How to Send a Transaction On Solana Using JavaScript
DefiPlot翻译整理,转载请标明出处