Ağdan Okuma

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.

Fetch account
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 account
const 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));
Console
Click to execute the code.

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.

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.

Example output
{
"data": {
"type": "Buffer",
"data": []
},
"executable": false,
"lamports": 1000000000,
"owner": "11111111111111111111111111111111",
"rentEpoch": 0,
"space": 0
}

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.

Fetch program account
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);
Console
Click to execute the code.

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.

Token program account
{
"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.

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.

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.

Token program account
{
"data": {
"type": "Buffer",
"data": [127, "...truncated, total bytes: 134080...", 0]
},
"executable": true,
"lamports": 4522329612,
"owner": "BPFLoader2111111111111111111111111111111111",
"rentEpoch": 18446744073709552000,
"space": 134080
}

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.

Fetch program account
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);
Console
Click to execute the code.

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.

Mint account
{
"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.

Mint account
{
"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.

Mint account
{
"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.

Mint Account
{
"data": {
"type": "Buffer",
"data": [1, "...truncated, total bytes: 82...", 103]
},
"executable": false,
"lamports": 407438077149,
"owner": "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
"rentEpoch": 18446744073709552000,
"space": 82
}

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.

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 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.

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.

Mint account
{
"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.

Deserialize mint account data
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");
Console
Click to execute the code.
Mint account type
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 initialized
pub 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.

Mint account
{
"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.

getMint() fonksiyonu, bir mint hesabının data alanını Mint hesap tipine dönüştürür.

Mint account
{
"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.

Deserialized mint data
{
"address": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"mintAuthority": "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG",
"supply": "8985397351591790",
"decimals": 6,
"isInitialized": true,
"freezeAuthority": "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar",
"tlvData": {
"type": "Buffer",
"data": []
}
}

Is this page helpful?

İçindekiler

Sayfayı Düzenle

Yönetici

© 2025 Solana Vakfı.
Tüm hakları saklıdır.
Bağlanın