Почему TON больше похож на Solana, а NEAR на EVM?
Когда вы пишите смарт контракты для блокчейна, вам скорее всего необходимо читать и записывать что-то в память контракта. И различие написания контрактов не столько кроется в разных языках, на которых эти контракты пишутся, сколько в особенностях работы с памятью.
Ведь главное, что вам нужно, чтобы написать контракт любой сложности -- это умение обращаться к памяти других контрактов и эффективно обновлять память собственного, но как раз таки тут и начинаются танцы с бубном.
Для сетей типа Ton и Solana работать с памятью -- это сложное удовольствие. Если представить, что память блокчейна это некоторое полотно на котором можно рисовать, то EVM предоставляет цельный холст на который можно наносить краски без особых проблем.
И NEAR контракты в этом похожи на EVM. В тоже время TON и Solana скорее предоставляют в качестве холста
пазл в разобранном виде и если вы захотите нарисовать что-то на нем, то вам придется рисовать на каждом фрагменте по отдельности.
Такой подход обусловлен идеей, что если одного стола для вашего пазла не будет хватать, то вы можете по понятным правилам разделить его на отдельные части и разложить на нескольких столах -- это одна из идей шардированных блокчейнов. Эта концепция вводит ограничения на размер памяти контракта (подобно тому, что каждый пазл имеет один фиксированный размер) и требует от разработчика понимания новой парадигмы хранения данных. Например вы больше не можете сохранить на одном контракте список всех пользователей и их балансы, ведь для этого требуется нефиксированный размер памяти, как минимум потому, что вы не знаете сколько юзеров будет пользоваться вашим контрактом.
Если в EVM и NEAR блокчейнах вы просто храните в контракте таблицу из двух колонок (например адреса кошельков и их балансы), то в
TON и Solana для каждого юзера вам необходимо создать собственный дочерний контракт, который будет хранить данные юзера. Отсюда и появились термины jetton-minter и jetton-wallet для ваших токенов на TON, по сути jetton-minter контракт это фабрика пазлов, которая выпускает уникальные кусочки для каждого пользователя, а jetton-wallet контракт это один кусочек пазла, которым владеете только вы и только вы можете изменять его содержимое (например содержимым может быть баланс токена).
Ограничение на размер доступной для работы памяти сильно усложняет архитектуру контрактов и зачастую создает дополнительные костыли и овер-инжиниринг, такова цена за удобное масштабирование сети какого бы размера эта сеть не достигала.
Изначально мне хотелось рассказать как работает наш контракт моста на TON и какие инженерные подвиги пришлось ради него совершить, но в попытках подступиться к объяснению родился этот промежуточный пост. Важно понимать, что я не инженер смарт контрактов и в своих постах я скорее сам лишь закрепляю свое понимание в чем-то через попытки объяснить это на пальцах. Любые комментарии и вопросы, как обычно, приветствуются!
#tech #hard