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.
Hesaplar
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:
- Yeni bir keypair (genel/özel anahtar çifti) oluşturma.
- Yeni adresi fonlamak için SOL airdrop'u talep etme.
- 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.
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 accountconst 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.
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);
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.
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);
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.
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");
Is this page helpful?