Faiz Getiren uzantıyı nasıl kullanabilirsiniz
InterestBearingConfig
uzantısı, geliştiricilerin doğrudan Mint Hesabı üzerinde depolanan bir faiz oranı belirlemelerine olanak tanır. Faiz, ağın zaman damgasına dayalı olarak sürekli olarak bileşik faiz şeklinde hesaplanır.
Önemli Not:
Başka bir deyişle, biriken faiz, sadece görsel bir UI dönüştürmesi olup, altında yatan token miktarı değişmez. Bu tasarım, biriken faizi ayarlamak için sık sık yeniden temellendirme veya güncelleme işlemleri yapma gereğini ortadan kaldırır.
— Token Uzantıları Kılavuzu
Faiz Hesaplama Notları
Faiz birikiminin sadece bir hesaplama olduğunu ve yeni tokenlerin basılmasını içermediğini unutmayın.
Bu kılavuzda, Solana Playground'u kullanma örneğini inceleyeceğiz. İşte son script.
Başlarken
Başlamak için, aşağıdaki başlangıç koduyla bu Solana Playground bağlantısını açın.
// Client
console.log("Adresim:", pg.wallet.publicKey.toString());
const balance = await pg.connection.getBalance(pg.wallet.publicKey);
console.log(`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 fonlamanız gerekecek.
Eğer bir Playground cüzdanınız yoksa, pg.wallet.publicKey
olan tüm beyanlarda bir tip hatası görebilirsiniz. Bu tip hatası, bir Playground cüzdanı oluşturduktan sonra silinecektir.
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ı oluşturup fonladıktan sonra, başlangıç kodunu çalıştırmak için "Çalıştır" butonuna tıklayın.
Bağımlılıkları Ekle
Script'imizi ayarlamaya 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,
updateRateInterestBearingMint,
createInitializeInterestBearingMintInstruction,
createInitializeMintInstruction,
getMintLen,
TOKEN_2022_PROGRAM_ID,
amountToUiAmount,
getInterestBearingMintConfigState,
getMint,
} 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 Ayarı
Öncelikle, bir sonraki adımda oluşturacağımız Mint Hesabı'nın özelliklerini tanımlayalım.
// Mint Hesabı için yeni bir anahtar çifti 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 tokenleri basabilen otorite
const mintAuthority = pg.wallet.publicKey;
// Faiz oranını güncelleyebilen otorite
const rateAuthority = pg.wallet.keypair;
// Faiz oranı baz puanları (100 = %1)
// Maksimum değer = 32,767 (i16)
const rate = 32_767;
Sonra, yeni Mint Hesabı'nın boyutunu belirleyelim ve kiralama muafiyeti için gereken minimum lamportları hesaplayalım.
// Uzantı ile birlikte Mint Hesabı boyutu
const mintLen = getMintLen([ExtensionType.InterestBearingConfig]);
// Mint Hesabı için gereken minimum lamport
const lamports = await connection.getMinimumBalanceForRentExemption(mintLen);
Token Uzantıları ile birlikte, Mint Hesabı'nın boyutu etkin olan uzantılara göre değişecektir.
Talimatları Oluştur
Sonraki adımda, yeni bir hesap oluşturma, InterestBearingConfig
uzantısını başlatma ve kalan Mint Hesabı verilerini başlatma talimatları setini oluşturalım.
Öncelikle, bir hesap oluşturmak ve sahipliği Token Uzantıları Programı'na atamak için Sistem Programı'nı çağıracak talimatı oluşturalım.
// Yeni hesap oluşturmak için Sistem Programı'nı çağıracak talimat
const createAccountInstruction = SystemProgram.createAccount({
fromPubkey: payer.publicKey, // Lamportları oluşturulan hesaba aktaracak hesap
newAccountPubkey: mint, // Oluşturulacak hesap adresi
space: mintLen, // Oluşturulan hesap için ayrılacak bayt miktarı
lamports, // Oluşturulan hesaba aktarılacak lamport miktarı
programId: TOKEN_2022_PROGRAM_ID, // Oluşturulan hesabın sahibi olarak atanan program
});
Sonraki adımda, Mint Hesabı için InterestBearingConfig
uzantısını başlatacak talimatı oluşturalım.
// InterestBearingConfig Uzantısını başlatmak için talimat
const initializeInterestBearingMintInstruction =
createInitializeInterestBearingMintInstruction(
mint, // Mint Hesabı adresi
rateAuthority.publicKey, // Belirlenen Faiz Otoritesi
rate, // Faiz oranı baz puanları
TOKEN_2022_PROGRAM_ID, // Token Uzantı Programı ID'si
);
Son olarak, Mint Hesabı verilerinin geri kalanını başlatacak talimatı oluşturalım. Bu, orijinal Token Programı ile aynıdır.
// Mint Hesabı verilerini başlatmak için talimat
const initializeMintInstruction = createInitializeMintInstruction(
mint, // Mint Hesabı Adresi
decimals, // Mint'in Ondalık Sayıları
mintAuthority, // Belirlenen Mint Yetkilisi
null, // Opsiyonel Dondurma Yetkilisi
TOKEN_2022_PROGRAM_ID, // Token Uzantı Programı ID'si
);
İşlem Gönder
Sonraki adımda, talimatları yeni bir işleme ekleyip ağına göndereceğiz. Bu, InterestBearingConfig
uzantısı etkin olan bir Mint Hesabı oluşturacaktır.
// Yeni işleme talimatları ekle
const transaction = new Transaction().add(
createAccountInstruction,
initializeInterestBearingMintInstruction,
initializeMintInstruction,
);
// İşlemi gönder
transactionSignature = await sendAndConfirmTransaction(
connection,
transaction,
[payer, mintKeypair], // İmzacıları
);
console.log(
"\nMint Hesabı Oluştur:",
`https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`,
);
Script'i çalıştırmak için Çalıştır
butonuna tıklayın. Daha sonra, SolanaFM'de işlem detaylarını inceleyebilirsiniz.
Faiz Oranını Güncelle
Belirlenen Faiz Otoritesi, istediği zaman Mint Hesabı üzerindeki faiz oranını güncelleyebilir.
// Baz puanlardaki yeni faiz oranı
const updateRate = 0;
// Mint Hesabı üzerindeki faiz oranını güncelle
transactionSignature = await updateRateInterestBearingMint(
connection,
payer, // İşlem ücreti ödeyeni
mint, // Mint Hesabı Adresi
rateAuthority, // Belirlenen Faiz Otoritesi
updateRate, // Yeni faiz oranı
undefined, // Ek imzacı
undefined, // Onay seçenekleri
TOKEN_2022_PROGRAM_ID, // Token Uzantı Programı ID'si
);
console.log(
"\nOranı Güncelle:",
`https://solana.fm/tx/${transactionSignature}?cluster=devnet-solana`,
);
Faiz Konfigürasyon Durumunu Getir
Sonraki adımda, Mint Hesabı verilerini alarak güncellenmiş faiz oranını kontrol edelim.
// Mint Hesabı verilerini getir
const mintAccount = await getMint(
connection,
mint, // Mint Hesabı Adresi
undefined, // Opsiyonel taahhüt
TOKEN_2022_PROGRAM_ID, // Token Uzantı Programı ID'si
);
// Mint Hesabı için Faiz Konfigürasyonunu Al
const interestBearingMintConfig = await getInterestBearingMintConfigState(
mintAccount, // Mint Hesabı verileri
);
console.log(
"\nMint Konfigürasyonu:",
JSON.stringify(interestBearingMintConfig, null, 2),
);
Biriken Faizi Hesapla
Son olarak, belirli bir miktar için biriken faizi hesaplayalım. Bu hesaplama, token basımına ihtiyaç duymadan herhangi bir miktar için bağımsız olarak gerçekleştirilebilir.
// 1 saniye bekle
sleep(1000);
// Dönüştürülecek miktar
const amount = 100;
// Biriken faiz ile birlikte miktarı UI miktarına dönüştür
const uiAmount = await amountToUiAmount(
connection, // Solana kümesine bağlantı
payer, // İşlem için lamportları aktaracak hesap
mint, // Mint hesabının adresi
amount, // Dönüştürülecek miktar
TOKEN_2022_PROGRAM_ID, // Token Uzantı Programı ID'si
);
console.log("\nBiriken Faiz ile Miktar:", uiAmount);
Script'i çalıştırmak için Çalıştır
butonuna tıklayın. Daha sonra, SolanaFM'de işlem detaylarını inceleyebilir ve Playground terminalinde kaydedilen verileri görüntüleyebilirsiniz.
Faiz, ağın zaman damgasına dayalı olarak sürekli olarak bileşik faiz şeklinde hesaplanır. Ağ zaman damgasında oluşabilecek kayma nedeniyle, biriken faiz beklenen değerden daha düşük olabilir. Neyse ki, bu nadirdir.
Aşağıdaki kesite benzer bir çıktı görmelisiniz; burada ondalık değerler biriken faizi gösterir:
Mint Konfigürasyonu: {
"rateAuthority": "3z9vL1zjN6qyAFHhHQdWYRTFAcy69pJydkZmSFBKHg1R",
"initializationTimestamp": 1702321738,
"preUpdateAverageRate": 32767,
"lastUpdateTimestamp": 1702321740,
"currentRate": 0
}
Biriken Faiz ile Miktar: 1.000000207670422
Sonuç
InterestBearingConfig
uzantısı, tokenlerin zamanla değer kazanmasını veya kaybetmesini sağlamak için basit bir mekanizma sunar. Geleneksel finans alanında yaygın olarak bulunan araçları sorunsuz bir şekilde entegre ederek, bu yenilik Solana'nın yeteneklerini genişleterek geleneksel finansal araçlarla blockchain dünyası arasında köprü kurmaktadır.