- PVSM.RU - https://www.pvsm.ru -
Многие, наверное, слышали о криптовалюте TON [1]. Как у многих существующих криптовалют, у неё есть достаточно обширная инфраструктура, один аспект из которой — поднятие сайтов в сети .ton, о чём я сегодня и хочу рассказать.
Кто знаком с сайтами .onion [2]? Если вкратце, это сайты в сети TOR, из плюсов у которых — заявляемая невозможность отследить ни заходящего (посетителя) ни раздающего (сервер). Но у них есть 3 больших проблемы:
Сложность с заходом. Обычному пользователю придётся установить браузер TOR, запустить его, (в случае захода из РФ) подключиться к relay и много других танцев с бубном, что для обычного обывателя непосильная задача
Скорость работы. Поскольку весь трафик идёт через 4 других ноды, а их количество ограничено и геолокация разбросана по всему миру, добиться нормального подключения бывает достаточно сложно.
Нечитабельные домены. В обычном интернете я могу вбить habr.com в любом браузере на любом устройсте и мне откроется сайт хабра. В случае же onion сети запомнить 57 случайных символов не представляется возможным
Тон тоже является похожей децентрализованной сетью, но там с этим дела обстоят в разы лучше:
Для того чтобы открыть домен, не обязательно скачивать никакие дополнительные программы — достаточно открыть его в telegram (можно переслать себе в личном сообщении и кликнуть), который есть практически у каждого пользователя.
Чтобы открыть сайт из браузера можно добавить в конец домена .sc или .run (например, foundation.ton.sc [3]). Обратите внимание, что GoodByeDPI/РКН/Другие гады по неизвестной причине у некоторых блокируют доступ к этим доменам.
Не обязательно запоминать длинный нечитабельный публичный ключ, как это происходит в случае .onion сетей. Для любого ADNL адреса (читать — IP в сети TON) можно создать читабельный домен в .ton и привязать его к сайту.
Запихнул её под спойлеры; если ваша цель — поднятие сайта, то можно не вникать.
DNS в тоне "децентрализованный", и базируется на смарт-контрактах.
Для простоты давайте представим "смарт-контракт", как class с данными, гетерами и сетерами.
Гетеры у любого смарт-контракта любой желающий может вызывать условно-бесплатно в случае своей ноды, в случае использования API накладываются rate limit'ы самого API.
За хранение данных (в том числе кода самого контракта) и вызывания сетеров (посылание сообщений) блокчейн берет комиссию [4], которые в нашем случае не будут превышать в сумме 0.1$.
Теперь представим ситуацию, что нам нужно сделать resolve домену first.alice.ton (узнать, какой тоновский IP у этого домена).
Алгоритм состоит из нескольких шагов:
Перевод домена в машинно-читаемый вид. Если вкратце, то происходит '' + string.split('.').reverse().join('') + '' - строка разбивается по точке, элементы переворачиваются и объединяются знаком , в конец добавляется и в начало (по желанию) тоже может добавляться .
Тем самым наш домен превращается в tonalicefirst.
Запрос на resolve посылается на главный смарт-контакт, ссылка на который записана в настройках блокчейна [5], у которого вызывается getter dnsresolve с 2мя параметрами: доменом и типом записи (об этом чуть позже).
Этот смарт контракт "откусывает" начальную часть домена (ton) и посылает наш запрос на смарт-контракт, отвечающий за доменную зону .ton.
Посылается запрос на смарт-контракт, отвечающий за доменную зону .ton, но ему передается уже откусанный домен alicefirst.
Этот смарт-контракт также "откусывает" свою часть домена - alice и посылает запрос на смарт-контракт, отвечающий за домен .alice
Процесс повторяется до тех пор, пока какой-нибудь конракт не выплюнет нам тоновский IP или же не случится ошибка (домена или не существует; или запись не найдена).
В DNS TON на данный момент есть 4 типа записей (в теории, туда можно записать что угодно, т.к. они хранятся в словаре):
site — запись, которая содержит тоновский IP сайта (или адрес в сети TON Storage для статических сайтов, но ради простоты мы не будем рассматривать данную категорию тут)
storage — запись на децентрализованное хранилище TON Storage, которое может использоваться для хранения файлов
wallet — запись на кошелек в сети TON, для привязки кошелька читаемому домену (например, домен zero-address.ton ведет к кошельку с нулевым адресом)
dns_next_resolver — "ссылка" на другой смарт-контракт, на который будет перенаправляться запрос.
В случае поднятия сайта, нас интересует только тип site.
Заместо IP для обращения к сайту используются ADNL адреса. Для простоты можно считать, что ADNL адрес - это публичный ключ, который генерируется на основе приватного (методы очень схожи с .onion адресами).
Любой узел в сети TON, имея приватный ключ N, может выдать себя за ADNL адрес A, который соответствует этому приватному ключу.
Для подключения к сети (именно для публикации своего ADNL адреса, для того, для того, чтобы на них ходить, таких танцев с бубнами не нужно) нужно иметь белый IP, хотя бы 1 любой открытый порт и "соединиться" с одной из нод, уже находящихся в сети. Подробнее о протоколе читайте тут [6].
Все запросы идут по http, т.к. весь трафик и так уже шифруется с помощью магии протокола ADNL.
Для поднятия сайта, необходимо сделать несколько шагов:
Покупка домена (в тоне они реализованы в виде NFT — т.е. до тех пор, пока вы им владеете, домен ваш)
Поднятие сайта на традиционном http сервере
Поднятие тон-прокси, для проксирования запросов на ваш сайт из сети тон.
Создание записей в DNS TON
Создание записи для главного домена
Создание смарт-контракта для поддоменов, и создание записей там
Для работы в сети тон необходимо иметь некадастриальный криптокошелек, поддерживающий tonconnect. Для новичков советую скачать TonKeeper [7] и пополнить его на 1.5 тон — этого должно хватить для запуска 1го сайта
Переходим на сайт dns.ton.org [8]
Вводим интересующий нас домен (например, 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 [9]:
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.
Ещё раз запускаем 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 [8] не считаем — он жрёт в 5 раз больше комиссий, чем можно, и не позволяет создавать поддомены) — в официальной документации [10] предлагается куча кода смарт-контрактов (хотите поддомены — пишите свой смарт-контракт) и ссылка на стандарт [11], поддающийся пониманию только в случае наличия 2-х высших образований и 48 часов свободного времени (утрирую, но не сильно).
Поэтому я написал свой менеджер поддоменов [12] — он сам является сайтом в сети тон, расположенном на домене howtorunsite.ton [13] (а также testnet.howtorunsite.ton [14]), весь source код в открытом доступе [15], и в данной статье буду рассматривать его, хотя при желании, вполне можно написать свой вариант решения проблемы.
Прошу обратить внимание, что моё решение поддерживает поддомены до 32 символов длиной (abra.babra.cadabra.ton) — длина каждой части между точками не должна превышать 256 бит (uint256)
Переходим на сайт менеджера поддоменов [12] (в случае тестнета добавляем testnet. перед доменом)
Нажимаем на аватарку сверху слева и привязываем кошелек, сканируя QR код.
Вводим свой домен и попадаем на страницу менеджмента поддомена
В поле 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 [16] (удалить или изменить можете не пытаться — это сделать может только владелец домена).
Если что, все подробные инструкции есть снизу страницы.
Сайты в сети .ton только не давно были придуманы, и пока вообще не понятно, что ожидает их в будущем. Возможно, эта технология исчезнет, но также не исключено, что через 5-10 лет обычные сайты канут в лету (шутка).
Если Ваш проект не зависит напрямую от TON, то ответ — нет. Сеть ещё не сталкивалась ни с ДДОС атаками, ни с нормальным наплывом пользователей (а если вспоминать самый производительный в мире блокчейн тон, который в моменты наплава пользователей ложился под нагрузкой, то перспективы не лучшие), ни с другими трудностями, так что лучше убедиться в её стабильности перед тем, как полностью туда мигрировать.
Да, как минимум концепция интересная. У .ton много преимуществ — они не подвластны регуляторам ввиду децентрализованности сети (как минимум, так утверждается, хотя в теории, ваш смарт-контракт с доменом могут заморозить валидаторы [17], так что совсем незаконный контент я бы поднимать там не стал); у них децентрализованный DNS и интеграция с блокчейном TON.
В общем, жду вашего мнения в комментариях, а у меня всё.
Автор: NetoTon
Источник [18]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/dns-2/398701
Ссылки в тексте:
[1] TON: https://ton.org/
[2] .onion: https://ru.wikipedia.org/wiki/.onion
[3] foundation.ton.sc: https://foundation.ton.sc/
[4] комиссию: https://docs.ton.org/develop/smart-contracts/fees
[5] ссылка на который записана в настройках блокчейна: https://docs.ton.org/develop/howto/blockchain-configs#param-4
[6] тут: https://docs.ton.org/learn/networking/adnl
[7] TonKeeper: https://tonkeeper.com/
[8] dns.ton.org: https://dns.ton.org/
[9] Ton reverse proxy: https://github.com/tonutils/reverse-proxy
[10] официальной документации: https://docs.ton.org/develop/howto/subresolvers
[11] ссылка на стандарт: https://github.com/ton-blockchain/TIPs/issues/81
[12] свой менеджер поддоменов: https://howtorunsite.ton.sc/subdomains
[13] howtorunsite.ton: http://howtorunsite.ton/
[14] testnet.howtorunsite.ton: http://testnet.howtorunsite.ton/
[15] открытом доступе: https://github.com/imartemy1524/how-to-run-site-ton
[16] конфигурацию сайта howtorunsite.ton: https://howtorunsite.ton.sc/manage/EQCQzGylQU4o6qg8uCIvYJz5p9GUuoTxNaL9UNjpqrSp1Wb0
[17] заморозить валидаторы: https://docs.ton.org/develop/howto/blockchain-configs#param-44
[18] Источник: https://habr.com/ru/articles/848750/?utm_source=habrahabr&utm_medium=rss&utm_campaign=848750
Нажмите здесь для печати.