Чтение из сети

В этом разделе рассматривается, как считывать данные из сети Solana, получая различные аккаунты, чтобы понять структуру аккаунта в Solana.

В Solana все данные хранятся в "аккаунтах". Вы можете представить данные в Solana как публичную базу данных с одной таблицей "Аккаунты", где каждая запись — это аккаунт с одинаковым базовым типом аккаунта.

АккаунтыАккаунты

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

Аккаунты в Solana содержат либо:

  • Состояние: Данные, предназначенные для чтения и сохранения. Например, информация о токенах, данные пользователей или другие данные, определенные в программе.
  • Исполняемые программы: Аккаунты, содержащие фактический код программ Solana. Эти аккаунты хранят инструкции, которые пользователи могут вызывать.

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

Получение аккаунта кошелька

Этот пример демонстрирует, как:

  1. Сгенерировать новую пару ключей (публичный/приватный ключ).
  2. Запросить airdrop 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

В этом примере извлекается аккаунт Mint для USD Coin (USDC), чтобы показать, как программы на Solana хранят состояние в отдельных аккаунтах.

Mint аккаунт — это аккаунт, принадлежащий Token Program. Он хранит глобальные метаданные для определённого токена, включая общий объём выпуска, количество десятичных знаков и аккаунты, уполномоченные выпускать или замораживать токены. Адрес аккаунта Mint уникально идентифицирует токен в сети 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

Поле data аккаунта Solana содержит необработанные байты. Чтобы интерпретировать эти данные осмысленно, необходимо десериализовать их в соответствующий тип данных, определённый программой, которой принадлежит аккаунт.

Большинство программ Solana предоставляют клиентские библиотеки с вспомогательными функциями, которые абстрагируют процесс десериализации. Эти функции преобразуют необработанные байты аккаунта в структурированные типы данных, что упрощает работу с данными аккаунта.

Например, @solana/spl-token включает функцию getMint(), которая помогает десериализовать поле data аккаунта Mint в тип данных 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?

Содержание

Редактировать страницу