Демон хранения
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @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>