Провайдер хранилища
Эта страница переведена сообществом на русский язык, но нуждается в улучшениях. Если вы хотите принять участие в переводе свяжитесь с @alexgton.
Провайдер хранилища — это сервис, который хранит файлы за комиссию.
Двоичные файлы
Вы можете загрузить двоичные файлы storage-daemon и storage-daemon-cli для Linux/Windows/macOS из TON Auto Builds.
Компилляция из исходного кода
Вы можете скомпилировать storage-daemon и storage-damon-cli из исходников, используя эту инструкцию.
Основные понятия
Он состоит из смарт-контракта, который принимает запросы на хранение и управляет платежами от клиентов, а также приложения, которое загружает и обслуживает файлы для клиентов. Вот как это работает:
- Владелец провайдера запускает
storage-daemon, развертывает основной смарт-контракт и настраивает параметры. Адрес контракта передается потенциальным клиентам. - Используя
storage-daemon, клиент создает Bag из своих файлов и отправляет специальное внутреннее сообщение в смарт-контракт провайдера. - Смарт-контракт провайдера создает контракт хранения для обработки этого конкретного Bag.
- Провайдер, обнаружив запрос в блокчейне, загружает Bag и активирует контракт хранения.
- Затем клиент может перевести оплату за хранение на контракт хранения. Чтобы получить оплату, провайдер регулярно представляет контракт с доказательством того, что он все еще хранит Bag.
- Если средства на контракте хранения заканчиваются, контракт считается неактивным, и поставщику больше не требуется хранить Bag. Клиент может либо пополнить контракт, либо получить свои файлы.
Клиент также может получить свои файлы в любое время, предоставив доказательство права собственности на контракт хранения. Затем контракт передаст файлы клиенту и деактивируется.
Смарт-контракт
Исполь зование провайдера клиентами
Чтобы использовать провайдера хранения, вам необходимо знать адрес его смарт-контракта. Клиент может получить параметры провайдера с помощью следующей команды в storage-daemon-cli:
get-provider-params <address>
Параметры провайдера:
- Принимаются ли новые контракты на хранение.
- Минимальный и максимальный размер Bag (в байтах).
- Ставка — стоимость хранения. Указывается в nanoTON за мегабайт в день.
- Максимальный объем — как часто провайдер должен предоставлять доказательства хранения Bag.
Запрос на хранение
Вам необходимо создать Bag и сгенерировать сообщение с помощью следующей команды:
new-contract-message <BagID> <file> --query-id 0 --provider <address>
Информация:
Выполнение этой команды может занять некоторое время для больших Bag. Тело сообщения будет сохранено в <file> (не все внутреннее сообщение). Идентификатор запроса может быть любым числом от 0 до 2^64-1. Сообщение содержит параметры провайдера (скорость и максимальный диапазон). Эти параметры будут выведены после выполнения команды, поэтому и х следует дважды проверить перед отправкой. Если владелец провайдера изменит параметры, сообщение будет отклонено, поэтому условия нового контракта на хранение будут в точности соответствовать ожиданиям клиента.
Затем клиент должен отправить сообщение с этим телом на адрес провайдера. В случае ошибки сообщение вернется к отправителю (возврат). В противном случае будет создан новый контракт на хранение, и клиент получит от него сообщение с op=0xbf7bd0c1 и тем же идентификатором запроса.
На этом этапе контракт еще не активен. Как только поставщик загрузит Bag, он активирует контракт на хранение, и клиент получит сообщение с op=0xd4caedcd (также из контракта на хранение).
Контракт на хранение имеет клиентский баланс — это средства, которые клиент перевел на контракт и которые еще не были выплачены поставщику. Средства постепенно списываются с этого баланса (по ставке, равной ставке за мегабайт в день). Первоначаль ный баланс — это то, что клиент перевел с запросом на создание контракта хранения. Затем клиент может пополнить баланс, совершая простые переводы на контракт хранения (это можно сделать с любого адреса). Оставшийся баланс клиента возвращается get методом get_storage_contract_data в качестве второго значения (balance).
Контракт может быть закрыт в следующих случаях:
В случае закрытия контракта хранения клиент получает сообщение с остатком баланса и op=0xb6236d63.
- Сразу после создания, перед активацией, если провайдер отказывается принять контракт (превышен лимит провайдера или другие ошибки).
- Баланс клиента достигает 0.
- Провайдер может добровольно закрыть контракт.
- Клиент может добровольно закрыть контракт, отправив сообщение с
op=0x79f937eaсо своего адреса и любого идентификатора запроса.
Запуск и настройка провайдера
Провайдер хранилища является частью storage-daemon и управляется storage-daemon-cli. storage-daemon необходимо запустить с флагом -P.