Ağdan Okuma

Farklı hesapları çekerek Solana ağından veri okuyun. Bu kılavuz, Solana hesaplarının yapısını açıklar. Her Solana hesabının, hesabın zincir üzerindeki verilerini bulmak için kullanılan benzersiz bir adresi vardır. Solana hesapları durum verisi veya çalıştırılabilir bir program içerir.

Bir cüzdan hesabını çekme

Bir cüzdan hesabı, System Program tarafından sahiplenilen bir hesaptır. Cüzdan hesapları öncelikle SOL tutmak ve işlemleri imzalamak için kullanılır. SOL bir adrese ilk kez gönderildiğinde, sistem hesabı otomatik olarak oluşturulur.

Aşağıdaki örnek, bir Kit istemcisi oluşturur, yeni bir imzalayıcı üretir, yeni adresi fonlamak için SOL talep eder ve istemcinin RPC API'sinden hesap verilerini alır.

Fetch account
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { solanaRpc, rpcAirdrop } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900"
})
)
.use(rpcAirdrop());
const signer = await generateKeyPairSigner();
console.log(`Address: ${signer.address}`);
// Funding an address with SOL automatically creates an account
await client.airdrop(signer.address, lamports(1_000_000_000n));
const accountInfo = await client.rpc.getAccountInfo(signer.address).send();
console.log(accountInfo);
Console
Click to execute the code.

getAccountInfo() ile bir cüzdan hesabı çektiğinizde, Kit sağ taraftaki örnek çıktıda gösterilen RPC yanıtını döndürür.

Yanıt iki üst düzey alan içerir: context okumanın ne zaman gerçekleştiğini açıklar, value ise RPC yöntemi tarafından döndürülen hesap alanlarını içerir.

context alanı, hesabı okumak için kullanılan slot ile yanıtı sunan RPC API sürümünü gösterir. Sonraki bir okuma farklı bir slot veya API sürümü döndürebilir.

value alanı, RPC yöntemi tarafından döndürülen hesap durumunu içerir. Aşağıdaki adımlar, value içindeki alanları göründükleri sırayla ele almaktadır.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

lamports alanı, hesabın SOL bakiyesini, SOL'un en küçük birimi olan lamport cinsinden içerir.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

data alanı, hesapta bayt olarak depolanan verileri içerir. RPC, hesap verilerini bir demet olarak döndürür: kodlanmış veri dizisi ve ardından kodlama türü. Cüzdan hesapları için, hesap 0 bayt veri depoladığından kodlanmış veri dizisi boştur.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

owner alanı, hesabın sahibi olan programı gösterir. Cüzdanlar için sahip her zaman System Program'dır ve adresi 11111111111111111111111111111111'dir.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

executable alanı, hesabın adresinin çağrılabilir olup olmadığını belirtir. true, adresin talimatları işleyebilen bir programı temsil ettiği anlamına gelir. false, hesabın bir cüzdan bakiyesi veya hesap verisi gibi durum depoladığı ve program olarak çağrılmadığı anlamına gelir. Cüzdan hesapları false kullanır.

rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski bir alandır. Alan, geriye dönük uyumluluk için hâlâ döndürülmektedir.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

space alanı, data alanında bulunan bayt sayısını gösterir. space alanı, hesap getirme yanıtıyla birlikte döndürülür; ancak hesabın veri türünün bir parçası değildir.

Cüzdan hesabı örneğinde, data alanı 0 bayt veri içerdiğinden space alanı 0'dır.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

getAccountInfo() ile bir cüzdan hesabı çektiğinizde, Kit sağ taraftaki örnek çıktıda gösterilen RPC yanıtını döndürür.

Yanıt iki üst düzey alan içerir: context okumanın ne zaman gerçekleştiğini açıklar, value ise RPC yöntemi tarafından döndürülen hesap alanlarını içerir.

context alanı, hesabı okumak için kullanılan slot ile yanıtı sunan RPC API sürümünü gösterir. Sonraki bir okuma farklı bir slot veya API sürümü döndürebilir.

value alanı, RPC yöntemi tarafından döndürülen hesap durumunu içerir. Aşağıdaki adımlar, value içindeki alanları göründükleri sırayla ele almaktadır.

lamports alanı, hesabın SOL bakiyesini, SOL'un en küçük birimi olan lamport cinsinden içerir.

data alanı, hesapta bayt olarak depolanan verileri içerir. RPC, hesap verilerini bir demet olarak döndürür: kodlanmış veri dizisi ve ardından kodlama türü. Cüzdan hesapları için, hesap 0 bayt veri depoladığından kodlanmış veri dizisi boştur.

