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 "hesaplar" içinde 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));
Click to execute the code.

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

Mint Hesabını Getir

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

Bir Mint hesabı, Token Program tarafından sahiplenilen bir hesaptır. Belirli bir token için toplam arz, ondalık sayı miktarı ve token basma veya dondurma yetkisine sahip hesaplar dahil olmak üzere global meta verileri saklar. Mint hesabının 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);
Click to execute the code.

Mint Hesabını 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 verileriyle ç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");
Click to execute the code.

Is this page helpful?

İçindekiler

Sayfayı Düzenle