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