Документация по адресам смарт-контрактов
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
В этом разделе описываются особенности адресов смарт-контрактов в блокчейне TON. Он также объясняет, как акторы являются синонимами смарт-контрактов в TON.
Всё является смарт-контрактом
В TON смарт-контракты создаются с использованием акторной модели. Фактически, акторы в TON технически представлены как смарт-контракты. Это означает, что даже ваш кошелек является простым актором (и смарт-контрактом).
Обычно акторы обрабатывают входящие сообщения, изменяют свои внутренние состояния и в результате генерируют исходящие сообщения. Вот почему каждый субъект (т. е. актор-контракт) в блокчейне TON должен иметь адрес, чтобы он мог получать сообщения от других акторов.
В виртуальной машине Ethereum (EVM) адреса полностью отделены от смарт-контрактов. Не стесняйтесь узнать больше о различиях, прочитав нашу статью "Шесть уникальных аспектов блокчейна TON, которые удивят разработчиков Solidity" от Тала Кола.
Адрес смарт-контракта
Адреса смарт-контрактов в TON обычно состоят из двух основных компонентов:
-
(workchain_id): Обозначает идентификатор воркчейна (подписанное 32-битное целое число)
-
(account_id) Обозначает адрес аккаунта (64-512 бит, в зависимости от воркчейна)
В разделе обзора необработанных адресов этой документации мы обсудим, как представлены пары (workchain_id, account_id).
Идентификатор воркчейна и идентификатор аккаунта
Идентификатор воркчейна
Как мы уже видели ранее, можно создать до 2^32
воркчейнов, работающих на блокчейне TON. Мы также отметили, как 32-битные префиксные адреса смарт-контрактов идентифицируют и связываются с адресами смарт-контрактов в разных воркчейнов. Это позволяет смарт-контрактам отправлять и получать сообщения в разные воркчейны на блокчейне TON и из них.
В настоящее время в блокчейне TON работают только Мастерчейн (workchain_id=-1) и иногда базовый воркчейн (workchain_id=0).
Оба имеют 256-битные адреса, поэтому мы предполагаем, что workchain_id равен 0 или -1, а адрес внутри воркчейна равен ровно 256 битам.
Идентификатор аккаунта
Все идентификаторы аккаунтов в TON используют 256-битные адреса в мастерчейне и бейстчейне (также называемым базовым воркчейном).
Фактически, идентификатор учетной записи (account_id) определяется как результат применения хэш-функции (в частности, SHA-256) к объекту смарт-контракта. Каждый смарт-контракт, работающий на блокчейне TON, хранит два основных компонента:
- Скомпилированный код. Логика смарт-контракта, скомпилированная в байт-код.
- Начальное состояние. Значения контракта на момент его развертывания в цепочке.
Чтобы получить адрес контракта, вы вычисляете хэш пары (Начальный код, Начальное состояние). Мы не будем сейчас изучать, как работает TVM, но важно понимать, что идентификаторы аккаунтов в TON следуют этой формуле:
account_id = хэш(начальный код, начальное состояние)
Далее в этой документации мы более подробно рассмотрим технические характеристики схемы TVM и TL-B. Теперь, когда мы знакомы с тем, как генерируется account_id и как он взаимодействует с адресами смарт-контрактов в TON, давайте обсудим необработанные и удобные для пользователя адреса.