Визначення

Blockhash (хеш блоку) — це криптографічний відбиток (SHA-256) даних блоку в мережі Solana, який однозначно ідентифікує цей блок і всі транзакції всередині нього. Кожен блок має унікальний blockhash, а кожна транзакція в Solana обов'язково посилається на recent blockhash — хеш одного з недавніх блоків.

Як працює

Коли валідатор формує блок, він обчислює хеш від його вмісту: список транзакцій, попередній blockhash, часова мітка, стан лідерства тощо. Цей хеш стає ідентифікатором блоку.

У контексті транзакцій blockhash виконує дві ключові функції:

  • Запобігання повторному відправленню (replay attack). Транзакція прив'язується до конкретного blockhash. Якщо хтось спробує відправити ту саму транзакцію знову, мережа побачить, що вказаний blockhash вже не є «недавнім», і відхилить її.
  • Обмеження часу життя транзакції. У Solana зберігається черга з останніх blockhash (протоколом визначено розмір цієї черги). Якщо транзакція не потрапила в блок, поки її blockhash залишався актуальним, вона вважається недійсною і її треба відправити заново з новим recent blockhash.

Клієнт отримує актуальний recent blockhash через RPC-виклик getLatestBlockhash і підставляє його в транзакцію перед підписанням.

Приклад

Ви створюєте транзакцію переказу SOL. Перед підписанням ваш клієнт запитує в RPC-вузла останній blockhash і отримує, наприклад, значення EkSnNWid2cvwEVnVxk6PcZ6LdYfM3tGKtP5o3t5Y3oGz. Цей хеш вписується в поле recentBlockhash транзакції. Якщо мережа перевантажена й транзакція «зависне» на кілька слотів, blockhash застаріє — клієнт автоматично або вручну запитує новий хеш і перепідписує транзакцію.

Типова помилка

Використання застарілого blockhash. Розробники іноді кешують отриманий хеш і повторно використовують його для кількох транзакцій або для повторних спроб. У Solana blockhash стає недійсним швидко (протягом обмеженої кількості слотів). Якщо ви підписуєте транзакцію зі старим хешем, мережа її відхилить з помилкою BlockhashNotFound. Рішення — завжди отримувати свіжий recent blockhash безпосередньо перед формуванням кожної транзакції.

Пов'язані матеріали

Внутрішні переходи:

  • Slot — часове вікно, у якому формується блок і його blockhash
  • Rent (орендна плата) — механізм збереження стану, який також впливає на те, які дані потрапляють у блок