Перейти к основному содержимому

Структура транзакции

warning

Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.

к сведению

Чтобы максимально полно понять эту страницу, настоятельно рекомендуется ознакомиться с языком TL-B.

Блокчейн TON работает с использованием трех ключевых частей: учетных записей, сообщений и транзакций. На этой странице описывается структура и схема транзакций.

Транзакция — это операция, которая обрабатывает входящие и исходящие сообщения, связанные с конкретным аккаунтом, изменяя его состояние и потенциально генерируя комиссии для валидаторов.

Транзакция

transaction$0111 account_addr:bits256 lt:uint64
prev_trans_hash:bits256 prev_trans_lt:uint64 now:uint32
outmsg_cnt:uint15
orig_status:AccountStatus end_status:AccountStatus
^[ in_msg:(Maybe ^(Message Any)) out_msgs:(HashmapE 15 ^(Message Any)) ]
total_fees:CurrencyCollection state_update:^(HASH_UPDATE Account)
description:^TransactionDescr = Transaction;
ПолеТипОбязательноеОписание
account_addrbits256ДаХэш-часть адреса, по которому была выполнена транзакция. Подробнее об адресах
ltuint64ДаПредставляет Логическое время. Подробнее о логическом времени
prev_trans_hashbits256ДаХэш предыдущей транзакции в этой учетной записи.
prev_trans_ltuint64Даlt предыдущей транзакции в этой учетной записи.
nowuint32ДаЗначение now, которое было установлено при выполнении этой транзакции. Это временная метка Unix в секундах.
outmsg_cntuint15ДаКоличество исходящих сообщений, созданных при выполнении этой транзакции.
orig_statusAccountStatusДаСостояние этой учетной записи до выполнения транзакции.
end_statusAccountStatusДаСостояние этого аккаунта после выполнения транзакции.
in_msg(Любое сообщение)НетВходящее сообщение, которое инициировало выполнение транзакции. Хранится в ссылке.
out_msgsHashmapE 15 ^(Любое сообщение)ДаСловарь, содержащий список исходящих сообщений, которые были созданы при выполнении этой транзакции.
total_feesCurrencyCollectionДаОбщая сумма сборов, которые были собраны при выполнении этой транзакции. Она состоит из значения Toncoin и, возможно, некоторых дополнительных валют.
state_updateHASH_UPDATE АккаунтДаСтруктура HASH_UPDATE. Хранится в ссылке.
descriptionTransactionDescrДаПодробное описание процесса выполнения транзакции. Хранится в ссылке.

AccountStatus

acc_state_uninit$00 = AccountStatus;
acc_state_frozen$01 = AccountStatus;
acc_state_active$10 = AccountStatus;
acc_state_nonexist$11 = AccountStatus;
  • [00]: Аккаунт не инициализирован
  • [01]: Аккаунт заморожен
  • [10]: Аккаунт активен
  • [11]: Аккаунт не существует

HASH_UPDATE

update_hashes#72 {X:Type} old_hash:bits256 new_hash:bits256
= HASH_UPDATE X;
ПолеТипОписание
old_hashbits256Хэш состояния аккаунта до выполнения транзакции.
new_hashbits256Хэш состояния аккаунта после выполнения транзакции.

Типы TransactionDescr

Обычный

Это наиболее распространенный тип транзакции, и он удовлетворяет потребности большинства разработчиков. Транзакции этого типа имеют ровно одно входящее сообщение и могут создавать несколько исходящих сообщений.

trans_ord$0000 credit_first:Bool
storage_ph:(Maybe TrStoragePhase)
credit_ph:(Maybe TrCreditPhase)
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool bounce:(Maybe TrBouncePhase)
destroyed:Bool
= TransactionDescr;
ПолеТипОбязательноеОписание
credit_firstBoolДаФлаг, который соответствует флагу bounce входящего сообщения. credit_first = !bounce
storage_phTrStoragePhaseНетСодержит информацию о фазе хранения при выполнении транзакции. Подробнее
credit_phTrCreditPhaseНетСодержит информацию о фазе кредита при выполнении транзакции. Подробнее
compute_phTrComputePhaseДаСодержит информацию о фазе вычисления при выполнении транзакции. Подробнее
actionTrActionPhaseНетСодержит информацию о фазе действия при выполнении транзакции. Подробнее. Хранится в ссылке.
abortedBoolДаУказывает, было ли прервано выполнение транзакции.
bounceTrBouncePhaseНетСодержит информацию о фазе отказа при выполнении транзакции. Подробнее
destroyedBoolДаУказывает, была ли уничтожена учетная запись во время выполнения.

Storage

Транзакции этого типа могут быть введены валидаторами по их усмотрению. Они не обрабатывают входящие сообщения и не вызывают код. Их единственным эффектом является сбор комиссий за хранение с аккаунта, что влияет на статистику и баланс хранения. Если итоговый баланс Toncoin счета опустится ниже определенной суммы, аккаунт может быть заморожен, а его код и данные заменены их объединенным хешем.

trans_storage$0001 storage_ph:TrStoragePhase
= TransactionDescr;
ПолеТипОписание
storage_phTrStoragePhaseСодержит информацию о фазе хранения при выполнении транзакции. Подробнее

Tick-tock

Транзакции Tick и Tock зарезервированы для специальных системных смарт-контрактов, которые должны автоматически вызываться в каждом блоке. Транзакции Tick вызываются в начале каждого блока мастерчейна, а транзакции Tock вызываются в конце.

