19 апреля на конференции Token2049 после выступления Павла Дурова было объявлено о появлении стейблкойна от Tether в сети TON - USDt. Так как это централизованный стейблкойн эмитент подобного токена должен иметь контроль над средствами пользователей для соответствия требований регулятора, например, блокировать средства пользователя. В данной небольшой статье я расскажу как устроены токены на TON и какие возможности есть у эмитента стейблкойна.

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

Как устроены смарт-контракты в сети TON

Блокчейн TON асинхронный, смарт-контракты передают данные друг другу сообщениями. Контракты пишут на языке TACT и FUNC, логика написанная на этих языках вполне понятна без детального изучения, этим мы воспользуемся при обзоре контрактов стейблкойна. Но если же вы хотите разобраться глубже здесь есть бесплатные опенсорсные уроки.

Смарт-контракты на TON не предполагают хранения внутри себя больших словарей, вместо этого предполагается создавать мастер контракт, который может “воссоздавать”(адрес представляет собой хэш из начальной информации смарт-контракта и его кода, что делает возможным подобную механику) внутри себя адреса связанных контрактов и таким образом отправлять им сообщения, меня информацию в их хранилищах.

Хэш из данных и кода позволяет получить адрес контракта
Хэш из данных и кода позволяет получить адрес контракта

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

Механизм шардирования позволяет бизнес логике на смарт-контрактах быть масштабируемой, но это усложняет проектирование смарт-контрактов. Это стоит учесть если вы планируете, например, перенести логику какого-то EVM совместимого децентрализованного приложения в TON.

Для каждого смарт-контракта, есть зарезервированные методы, для внутренних и внешних сообщений. Обычно внутри подобных методов описывается логика, что должен сделать смарт-контракт, в зависимости от полезной нагрузки сообщения. Выглядит это примерно вот так:

если что это код простейшего кошелька на TON
если что это код простейшего кошелька на TON

Как и в других сетях в TON есть стандарты смарт-контрактов. Стандарт описывает необходимую сигнатуру методов смарт-контракта и обязательную логику. Стандарты позволяют децентрализованным приложениям, например, кошелькам отображать информацию, понимать, например, где контракт NFT, а где контракт токена.

Стейблкойн, это взаимозаменяемый токен привязанный к цене токена, поэтому прежде чем двигаться дальше, посмотрим на стандарт взаимозаменяемого токена в сети TON - Жеттон.

Жеттоны или как хранить данные без словаря

Жеттонами в сети TON называют взаимозаменяемые токены. Токен - это единица учета некоторого цифрового актива в некоторой блокчейн сети. Важно отметить, что под токеном обычно не подразумевают криптовалюту, а подразумевают запись, распределенную в блокчейне, которой управляют с помощью смарт-контрактов. В смарт-контракте записаны значения остатков на счетах держателей токенов (баланс некого адреса владельца), также смарт-контракт предоставляет возможность перевода токенов с одного счёта на другой.

Соответственно возникает техническая проблема как хранить балансы токенов разных адресов и эффективно обновлять эти балансы. Именно здесь нам поможет шардирование.

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

Жеттон = 1 мастер контракт и n контрактов кошельков
Жеттон = 1 мастер контракт и n контрактов кошельков

Таким образом, если наш токен будет принадлежать 1 000 000 разных пользователей, будет задеплоен ровно 1 000 001 контракт. И различными сообщениями, можно выполнять те или иные функции.

Разберем простую передачу токенов. Итак, чтобы передать токены из кошелька один в кошелек два, нам надо будет отправить сообщение с флагом transfer в наш кошелек токенов, который в свою очередь, получив такой флаг, отправит средства в кошелек токенов 2 и тут интересный момент, так сообщения используют Toncoin как плату за сообщения и выполнение смарт-контрактов (как газ в EVM сетях), то в конце токен кошелек 2 вернет лишнее обратно на Toncoin кошелек 1.

упрощенная схема
упрощенная схема

Заметьте, что смарт-контракт мастер вообще не участвует в передаче токенов между кошельками. Но если бы мы хотели не передать токены, а например, просто сжечь, то нам пришлось бы отправлять отдельное сообщение в мастер контракт, ведь при сжигании мы изменим общее предложение токена.

Конечно, это немного упрощенные схемы, задача которых дать представление о архитектуре смарт-контрактов на TON. Если вы хотите углубиться в то, как работают токены стандарта Жетон у меня есть полноценный разбор стандарта здесь.

B еще небольшой нюанс, чаще всего именно мастер контракт деплоит контракты кошельки.

Блокировка ваших средств в стейблкойне

Как и у обычного жеттона у смарт-контракта стейблкойна есть мастер контракт и контракт кошелек. И первое, что отличает обычный жеттон от стейблкойна это хранилище. Обычный жеттон хранит баланс, адрес владельца, адрес мастер контракта и код кошелька(вместе с хранилищем контракта код позволяет получить код данного кошелька жеттона). Из jetton-wallet.fc (это код кошелька на языке FunC):

get_data().begin_parsу() достает данные из регистра
get_data().begin_parsу() достает данные из регистра

А вот стейблкойн в дополнение к этой информации хранит еще Cтатус, и именно эта переменная позволяет блокировать ваши средства.

сообщение от админа поменяет флаг в вашем кошельке и все
сообщение от админа поменяет флаг в вашем кошельке и все

