Ana içeriğe geç

Mint Kapatma Yetkisi uzantısını nasıl kullanılır

Orijinal SPL token programında, Token Programı tarafından sahip olunan Mint Hesaplarını kapatma ve bu hesaplara ayrılmış SOL'u geri alma seçeneği yoktu.

MintCloseAuthority uzantısı, mint'in arzı 0 ise, belirlenen Kapatma Yetkisi'nin bir Mint Hesabını kapatmasına olanak tanıyarak bu sınırlamaya bir çözüm getirir. Bu özellik, artık kullanılmayan Mint Hesaplarına ayrılmış SOL'u geri almanın bir mekanizmasını sağlar.
— Dökümantasyon Özeti

Bu kılavuzda, Solana Playground kullanarak bir örnek üzerinden gideceğiz. İşte son script.

Başlarken

Aşağıdaki başlangıç kodu ile bu Solana Playground bağlantısını açın.

// Client
console.log("Benim adresim:", pg.wallet.publicKey.toString());
const balance = await pg.connection.getBalance(pg.wallet.publicKey);
console.log(`Benim bakiyem: ${balance / web3.LAMPORTS_PER_SOL} SOL`);

Eğer Solana Playground'u ilk kez kullanıyorsanız, önce bir Playground Cüzdanı oluşturmanız ve cüzdanı devnet SOL ile finanse etmeniz gerekecek.

bilgi

Eğer bir Playground cüzdanınız yoksa, editörde pg.wallet.publicKey ile yapılan tüm tanımlamalarda bir tür hatası görünebilir. Bu tür hatası, bir Playground cüzdanı oluşturduktan sonra kaybolacaktır.

Devnet SOL almak için, Playground'un terminalinde solana airdrop komutunu çalıştırın veya bu devnet musluğuna gidin.

solana airdrop 5

Playground cüzdanınızı oluşturup finanse ettikten sonra, başlangıç kodunu çalıştırmak için "Çalıştır" butonuna tıklayın.

Bağımlılıkları Ekle

Kscriptimizi oluşturmaya başlayalım. @solana/web3.js ve @solana/spl-token kütüphanelerini kullanacağız.

Başlangıç kodunu aşağıdaki ile değiştirin:

import {
Connection,
Keypair,
SystemProgram,
Transaction,
clusterApiUrl,
sendAndConfirmTransaction,
} from "@solana/web3.js";
import {
ExtensionType,
TOKEN_2022_PROGRAM_ID,
closeAccount,
createInitializeMintCloseAuthorityInstruction,
createInitializeMintInstruction,
getMintLen,
} from "@solana/spl-token";

// Playground cüzdanı
const payer = pg.wallet.keypair;

// Devnet kümesine bağlantı
const connection = new Connection(clusterApiUrl("devnet"), "confirmed");

// Gönderilen işlemden dönen işlem imzası
let transactionSignature: string;

Mint Ayarları

Öncelikle, bir sonraki adımda oluşturacağımız Mint Hesabının özelliklerini tanımlayalım.

// Mint Hesabı için yeni bir anahtar çiftini oluştur
const mintKeypair = Keypair.generate();
// Mint Hesabı için adres
const mint = mintKeypair.publicKey;
// Mint Hesabı için ondalık sayılar
const decimals = 2;
// Yeni token'lar mint edebilecek yetki
const mintAuthority = pg.wallet.publicKey;
// Mint Hesabını kapatabilecek yetki
const closeAuthority = pg.wallet.publicKey;

Sonra, yeni Mint Hesabı için gerekli olan boyutu belirleyelim ve kira muafiyeti için gereken minimum lamportları hesaplayalım.

// Uzantıya sahip Mint Hesabının boyutu
const mintLen = getMintLen([ExtensionType.MintCloseAuthority]);
// Mint Hesabı için gereken minimum lamport
const lamports = await connection.getMinimumBalanceForRentExemption(mintLen);

Token Uzantıları ile, Mint Hesabının boyutu etkinleştirilen uzantılara bağlı olarak değişecektir.

Talimatları Oluştur

Sonraki adımda, şunları yapmak için talimatlar setini oluşturalım:

  • Yeni bir hesap oluştur
  • MintCloseAuthority uzantısını başlat
  • Kalan Mint Hesabı verilerini başlat

