Ağdan okuma

Bu bölüm, farklı hesapları alarak Solana ağından veri okumayı ve bir Solana hesabının yapısını anlamayı inceliyor.

Solana'da tüm veriler "hesaplarda" bulunur. Solana'daki verileri, her girişin aynı temel Hesap türüne sahip bir hesap olduğu tek bir "Hesaplar" tablosu içeren genel bir veritabanı olarak düşünebilirsiniz.

HesaplarHesaplar

Solana'daki hesaplar "durum" veya "çalıştırılabilir" programlar saklayabilir. Her hesabın, ilgili zincir üstü verisini bulmak için kullanılan benzersiz kimliği görevi gören bir "adresi" (genel anahtar) vardır.

Solana hesapları şunları içerir:

  • Durum: Okunması ve kalıcı olması amaçlanan veriler. Örneğin, tokenlar hakkında bilgiler, kullanıcı verileri veya bir program içinde tanımlanan diğer veriler.
  • Çalıştırılabilir Programlar: Solana programlarının gerçek kodunu içeren hesaplar. Bu hesaplar, kullanıcıların çağırabileceği talimatları saklar.

Program kodu ve program durumunun bu şekilde ayrılması, Solana'nın Hesap Modelinin önemli bir özelliğidir. Daha fazla ayrıntı için Solana Hesap Modeli sayfasına bakın.

Cüzdan hesabını alma

Bu örnek şunları nasıl yapacağınızı gösterir:

  1. Yeni bir keypair (genel/özel anahtar çifti) oluşturma.
  2. Yeni adresi fonlamak için SOL airdrop'u talep etme.
  3. Fonlanan adres için hesap verilerini alma.

Solana'da, yeni bir adresi SOL ile fonlamak otomatik olarak System Program tarafından sahip olunan bir hesap oluşturur. Tüm "cüzdan" hesapları, basitçe SOL tutan ve işlemleri imzalayabilen System Program'a ait hesaplardı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));

Token Program'ı getir

Bu örnek, cüzdan ve program hesapları arasındaki farkı göstermek için Token Program'ı 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("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA");
const accountInfo = await connection.getAccountInfo(address);
Console
Click to execute the code.

Mint Account'u getir

Bu örnek, Solana'daki programların durumu nasıl ayrı hesaplarda sakladığını göstermek için USD Coin (USDC) mint account'unu getirir.

Bir Mint account, Token Program tarafından sahiplenilen bir hesap türüdür. Belirli bir token için toplam arz, ondalık sayı miktarı ve token basma veya dondurma yetkisine sahip hesaplar gibi global meta verileri saklar. Mint account'un adresi, Solana ağındaki bir tokeni benzersiz şekilde tanımlar.

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 Account'u Deserialize Et

Bir Solana hesabının data alanı ham baytlar içerir. Bu veriyi anlamlı bir şekilde yorumlamak için, hesabın sahibi olan program tarafından tanımlanan uygun veri türüne deserialize etmeniz gerekir.

Çoğu Solana programı, deserializasyon sürecini soyutlayan yardımcı fonksiyonlar içeren istemci kütüphaneleri sağlar. Bu fonksiyonlar, ham hesap baytlarını yapılandırılmış veri türlerine dönüştürerek hesap verisiyle çalışmayı kolaylaştırır.

Örneğin, @solana/spl-token bir Mint hesabının data alanını Mint veri tipine dönüştürmeye 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.

Is this page helpful?

İçindekiler

Sayfayı Düzenle