trans_tick_tock$001 is_tock:Bool storage_ph:TrStoragePhase
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool destroyed:Bool = TransactionDescr;
ПолеТипОбязательноеОписание
is_tockBoolДаФлаг, указывающий тип транзакции. Используется для разделения транзакций Tick и Tock
storage_phTrStoragePhaseДаСодержит информацию о фазе хранения при выполнении транзакции. Подробнее
compute_phTrComputePhaseДаСодержит информацию о фазе вычисления при выполнении транзакции. Подробнее
actionTrActionPhaseНетСодержит информацию о фазе действия при выполнении транзакции. Подробнее. Хранится в ссылке.
abortedBoolДаУказывает, было ли прервано выполнение транзакции.
destroyedBoolДаУказывает, была ли уничтожена учетная запись во время выполнения.

Split Prepare

примечание

Этот тип транзакции в настоящее время не используется. Информация об этом процессе не доступна.

Транзакции Split инициируются в больших смарт-контрактах, которые необходимо разделить при высокой нагрузке. Контракт должен поддерживать этот тип транзакции и управлять процессом разделения для балансировки нагрузки.

Транзакции Split Prepare инициируются, когда смарт-контракт необходимо разделить. Смарт-контракт должен генерировать состояние для нового экземпляра самого себя при развертывании.

trans_split_prepare$0100 split_info:SplitMergeInfo
storage_ph:(Maybe TrStoragePhase)
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool destroyed:Bool
= TransactionDescr;
ПолеТипОбязательноеОписание
split_infoSplitMergeInfoДаИнформация о процессе разделения.
storage_phTrStoragePhaseНетСодержит информацию о фазе хранения при выполнении транзакции. Подробнее
compute_phTrComputePhaseДаСодержит информацию о фазе вычисления при выполнении транзакции. Подробнее
actionTrActionPhaseНетСодержит информацию о фазе действия при выполнении транзакции. Подробнее. Сохранено в ссылке.
abortedBoolДаУказывает, было ли прервано выполнение транзакции.
destroyedBoolДаУказывает, была ли уничтожена учетная запись во время выполнения.

Split install

примечание

Этот тип транзакции в настоящее время не используется. Информация об этом процессе не доступна.

Транзакции Split Install используются для создания новых экземпляров больших смарт-контрактов. Состояние для нового смарт-контракта генерируется транзакцией Split Prepare.

trans_split_install$0101 split_info:SplitMergeInfo
prepare_transaction:^Transaction
installed:Bool = TransactionDescr;
ПолеТипОписание
split_infoSplitMergeInfoИнформация о процессе разделения.
prepare_transactionTransactionИнформация о транзакции, подготовленной для операции разделения. Сохраняется в ссылке.
installedBoolУказывает, была ли установлена ​​транзакция.

Merge prepare

примечание

Этот тип транзакции в настоящее время не используется. Информация об этом процессе не доступна.

Транзакции Merge инициируются в больших смарт-контрактах, которые необходимо объединить после разделения из-за высокой нагрузки. Контракт должен поддерживать этот тип транзакции и управлять процессом слияния для балансировки нагрузки.

Транзакции Merge Prepare инициируются, когда необходимо объединить два смарт-контракта. Смарт-контракт должен генерировать сообщение для другого своего экземпляра, чтобы облегчить слияние.

trans_merge_prepare$0110 split_info:SplitMergeInfo
storage_ph:TrStoragePhase aborted:Bool
= TransactionDescr;
ПолеТипОписание
split_infoSplitMergeInfoИнформация о процессе слияния.
storage_phTrStoragePhaseСодержит информацию о фазе хранения при выполнении транзакции. Подробнее
abortedBoolУказывает, было ли прервано выполнение транзакции.

Merge install

примечание

Этот тип транзакции в настоящее время не используется. Информация об этом процессе не доступна.

Транзакции Merge Install используются для слияния экземпляров больших смарт-контрактов. Специальное сообщение, облегчающее слияние, генерируется транзакцией Merge Prepare.

trans_merge_install$0111 split_info:SplitMergeInfo
prepare_transaction:^Transaction
storage_ph:(Maybe TrStoragePhase)
credit_ph:(Maybe TrCreditPhase)
compute_ph:TrComputePhase action:(Maybe ^TrActionPhase)
aborted:Bool destroyed:Bool
= TransactionDescr;
ПолеТипОбязательноеОписание
split_infoSplitMergeInfoДаИнформация о процессе слияния.
prepare_transactionTransactionДаИнформация о транзакции, подготовленной для операции слияния. Хранится в ссылке.
storage_phTrStoragePhaseНетСодержит информацию о фазе хранения при выполнении транзакции. Подробнее
credit_phTrCreditPhaseНетСодержит информацию о кредитной фазе при выполнении транзакции. Подробнее
compute_phTrComputePhaseДаСодержит информацию о фазе вычисления при выполнении транзакции. Подробнее
actionTrActionPhaseНетСодержит информацию о фазе действия при выполнении транзакции. Подробнее. Хранится в ссылке.
abortedBoolДаУказывает, было ли прервано выполнение транзакции.
destroyedBoolДаУказывает, была ли уничтожена учетная запись во время выполнения.

См. также

  • Оригинальное описание Структуры транзакции из технического документа