owner alanı, hesabın sahibi olan programı gösterir. Cüzdanlar için sahip her zaman System Program'dır ve adresi 11111111111111111111111111111111'dir.

executable alanı, hesabın adresinin çağrılabilir olup olmadığını belirtir. true, adresin talimatları işleyebilen bir programı temsil ettiği anlamına gelir. false, hesabın bir cüzdan bakiyesi veya hesap verisi gibi durum depoladığı ve program olarak çağrılmadığı anlamına gelir. Cüzdan hesapları false kullanır.

rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski bir alandır. Alan, geriye dönük uyumluluk için hâlâ döndürülmektedir.

space alanı, data alanında bulunan bayt sayısını gösterir. space alanı, hesap getirme yanıtıyla birlikte döndürülür; ancak hesabın veri türünün bir parçası değildir.

Cüzdan hesabı örneğinde, data alanı 0 bayt veri içerdiğinden space alanı 0'dır.

Example output
{
context: {
slot: 420602714n,
apiVersion: "3.1.6"
},
value: {
lamports: 1000000000n,
data: ["", "base64"],
owner: "11111111111111111111111111111111",
executable: false,
rentEpoch: 0n,
space: 0n
}
}

Token Program'ı Getir

Aşağıdaki örnek, cüzdan ve program hesapları arasındaki farkı göstermek için Token Program'ı getirir. Token Program, token oluşturma ve transfer etme gibi tokenlarla çalışmaya yönelik talimatları tanımlar. Programlar, talimatları işlemek için çağrılır. Token verileri ve bakiyeler gibi program durumu, programa ait ayrı hesaplarda saklanır.

Token Program'ın adresi, zincir üzerindeki Program hesabıdır. Basitlik açısından, program adresini programın kendisi olarak düşünebilirsiniz; zira bu adres programı çağırmak için kullanılır. Yükseltilebilir programlar için Program hesabı, üst veri depolar ve dağıtılan yürütülebilir kodu barındıran ayrı bir ProgramData hesabına işaret eder. Token Program'ın kaynak kodunu ve Program hesabını Solana Explorer üzerinde görüntüleyebilirsiniz.

Fetch program account
import { address, createClient, fetchJsonParsedAccount } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const tokenProgramAddress = address(
"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"
);
const accountInfo = await client.rpc
.getAccountInfo(tokenProgramAddress, {
encoding: "base64"
})
.send();
console.log(accountInfo);
const parsedAccount = await fetchJsonParsedAccount(
client.rpc,
tokenProgramAddress
);
console.log(parsedAccount);
Console
Click to execute the code.

Token Program, yürütülebilir bir program hesabıdır. Programlar, tüm hesaplar ile aynı temel alanlara sahiptir; ancak bazı önemli farklılıklar içerir.

Token Program örneği, Program hesabının ham verilerini döndürmek için base64 kodlamasını kullanır.

Aşağıdaki adımlar, value içindeki alanları, alanların göründüğü sırayla ele almaktadır.

data alanı, BPF Yükseltilebilir Yükleyici'nin Program hesabı durumunu depolar. İlk tuple öğesi, tam hesap verisini base64 olarak kodlanmış biçimde içerir. İkinci tuple öğesi kodlamayı tanımlar. Burada 36 bayt, üst veri ile ProgramData hesabı adresini kapsar.

Yükseltilebilir programlar için Program hesabı durumu, programın yürütülebilir kodunu barındıran ayrı ProgramData hesabına işaret eder.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

executable alanı true olarak ayarlanmıştır; bu, hesabın adresinin bir program olarak çağrılabileceğini gösterir.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

lamports alanı, Program account tarafından tutulan SOL bakiyesini içerir. Program account'ların rent-exempt kalabilmek için yeterli miktarda lamport'a ihtiyacı vardır.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Her program account, bir loader program tarafından sahiplenilir. Token Program account için owner, BPF Upgradeable Loader'dır.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski bir alandır. Geriye dönük uyumluluk için alan döndürülmeye devam etmektedir.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

space alanı, Program account verilerinin bayt cinsinden tam boyutunu gösterir. space değeri yalnızca 36 bayttır; çünkü Program account, derlenmiş programın tamamını değil, loader meta verilerini ve ProgramData account adresini depolar.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Önceki yanıt, Program account'ın data alanını base64 tuple olarak döndürdü. Ayrıştırılmış yanıt, bu baytları data nesnesindeki adlandırılmış alanlara dönüştürür. programData alanı, yürütülebilir program kodunu depolayan ProgramData account'ın adresini içerir.

