Демон хранения
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Демон хранения (storage daemon) — это программа, используемая для загрузки и обмена файлами в сети TON. Другая программа storage-daemon-cli
используется для управления уже запущенным демоном хранения из консоли.
Текущую версию демона хранения можно найти в репозитории в ветви Testnet.
Требования к аппаратному обеспечению
- не менее 1 ГГц частоты и 2 ядер у процессора
- не менее 2 ГБ оперативной памяти
- не менее 2 ГБ SSD (без учета места для торрентов)
- пропускная способность сети 10 Мб/с со статическим IP
Бинарные файлы
Вы можете скачать бинарные файлы storage-daemon
и storage-daemon-cli
для Linux/Windows/MacOS из раздела сборок в GitHub-репозитории.
Компиляция исходного кода
Вы можете самостоятельно скомпилировать storage-daemon
и storage-damon-cli
из файлов с исходным кодом, используя инструкцию.
Ключевые понятия
- Пакет файлов («bag of files») или просто Пакет — коллекция файлов, распространяемых через хранилище TON
- Сетевая часть TON Storage основана на технологии, схожей с торрентами, поэтому термины торрент, пакет файлов и пакет будут использоваться как взаимозаменяемые. Однако важно отметить некоторые различия: TON Storage передает данные по протоколу ADNL по протоколу RLDP, каждый пакет распространяется через свой собственный сетевой оверлей, меркловая структура может существовать в двух вариантах — с большими чанками для эффективного скачивания и маленькими для эффективного доказательства права собственности, а для поиска пиров используется сеть TON DHT.
- Пакет файлов состоит из информации о торренте и блока данных.
- Блок данных начинается с заголовка торрента — структуры, содержащей список файлов с их именами и размерами. Далее в блоке данных следуют сами файлы.
- Блок данных делится на так называемые «чанки» (по умолчанию 128 КБ), и на основе SHA256-хэшей этих чанков строится дерево Меркла (из TVM-ячеек). Это позволяет создавать и проверять доказательства Меркла для отдельных фрагментов, а также эффективно воссоздавать пакет, обмениваясь только доказательством измененного чанка.
- Информация о торренте содержит Меркловый корень следующих данных:
- Размер чанка (блок данных)
- список размеров чанков
- Хэш дерева Меркла
- Описание – любой текст, указанный создателем торрента
- Информация о торренте сериализуется в TVM-ячейку. Хэш этой ячейки называется BagID, и он уникально идентифицирует Bag.
- Bag meta — это файл, содержащий информацию о торренте и заголовок торрента.* Это аналог файлов с расширением
.torrent
.
Запуск storage-daemon и storage-daemon-cli
Пример команды для запуска storage-daemon:
storage-daemon -v 3 -C global.config.json -I <ip>:3333 -p 5555 -D storage-db
-v
- уровень многословия (INFO)-C
- глобальная конфигурация сети (скачать глобальную конфигурацию)-I
- IP-адрес и порт для ADNL-p
- TCP-порт для консольного интерфейса-D
- каталог для базы данных демона хранения
Управление storage-daemon-cli
Его начинают так:
storage-daemon-cli -I 127.0.0.1:5555 -k storage-db/cli-keys/client -p storage-db/cli-keys/server.pub
-I
- это IP-адрес и порт демона (порт тот же, что указан в параметре-p
выше)-k
и-p
- это приватный ключ клиента и публичный ключ сервера (аналогичноvalidator-engine-console
). Эти ключи генерируются при первом запуске демона и помещаются в папку<db>/cli-keys/
.
Список команд
Список команд storage-daemon-cli
можно получить с помощью команды help
.
У команд бывают позиционные параметры и флаги. Параметры с пробелами должны быть заключены в кавычки ('
или "
), также пробелы могут быть экранированы. Возможны и другие варианты экранирования, например:
create filename\ with\ spaces.txt -d "Description\nSecond line of \"description\"\nBackslash: \\"
Все параметры после флага --
являются позиционными. Его можно использовать для указания имен файлов, начинающихся с тире:
create -d "Description" -- -filename.txt
storage-daemon-cli
можно запустить в неинтерактивном режиме, передав ему команды для выполнения:
storage-daemon-cli ... -c "add-by-meta m" -c "list --hashes"
Добавление пакета файлов
Чтобы загрузить пакет файлов, Вам необходимо знать его BagID
или иметь мета-файл. Следующие команды могут быть использованы для добавления пакета для загрузки:
add-by-hash <hash> -d directory
add-by-meta <meta-file> -d directory
Пакет будет загружен в указанную директорию. Вы можете опустить этот параметр, тогда пакет будет сохранен в директории демона хранения.
Хэш указывается в шестнадцатеричной форме (длина — 64 символа).
При добавлении пакета с помощью мета-файла информация о пакете будет доступна сразу: размер, описание, список файлов. При добавлении по хэшу вам придется подождать, пока эта информация будет загружена.
Управление добавленными пакетами
- Команда
list
выводит список пакетов. list --hashes
выводит список с полными хэшами.
Во всех последующих командах <BagID>
— это либо хэш (шестнадцатеричный), либо порядковый номер пакета в рамках сессии (номер, который можно увидеть в списке, вызываемом командой list
). Порядковые номера пакетами не сохраняются между перезапусками storage-daemon-cli и недоступны в неинтерактивном режиме.
Методы
get <BagID>
— выводит подробную информацию о пакете: описание, размер, скорость загрузки, список файлов.get-peers <BagID>
— выводит список пиров.download-pause <BagID>
,download-resume <BagID>
— приостанавливает или возобновляет загрузку.upload-pause <BagID>
,upload-resume <BagID>
— приостанавливает или возобновляет загрузку.remove <BagID>
— удаляет пакет.remove --remove-files
также удаляет все файлы из пакета. Обратите внимание, что если пакет сохранен во внутренней директории демона хранения, файлы будут удалены в любом случае.
Частичная загрузка, Приоритеты
При добавлении пакета вы можете указать, какие файлы хо тите загрузить из него:
add-by-hash <hash> -d dir --partial file1 file2 file3
add-by-meta <meta-file> -d dir --partial file1 file2 file3
Приоритеты
Каждый файл в пакете файлов имеет приоритет — число от 0 до 255. Приоритет 0 означает, что файл не будет загружен. Флаг --partial
устанавливает указанным файлам приоритет 1, остальным — 0.
Вы можете изменить приоритеты уже добавленному пакету с помощью следующих команд:
priority-all <BagID> <priority>
— для всех файлов.priority-idx <BagID> <idx> <priority>
— для одного файла по номеру (увидеть его можно с помощью командыget
).priority-name <BagID> <name> <priority>
— для одного файла по имени. Приоритеты могут быть установлены еще до загрузки списка файлов.
Создание пакета файлов
Чтобы создать пакет и начать его распространение, воспользуйтесь командой create
:
create <path>
<path>
может указывать как на отдельный файл, так и на директорию. При создании пакета вы можете указать описание:
create <path> -d "Bag of Files description"
После того, как пакет будет создан, в консоли появится подробная информация о нем (включая хэш — BagID
, по которому пакет будет идентифицироваться), и демон начнет раздачу торрента. Дополнительные опции для команды create
:
--no-upload
— демон не будет распространять файлы среди пиров. Загрузка может быть запущена с помощьюupload-resume
.--copy
— файлы будут скопированы во внутреннюю директорию демона хранения.
Чтобы скачать пакет, другим пользователям достаточно знать его хэш. Вы также можете сохранить мета-файл торрента:
get-meta <BagID> <meta-file>