构建一笔交易 发送SOL
配套视频教程: Bilibili:https://www.bilibili.com/video/BV1Cz421r7Cd/?spm_id_from=333.788&vd_source=2979dcefbf505a6422797470b6fbbfad Youtube:https://www.youtube.com/watch?v=9H-NInDcuPA&list=PLMsVemdMJKNUSTsRpjQj7CTrm8O-luVxi&index=5 欢迎添加我的联系方式:Rico_Ruilabs
一笔交易可以由很多步骤组成
A -> B ->C
链上交易是原子的:要么(所有步骤)都成功、要么(所有步骤)都失败,没有中间选项
提前下载好 Node,创建工程目录,执行
npm init -y
初始化空的 package.json
文件,添加 "type": "module"
,执行 npm i
命令,依次下载 "@solana/web3.js","bs58","dotenv" 这三个库
如
package.json
文件最终状态:
先 构建交易
再 创建一个发送SOL的事务,事务由三部分组成 发送者、接收者、调用数据
之后 将事务添加到交易
上
最后 将交易
发送到 集群(区块链),该环节也是三部分组成 实例化的RPC、交易
、签名者数组
solana中,最后发送交易时的签名者是一个签名者数组,即可以多个地址同时发出并行交易,本节示例只演示一个签名者的情况
// 依次引入三个库
import { Keypair, Connection, LAMPORTS_PER_SOL,PublicKey,Transaction ,SystemProgram,sendAndConfirmTransaction} from "@solana/web3.js"
import "dotenv/config"
import base58 from 'bs58'
// 读取 .env 文件中的私钥字符串
const userKeypair = Keypair.fromSecretKey(base58.decode(process.env.SECRET_KEY))
// 连接到 Devnet
const devConnection = new Connection('https://devnet.helius-rpc.com/?api-key=9fc1bee2-a8b0-4ed5-93f6-a0dfc850013c')
// 我的地址
const add = userKeypair.publicKey.toBase58()
const userAdd = new PublicKey(add)
// 接收方地址
const toAdd = new PublicKey('8RJVj9JuLnhirYo2bpXJdWogLXuETD4JRi6KD7L1GFpC')
// 获取账户余额
let myBalance = await devConnection.getBalance(userAdd)
let toAddBalance = await devConnection.getBalance(toAdd)
// 转化成 SOL 数量
let balanceInSol = myBalance / LAMPORTS_PER_SOL
let toAddBalanceInSol = toAddBalance / LAMPORTS_PER_SOL
console.log(`发送方 ${userAdd} -- 余额 ${balanceInSol} SOL`)
console.log(`接收方 ${toAdd} -- 余额 ${toAddBalanceInSol} SOL`)
// 创建交易
const transaction = new Transaction()
const sendSolInstruction = SystemProgram.transfer({
fromPubkey: userAdd,
toPubkey:toAdd,
lamports: 50000000, // 0.05 SOL
});
transaction.add(sendSolInstruction);
let signature = await sendAndConfirmTransaction(devConnection, transaction, [
userKeypair,
]);
console.log(
`成功发送`
)
// 获取账户余额,confirmed参数,表示获取的状态是已被确定的、更新后的
myBalance = await devConnection.getBalance(userAdd,'confirmed')
toAddBalance = await devConnection.getBalance(toAdd,'confirmed')
// 转化成 SOL 数量
balanceInSol = myBalance / LAMPORTS_PER_SOL
toAddBalanceInSol = toAddBalance / LAMPORTS_PER_SOL
console.log(`发送方 ${userAdd} -- 余额更新为 ${balanceInSol} SOL`)
console.log(`接收方 ${toAdd} -- 余额更新为 ${toAddBalanceInSol} SOL`)
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!