Многие, наверное, слышали о криптовалюте TON. Как у многих существующих криптовалют, у неё есть достаточно обширная инфраструктура, один аспект из которой — поднятие сайтов в сети .ton, о чём я сегодня и хочу рассказать.
Нафига а главное зачем?
Кто знаком с сайтами .onion? Если вкратце, это сайты в сети TOR, из плюсов у которых — заявляемая невозможность отследить ни заходящего (посетителя) ни раздающего (сервер). Но у них есть 3 больших проблемы:
Сложность с заходом. Обычному пользователю придётся установить браузер TOR, запустить его, (в случае захода из РФ) подключиться к relay и много других танцев с бубном, что для обычного обывателя непосильная задача
Скорость работы. Поскольку весь трафик идёт через 4 других ноды, а их количество ограничено и геолокация разбросана по всему миру, добиться нормального подключения бывает достаточно сложно.
Нечитабельные домены. В обычном интернете я могу вбить habr.com в любом браузере на любом устройсте и мне откроется сайт хабра. В случае же onion сети запомнить 57 случайных символов не представляется возможным
Как дела с этим обстоят в сети TON
Тон тоже является похожей децентрализованной сетью, но там с этим дела обстоят в разы лучше:
Для того чтобы открыть домен, не обязательно скачивать никакие дополнительные программы — достаточно открыть его в telegram (можно переслать себе в личном сообщении и кликнуть), который есть практически у каждого пользователя.
Чтобы открыть сайт из браузера можно добавить в конец домена
.scили.run(например, foundation.ton.sc). Обратите внимание, что GoodByeDPI/РКН/Другие гады по неизвестной причине у некоторых блокируют доступ к этим доменам.Не обязательно запоминать длинный нечитабельный публичный ключ, как это происходит в случае .onion сетей. Для любого ADNL адреса (читать — IP в сети TON) можно создать читабельный домен в .ton и привязать его к сайту.
Теория
Запихнул её под спойлеры; если ваша цель — поднятие сайта, то можно не вникать.
Принцип работы DNS
DNS в тоне "децентрализованный", и базируется на смарт-контрактах.
Для простоты давайте представим "смарт-контракт", как class с данными, гетерами и сетерами.
Гетеры у любого смарт-контракта любой желающий может вызывать условно-бесплатно
в случае своей ноды, в случае использования API накладываются rate limit'ы самого API.За хранение данных (в том числе кода самого контракта) и вызывания сетеров (посылание сообщений) блокчейн берет комиссию, которые в нашем случае не будут превышать в сумме 0.1$.
Алгоритм поиска записи в DNS
Теперь представим ситуацию, что нам нужно сделать resolve домену first.alice.ton (узнать, какой тоновский IP у этого домена).
Алгоритм состоит из нескольких шагов:
-
Перевод домена в машинно-читаемый вид. Если вкратце, то происходит
'\0' + string.split('.').reverse().join('\0') + '\0'- строка разбивается по точке, элементы переворачиваются и объединяются знаком\0, в конец добавляется\0и в начало (по желанию) тоже может добавляться\0.Тем самым наш домен превращается в
\0ton\0alice\0first\0. Запрос на resolve посылается на главный смарт-контакт, ссылка на который записана в настройках блокчейна, у которого вызывается getter
dnsresolveс 2мя параметрами: доменом и типом записи (об этом чуть позже).Этот смарт контракт "откусывает" начальную часть домена (
\0ton) и посылает наш запрос на смарт-контракт, отвечающий за доменную зону.ton.Посылается запрос на смарт-контракт, отвечающий за доменную зону
.ton, но ему передается уже откусанный домен\0alice\0first\0.Этот смарт-контракт также "откусывает" свою часть домена -
\0aliceи посылает запрос на смарт-контракт, отвечающий за домен.aliceПроцесс повторяется до тех пор, пока какой-нибудь конракт не выплюнет нам тоновский IP или же не случится ошибка (домена или не существует; или запись не найдена).
Типы записей
В DNS TON на данный момент есть 4 типа записей (в теории, туда можно записать что угодно, т.к. они хранятся в словаре):
site— запись, которая содержит тоновский IP сайта(или адрес в сетиTON Storageдля статических сайтов, но ради простоты мы не будем рассматривать данную категорию тут)storage— запись на децентрализованное хранилищеTON Storage, которое может использоваться для хранения файловwallet— запись на кошелек в сети TON, для привязки кошелька читаемому домену (например, доменzero-address.tonведет к кошельку с нулевым адресом)dns_next_resolver— "ссылка" на другой смарт-контракт, на который будет перенаправляться запрос.
В случае поднятия сайта, нас интересует только тип site.
Принцип работы "тоновских IP" - ADNL адресов
Заместо IP для обращения к сайту используются ADNL адреса. Для простоты можно считать, что ADNL адрес - это публичный ключ, который генерируется на основе приватного (методы очень схожи с .onion адресами).
Любой узел в сети TON, имея приватный ключ N, может выдать себя за ADNL адрес A, который соответствует этому приватному ключу.
Для подключения к сети (именно для публикации своего ADNL адреса, для того, для того, чтобы на них ходить, таких танцев с бубнами не нужно) нужно иметь белый IP, хотя бы 1 любой открытый порт и "соединиться" с одной из нод, уже находящихся в сети. Подробнее о протоколе читайте тут.
Все запросы идут по http, т.к. весь трафик и так уже шифруется с помощью магии протокола ADNL.
Практика
Для поднятия сайта, необходимо сделать несколько шагов:
Покупка домена (в тоне они реализованы в виде
NFT— т.е. до тех пор, пока вы им владеете, домен ваш)Поднятие сайта на традиционном
httpсервереПоднятие тон-прокси, для проксирования запросов на ваш сайт из сети тон.
-
Создание записей в DNS TON
Создание записи для главного домена
Создание смарт-контракта для поддоменов, и создание записей там
0. Создание кошелька и покупка тонов
Для работы в сети тон необходимо иметь некадастриальный криптокошелек, поддерживающий tonconnect. Для новичков советую скачать TonKeeper и пополнить его на 1.5 тон — этого должно хватить для запуска 1го сайта
Покупка домена
Переходим на сайт dns.ton.org
-
Вводим интересующий нас домен (например,
thisismysite.ton).Обратите внимание, чем больше символов в домене, тем меньше они стоят. За 4х сивольные домены придётся выложить 100 TON (по текущему курсу ~ 600$), за 5 - 50, 6 - 40, 7 - 30, 8 - 20, 9 - 10, 10 - 5, 11 и больше - 1 TON.
-
Нажимаем на кнопку "Place bid to start auction", и ждём 1 час, пока домен не купится.
В теории, кто-то может перебить вашу ставку своей, но на практике я ни разу с таким не сталкивался.
Пока домен покупается переходим к следующему шагу
Поднятие сайта локально
Тут вы не ограничены в средствах - можете использовать любой фреймворк, я люблю поднимать nginx на 127.0.0.1, дабы никто извне не смог до него достучаться.
Поднимать можно на любом порту.
Создание конфига
Дальше необходимо сконфигурировать config.json файл с настройками. Для этого устанавливаем Ton reverse proxy:
wget https://github.com/ton-utils/reverse-proxy/releases/latest/download/tonutils-reverse-proxy-linux-amd64
chmod +x tonutils-reverse-proxy-linux-amd64
(бинари под mac/windows в репозитории так же присутствуют)
И запускаем его из консоли:
./tonutils-reverse-proxy-linux-amd64
Он создаст файл config.json в текущей директории, выглядящий примерно так:
{
"proxy_pass": "http://127.0.0.1:3000/",
"private_key": "Z+string=",
"external_ip": "1.2.3.4",
"listen_ip": "0.0.0.0",
"network_config_url": "https://ton.org/global.config.json",
"port": 11706
}
Там необходимо поменять:
proxy_pass— адрес вашего сервера, куда будет проксироваться трафик (в моем случаеhttp://127.0.0.1:80/)external_ip— белый IP, по умолчанию он будет равен IP вашего устройства (не забудьте поменять, если будете запускать на внешнем сервере)port— порт, на котором будет слушать прокси. Можно указать любой, но необходимо пробросить его в firewall, и убедиться, что он доступен извне по вашему IP.
Создание DNS записей
Ещё раз запускаем tonutils-reverse-proxy с уже настроенным config.json и смотрим на то, что нам выдала программа (пример output'а):
2024/09/25 17:15:24 Tonutils Reverse Proxy v0.3.3, build: 74841a4-2024-08-01
2024/09/25 17:15:25 Server's ADNL address is blablabla.adnl (214b9d44cf37e995dc9b50c4c3ae1bbd1eea8ee4a9912c2d12c3c491f22de982)
2024/09/25 17:15:25 Starting server on blablabla.adnl
Вот это значение в скобочках 214b9d44cf37e995dc9b50c4c3ae1bbd1eea8ee4a9912c2d12c3c491f22de982 - ваш ADNL адрес, сгенерированный на основе private_key из config.json. Его необходимо будет использовать в записи site для вашего домена.
К сожалению, на данный момент не существует "официального" способа для адекватного менеджмента поддоменов (dns.ton.org не считаем — он жрёт в 5 раз больше комиссий, чем можно, и не позволяет создавать поддомены) — в официальной документации предлагается куча кода смарт-контрактов (хотите поддомены — пишите свой смарт-контракт) и ссылка на стандарт, поддающийся пониманию только в случае наличия 2-х высших образований и 48 часов свободного времени (утрирую, но не сильно).
Поэтому я написал свой менеджер поддоменов — он сам является сайтом в сети тон, расположенном на домене howtorunsite.ton (а также testnet.howtorunsite.ton), весь source код в открытом доступе, и в данной статье буду рассматривать его, хотя при желании, вполне можно написать свой вариант решения проблемы.
Прошу обратить внимание, что моё решение поддерживает поддомены до 32 символов длиной (abra.babra.cadabra.ton) — длина каждой части между точками не должна превышать 256 бит (uint256)
Куда кого и как
Переходим на сайт менеджера поддоменов (в случае тестнета добавляем testnet. перед доменом)
Нажимаем на аватарку сверху слева и привязываем кошелек, сканируя QR код.
-
Вводим свой домен и попадаем на страницу менеджмента поддомена

Интерфейс редактирования DNS для сайта howtorunsite.ton В поле
TON Siteвставляем ADNL адрес, который мы получили вышеНажимаем на кнопку
Saveи подтверждаем транзакциюЖдём 1-2 минуты, пока транзакция пройдет в блокчейне
Пытаемся зайти на сайт по адресу
http://yourdomain.tonчерез телеграм, или используем какое-нибудь прокси для обычного интернета (например, добавляя.runили.scв конце)
А как же обещанные поддомены?
Нажимаем на кнопку "Create subdomains contract" (или Reset subdomains contract, если он уже задан), и подтверждаем транзакцию.
Ждём 1-2 минуты, пока транзакция пройдет в блокчейне (возможно, потребуется перезагрузка страницы)
Нажимаем на кнопку "Add subdomain" и вводим имя поддомена (без точек) и значение
TON SITE(ADNL адрес, если захотим, можем поднять поддомен на другом адресе - всё как в обычном DNS). В случае отсутствия у поддомена хотя бы 1 записи (wallet, site, storage, next_dns_resolver), он автоматически "почистится", так что не забываем сразу вписать хотя бы одно значение.Нажимаем на кнопку "Save" и подтверждаем транзакцию
Для создания поддомена у поддомена (second.first.alice.ton) необходимо повторить аналогичные шаги 8-11 рекурсивно для созданного поддомена
Для примера конфигурации можете посмотреть на конфигурацию сайта howtorunsite.ton (удалить или изменить можете не пытаться — это сделать может только владелец домена).
Если что, все подробные инструкции есть снизу страницы.
Заключение
Сайты в сети .ton только недавно были придуманы, и пока вообще не понятно, что ожидает их в будущем. Возможно, эта технология исчезнет, но также не исключено, что через 5-10 лет обычные сайты канут в лету (шутка).
Стоит ли сейчас полностью отказываться от обычных сайтов и переходить на .ton?
Если Ваш проект не зависит напрямую от TON, то ответ — нет. Сеть ещё не сталкивалась ни с ДДОС атаками, ни с нормальным наплывом пользователей (а если вспоминать самый производительный в мире блокчейн тон, который в моменты наплава пользователей ложился под нагрузкой, то перспективы не лучшие), ни с другими трудностями, так что лучше убедиться в её стабильности перед тем, как полностью туда мигрировать.
Стоит ли их вообще поднимать?
Да, как минимум концепция интересная. У .ton много преимуществ — они не подвластны регуляторам ввиду децентрализованности сети (как минимум, так утверждается, хотя в теории, ваш смарт-контракт с доменом могут заморозить валидаторы, так что совсем незаконный контент я бы поднимать там не стал); у них децентрализованный DNS и интеграция с блокчейном TON.
В общем, жду вашего мнения в комментариях, а у меня всё.
Комментарии (15)

MAXH0
07.10.2024 11:08Главный вопрос - на сколько предсказуемы затраты на инфраструктуру в сети.
Ну и если есть валидаторы и Дуров во Франции, то в чем преимущество? Условный Либрусек поднимешь и получишь не условный срок.

baldr
07.10.2024 11:08+1В том-то и дело. Даже более того - поднимешь Либрусек, испугаешься и удалишь через 10 минут - но блокчейн всё помнит и всё задокументировано
навсегда.

j-b
07.10.2024 11:08+1И судя по "срок истечения домена" при ставке, они не вечные, а всего лишь на год, если кто-то ставку выше не сделает, правильно понимаю?
Какой-то временный NFT получается....

santiment
07.10.2024 11:08Нет, продление стоит несколько у.е. в год (хотя мне даже центы какие то показывает). Т.е. после покупки аукциона нет, только если продать захотите.

j-b
07.10.2024 11:08Так если продлять не захочу? NFT то за мной останется выходит, т.е. этим доменам никто не сможет воспользоваться? :)
И какая цена продления, что-то я так и не нашел ?
santiment
07.10.2024 11:08Продление
Раз в год владелец должен отправлять произвольную сумму на смарт-контракт домена (например 0.000000001 Toncoin), чтобы продлить владение доменом ещё на год. Это можно сделать в любое время, поскольку домен продлевается на год с момента транзакции.
Продление необходимо, чтобы домены, владельцы которых по каким-то причинам потеряли к ним доступ или интерес, могли вернуться на открытый аукцион. Если домен не будет продлён, то он перейдёт в режим семидневного аукциона, а его минимальная ставка будет рассчитана по изначальным правилам.

SidVisceos
07.10.2024 11:08+1Я тоже сглупил и создал домен через ton.dns.org за 35 toncoin.
Короче, нужен домен - иди на аукционы. Рекламировать не буду что то конкретное. Читабельный адрес можно найти от 1 тонкоина.
А вообще интересно было покопаться, настроить. Да, в логах сервера ip клиентов есть, это не даркнет)

