区块链日记4- Solana入门 - 写入网络

官方英文文档:https://solana.com/zh/docs/intro/quick-start/writing-to-network

1.在账户之间转移 SOL

从账户之间转移 SOL 的简单示例开始。转移 SOL,您需要调用 System Program 的 转移 指令。

Solana 账户模型的一个关键概念要求只有拥有 账户可以扣除账户的 lamport (SOL) 余额。这意味着如果你愿意 要从钱包账户转移 SOL,您必须调用系统程序,因为 它显示为 Program owner (程序所有者) 在 所有者 字段。

点击此链接可在 Solana Playground 中打开示例。您将看到以下代码:

import {
  LAMPORTS_PER_SOL,
  SystemProgram,
  Transaction,
  sendAndConfirmTransaction,
  Keypair,
} from "@solana/web3.js";

//将您的 Playground 钱包设置为发送者
const sender = pg.wallet.keypair;

//创建一个新的密钥对作为接收方
const receiver = new Keypair();

//构建转账指令以转账 0.01 SOL
const transferInstruction = SystemProgram.transfer({
  fromPubkey: sender.publicKey,
  toPubkey: receiver.publicKey,
  lamports: 0.01 * LAMPORTS_PER_SOL,
});

//构建一个包含转账指令的交易
const transaction = new Transaction().add(transferInstruction);

//发送并确认交易
const transactionSignature = await sendAndConfirmTransaction(
  pg.connection,
  transaction,
  [sender],
);

//在 Playground 终端中打印出指向 SolanaFM 资源管理器的链接以查看交易详情
console.log(
  "Transaction Signature:",
  `https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`,
);

Running client...

client.ts:

Transaction Signature: https://solana.fm/tx/he9dBwrEPhrfrx2BaX4cUmUbY22DEyqZ837zrGrFRnYEBmKhCb5SvoaUeRKSeLFXiGxC8hFY5eDbHqSJ7NYYo42?cluster=devnet-solana

点击输出链接,在 SolanaFM 浏览器上查看交易详情。

2.创建新令牌Token

使用系统程序创建新帐户;使用令牌扩展程序将帐户的数据初始化为 Mint

(首先一些解释一下模糊的概念:)

Mint是什么意思?

答:在Solana开发中,“Mint”通常指的是创建新的代币或NFT(非同质化代币)的过程。具体来说,Minting是指在区块链上生成新的代币,并将其分配给特定的地址。

 点击此链接可在 Solana Playground 中打开示例。您将看到以下代码:

import {
  Connection,
  Keypair,
  SystemProgram,
  Transaction,
  clusterApiUrl,
  sendAndConfirmTransaction,
} from "@solana/web3.js";
import {
  MINT_SIZE,
  TOKEN_2022_PROGRAM_ID,
  createInitializeMint2Instruction,
  getMinimumBalanceForRentExemptMint,
} from "@solana/spl-token";

//获取您的 Playground 钱包并创建与 Solana 开发网的连接
const wallet = pg.wallet;
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");

//生成一个新的密钥对,用作 Mint 账户的地址
// Generate keypair to use as address of mint account
const mint = new Keypair();

//计算 Mint 账户所需的 lamports
// Calculate lamports for space required by mint account
const rentLamports = await getMinimumBalanceForRentExemptMint(connection);

//构建一个 System Program 指令以创建新帐户。
// Instruction to create new account with space for new mint account
const createAccountInstruction = SystemProgram.createAccount({
  fromPubkey: wallet.publicKey,
  newAccountPubkey: mint.publicKey, //从钱包转账 lamports 为新账户注资
  space: MINT_SIZE, //分配存储 mint 数据所需的空间
  lamports: rentLamports,
  programId: TOKEN_2022_PROGRAM_ID, //将帐户的所有权分配给令牌扩展程序 (TOKEN_2022_PROGRAM_ID)
});

//构造一个 Token Extensions Program 指令来初始化 Mint 账户数据
// Instruction to initialize mint account
const initializeMintInstruction = createInitializeMint2Instruction(
  mint.publicKey,
  2, // decimals
  wallet.publicKey, // mint authority
  wallet.publicKey, // freeze authority
  TOKEN_2022_PROGRAM_ID
);

//将两个指令添加到单个事务中
// Build transaction with instructions to create new account and initialize mint account
const transaction = new Transaction().add(
  createAccountInstruction,
  initializeMintInstruction
);

//发送并确认交易,并要求两个签名者 :
const transactionSignature = await sendAndConfirmTransaction(
  connection,
  transaction,
  [
    wallet.keypair, // payer  //用于支付账户创建和交易费用的钱包密钥对
    mint, // mint address keypair  //mint 密钥对,用于使用其公钥作为账户地址创建新账户
  ]
);

//打印出链接以查看 SolanaFM 上的交易和铸造账户详细信息
console.log(
  "\nTransaction Signature:",
  `https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`
);

console.log(
  "\nMint Account:",
  `https://solana.fm/address/${mint.publicKey}?cluster=devnet-solana`
);

Running client...

client.ts:

Transaction Signature: https://solana.fm/tx/3BEjFxqyGwHXWSrEBnc7vTSaXUGDJFY1Zr6L9iwLrjH8KBZdJSucoMrFUEJgWrWVRYzrFvbjX8TmxKUV88oKr86g?cluster=devnet-solana

Mint Account: https://solana.fm/address/CoZ3Nz488rmATDhy1hPk5fvwSZaipCngvf8rYBYVc4jN?cluster=devnet-solana

 

(经过上面一通操作,已经完成了创建新令牌token,但怎么用,是否可以随意发币设置数量等 还需要后面进一步学习!) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值