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

Адреса смарт-контрактов

В блокчейне TON каждый актор, включая кошельки и смарт-контракты, представлен адресом. Эти адреса имеют решающее значение при получении и отправке сообщений и транзакций. Существует два основных формата адресов смарт-контрактов: исходный и пользовательский.

Компоненты адреса

Каждый адрес в TON состоит из двух основных компонентов:

  • Workchain ID: подписанное 32-битное целое число, которое обозначает то, к какому воркчейну относится контракт (например, -1 для Мастерчейна и 0 для Бейсчейна).
  • Account ID: Уникальный идентификатор контракта, обычно длиной 256 бит для Мастерчейна и Бейсчейна.

Исходный и пользовательский форматы адреса

Необработанный адрес

Исходный адрес содержит только основные элементы:

  • Workchain ID (например, -1 для Мастерчейна)
  • Account ID: 256-битный уникальный идентификатор

Пример:
-1:fcb91a3a3816d0f7b8c2c76108b8a9bc5a6b7a55bd79f8ab101c52db29232260

Однако у адресов в исходном формате есть две основные проблемы:

  1. У них нет встроенной проверки на ошибки. Это означает, что в случае возникновения ошибки при копировании могут быть потеряны средства.
  2. Они не поддерживают дополнительные функции, такие как флаги возврата/невозврата.

Пользовательский формат адреса

Пользовательский адрес решает эти проблемы, используя:

  1. Флаги: они указывают на то, является ли адрес возвратным (для контрактов) или нет (для кошельков)
  2. Контрольную сумму: 2-байтовый механизм проверки ошибок (CRC16), который помогает обнаруживать неточности перед отправкой.
  3. Кодирование: оно преобразует необработанный адрес в читаемую компактную форму с использованием base64 или base64url.

К примеру, тот же исходный вид адреса можно преобразовать в удобный для чтения пользовательский адрес, например:
kf/8uRo6OBbQ97jCx2EIuKm8Wmt6Vb15+KsQHFLbKSMiYIny (base64)

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

Состояния адресов

Каждый адрес в TON может находиться в одном из следующих состояний:

  • Nonexist: Адрес не имеет данных (начальное состояние для всех адресов)
  • Uninit: Адрес имеет баланс, но нет кода смарт-контракта
  • Active: Адрес активен, а также имеет и код смарт-контракта и баланс
  • Frozen: Адрес заблокирован из-за того, что расходы на хранение превышают его баланс

Преобразование между форматами адресов

Для преобразования между исходным и пользовательским адресами вы можете использовать API TON или инструменты разработчика, такие как ton.org/address. Эти утилиты обеспечивают качественное преобразование и гарантируют правильный формат перед отправкой транзакций.

Более подробную информацию о том, как обрабатывать эти адреса, включая примеры кодирования и сведения о безопасности транзакций, вы можете найти в полном руководстве в Документации по адресам.

См. также