К основному содержанию
T TON Adoption
← Словарь
NODE/03 · Term

txid (transaction hash)

Хеш транзакции в TON: SHA-256 от сериализованного содержимого. Уникальный идентификатор для эксплореров и API; формат — 64 hex-символа или 44-символьная base64-url-строка.

Синонимы: tx-id, tx hash, transaction hash, хеш транзакции

txid (transaction hash) — SHA-256-хеш сериализованного содержимого транзакции в TON, уникально идентифицирующий её во всей сети. Формат: 64 hex-символа (abc123...) или 44-символьный base64-url (AbC...=).

Где увидеть

  • Tonviewer: https://tonviewer.com/transaction/<txid> — все фазы (compute, action, storage) и итоговая семантика операции.
  • Tonscan: https://tonscan.org/tx/<txid> — аналогично, более «сырой» вид.
  • API (toncenter, tonapi) возвращают txid вместе с lt и utime.

txid vs хеш сообщения

Часто путают: хеш сообщения ≠ хеш транзакции. Транзакция содержит входящее сообщение, выполнение и порождает исходящие сообщения. У каждого свой хеш. Для отслеживания пользовательской операции обычно нужен txid + lt того аккаунта, который запустил цепочку.

Форматы и взаимное преобразование

Один и тот же txid может быть представлен в двух кодировках, и эксплореры/API принимают обе:

  • hex (64 символа): 9f5b...c1 — каноничный вид, идёт из BoC напрямую.
  • base64-url (44 символа): n1tA...wQ= — короче, удобно в URL, использует TON Connect.

В JavaScript конверсия одной строкой:

const hex = Buffer.from(base64url, 'base64url').toString('hex');
const back = Buffer.from(hex, 'hex').toString('base64url');

В Python через base64.urlsafe_b64decode / binascii.hexlify. Если эксплорер «не находит» транзакцию по hash — попробуйте подставить альтернативную кодировку.

Как получить txid после отправки

В @ton/ton после walletContract.sendTransfer() сам метод возвращает только future-семантику; txid появляется позже, когда транзакция реально включена в блок. Стандартный паттерн — поллить аккаунт по lt и матчить outgoing-сообщение:

const before = await client.getLastTransaction(wallet.address);
await wallet.sendTransfer({ seqno, secretKey, messages });
// опрашиваем 30s, ищем новую транзакцию с lt > before.lt
const tx = await waitForTransaction(client, wallet.address, before.lt);
console.log('txid:', tx.hash().toString('hex'));

Troubleshooting: «txid не найден»

Самые частые причины:

  • Шард ещё не закоммитил блок — финальность 5-6 секунд, эксплорер может отставать на 10-15 секунд.
  • Сообщение в очереди, транзакция не выполнена — внутри TON между sendBoc и реальным включением проходит до 10 секунд. До этого момента txid физически ещё не существует.
  • Неверная кодировка hash — см. выше про hex ↔ base64-url.
  • Аккаунт указан неверно — на эксплорерах поиск по hash ищет по конкретному аккаунту; используйте полнотекстовый поиск или tonviewer.com/transaction/<hash> напрямую.

Cell-hash, message-hash, tx-hash

Все три — SHA-256, но от разных структур:

  • cell-hash — хеш Cell-структуры (универсальная единица BoC).
  • message-hash — хеш сериализованного Message X, идёт в out_msgs транзакции.
  • tx-hash (txid) — хеш всей транзакции вместе с описанием фаз.

Для inbound-операций пользователь обычно знает только message-hash (его подписал кошелёк); чтобы найти соответствующую транзакцию — нужно матчить через lt + dst в API.

См. также