Как устроена сеть TON простыми словами

Адрес

Как и в других блокчейнах, адрес в TON - это текстовое (закодированное) представление публичного ключа, полученного из приватного ключа, который изначально получается из секретной фразы.
В адресе закодирован публичный ключ, дополнительные "маркеры типа адреса" и контрольная сумма. Поэтому фактически один и тот же адрес с разными маркерами может быть представлен разными текстовыми представлениями.
Это вызвало непонимание пользователей и с недавних пор разработчики TON ввели правило: считать адреса на "UQ.." обычными кошельками, а адреса на "EQ.." - контрактами.
Для того чтобы с адреса можно было отправить средства - на адресе должен быть "развернут" контракт. Для приема средств этого не нужно.
Заметим, что как и везде - реальный баланс адреса только в основной монете!
Баланс в токенах - это виртуальный баланс. Об этом балансе знает только контракт токена!

Транзакция

Транзакции в TON состоит из (не более одного) входящего сообщения и (возможно) нескольких исходящих сообщений. Эти сообщения могут "ходить" не только между шардами сети, но и между блоками! Поэтому когда отправитель собирается отправить монеты - он создает сообщение для своего кошелька на отправку, которое попадает в контракт кошелька, контракт его обрабатывает и создает следующее сообщение для получателя и так далее..
Эта цепочка сообщений может быть растянута на несколько блоков (между блоками примерно 6 сек). И пока вся эта цепочка не завершится, перевод не может быть закончен.

Жетоны (токены)

Жетоны в TON - это токены в обычном понимании. Отличие лишь в том, что данные адресов хранятся не в контракте жетона а на отдельных адресах, связанных с обычными кошельками. То есть сколько разных токенов есть на балансе обычного адреса - столько есть и отдельных адресов. По одному на каждый токен.
Пример:
Пусть есть два жетона-контракта "Ж1" и "Ж2".
И есть наш обычный адрес-кошелек "А" за которым числятся оба этих жетона Ж1 и Ж2.
Тогда также есть два специальных адреса жетон-кошелька "АЖ1" и "АЖ2" на которых хранится информация о балансе этих жетонов адреса А.

Транзакция жетона

Тут еще сложнее...
Пусть адрес А хочет отправить 1 USDT (Ж) на адрес Б
Для этого надо у контракта Ж узнать специальные адреса АЖ и БЖ
Создать сообщение с А на АЖ о переводе Ж на БЖ
Для этого на АЖ должен быть TON на уплату комиссии, а значит нужно с А на АЖ отправить TON. Если на А еще нет контракта - его нужно развернуть! Кроме того, дополнительно при первом переводе нужно на АЖ развернуть контракт жетон-кошелька, что потребует дополнительной комиссии!
Удивительно, но в блоке НЕ БУДЕТ транзакции о переводе Ж с А на Б!!!
И только выполнение всей цепочки сообщений приведет к изменению данных на АЖ и БЖ и соответственно "баланса" токена на А и Б.

Сценарий приема (и пересылки) USDT:
Генерируем адрес А для приема USDT (Ж) (параметр token=USDT).
При этом сервис получает баланс А токена Ж из блокчейна, а для этого он сначала узнает адрес АЖ.
На адрес А поступают токены Ж. Информация об этом на АЖ.
Заметим что адреса А и АЖ еще НЕ АКТИВИРОВАНЫ!
Отправляем 0.05 TON на А
*Разворачиваем на А контракт обычного кошелька (для управления TON)
Отправляем остаток от 0.05 TON с А на АЖ
*Разворачиваем на АЖ контракт жетон-кошелька (для управления Ж)
Отправляем Ж с АЖ на БЖ
Возвращаем остаток TON с БЖ
Сложно? ОЧЕНЬ! Но так TON устроен