TON Storage - это часть экосистемы TON, изначально спроектированной командой Telegram, во главе с Павлом Дуровым. Она предоставляет возможность хранить, скачивать и делиться файлами децентрализованным способом. Напомню, что работа TON (Telegram Open Network) на несколько лет была запрещена американским судом, а проект был передан сообществу и переименован в The Open Network. TON Storage необходим в блокчейн-экосистеме как дешевый способ хранения больших файлов. Хранение файлов непосредственно в блокчейне будет очень дорогим, а потребность в обмене большими файлами между пользователями блокчейна существует. Например, NFT создаются не только на основе изображений, но и музыки и видео. И все эти данные нужно где-то хранить. Для того, чтобы нода могла работать понадобится как минимум 1GHz и 2 ядра CPU, 2GB RAM, 2 GB SSD без учета размера скачиваемых/раздаваемых файлов и сеть 10 Mb/s со статическим IP адресом. Множество устройств сможет вытянуть эту конфигурацию. Нода работает даже на Raspberry Pi. Но все портит последний критерий - статический IP адрес. Т.е. большинство домашних интернет-соединений не подойдет для того, чтобы вкусить официальный клиент прямо дома. Но есть обходной путь – использовать неофициальный клиент или VPS. Об неофициальных клиентах чуть позже. Официальные релизы всех компонентов TON для разных ОС можно найти тут. Тем не менее, вы не сможете найти там билд для Apple M чипа. Поэтому в таком случае можно воспользоваться официальной инструкцией по сборке билда. Я опробовал ее несколько раз, в том числе на Apple M1 и Raspeberry Pi – на удивление, все работает с первого раза. Довольно часто процесс билда таких больших проектов ломается на разных этапах, но не в этом случае. На данный момент TON Storage не сильно связан с блокчейном TON. Чтобы начать использование Storage не нужно покупать криптовалюту и проводить какие-то транзакции. Несмотря на это, все компоненты экосистемы построены на одних и тех же технологиях. Например, для передачи данных используется собственная разработка – ADNL. А для поиска нод и информации о файлах – TON DHT. BagID - это строка, которая может принимать два вида: hex строка длиной 64 символа или же base64 представление данных из hex. Это детерминистическое значение рассчитанное на основе данных + описания этих данных.  После того, как вы начали раздавать какие-то данные, ваш Storage Daemon возвращает определенный BagID. Вам достаточно поделиться им с другим человеком, чтобы он мог скачать ваши файлы и встать на раздачу. Именно через Daemon происходит раздача и скачивание файлов. Чтобы запустить его нужно выполнить команду: storage-daemon -v 3 -C global.config.json -I <ip>:3333 -p 5555 -D storage-db Все данные, с которыми работает Daemon, хранятся в директории storage-db в виде обычных файлов. У каждого набора файлов есть уникальный идентификатор BagID. Если вы скачали BagID EF155134D49CD4515691226A7EEB31965A34EA245F1906901EAC8E45D539AE9A, то все файлы из него будут в ~/storage-db/torrent/torrent-files/EF155134D49CD4515691226A7EEB31965A34EA245F1906901EAC8E45D539AE9A/.  Это довольно удобная структура для доступа к файлам, если вы хотите разрабатывать какие-то проекты поверх TON Storage. Для управление Storage Daemon вам необходим контрольный пункт, в качестве которого выступает ton-cli. Для ее запуска используйте команду: storage-daemon-cli -I 127.0.0.1:5555 -k storage-db/cli-keys/client -p storage-db/cli-keys/server.pub Ключи -k и -p отвечают за клиентский приватный ключ и за публичный ключ ноды. Эти ключи генерируются при первом запуске Daemon. Если вы запускает cli на машине отличной от той, где находится Daemon, то обращайте внимания на корректность ключей и открытые порты на машине с Daemon. Вот список доступных команды в ton-cli для управления Daemon.  Начнем с того, что ADNL (Abstract Datagram Network Layer) — это фундамент всей сети TON, работающий на основе UDP в IPv4 (а в будущем и IPv6). Если UDP не под рукой — не беда, можно использовать и TCP. Каждый участник сети обладает 256-битным ADNL адресом. С помощью протокола ADNL вы можете отправлять и получать данные, используя только ADNL адреса, забыв о IP-адресах и портах. Но что же это за магия? Адрес ADNL, в сущности, равен 256-битному ECC публичному ключу. Создавайте сколько угодно разных сетевых идентичностей, главное — помнить соответствующий закрытый ключ, чтобы получать (и расшифровывать) ваши сообщения. ADNL адрес — это не сам публичный ключ, а 256-битный SHA256 хеш от сериализованного объекта данных. Все отправленные данные подписываются отправителем и шифруется так, чтобы только получатель мог расшифровать сообщение и проверить его на целостность. TON ADNL узел обычно имеет "таблицу соседей", содержащую информацию о других известных узлах. Со временем он будет расширять эту таблицу, используя информацию, полученную от этих узлов. Новые записи могут появляться в виде ответов на специальные запросы или, наоборот, устаревшие записи могут удаляться. TON DHT основан на Kademlia и это важная составляющая TON, служащая маяком для поиска других узлов в сети. В качестве ключа выступает SHA256 хеш, а в качестве значения выступает IP-адрес и порт ноды. Таким образом, хранение и скачивание файлов не является анонимными. По крайнем мере, в стандартной конфигурации. С помощью DHT так же происходит регистрация BagID в сети. Остальные ноды, которые запрашивают этот BagID могут получить список раздающих нод и скачивать данные сразу со всех нод.  Разработка даппов на основе децентрализованных хранилищ практически всегда требует использование гейтвеев — порталов для доступа к данным без установки сложного софта для клиентов. Гейтвеи порой могут быть с довольно сложной логикой, требующей регулярного тестирования.  Если вы разрабатываете open-source проект и храните его на Github, то для тестов отлично подойдет Github Actions. Тем не менее, чтобы запустить готовый билд на Github Actions, нужно немного заморочиться. Доступные билды несовместимы с серверами, которые предоставляет Github. Поэтому можно пойти двумя путями: Каждый раз билдить ноду для тестов Установить эмулятор, чтобы запускать готовый билд Давайте пойдем по второму пути, чтобы запускать именно тот билд, который будет использоваться на наших реальных серверах. Файл .github/workflows/tests.yaml  С помощью него устанавливается QEMU и запускается Docker. Содержимое Dockerfile. В нем также происходит установка mysql, но если для вашего проекта это не нужно, то можно удалить строки отвечающие за mysql.  Содержимое startup.sh для запуска TON Storage Daemon.  Вы можете ознакомиться с реальным примером проекта, использующего TON Storage и Github Actions тут. И да и нет. Официально, существует инструкция о том, как может работать рынок хранения данных. С помощью нее, люди могут платить провайдерам данных в Toncoin, а провайдеры зарабатывать Toncoin за хранение. Тем не менее, развитого для этого рынка нет. Если вы захотите воспользоваться инструкцией, то едва ли сможете найти провайдера или клиентов. По крайне мере сейчас, пока TON сосредоточен на самом блокчейне, а не на Storage. Идея состоит в том, что можно взять смарт контракт из официального репозитория и развернуть его в TON. Контракт принимает запросы на хранение и управляет платежами. Провайдер данных скачивает и раздает файлы клиентам. Вот как это работает: Провайдер запускает storage-daemon, развертывает смарт контракт и настраивает параметры. Адрес контракта распространяется среди потенциальных клиентов.  С помощью storage-daemon клиент создает Bag из своих файлов и отправляет специальное внутреннее сообщение в смарт контракт провайдера.  Смарт контракт провайдера создает обязательство хранения для обработки этого Bag.  Провайдер, обнаружив запрос в блокчейне, загружает Bag и активирует обязательство хранения.  Клиент может затем отправить платеж за хранение. Чтобы получить платеж, провайдер регулярно представляет контракту доказательство того, что он все еще хранит Bag. Если средства на контракте закончатся, обязательство считается неактивным, и от провайдера больше не требуется хранить Bag. Клиент может либо пополнить контракт, если хочет продолжить хранение у провайдера, либо может оставить все как и есть. Тогда файлы будут "забыты" в сети. Из-за сходства принципов работы TON Storage с торрентами, идея использования его в качестве альтернативы заслуживает внимания. И уже существует проект под названием TON Torrent, доступный на GitHub. Разработанный на Go, он неплохо работает на основных ОС. В его основе лежит версия Storage на Go tonutils-storage. ​ TON Torrent позволяет скачивать файлы даже с домашнего интернет-соединения, но файлы должны быть размещены на нодах со статическими IP. Однако стоит отметить, что раздача файлов с серого IP через этот клиент не будет возможной. TON Torrent может стать шагом на пути к использованию TON Storage в повседневной практике, но без маркетинга и инноваций в самом протоколе едва ли это возможно. TON Storage во многом представляет собой адаптированный торрент-протокол, который несовместим с другими протоколами. Работая на базе протоколов TON и типов данных TL, он становится интересным элементом в экосистеме. Кроме этого, особых нововведений в протоколе нет. TON Storage имеет потенциал стать ключевым инструментом для хранения всех объемных данных пользователей TON, и возможно, даже Telegram, но это видится перспективой отдаленного будущего. На текущий момент, применение TON Storage выглядит рациональным лишь в случае глубокой интеграции ваших проектов с экосистемой TON и при условии вашей готовности ждать неопределенное время до того момента, как TON Foundation активизирует свои усилия в данном направлении. Если же вам требуется надежное хранилище с активным сообществом и стабильной работой программного обеспечения уже сейчас, то рассмотрите возможность использования альтернативных решений.  Web3 Full Stack