Typescript
Token2022 với Web3.js

Token2022 với Web3.js

Immutable Owner Extension

Phần mở rộng ImmutableOwner là một Token account extension ngăn chặn bất kỳ thay đổi nào trong quyền sở hữu của Token account. Điều này bảo vệ account chống lại truy cập trái phép và các nỗ lực transfer.

Tất cả ATA của Token Extensions Program đều có immutable owner được bật theo mặc định

Khởi tạo Token Account

Để khởi tạo extension ImmutableOwner trên Token account, chúng ta sẽ cần hàm initializeImmutableOwner().

Đây là cách tạo mint với phần mở rộng Immutable Owner:

import {
    Keypair,
    SystemProgram,
    Transaction,
    sendAndConfirmTransaction,
} from '@solana/web3.js';
import {
    createInitializeAccountInstruction,
    createInitializeImmutableOwnerInstruction,
    getAccountLen,
    ExtensionType,
    TOKEN_2022_PROGRAM_ID,
} from '@solana/spl-token';
 
const tokenAccount = Keypair.generate();
 
// Calculate the size needed for a Token account with Transfer Fee extension
const accountLen = getAccountLen([ExtensionType.ImmutableOwner]);
 
// Calculate minimum lamports required for rent exemption
const lamports = await connection.getMinimumBalanceForRentExemption(accountLen);
 
// Create the account with the correct size and owner
const createAccountInstruction = SystemProgram.createAccount({
    fromPubkey: keypair.publicKey,
    newAccountPubkey: tokenAccount.publicKey,
    space: accountLen,
    lamports,
    programId: TOKEN_2022_PROGRAM_ID,
});
 
// Initialize the Immutable Owner extension
const initializeImmutableOwnerInstruction = createInitializeImmutableOwnerInstruction(
    tokenAccount.publicKey,
    TOKEN_2022_PROGRAM_ID,
);
 
// Initialize the Token account itself
const initializeAccountInstruction = createInitializeAccountInstruction(
    tokenAccount.publicKey,
    mint.publicKey,
    keypair.publicKey,
    TOKEN_2022_PROGRAM_ID,
);
 
const transaction = new Transaction().add(
    createAccountInstruction,
    initializeImmutableOwnerInstruction,
    initializeAccountInstruction,
);
 
const signature = await sendAndConfirmTransaction(connection, transaction, [keypair, tokenAccount], {skipPreflight: false});
 
console.log(`Token accounts created! Check out your TX here: https://explorer.solana.com/tx/${signature}?cluster=devnet`);

Như đã được đề cập, nếu chúng ta muốn thêm phần mở rộng này vào một account Associated Token, chúng ta chỉ cần khởi tạo nó với chương trình Token2022.

Nội dung
Xem mã nguồn
Blueshift © 2025Commit: f7a03c2