Parsed Token program account
{
executable: true,
lamports: 43712780n,
programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",
space: 36n,
address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
data: {
programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",
parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }
},
exists: true
}

Token Program, yürütülebilir bir program hesabıdır. Programlar, tüm hesaplar ile aynı temel alanlara sahiptir; ancak bazı önemli farklılıklar içerir.

Token Program örneği, Program hesabının ham verilerini döndürmek için base64 kodlamasını kullanır.

Aşağıdaki adımlar, value içindeki alanları, alanların göründüğü sırayla ele almaktadır.

data alanı, BPF Yükseltilebilir Yükleyici'nin Program hesabı durumunu depolar. İlk tuple öğesi, tam hesap verisini base64 olarak kodlanmış biçimde içerir. İkinci tuple öğesi kodlamayı tanımlar. Burada 36 bayt, üst veri ile ProgramData hesabı adresini kapsar.

Yükseltilebilir programlar için Program hesabı durumu, programın yürütülebilir kodunu barındıran ayrı ProgramData hesabına işaret eder.

executable alanı true olarak ayarlanmıştır; bu, hesabın adresinin bir program olarak çağrılabileceğini gösterir.

lamports alanı, Program account tarafından tutulan SOL bakiyesini içerir. Program account'ların rent-exempt kalabilmek için yeterli miktarda lamport'a ihtiyacı vardır.

Her program account, bir loader program tarafından sahiplenilir. Token Program account için owner, BPF Upgradeable Loader'dır.

rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski bir alandır. Geriye dönük uyumluluk için alan döndürülmeye devam etmektedir.

space alanı, Program account verilerinin bayt cinsinden tam boyutunu gösterir. space değeri yalnızca 36 bayttır; çünkü Program account, derlenmiş programın tamamını değil, loader meta verilerini ve ProgramData account adresini depolar.

Önceki yanıt, Program account'ın data alanını base64 tuple olarak döndürdü. Ayrıştırılmış yanıt, bu baytları data nesnesindeki adlandırılmış alanlara dönüştürür. programData alanı, yürütülebilir program kodunu depolayan ProgramData account'ın adresini içerir.

Token program account
{
context: {
apiVersion: "3.1.14",
slot: 420601581n
},
value: {
data: ["AgAAACfxkLHTr5i4znFMROjK3/n4/EXLjl+sQgLv+BENl903", "base64"],
executable: true,
lamports: 2191440n,
owner: "BPFLoaderUpgradeab1e11111111111111111111111",
rentEpoch: 18446744073709551615n,
space: 36n
}
}

Bir mint account getir

Bir mint account, belirli bir token için genel meta verileri depolayan ve Token Program tarafından sahip olunan bir hesaptır. mint account, tokenın toplam arzını, ondalık basamak sayısını, mint yetkisini ve dondurma yetkisini saklar. mint account'ın adresi, Solana ağında bir tokeni benzersiz şekilde tanımlar.

Aşağıdaki örnek, bir programın durumunun ayrı bir hesapta nasıl depolandığını göstermek amacıyla USD Coin mint account'ını getirir. Kesin bakiye ve arz değerleri, RPC düğümünüzün okuduğu slot'a bağlı olarak farklılık gösterebilir.

Fetch mint account
import { address, createClient } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const accountInfo = await client.rpc
.getAccountInfo(mintAddress, {
encoding: "base64"
})
.send();
console.log(accountInfo);
Console
Click to execute the code.

mint account'lar çalıştırılabilir kod değil, durum depolar. mint account'lar, mint account'ların nasıl oluşturulacağını ve güncelleneceğini tanımlayan talimatları içeren Token Program tarafından sahiplenilir.

Aşağıdaki adımlar, value içindeki alanları göründükleri sırayla açıklamaktadır.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

data alanı, serileştirilmiş Mint hesap durumunu içerir. Birinci demet öğesi, base64 olarak kodlanmış tam 82 baytlık hesap verisini içerir. İkinci demet öğesi ise kodlamayı tanımlar.

Bir mint account'tan okumak için data alanını Mint veri türüne seri dışı bırakmanız gerekir; bu işlem sonraki örnekte gösterilmektedir.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

executable alanı, hesabın bir program olarak çağrılıp çağrılamayacağını belirtir. mint account'lar durum depoladığından, executable alanı false değerindedir.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

