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.
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 accountawait client.airdrop(signer.address, lamports(1_000_000_000n));const accountInfo = await client.rpc.getAccountInfo(signer.address).send();console.log(accountInfo);
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.
{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.
{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.
{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.
{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.
{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.
{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.
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);
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.
{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.
{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.
{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.
{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.
{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.
{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.
{executable: true,lamports: 43712780n,programAddress: "BPFLoaderUpgradeab1e11111111111111111111111",space: 36n,address: "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA",data: {programData: "3gvYRKWyXRR9xKWe1ZjPhLY5ZJRN7KDB4rFZFGoJfFk2",parsedAccountMeta: { program: "bpf-upgradeable-loader", type: "program" }},exists: true}
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.
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);
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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
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);
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>,}
fetchMint() fonksiyonu bir mint account'u getirir ve mint account'un
data alanını Mint hesap türüne seri dışı bırakır.
{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: "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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
{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.
{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?