Разработка Tonscan, часть 1
TON использует акторную модель и имеет асинхронное устройство. Это новшество, в то время как блокчейны предыдущего поколения, такие как Bitcoin, Ethereum, Solana и другие – синхронные.
В синхронном блокчейне при переводе монет из одного аккаунта в другой – уменьшение баланса отправителя и увеличение баланса получателя происходят разом, за одну транзакцию.
Если мы взаимодействуем с цепочкой смарт-контрактов (например, меняем токены на децентрализованной бирже), то все действия должны выполниться также вместе, в рамках одной транзакции.
TON имеет асинхронное устройство и это позволяет масштабировать блокчейн при росте нагрузки, но также порой возникает необходимость создания новых решений, которые будут корректно отображать сложную информацию в привычном для пользователя формате.
При переводе монет из одного аккаунта в другой в TON происходит следующее:
- Уменьшается баланс отправителя и создается исходящее сообщение к получателю с прикрепленными монетами
- Сообщение идёт к получателю
- Получатель получает сообщение с монетами, его баланс увеличивается
В переводе происходят две транзакции – в момент отправки (1 пункт) и в момент получения (2 пункт).
Взаимодействие со смарт-контрактами также происходит посредством отправки им сообщений. Если углубиться, можно обнаружить, что каждый аккаунт (кошелёк) в TON – это тоже смарт-контракт.
Каждый смарт-контракт в TON это актор. В одним момент времени он может принять входящее сообщение, исполнить свой код, поменять свои данные и опционально создать одно или несколько исходящих сообщений.
Блокчейн функционирует только по этому правилу. Все смарт-контракты "общаются" друг с другом посредством сообщений.
Это делает возможным параллельное исполнение, а также позволяет автоматически разбивать блокчейн на подблокчейны (шардчейны), чтобы распределить нагрузку. За счет такого устройства TON и может масштабироваться без потери скорости.
Для создателей Tonscan возникла задача – как всё это лучше отобразить для пользователей. С одной стороны пользователи привыкли к существующим эксплорерам и к тому, как там отображены транзакции. Интерфейс etherscan в блокчейне Ethereum стал негласным стандартом для всей индустрии.
С другой стороны, в TON транзакции имеют другой смысл, на один перевод приходится две транзакции. Помимо этого существуют сообщения, что и вовсе не встречается в других блокчейнах.
Посмотрев на другие эксплореры в TON, мы не нашли решения, которое было бы нам по душе. Например, эксплорер от Broxus предлагает смотреть на список сообщений и транзакций отдельно, что на наш взгляд неудобно для пользователя. Более того, адрес здесь используется в сыром виде, который не поддерживается приложениями и сервисами TON.
Решение от ton.sh – в истории отображаются сообщения, что позволяет видеть входящие и отправленные монеты, но нет возможности как-либо посмотреть транзакции.
После некоторых дизайн-экспериментов, в Tonscan мы остановились на следующем формате отображения:
В истории отображаются все сообщения, так что виден каждый этап движения монет и это выглядит привычно для пользователя.
Горизонтальные линии отделяют одну транзакцию от другой, группируют сообщения и позволяют определить принадлежность сообщения к той или иной транзакции.
Нажав иконку слева можно открыть отдельный экран с информацией о конкретной транзакции.
На наш взгляд получилось отличное решение, учитывающее специфику TON, но при этом удобное для пользователя.
В будущем все блокчейны будут асинхронными, кто знает, возможно, мы изобрели подход, который станет дизайн-стандартом для эксплореров асинхронных блокчейнов.
В процессе работы над Tonscan нам пришлось решить еще множество задач, о которых расскажем в следующих частях.