Поширені структури даних 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?