Прежде чем расписать как это работает, сделаю небольшое уточнение для внимательных, если вы сравните хранилища смарт-контрактов, вы не увидите в стейблкойне ячейки с кодом, связано это с тем, что за время между созданием стандарта жеттона и жетона стейблкойна, были обновления виртуальной машины TVM и на данный момент можно не передавать ячейку с кодом, а просто получить текущий код смарт-контракта через примитив MYCODE:

Примитивы делают код чище и упрощают разработку
Примитивы делают код чище и упрощают разработку

В предложенном стандарте переменная статус, если упростить логику с битами, может принимать три значения:

  • 0 - unlocked, вы можете спокойно пользоваться своими средствами

  • 1 - владелец кошелька не может отправлять стейблкойн

  • 2 - владелец кошелька не может получать стейблкойн

Изменять данный статус, можно только с мастер контракта, такие условия в функции, которая обрабатывает внутренние сообщения:

Работает это довольно просто, владелец мастер-контракта отправляет сообщение с определённой полезная нагрузкой в мастер-контракт, а уже мастер-контракт меняет статус сообщения.

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

Но блокировка ваших средства это не единственная возможность администратора мастер контракта - эмитента. Помимо этого ваши средства можно сжечь или просто осуществить перевод.

Сжигание и Переводы ваших средств

Если мы перейдем в мастер контракт jetton-minter.fc (это мастер-контракт) и посмотрим как реализована смена статуса, то в функции обработки внутренних сообщений мы увидим развилку call_to, в которой можно послать команду в любой кошелек со стейблкойнам, на передачу стейблкойна, сжигание или как раз смену статуса, который мы рассматривали в предыдущем блоке статьи.

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

Но это не все.

Механизм замены кода и данным мастер контракта

В названии данного абзаца раскрыта вся его суть - да, подобное возможно, полная замена кода мастер-контракта. Выглядит это примерно так:

да, можно поменять вообще все
да, можно поменять вообще все

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

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

Заключение

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

https://github.com/romanovichim/TonFunClessons_ru

Новые туториалы и дата аналитику я кидаю сюда

Код стандарта Стейблкойн на TON

Комментарии (13)


  1. MAXHO
    03.05.2024 11:57

    TON призывает Ethereum и .Bitcoin меньше вкладываться в спекуляции ;)


    1. Moog_Prodigy
      03.05.2024 11:57

      Он на краску кирпичи крепит? Серьезно?))

      А если серьезно, то тон в последнее время чот приуныл совсем. Хороший старт до 7, и поддержка на 4, отскочил и ползет вверх но совершенно непонятно, что будет дальше.


      1. MAXHO
        03.05.2024 11:57

        Хороший старт до 7, и поддержка на 4, отскочил и ползет вверх но совершенно непонятно

        Поросенок TON Вам лично тоже рекомендует меньше вкладываться в спекуляции :))) К делу это совершенно не относится и даже мешает. Ровная линия - лучшая кривая для расчетного средства.


        1. Moog_Prodigy
          03.05.2024 11:57

          Да была бы она еще ровная для расчетного средства. А так повторяет все пируэты основной крипты, равно как и остальные щиткоины. И где оно "стабле" ? Чем обеспечен TON? Он ведь даже не майнится, а только эмитируется.


          1. IvanRomanovich Автор
            03.05.2024 11:57
            +1

            Чем вам не угодил стейкинг? У TON распространенный механизм стейкинга, слабо отличающийся от остальных блокчейнов.


          1. H2oker
            03.05.2024 11:57

            У тона только одно, довольно сильное преимущество это наивность всей экосистемы Телеграмм. В отличие от остальных блокчейнов он может предложить уже сейчас почти миллиард пользователей. Поэтому он и считается перспективным. Он не распределённый и подвержен цензуре. Наверняка в нем и закладки имеются, в отличие от битка. Но у него и цели другие, не как у битка или эфира.

            Самый стабильный блокчейн у Трона сейчас. Цена не скачет спекулятивно, всё понятно и прогнозируемо. А самый наполненный смыслом,если не брать эфир, который чрезмерно перегружен и скатился в говно, это наверное Атом.


  1. Ryav
    03.05.2024 11:57

    Что-то я не уверен, что в EVM сетях есть возможность полностью заменить код и данные в смарт-контракте. Я бы не стал вкладывать крупные средства в вещи, где в одностороннем порядке могут быть изменены условия контракта.


    1. gurovofficial
      03.05.2024 11:57

      В тон тоже существуют способы, чтобы нельзя было менять код контракта или эмиссию. Поэтому данная код-писанина исключительно инициатива компании.


      1. IvanRomanovich Автор
        03.05.2024 11:57

        Причем важно отметить, что инициатива следствие требований регулятора. Все централизованные стейблкойны в любой сети могут блокировать средства


  1. anonym0use
    03.05.2024 11:57
    +1

    Спасибо за статью, вобщем по сути это сбербанк в новой модной упаковке.

    а вообще зачем это нужно пользователю

    У меня больше к ТОНу вопросов, зачем ПОЛЬЗОВАТЕЛЮ нужно чтобы его средства блокировали/сжигали/переводили без его ведома, в этом плане ETH НАМНОГО лучше.


    1. IvanRomanovich Автор
      03.05.2024 11:57

      К сожалению, возможность блокировки есть во всех централизованных стейблкойнах, не только в TON


  1. schernolyas
    03.05.2024 11:57

    Спасибо! Очень интересно! Побольше бы таких статей!


    1. IvanRomanovich Автор
      03.05.2024 11:57

      Спасибо!