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 depolanan 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'dir.
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 System Program'dır ve adresi 11111111111111111111111111111111
şeklindedir.
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ıtta yer alır.
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-beta.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ı tarafından
sahiplenilir. 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-beta.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 yüzden executable alanı false olarak ayarlanmıştır.
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 sayı gibi serileştirilmiş Mint
hesap durumunu içerir.
Bir Mint hesabından okuma yapmak için, data alanını Mint veri tipine
çözümlemeniz gerekir, bu bir 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'ın
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
çözümlenmelidir. Uygun veri tipi, hesabın sahibi olan program tarafından
tanımlanır. Çoğu Solana programı, çözümleme sürecini soyutlayan yardımcı
fonksiyonlarla birlikte 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 çözümlemeye 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-beta.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
dönüştürür.
{"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şturabilen 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. Standart birimlerdeki toplam arzı 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 account'larını dondurma yetkisine sahip hesabı
gösterir. Dondurulmuş bir token account, içerdiği tokeni transfer edemez veya
yakamaz.
tlvData alanı, Token Extensions için ekstra veri içerir ve daha fazla
çözümleme gerektirir. Bu alan yalnızca
Token Extension Program (Token2022) tarafından
oluşturulan hesaplar için geçerlidir.
Is this page helpful?