Читання з мережі

У цьому розділі розглядається, як читати дані з мережі Solana шляхом отримання різних рахунків для розуміння структури рахунку Solana.

У Solana всі дані існують у "рахунках". Ви можете уявити дані в Solana як публічну базу даних з єдиною таблицею "Рахунки", де кожен запис є рахунком з однаковим базовим типом рахунку.

РахункиРахунки

Рахунки в Solana можуть зберігати "стан" або "виконувані" програми. Кожен рахунок має "адресу" (публічний ключ), яка служить його унікальним ідентифікатором для пошуку відповідних даних у блокчейні.

Рахунки Solana містять:

  • Стан: Дані, які призначені для читання та зберігання. Наприклад, інформація про токени, дані користувача або інші дані, визначені в програмі.
  • Виконувані програми: Рахунки, що містять фактичний код програм Solana. Ці рахунки зберігають інструкції, які користувачі можуть викликати.

Це розділення програмного коду та стану програми є ключовою особливістю моделі рахунків Solana. Для отримання додаткової інформації зверніться до сторінки Модель рахунків Solana.

Отримання рахунку гаманця

Цей приклад демонструє, як:

  1. Згенерувати нову пару ключів (пару публічного/приватного ключів).
  2. Запросити аirdrop SOL для фінансування нової адреси.
  3. Отримати дані рахунку для профінансованої адреси.

У Solana фінансування нової адреси за допомогою SOL автоматично створює рахунок, яким володіє System Program. Усі рахунки "гаманців" — це просто рахунки, якими володіє System Program, що містять SOL і можуть підписувати транзакції.

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

Отримання Token Program

Цей приклад отримує Token Program, щоб продемонструвати різницю між обліковими записами гаманців та програм.

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

Цей приклад отримує Mint account USD Coin (USDC), щоб показати, як програми на Solana зберігають стан в окремих акаунтах.

Mint account — це акаунт, яким володіє Token Program. Він зберігає глобальні метадані для конкретного токена, включаючи загальну пропозицію, кількість десяткових знаків та акаунти, уповноважені карбувати або заморожувати токени. Адреса mint account унікально ідентифікує токен у мережі Solana.

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

Поле data акаунта Solana містить необроблені байти. Щоб змістовно інтерпретувати ці дані, вам потрібно десеріалізувати їх у відповідний тип даних, визначений програмою, яка володіє акаунтом.

Більшість програм Solana надають клієнтські бібліотеки з допоміжними функціями, які абстрагують процес десеріалізації. Ці функції перетворюють необроблені байти акаунта в структуровані типи даних, полегшуючи роботу з даними акаунта.

Наприклад, @solana/spl-token включає функцію getMint() для допомоги з десеріалізацією поля data mint account у тип даних Mint.

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?

Зміст

Редагувати сторінку