問題一覧に戻る
中級Solanaプログラミング基礎
問題24: トークンの作成
Token Extensions Program(Token-2022)を使用して新しいトークンを作成する方法を学びます。mintアカウントを作成し、小数点以下の桁数や権限などのパラメータで初期化し、新しいToken-2022プログラムを使用します。レント免除額の計算、アカウントの作成、mintの初期化を1つのトランザクションで実行する必要があります。
import {
Connection,
Keypair,
SystemProgram,
Transaction,
sendAndConfirmTransaction,
LAMPORTS_PER_SOL
} from "@solana/web3.js";
import {
MINT_SIZE,
TOKEN_2022_PROGRAM_ID,
createInitializeMint2Instruction,
getMinimumBalanceForRentExemptMint,
getMint
} from "@solana/spl-token";
const connection = new Connection("http://localhost:8899", "confirmed");
const wallet = new Keypair();
// ウォレットにSOLを供給
const signature = await connection.requestAirdrop(
wallet.publicKey,
);
await connection.confirmTransaction(signature, "confirmed");
// mintアカウントのアドレスとして使用するキーペアを生成
const mint = new Keypair();
// レント免除に必要なlamportsを計算
const rentExemptionLamports =
await (connection);
// 新しいmintアカウント用のスペースを持つアカウントを作成するinstruction
const createAccountInstruction = SystemProgram.({
fromPubkey: wallet.publicKey,
newAccountPubkey: mint.publicKey,
space: ,
lamports: ,
programId:
});
// mintアカウントを初期化するinstruction
const initializeMintInstruction = (
mint.publicKey,
2, // decimals
wallet.publicKey, // mint authority
wallet.publicKey, // freeze authority
);
// 新しいアカウントを作成してmintアカウントを初期化するinstructionでトランザクションを構築
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintInstruction
);
const transactionSignature = await (
connection,
transaction,
[
, // payer
// mint address keypair
]
);
console.log("Transaction Signature:", `${transactionSignature}`);
const mintData = await (
connection,
mint.publicKey,
"confirmed",
);
console.log(
"Mint Account:",
JSON.stringify(
mintData,
(key, value) => {
// Convert BigInt to String
if (typeof value === "bigint") {
return value.toString();
}
// Handle Buffer objects
if (Buffer.isBuffer(value)) {
return `<Buffer ${value.toString("hex")}>`;
}
return value;
},
2
)
);