NetoTon Автор
07.10.2024 11:08Доменные имена от 11 символов официально стоят 1 тон (по текущему курсу ~ 6$).
Продление (условно) беслатное, так что проще просто сделать имя подлиннее: на аукционе редко что-то стоящее можно найти за адекватные деньги (а то, что можно - быстро скупают боты)
baldr
Я вижу, что пока даже самые популярные домены (sex.ton, porn.ton, xxx.ton) ещё не заняты в этой сети, так что, считаю, тащить туда свой homepage, пожалуй, рановато.
Но за статью спасибо, довольно доступно расказано.
Marsezi
Столько дополнительных шагов, затрат, вопросов, усложнений и т д. Ради ничего. 0 плюсов. Вы правильно поняли что походу это мертвая фича.
Если мне нужно сделать свой сайт в тоне. То я просто беру телеграм мини АПС и инжеекчу свой vue сайт. Все. бесплатно. Без 10ка дополнительных действий, без 10ка новых отказных частей.
baldr
Воу, ну так вы слона не продадите. А как же блокчейн, NFT и Web3 ?
На фрилансе иногда попадаются клиенты, которым надо что-нибудь такое. А тут вот и готовая инструкция. Вряд ли я буду этим заниматься, конечно.
Насколько бы странной или сложной не была сама фича - статья описывает это достаточно понятно, на мой взгляд. Фиче минус, статье - плюс.
santiment
трехбуквенных доменов, как я понял нет. Остальные porn.ton заняты -) К примеру xxxx.ton - 37000 usd -) Проверять через https://dns.ton.org/
Rubilnik
Верно, меньше 4-х символов зарегистрировать не даёт.
trabl
Ага, как же)). Когда только вся эта шумиха поднялась, я приобрел себе несколько анонимных номеров по 10$, один номер удалось перепродать за 200+ ton, далее приобрел домен dzen.ton, успешно его продал за 330+ ton. Неплохо получилось заработать на стоимости и курсе. Сейчас уже все популярные домены распроданы и стоимость у них космическая, то же самое касается и красивых анонимных номеров.