lamports alanı, mint account tarafından tutulan SOL bakiyesini içerir. lamport değeri, token arzını değil, mint account'ın kira muafiyeti bakiyesini temsil eder.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

mint account, Token Program tarafından sahiplenilmektedir. mint account'un data alanı yalnızca Token Program'ın talimatlarıyla değiştirilebilir.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski bir alandır. Alan, geriye dönük uyumluluk için hâlâ döndürülmektedir.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

space alanı, mint account'un 82 bayt veri içerdiğini gösterir.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

mint account'lar çalıştırılabilir kod değil, durum depolar. mint account'lar, mint account'ların nasıl oluşturulacağını ve güncelleneceğini tanımlayan talimatları içeren Token Program tarafından sahiplenilir.

Aşağıdaki adımlar, value içindeki alanları göründükleri sırayla açıklamaktadır.

data alanı, serileştirilmiş Mint hesap durumunu içerir. Birinci demet öğesi, base64 olarak kodlanmış tam 82 baytlık hesap verisini içerir. İkinci demet öğesi ise kodlamayı tanımlar.

Bir mint account'tan okumak için data alanını Mint veri türüne seri dışı bırakmanız gerekir; bu işlem sonraki örnekte gösterilmektedir.

executable alanı, hesabın bir program olarak çağrılıp çağrılamayacağını belirtir. mint account'lar durum depoladığından, executable alanı false değerindedir.

lamports alanı, mint account tarafından tutulan SOL bakiyesini içerir. lamport değeri, token arzını değil, mint account'ın kira muafiyeti bakiyesini temsil eder.

mint account, Token Program tarafından sahiplenilmektedir. mint account'un data alanı yalnızca Token Program'ın talimatlarıyla değiştirilebilir.

rentEpoch alanı, kullanımdan kaldırılmış bir rent mekanizmasından kalan eski bir alandır. Alan, geriye dönük uyumluluk için hâlâ döndürülmektedir.

space alanı, mint account'un 82 bayt veri içerdiğini gösterir.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Mint account'u Seri Dışı Bırakma

Hesap verileri, data alanında serileştirilmiş biçimde depolanır. Bu verileri supply veya decimals gibi alanlar olarak okumak için data alanını, sahibi olan program tarafından tanımlanan hesap türüne seri dışı bırakmanız gerekir. Solana programlarının büyük çoğunluğu, bu adım için yardımcı fonksiyonlar içeren istemci kütüphaneleri sağlar. Bu yardımcılar, yapılandırılmış hesap verisi döndürerek sonuçla çalışmayı kolaylaştırır.

Örneğin, @solana-program/token kütüphanesi, bir mint account'u getirmek ve mint account'un data alanını Token Program tarafından tanımlanan Mint veri türüne seri dışı bırakmak için fetchMint() fonksiyonunu içerir.

Deserialize mint account data
import { address, createClient } from "@solana/kit";
import { solanaRpc } from "@solana/kit-plugin-rpc";
import { generatedPayer } from "@solana/kit-plugin-signer";
import { fetchMint } from "@solana-program/token";
const client = await createClient()
.use(generatedPayer())
.use(
solanaRpc({
rpcUrl: "https://api.mainnet.solana.com"
})
);
const mintAddress = address("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const mint = await fetchMint(client.rpc, mintAddress);
console.log(mint);
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>,
}

fetchMint() fonksiyonu bir mint account'u getirir ve mint account'un data alanını Mint hesap türüne seri dışı bırakır.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Solana Explorer'da tamamen seri durumdan çıkarılmış mint account verilerini görüntüleyebilirsiniz.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

address alanı, mint account adresini içerir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

data alanı, seri durumdan çıkarılmış Mint hesap durumunu içerir. data içindeki iç içe alanlar, Token Program'ın Mint hesap türünden gelir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

data.mintAuthority alanı, tokenın yeni birimlerini oluşturabilecek tек hesabı gösterir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

supply alanı, basılmış toplam token sayısını gösterir. Arz değeri, 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 değerine göre ayarlayın.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

decimals alanı, token için ondalık basamak sayısını gösterir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

isInitialized alanı, mint account'un başlatılıp başlatılmadığını gösterir. isInitialized alanı, Token Program'da kullanılan bir güvenlik denetimidir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

data.freezeAuthority alanı, token accounts'ları dondurma yetkisine sahip hesabı gösterir. token account, bir sahibin token birimlerini depolayan ayrı bir hesaptır. Dondurulduğunda, token account token bakiyesini transfer edemez veya yakamaz.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

