Архитектура блокчейна TON
![Архитектура блокчейна TON](/content/images/size/w2000/2023/03/photo_2023-03-20_11-56-47.jpg)
TON является блокчейном-из-блокчейнов, поэтому зачастую многие подходы используемые в блокчейнах старого формата не применимы в TON. Поэтому мы совместно с разработчиками сделали детальное описание архитектуры, чтобы каждый мог узнать как устроен наш блокчейн изнутри.
Мастерчейн
Главным узлом TON является Мастерчейн, который состоит из множества Воркчейнов, которые в свою очередь разделяются на Шардчейны.
![](https://tonblockchain.ru/content/images/2022/02/888.png)
Для обозначения мастерчейна используется ID = -1.
Воркчейны
На данный момент в сети запущен один воркчейн, называемый basechain. В нём происходит основная часть пользовательских транзакций. Транзакции здесь гораздо дешевле и его использует основная часть сервисов.
Первый воркчейн имеет ID = 0
Шардчейны
Все операции в TON происходят либо в мастерчейне, либо в одном из шардчейнов, которые обеспечивают бесконечную масштабируемость сети. Достигается это засчёт расшепления шардчейнов при высоких нагрузках для обеспечения большей производительности. Когда нагрузка снижается, шардчейны автоматически схлопываются обратно.
![](https://tonblockchain.ru/content/images/2022/02/777.png)
Шардчейн работает как маленький блокчейн, внутри него группы транзакций формируются в блоки, после принятия они добавляются в общую цепочку, потом берутся новые транзакции и так далее.
Шардчейны всегда относятся к конкретному Воркчейну и имеют единое устройство и формат, в зависимости от воркчейна в котором они созданы.
Блоки
Любая транзакция попадает в блок вместе с другими транзакциями, совершенными за определённый промежуток времени, после чего блок сохраняется в блокчейне и этот процесс идёт непрерывно.
В TON всё происходит точно также, но с учётом древовидной структуры блокчейна. Как уже было сказано ранее, транзакции всегда происходят в конкретных шардчейнах, либо в мастерчейне. Воркчейны в нашем случае являются просто виртуальными "группировщиками" шардчейнов.
Раз в ≈4 секунды создается новый блок в мастерчейне, в этот блок включаются транзакции, которые происходили в мастерчейне, а также последние блоки из всех шардчейнов. Выглядит это так:
![](https://tonblockchain.ru/content/images/2022/02/5.png)
За время создания 1 блока в мастерчейне, в шардчейне может быть создано несколько блоков, поэтому в блок мастерчейна попадает только ссылка на последний из них.
Идентификация блоков
Для пример разберём любой блок из мастерчейна.
Например этот: (-1,8000000000000000,18118440)
Мастерчейн обозначается как воркчейн с ID = -1 это первое значение в строке. После неё идёт ShardID, который в случае с мастерчейном равен константе 8000000000000000. Блоки в мастерчейне идут последовательно, и последнее значение это порядковый номер исследуемого блока 18118440.
Помимо прочего, в этот блок включён один из блоков шардчейнов, разберём его таким же образом: (0,8000000000000000,23125864)
Блок создан в первом воркчейне (basechain), где происходит основная часть пользовательских транзакций, для этого воркчейна ID = 0
shardID равен 8000000000000000, так как на момент написания статьи в сети есть только один шардчейн, но в любой момент при росте нагрузки он может разделиться на несколько, как описывалось выше.
И наконец, номер этого блока 23125864 – стоит отметить, что номера блоков в шардчейне и в матерчейне различаются, потому что они работают независимо друг от друга.
Таким образом, мы приходим к стандарту, по которому идентифицируются любые блоки в сети TON.
workchain + shardId + blockNumber
Транзакции
Теперь мы подошли к тому, из чего состоят блоки. Сделаем небольшое отступление, чтобы понять что из себя представляют транзакции в TON.
Люди имеющие опыт работы в других блокчейнах часто не понимают, как контракты взаимодействуют между собой, и как сообщения соотносятся с транзакциями.
В Bitcoin, отправка монет с одного адреса на другой – это и есть транзакция, она запишется в блок и после этого навсегда останется высечена в камне. В Ethereum при отправке транзакции на адрес контракта могут произойти различные события, в частности могут вызваться другие контракты и образовываться дочерние транзакции. Совокупность этих событий является одной транзакцией, т.е. происходит в рамках одного события. Результат можно увидеть сразу, монеты либо перешли со счёта А на счёт Б, либо нет.
В блокчейне TON всё устроено немного иначе. Каждый кошелёк в TON является смарт-контрактом и когда вы отправляете транзакцию, по-сути вы посылаете сообщение. Для контракта у него нет отправителя, это сообщение не несет денег, за его обработку заплатит сам контракт. В результате обработки контракт может послать новые сообщения. Транзакцией в данном случае называется совокупность 3х вещей: входное сообщение, список выходных сообщений, изменение стейта контракта.
Когда вы посылается сообщение своему контракту-кошельку пошли денег со своего адреса А на адрес В, после финализации транзакции вы еще не знаете дойдут ли деньги до В.
Транзакцией в данном случае будет (входное сообщение, [сообщение А->В несущее в себе граммы], изменение памяти и баланса контракта А). Когда-нибудь потом сообщение посланное к В тоже обработается. Образуется новая транзакция. Возможно адрес В захочет все вернуть (например он неинициализирован, а сообщение в bounce режиме), тогда В пошлет сообщение обратно на А. И при его обработке образуется опять транзакция.
Таким образом, если в биткоине и эфире транзакция описывает все эффекты от "применения сообщения к блокчейну", то в TON это только начало разговора. И чтобы понять, что вы добились желаемого эффекта нужно не только проанализировать первую транзакцию, но и дождаться когда оборвутся расходящиеся от неё цепочки сообщений.