Перейти к основному содержимому

Демон хранения

warning

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