Поширені структури даних 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, якщо транзакція успішна. Визначення TransactionError
  • fee: <u64> - комісія, яку було стягнуто за цю транзакцію, як ціле число u64
  • preBalances: <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-58
    • lamports: <i64>- кількість lamport винагороди, зарахованих або списаних з рахунку, як i64
    • postBalance: <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-58
    • data: <[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?

Зміст

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