Теперь вы знаете:
- Существует два вида входящих сообщений, которые могут поступить в контракт: внешние и внутренние.
- Внешнее сообщение на самом деле просто строка данных, которая исходит из ниоткуда с точки зрения блокчейна. Эти данные не аутентифицируются сами по себе. К нему не привязаны какие-либо деньги в виде Toncoins. И он действительно может содержать все, чего хочет автор контракта.
- Внутренние сообщения - это те, которые отправляются контрактами на другие контракты. И эти сообщения имеют немного более богатую структуру. Прежде всего, внутренние сообщения могут нести балансы. И когда контракт отправляет сообщение на другой контракт, они могут прикрепить к нему любое количество монет. Во-вторых, эти сообщения надежно аутентифицируются по адресу отправляемого контракта. И вся архитектура TON гарантирует контрактам, что этот адрес отправителя является правильным.
- Сделка представляет собой комплекс изменений в состоянии контракта.
- Существует пять фаз, через которые проходит транзакция: фаза хранения, фаза кредита, фаза вычислений, фаза действия, фаза отскока.
- Фаза хранения - это фаза, когда блокчейн взимает с контракта всю арендную плату, которую он должен за свое существование. И арендная плата вычисляется как цена за бит в секунду.
- Кредитная фаза - это фаза, когда монеты, прикрепленные к входящему сообщению, зачисляются в контракт.
- На этапе вычислений TVM выполняет код и проверяет каждую операцию, а также отслеживает использование газа.
- На этапе действия смарт-контракт переходит в новое состояние, и исходящие сообщения обрабатываются.
- Фаза отскока происходит, если контракт не удался, а во входящем сообщении был флаг, в котором говорилось, что я возвращаюсь. Это означает, что на данном этапе, если произойдет какой-либо сбой и останутся деньги от входящего сообщения, то контракт создаст исходящее сообщение обратно отправителю, чтобы вернуть деньги.
📚Чтение Заметок
Давайте погрузимся в то, как обрабатывается сообщение и что на самом деле является транзакцией.
💌 Для того, чтобы контракт изменил свое состояние, он должен получить сообщение. Это называется входящем сообщением.
Существует два типа входящих сообщений:
⚪ - Внешние сообщения. 🔵 - Внутренние сообщения.
Внешние сообщения.
Внешнее сообщение - строка данных, которая поступает из ниоткуда с точки зрения блокчейна. Эти данные не 🆔 аутентифицируются сами по себе.
К нему не привязаны деньги в виде 💎 Toncoins.
Он действительно может содержать все, что хочет автор контракта.
❗ Работа контракта заключается в том, чтобы разобраться в этих данных и разоборе их прямо внутри его кода.
Внутренние сообщения.
Внутренние сообщения - Те, которые отправляются по контрактам на другие контракты. 👥 Эти сообщения имеют немного более богатую структуру:
Внутренние сообщения могут нести баланс. 💸
Эти сообщения надежно аутентифицируются по адресу отправляемого контракта. 🔑 Вся архитектура TON гарантирует контрактам, что этот адрес отправителя является правильным.
Обработка сообщений и кодов операций.
После того, как контракт получил сообщение, он может иметь два отдельных обработчика для внутренних и внешних. Оба вида сообщений будут иметь произвольные 🗻 данные полезной нагрузки, которые разработаны автором контракта. Если контракт хочет обрабатывать различные виды сообщений, то он будет использовать то, что мы называем opcodes.
Коды операций (коды операций) 🔢 - префикс в четыре байта в пользовательских данных в сообщении, чтобы указать тип операции, которую должен поддерживать контракт.
Транзакции.
❓Что такое транзакция?
Транзакция 💸 - комплекс изменений в состоянии контракта. ❗ Сообщение - это не транзакция, это просто вход в транзакцию!
❓Что делает транзакция?
1. ▶️ Это меняет состояние контракта. 2. 📋 Он создает список исходящих действий.
Этапы транзакции.
Есть пять фаз 5️⃣, через которые проходит транзакция:
Фаза хранения 📒 Вычитает плату за хранение на основе байтов, хранящихся по контракту с момента последней транзакции. Если средств недостаточно, контракт переходит в замороженное состояние, сохраняя свое состояние в течение ограниченного времени.
Кредитная фаза 🏦 Именно здесь монеты, прикрепленные к входящему сообщению, зачисляются в контракт.
Фаза вычислений 💻 Именно здесь оживает ваша программа. TVM выполняет код и проверяет каждую операцию, а также отслеживает использование газа.
Фаза действий 🏃 Самое важное действие на этом этапе - это новое состояние контракта. Ваш контракт может в конце исполнения или на любом промежуточном этапе создать для себя новое состояние и новое хранилище, и это будет зарегистрировано после успешного исполнения контракта. В списке есть другие действия, и эти действия являются исходящими сообщениями.
Фаза отскака 🎱 Это происходит, если контракт провалился, и во входящем сообщении был флаг, в котором говорилось, что я отскакиваю. Это означает, что на данном этапе, если произойдет какой-либо сбой и останутся деньги от входящего сообщения, то контракт создаст исходящее сообщение обратно отправителю, чтобы вернуть деньги. Это функция безопасности, которая позволяет людям вернуть большую часть средств в случае возникновения какой-либо ошибки или сбоя в контракте.
Заключение.
Давайте сделаем резюме:
- TКонтракт получает входящую информацию, которая может быть внутренней или внешней.
- Внутренние сообщения могут нести деньги и могут быть аутентифицированы по адресу отправляемого контракта, в то время как внешние сообщения вообще не аутентифицируются сами по себе, и создание аутентификации заключается в работе контракта.
- Выполнение сделки проходит через пять этапов. Этап хранения для взимания арендной платы.
- Кредитный этап, когда входящие монеты зачисляются на баланс.
Фаза вычислений, на которой выполняется ваш код.
Этап действия при обновлении хранилища и маршрутизации исходящих сообщений.
Фаза отскока, когда контракт имеет дело с сбоями и отправляет монеты обратно отправителю.