Solana ağından farklı hesapları çekerek veri okuyun. Bu bölüm Solana hesaplarının yapısını anlamanıza yardımcı olacaktır. Her Solana hesabının, zincir üzerindeki ilgili verisini bulmak için kullanılan benzersiz bir adresi vardır. Hesaplar ya durum verisi ya da çalıştırılabilir bir program içerir.
Bir cüzdan hesabını çekme
Bir cüzdan, System Program tarafından sahip olunan bir hesaptır. Cüzdanlar öncelikle SOL tutmak ve işlemleri imzalamak için kullanılır. SOL yeni bir adrese ilk kez gönderildiğinde, otomatik olarak bir sistem hesabı oluşturulur.
Aşağıdaki örnek, yeni bir keypair oluşturur, yeni oluşturulan genel anahtar adresini fonlamak için SOL talep eder ve yeni fonlanan cüzdan için hesap verilerini alır.
import { Keypair, Connection, LAMPORTS_PER_SOL } from "@solana/web3.js";const keypair = Keypair.generate();console.log(`Public Key: ${keypair.publicKey}`);const connection = new Connection("http://localhost:8899", "confirmed");// Funding an address with SOL automatically creates an accountconst signature = await connection.requestAirdrop(keypair.publicKey,LAMPORTS_PER_SOL);await connection.confirmTransaction(signature, "confirmed");const accountInfo = await connection.getAccountInfo(keypair.publicKey);console.log(JSON.stringify(accountInfo, null, 2));
Bir cüzdan hesabını çektiğinizde, yanıt sağdaki örnek çıktıda gösterilen alanları içerir.
data alanı, hesabın bayt olarak saklanan verilerini içerir. Cüzdan hesapları
için bu alan boştur (0 bayt).
executable alanı, hesabın data alanının çalıştırılabilir program kodu içerip
içermediğini gösterir. Cüzdan hesapları için bu alan false değerindedir.
lamports alanı, hesabın SOL bakiyesini
lamport cinsinden içerir.
owner alanı, hesabın sahibi olan programı gösterir. Cüzdanlar için sahip her
zaman 11111111111111111111111111111111 adresine sahip System Program'dır.
rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski
bir alandır. (Bu alan geriye dönük uyumluluk için dahil edilmiştir.)
space alanı, data alanında bulunan bayt sayısını gösterir. Bu,
Account türünün kendisinde bir alan
değildir, ancak yanıta dahil edilmiştir.
Bu örnekte, space alanı 0'dır çünkü data alanı 0 bayt veri içermektedir.
Token Program'ı getir
Aşağıdaki örnek, cüzdan ve program hesapları arasındaki farkı göstermek için Token Program'ı getirir. Program hesabı, Token Program'ın kaynak kodu için derlenmiş bayt kodunu saklar. Bu program hesabını Solana Explorer üzerinde görüntüleyebilirsiniz.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet.solana.com","confirmed");const address = new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");const accountInfo = await connection.getAccountInfo(address);
Token Program, çalıştırılabilir bir program hesabıdır. Programlar, tüm hesaplarla aynı temel alanlara sahiptir, ancak önemli farklılıklar vardır.
{"data": {"type": "Buffer","data": [127, "...truncated, total bytes: 134080...", 0]},"executable": true,"lamports": 4522329612,"owner": "BPFLoader2111111111111111111111111111111111","rentEpoch": 18446744073709552000,"space": 134080}
executable alanı true olarak ayarlanmıştır, bu da hesabın data alanının
çalıştırılabilir kod içerdiğini gösterir.
data alanı, programın çalıştırılabilir kodunu saklar.
Her program hesabı, kendi
yükleyici programına aittir. Bu örnekte,
owner BPFLoader2 programıdır.
Bir mint hesabını getirme
Bir mint account, Token Program tarafından sahiplenilen ve belirli bir token için global meta verileri saklayan bir hesaptır. Bu meta veriler toplam arz, ondalık sayı miktarı ve token basma veya dondurma yetkisine sahip hesapları içerir. Mint hesabının adresi, Solana ağındaki bir tokeni benzersiz şekilde tanımlar.
Aşağıdaki örnek, bir programın durumunun nasıl ayrı bir hesapta saklandığını göstermek için USD Coin Mint hesabını getirir.
import { Connection, PublicKey } from "@solana/web3.js";const connection = new Connection("https://api.mainnet.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const accountInfo = await connection.getAccountInfo(address);
Mint hesapları, çalıştırılabilir kod değil, durum bilgisi saklar. Bu hesaplar Token Program tarafından sahiplenilir ve bu program, mint hesaplarının nasıl oluşturulacağını ve güncelleneceğini tanımlayan talimatları içerir.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Mint hesabının data alanı çalıştırılabilir kod değil, durum bilgisi depolar,
bu nedenle executable alanı false değerindedir.
Token Program, data alanında depolanan Mint veri tipini tanımlar.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
data alanı, mint yetkisi, toplam arz, ondalık basamak sayısı gibi
serileştirilmiş Mint hesap durumunu içerir.
Bir mint hesabından okuma yapmak için data alanını Mint veri tipine
deserialize etmeniz gerekir, bu sonraki örnekte
gösterilmiştir.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Mint hesabı Token Program
tarafından sahiplenilir. Bu, data alanının yalnızca Token Program talimatları
tarafından değiştirilebileceği anlamına gelir.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Mint hesabını çözümleme
Bir hesabın data alanındaki ham baytlar anlamlı bir şekilde yorumlanmadan önce
deserialize edilmelidir. Uygun veri tipi, hesaba sahip olan program tarafından
tanımlanır. Çoğu Solana programı, deserializasyon sürecini soyutlayan yardımcı
fonksiyonlara sahip istemci kütüphaneleri sağlar. Bu fonksiyonlar, ham hesap
baytlarını yapılandırılmış veri tiplerine dönüştürerek hesap verileriyle
çalışmayı kolaylaştırır.
Örneğin, @solana/spl-token kütüphanesi, bir mint hesabının data
alanını Token Program tarafından tanımlanan
Mint
veri tipine deserialize etmeye yardımcı olan getMint()
fonksiyonunu içerir.
import { PublicKey, Connection } from "@solana/web3.js";import { getMint } from "@solana/spl-token";const connection = new Connection("https://api.mainnet.solana.com","confirmed");const address = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");const mintData = await getMint(connection, address, "confirmed");
pub struct Mint {/// Optional authority used to mint new tokens. The mint authority may only/// be provided during mint creation. If no mint authority is present/// then the mint has a fixed supply and no further tokens may be/// minted.pub mint_authority: COption<Pubkey>,/// Total supply of tokens.pub supply: u64,/// Number of base 10 digits to the right of the decimal place.pub decimals: u8,/// Is `true` if this structure has been initializedpub is_initialized: bool,/// Optional authority to freeze token accounts.pub freeze_authority: COption<Pubkey>,}
getMint() fonksiyonu, bir mint hesabının data alanını Mint hesap tipine
deserialize eder.
{"data": {"type": "Buffer","data": [1, "...truncated, total bytes: 82...", 103]},"executable": false,"lamports": 407438077149,"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA","rentEpoch": 18446744073709552000,"space": 82}
Tamamen çözümlenmiş mint hesabı verilerini Solana Explorer'da görüntüleyebilirsiniz.
address alanı, mint hesabının adresini içerir.
mintAuthority alanı, token'ın yeni birimlerini oluşturabilecek tek hesabı
gösterir.
supply alanı, basılmış olan toplam token sayısını gösterir. Bu değer, token'ın
en küçük birimi cinsinden ölçülür. Toplam arzı standart birimler cinsinden elde
etmek için supply alanının değerini decimals ile ayarlayın.
decimals alanı, token için ondalık basamak sayısını gösterir.
isInitialized alanı, mint hesabının başlatılıp başlatılmadığını gösterir. Bu
alan, Token Program'da kullanılan bir güvenlik kontrolüdür.
freezeAuthority alanı, token hesaplarını dondurma yetkisine sahip hesabı
gösterir. Dondurulmuş bir token hesabı, içerdiği token'ı transfer edemez veya
yakamaz.
tlvData alanı, Token Extensions için ekstra veri içerir ve daha fazla
deserializasyon gerektirir. Bu alan yalnızca
Token Extension Program (Token2022) tarafından
oluşturulan hesaplar için geçerlidir.
Is this page helpful?