На прошлой неделе в 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 - для передачи таких токенов

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

brc-20 deploy data
brc-20 deploy data

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

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

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

from bitcoin dev email messages
from bitcoin dev email messages

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

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

brc-20 capitalization
brc-20 capitalization

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

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

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

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

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

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

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

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

ton-20 txes
ton-20 txes

Посмотреть можно тут.

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

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

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

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

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

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

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

Заключение

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

https://github.com/romanovichim/TonFunClessons_ru

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

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


  1. MAXH0
    13.12.2023 16:17

    Сугубо на правах ИМХО:
    NFT - тупиковая для блокчейна технология, поскольку основное её предназначение - поддержка "невзаимозаменяемых токенов", а это прямо противоречит идеологии киберанархизма - информация должна распространяться свободно.

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


  1. gurovofficial
    13.12.2023 16:17

    Меня очень сильно смущает, что время проблемы указали сначала 7 декабря в 13:00, а потом в 23:00 (а потом даже несколько интервалов). В реальности, все сервисы начали падать намного раньше см.на скриншот (я в течение 2-х лет слежу за курсами - это моя привычка) и вот, я подловил момент падения сервисов: именно 7 декабря в 06:00 утра - все сервисы тон начали кратковременно отключаться.

    время начала проблемы
    время начала проблемы


    1. egozey
      13.12.2023 16:17

      А причём тут график цены если речь идёт о нагрузке? Вы не на те графики смотрите.


      1. gurovofficial
        13.12.2023 16:17

        Это же потоковый график, а значит часть данных берется из ls. А если уже тогда лайт сервера кратковременно отваливались - это первый признак проблемы. Всё взаимосвязано. Или нет?


  1. H2oker
    13.12.2023 16:17

    Подобная проблема не должна возникнуть на блокчейне iota. У них DAG специально спроектирован под такие вещи и блокчейн распараллелен изначально.


  1. elephanthathi
    13.12.2023 16:17

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

    и купили китайские SSD с Алика!

    инфа сотка!

    можно тему закрывать.


    1. IvanRomanovich Автор
      13.12.2023 16:17

      Экономить - это экономически рациональное поведение. И хорошо, что в данном случае это привело только к экономическим потерям


  1. qertis
    13.12.2023 16:17

    Когда экономическую эффективность ставят выше здравого смысла итог становится очевидным.