Как работают TON-20 и BRC-20 и почему они вызвали очередь в TON

Как работают TON-20 и BRC-20 и почему они вызвали очередь в TON

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

Подобную нагрузку вызвал новый тип токенов TON-20, аналог BRC-20 из сети Биткойн. В доках TON-20 почти нет информации, кроме того, что формат сообщений копирует BRC-20. Если посмотреть в эксплорер блокчейна, то знакомый с смарт-контрактами человек, будет удивлен - куча обычных транзакций с json внутри сообщений.

Но раз это некий взаимозаменяемый токен, значит должна быть какая-то возможность получить баланс и проверить передачу токенов и прочее?

На эти вопросы я постараюсь ответить в этой статье. Мы разберем как работают “токены” BRC20 и почему они приводят к проблемам для блокчейнов и инфраструктурных проектов блокчейн сетей.

Место в транзакции

BRC-20 концепция взаимозаменяемого токена в сети биткойн. Концепция появилась после успеха Bitcoin Oridinals - протокола позволяющего создавать NFT в сети Биткойн. Возможным это стало благодаря:

  • OP_return - Функция, добавляющая дополнительный выход к транзакциям в сети Bitcoin, который содержит стороннюю информацию (Inscriptions), например, метаданные, но не содержит денежных средств. Изначально объем данных в OP_return имел ограничение в 80 байт.
  • Обновление сети Биткойн Taproot, которое увеличило объем информации в OP_returen до 400 Кб.

Таким образом, с транзакцией в Биткойне, появилась возможность отправлять достаточное количество информации для реализации логики токенов.

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

BRC-20

Идея brc-20 заключается в отправке с транзакцией трех типов метаданных:

  • Deploy - для первичного создания brc-20 токена
  • Mint - для получения уже созданного brc-20 токена
  • Transfer - для передачи таких токенов

Пример метаданных:

Как работают TON-20 и BRC-20 и почему они вызвали очередь в TON

А теперь самое интересное - как “протокол” отслеживает сколько например токенов я могу перевести своему товарищу: Кошелек, который может обрабатывать подобный стандарт, чекает все транзакции и таким образом понимает валидна ли транзакция. Таким образом это некоторая цепочка транзакций, внутри блокчейна - также цепочки транзакции.

Тоже самое и с балансом, в самом блокчейне хранятся только записи, а вся остальная логика вынесена offchain в кошельки или сервисы совместимые c brc-20.

Подобную механику сложно даже назвать цифровым активом, именно поэтому некоторые разработчики, считают, что транзакции с brc-20 нужно считать спамом. И соответственно их фильтровать, чтобы они не засоряли mempool.

Как работают TON-20 и BRC-20 и почему они вызвали очередь в TON

Чтобы вы понимали вся концепция описана всего на паре страниц: https://domo-2.gitbook.io/brc-20-experiment/

При этом в сети биткойн на момент написания статьи токенов на совокупную капитализацию больше $1 млрд по версии https://www.brc-20.io/. Полноценный рынок, вот она сила маркетинга.

Как работают TON-20 и BRC-20 и почему они вызвали очередь в TON

Карточный домик

Почему же такая примитивная концепция приводит к проблемам? Разберем на примере TON c его копией концепции TON-20.

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

И здесь кроется важная деталь, если мы работаем с обычными взаимозаменяемыми токенами, то глубина запросов(сколько блоков назад) небольшая. Последние состояния смарт-контрактов хранят балансы, а логика внутри смарт-контракта не требует парсить кучу адресов, чтобы понять, может ли Петя перевести Алисе токены.

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

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

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

Именно так и поступила компания, перенесшая BRC-20 в TON. Они предлагали кидать все транзакции с TON-20 на один адрес - адрес сжигания, выглядит это так:

Как работают TON-20 и BRC-20 и почему они вызвали очередь в TON

Посмотреть можно тут: https://tonscan.org/address/EQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAM9c

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

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

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

Некоторые мысли

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

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

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

Заключение

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

Новые туториалы и дата аналитику я кидаю сюда: https://t.me/ton_learn

Начать дискуссию