executable alanı false değerindedir. USDC mint account token durumunu depolar; bu nedenle USDC mint account bir program olarak çağrılamaz.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

lamports alanı, mint account tarafından tutulan SOL bakiyesini içerir. lamports değeri, token arzı değil, mint account'ın kira muafiyeti bakiyesidir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

programAddress alanı, mint account'ın sahibi olan programı gösterir. USDC için sahip program Token Program'dır. Bir hesabın data alanını yalnızca o hesabın sahibi olan program, kendi dağıtılmış talimatları aracılığıyla değiştirebilir.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

space alanı, orijinal mint account verisinin bayt cinsinden boyutunu gösterir. Token Program'ın temel Mint hesabı 82 bayttır.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

fetchMint() fonksiyonu bir mint account'u getirir ve mint account'un data alanını Mint hesap türüne seri dışı bırakır.

Mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Solana Explorer'da tamamen seri durumdan çıkarılmış mint account verilerini görüntüleyebilirsiniz.

address alanı, mint account adresini içerir.

data alanı, seri durumdan çıkarılmış Mint hesap durumunu içerir. data içindeki iç içe alanlar, Token Program'ın Mint hesap türünden gelir.

data.mintAuthority alanı, tokenın yeni birimlerini oluşturabilecek tек hesabı gösterir.

supply alanı, basılmış toplam token sayısını gösterir. Arz değeri, 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 değerine göre ayarlayın.

decimals alanı, token için ondalık basamak sayısını gösterir.

isInitialized alanı, mint account'un başlatılıp başlatılmadığını gösterir. isInitialized alanı, Token Program'da kullanılan bir güvenlik denetimidir.

data.freezeAuthority alanı, token accounts'ları dondurma yetkisine sahip hesabı gösterir. token account, bir sahibin token birimlerini depolayan ayrı bir hesaptır. Dondurulduğunda, token account token bakiyesini transfer edemez veya yakamaz.

executable alanı false değerindedir. USDC mint account token durumunu depolar; bu nedenle USDC mint account bir program olarak çağrılamaz.

lamports alanı, mint account tarafından tutulan SOL bakiyesini içerir. lamports değeri, token arzı değil, mint account'ın kira muafiyeti bakiyesidir.

programAddress alanı, mint account'ın sahibi olan programı gösterir. USDC için sahip program Token Program'dır. Bir hesabın data alanını yalnızca o hesabın sahibi olan program, kendi dağıtılmış talimatları aracılığıyla değiştirebilir.

space alanı, orijinal mint account verisinin bayt cinsinden boyutunu gösterir. Token Program'ın temel Mint hesabı 82 bayttır.

Decoded mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Serileştirilmiş ve seriden çıkarılmış çıktı

Her iki örnek de aynı USDC mint account'ı okur. İlk yanıt, data alanını serileştirilmiş halde bırakır. mint account'ın içeriğini okumak için bu veriyi, sahip olan program tarafından tanımlanan hesap türü olarak çözümleyin. Bir mint account için Token Program, sağ tarafta gösterilen Mint türünü tanımlar.

Kodu çözmeden önce, data alanı serileştirilmiş hesap verilerini içerir.

Serialized mint account
{
context: {
slot: 325000000n,
apiVersion: "3.1.14"
},
value: {
data: [
"AQAAAJj+huiNm+Lqi8HMpIeLKYjCQPUrhCS/tA7Rot3LXhmbbq9O2SvsHwAGAQEAAABicKqKWcWUBbRShshncubNEm6bil06OFNtN/e0FOi2Zw==",
"base64"
],
executable: false,
lamports: 407438077149n,
owner: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
rentEpoch: 18446744073709551615n,
space: 82n
}
}

Veri Mint olarak çözüldükten sonra, data alanı adlandırılmış hesap alanlarını içerir.

Deserialized mint account
{
address: "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
data: {
mintAuthority: {
__option: "Some",
value: "BJE5MMbqXjVwjAF7oxwPYXnTXDyspzZyt4vwenNw5ruG"
},
supply: 8985397351591790n,
decimals: 6,
isInitialized: true,
freezeAuthority: {
__option: "Some",
value: "7dGbd2QZcCKcTndnHcTL8q7SMVXAkp688NTQYwrRCrar"
}
},
executable: false,
lamports: 407438077149n,
programAddress: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",
space: 82n
}

Is this page helpful?

İçindekiler

Sayfayı Düzenle
© 2026 Solana Vakfı. Tüm hakları saklıdır.