Öncelikle, bir hesap oluşturmak için System Program'ı çağıran talimatı oluşturalım ve sahipliği Token Uzantıları Programı'na atayalım.

// Yeni bir hesap oluşturmak için System Program'ı çağıran talimat
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: payer.publicKey, // Lamportları oluşturulan hesaba transfer edecek hesap
newAccountPubkey: mint, // Oluşturulacak hesabın adresi
space: mintLen, // Oluşturulan hesap için ayrılacak bayt miktarı
lamports, // Oluşturulan hesaba transfer edilen lamport miktarı
programId: TOKEN_2022_PROGRAM_ID, // Oluşturulan hesabın sahibi olarak atanan program
});

Sonra, Mint Hesabı için MintCloseAuthority uzantısını başlatacak talimatı oluşturalım.

// MintCloseAuthority Uzantısını başlatma talimatı
const initializeMintCloseAuthorityInstruction =
createInitializeMintCloseAuthorityInstruction(
mint, // Mint Hesabı adresi
closeAuthority, // Belirlenen Kapatma Yetkisi
TOKEN_2022_PROGRAM_ID, // Token Uzantıları Program ID'si
);

Son olarak, Mint Hesabı verilerinin geri kalanını başlatma talimatını oluşturalım. Bu, orijinal Token Programı ile aynıdır.

// Mint Hesabı verilerini başlatma talimatı
const initializeMintInstruction = createInitializeMintInstruction(
mint, // Mint Hesabı Adresi
decimals, // Mint'in Ondalık Sayıları
mintAuthority, // Belirlenen Mint Yetkisi
null, // Opsiyonel Dondurma Yetkisi
TOKEN_2022_PROGRAM_ID, // Token Uzantıları Program ID'si
);

İşi Gönder

Sonraki adımda, talimatları yeni bir işleme ekleyelim ve ağına gönderelim. Bu, MintCloseAuthority uzantısı etkinleştirilmiş bir Mint Hesabı oluşturacaktır.

// Yeni işleme talimatları ekle
const transaction = new Transaction().add(
createAccountInstruction,
initializeMintCloseAuthorityInstruction,
initializeMintInstruction,
);

// İşlemi gönder
transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[payer, mintKeypair], // İmzacı
);

console.log(
"\nMint Hesabı Oluştur:",
`https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`,
);

Scripti Çalıştır butonuna tıklayarak çalıştırın. Ardından, işlem detaylarını SolanaFM'de inceleyebilirsiniz.

Mint Hesabını Kapat

MintCloseAuthority uzantısı etkinleştirildiğinde, Kapatma Yetkisi Mint Hesabını kapatarak hesaptan lamportları geri alabilir.

// Mint Hesabını kapatmak için işlemi gönder
transactionSignature = await closeAccount(
connection,
payer, // İşlem ücreti ödendi
mint, // Mint Hesabı adresi
payer.publicKey, // Kapatılan hesaptan lamportları alacak hesap
closeAuthority, // Mint Hesabı için Kapatma Yetkisi
undefined, // Ek imzacılar
undefined, // Onay seçenekleri
TOKEN_2022_PROGRAM_ID, // Token Uzantıları Program ID'si
);

console.log(
"\nMint Hesabını Kapat:",
`https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`,
);

Scripti Çalıştır butonuna tıklayarak çalıştırın. Ardından, işlem detaylarını SolanaFM'de inceleyebilirsiniz.

Sonuç

MintCloseAuthority uzantısı, geliştiricilerin Mint Hesabında kalıcı olarak kilitlenmiş olan SOL'u geri almasını sağlar. Bu özellik, yakılmak üzere tasarlanmış tek kullanımlık NFT'ler içeren uygulamalar veya oyunlar için özellikle yararlıdır. Kullanılmayan Mint Hesaplarına ayrılmış SOL'un geri alınmasını ve yeniden kullanılmasını sağlar.

tehlike

Bu uzantının yanlış kullanımı, gereksiz SOL kaybına yol açabilir. Uygulamaları dikkatli bir şekilde test etmek her zaman önemlidir.