Поширені структури даних JSON для методів Solana RPC
Різні методи Solana RPC повертають складніші відповіді у вигляді структурованих JSON об'єктів, заповнених конкретними значеннями з ключами.
Найпоширеніші з цих структур даних JSON включають:
Транзакції
Транзакції в Solana суттєво відрізняються від транзакцій в інших блокчейнах. Обов'язково ознайомтеся з Анатомією транзакції, щоб дізнатися про транзакції в Solana.
JSON
JSON-структура транзакції визначається наступним чином:
message: <object>
- Визначає вміст транзакції.accountKeys: <array[string]>
- Список публічних ключів у кодуванні base-58, які використовуються у транзакції, включаючи інструкції та підписи. Першіmessage.header.numRequiredSignatures
публічних ключів повинні підписати транзакцію.header: <object>
- Деталізує типи облікових записів та підписи, необхідні для транзакції.numRequiredSignatures: <number>
- Загальна кількість підписів, необхідних для того, щоб транзакція була дійсною. Підписи повинні відповідати першимnumRequiredSignatures
зmessage.accountKeys
.numReadonlySignedAccounts: <number>
- ОстанніnumReadonlySignedAccounts
з підписаних ключів є обліковими записами лише для читання. Програми можуть обробляти кілька транзакцій, які завантажують облікові записи лише для читання в межах одного запису PoH, але не мають права кредитувати або дебетувати лампорти або змінювати дані облікового запису. Транзакції, що націлені на той самий обліковий запис для читання-запису, оцінюються послідовно.numReadonlyUnsignedAccounts: <number>
- ОстанніnumReadonlyUnsignedAccounts
з непідписаних ключів є обліковими записами лише для читання.
recentBlockhash: <string>
- Хеш нещодавнього блоку в леджері у кодуванні base-58, який використовується для запобігання дублюванню транзакцій та для надання транзакціям терміну дії.instructions: <array[object]>
- Список програмних інструкцій, які будуть виконані послідовно та зафіксовані в одній атомарній транзакції, якщо всі будуть успішними.programIdIndex: <number>
- Індекс у масивіmessage.accountKeys
, що вказує на обліковий запис програми, яка виконує цю інструкцію.accounts: <array[number]>
- Список упорядкованих індексів у масивіmessage.accountKeys
, що вказують, які облікові записи передати програмі.data: <string>
- Вхідні дані програми, закодовані в рядку base-58.
addressTableLookups: <array[object]|undefined>
- Список пошуків у таблиці адрес, які використовуються транзакцією для динамічного завантаження адрес з таблиць пошуку адрес у мережі. Не визначено, якщоmaxSupportedTransactionVersion
не встановлено.accountKey: <string>
- Публічний ключ у кодуванні base-58 для облікового запису таблиці пошуку адрес.writableIndexes: <array[number]>
- Список індексів, що використовуються для завантаження адрес облікових записів з можливістю запису з таблиці пошуку.readonlyIndexes: <array[number]>
- Список індексів, що використовуються для завантаження адрес облікових записів лише для читання з таблиці пошуку.
signatures: <array[string]>
- Список підписів у кодуванні base-58, застосованих до транзакції. Список завжди має довжинуmessage.header.numRequiredSignatures
і не є порожнім. Підпис з індексомi
відповідає публічному ключу з індексомi
уmessage.accountKeys
. Перший використовується як ідентифікатор транзакції.
JSON розібраний
Розібрана JSON-структура транзакції має подібну структуру до звичайного JSON-формату, з додатковим розбором інформації про рахунки та інструкції:
message: <object>
- Визначає вміст транзакції.accountKeys: <array[object]>
- Список інформації про рахунки, що використовуються транзакцією.pubkey: <string>
- Публічний ключ рахунку, закодований у base-58.signer: <boolean>
- Вказує, чи є рахунок обов'язковим підписантом транзакції.writable: <boolean>
- Вказує, чи є рахунок доступним для запису.source: <string>
- Джерело рахунку (транзакція або таблиця пошуку).
recentBlockhash: <string>
- Закодований у base-58 хеш нещодавнього блоку в реєстрі, який використовується для запобігання дублюванню транзакцій та для встановлення терміну дії транзакцій.instructions: <array[object]>
- Список розібраних програмних інструкцій.program: <string>
- Назва програми, яка викликається.programId: <string>
- Публічний ключ програми, закодований у base-58.stackHeight: <number|null>
- Висота стеку інструкції.parsed: <object>
- Специфічні для програми розібрані дані.type: <string>
- Тип інструкції (наприклад, "transfer").info: <object>
- Розібрана інформація про інструкцію, специфічна для програми та типу інструкції.
signatures: <array[string]>
- Список підписів, закодованих у base-58, застосованих до транзакції.
Метадані статусу транзакції
err: <object|null>
- Помилка, якщо транзакція не вдалася, null, якщо транзакція успішна. Визначення TransactionErrorfee: <u64>
- комісія, яку було стягнуто за цю транзакцію, як ціле число u64preBalances: <array>
- масив балансів рахунків u64 до обробки транзакціїpostBalances: <array>
- масив балансів рахунків u64 після обробки транзакціїinnerInstructions: <array|null>
- Список внутрішніх інструкцій абоnull
, якщо запис внутрішніх інструкцій не був увімкнений під час цієї транзакціїpreTokenBalances: <array|undefined>
- Список балансів токенів до обробки транзакції або пропущено, якщо запис балансів токенів ще не був увімкнений під час цієї транзакціїpostTokenBalances: <array|undefined>
- Список балансів токенів після обробки транзакції або пропущено, якщо запис балансів токенів ще не був увімкнений під час цієї транзакціїlogMessages: <array|null>
- масив рядків повідомлень журналу абоnull
, якщо запис повідомлень журналу не був увімкнений під час цієї транзакціїrewards: <array|null>
- винагороди на рівні транзакції; масив JSON-об'єктів, що містять:pubkey: <string>
- Публічний ключ рахунку, який отримав винагороду, як рядок, закодований у base-58lamports: <i64>
- кількість lamport винагороди, зарахованих або списаних з рахунку, як i64postBalance: <u64>
- баланс рахунку в lamport після застосування винагородиrewardType: <string|undefined>
- тип винагороди: "fee", "rent", "voting", "staking"commission: <u8|undefined>
- комісія рахунку голосування, коли винагороду було зараховано, присутня лише для винагород за голосування та стейкінг
- ЗАСТАРІЛО:
status: <object>
- Статус транзакції"Ok": <null>
- Транзакція успішна"Err": <ERR>
- Транзакція не вдалася з помилкою TransactionError
loadedAddresses: <object|undefined>
- Адреси транзакцій, завантажені з таблиць пошуку адрес. Не визначено, якщоmaxSupportedTransactionVersion
не встановлено в параметрах запиту, або якщо в параметрах запиту встановлено кодуванняjsonParsed
.writable: <array[string]>
- Впорядкований список адрес, закодованих у base-58, для завантажених рахунків з можливістю записуreadonly: <array[string]>
- Впорядкований список адрес, закодованих у base-58, для завантажених рахунків лише для читання
returnData: <object|undefined>
- найновіші дані повернення, згенеровані інструкцією в транзакції, з такими полями:programId: <string>
- програма, яка згенерувала дані повернення, як Pubkey, закодований у base-58data: <[string, encoding]>
- самі дані повернення, як бінарні дані, закодовані в base-64
computeUnitsConsumed: <u64|undefined>
- кількість обчислювальних одиниць, спожитих транзакцієюversion: <"legacy"|number|undefined>
- Версія транзакції. Не визначено, якщоmaxSupportedTransactionVersion
не встановлено в параметрах запиту.signatures: <array>
- присутній, якщо для деталей транзакції запитуються "signatures"; масив рядків підписів, що відповідають порядку транзакцій у блоці
Внутрішні інструкції
Середовище виконання Solana записує міжпрограмні інструкції, які викликаються під час обробки транзакцій, і робить їх доступними для більшої прозорості того, що було виконано в мережі для кожної інструкції транзакції. Викликані інструкції групуються за початковою інструкцією транзакції та перераховуються в порядку обробки.
JSON-структура внутрішніх інструкцій визначається як список об'єктів у наступній структурі:
index: number
- Індекс інструкції транзакції, з якої походять внутрішні інструкціїinstructions: <array[object]>
- Впорядкований список внутрішніх програмних інструкцій, які були викликані під час однієї інструкції транзакції.programIdIndex: <number>
- Індекс у масивіmessage.accountKeys
, що вказує на програмний акаунт, який виконує цю інструкцію.accounts: <array[number]>
- Список впорядкованих індексів у масивіmessage.accountKeys
, що вказує, які акаунти передати програмі.data: <string>
- Вхідні дані програми, закодовані у рядку base-58.
Баланси токенів
JSON-структура балансів токенів визначається як список об'єктів у наступній структурі:
accountIndex: <number>
- Індекс акаунта, для якого надається баланс токена.mint: <string>
- Pubkey емісії токена.owner: <string|undefined>
- Pubkey власника балансу токена.programId: <string|undefined>
- Pubkey програми Token, яка володіє акаунтом.uiTokenAmount: <object>
-amount: <string>
- Необроблена кількість токенів у вигляді рядка, без урахування десяткових знаків.decimals: <number>
- Кількість десяткових знаків, налаштованих для емісії токена.uiAmount: <number|null>
- Кількість токенів як число з плаваючою комою, з урахуванням десяткових знаків. ЗАСТАРІЛОuiAmountString: <string>
- Кількість токенів як рядок, з урахуванням десяткових знаків.
Is this page helpful?