Вики ZooBC
Данные и хранение

Файлы в цепочке (DFS)

В ZooBC есть два способа хранить файл. Файл DFS предназначен для небольшого содержимого: файл передаётся внутри собственной транзакции, а цепочка записывает его как строку набора данных владельца. Более крупные файлы идут в пул хранения, разрезанные на фрагменты, которые никогда не попадают в цепочку. Эта статья — о файлах DFS.

Запись и содержимое

Файл DFS владельца по пути — это строка набора данных (owner, owner, "dfs:" + path): сеттер и получатель — оба владелец, а свойство — dfs:, за которым следует путь. Значение строки — шестнадцатеричная форма записи метаданных:

  • хеш SHA3-256 содержимого и его размер;
  • права доступа (0644);
  • две метки времени;
  • число чанков и хеш каждого чанка.

Само содержимое передаётся в теле транзакции. Тело может занимать не более 65 536 байт, поэтому файл DFS вмещает примерно до 64 КиБ. Узлы хранят байты в локальной таблице чанков рядом с цепочкой; в состояние консенсуса они не входят. Строка в цепочке содержит хеши, поэтому любой может сверить с ней содержимое.

Пути

Путь начинается с / и имеет длину не более 1 024 байт. Он не может содержать //, .., байт NUL, возврат каретки или перевод строки. Завершающий / отбрасывается, поэтому /a/b/ и /a/b называют один и тот же файл. Записывать строки с префиксами dfs: или dfs:dir: могут только транзакции DFS; SetupAccountDataset с любым из этих префиксов отклоняется.

Создание, обновление, удаление

ТранзакцияТипЧто делает
DFSCreateFile8создаёт файл по пути вместе с содержимым
DFSUpdateFile264заменяет содержимое по тому же пути
DFSDeleteFile520удаляет файл

Создание поверх существующего файла, а также обновление или удаление отсутствующего файла — оплаченные пустые операции: комиссия взимается, и ничего не меняется. Поэтому приложению следует прочитать строку по пути, прежде чем выбирать между созданием и обновлением.

Аренда и возвраты

Строка DFS — такой же объект набора данных, как любой другой. У неё есть собственный адрес депозита (ZBS_…), который может пополнить любой, и каждый период она платит аренду наборов данных за свои байты — свойство плюс шестнадцатеричное значение: по начальной цене 0,05 ZBC за МиБ за период в mainnet. Аренда берётся из депозита, затем с владельца и зачисляется в пул долголетия. Если не может заплатить ни тот, ни другой, строка деактивируется, как и любой набор данных.

Удаление файла DFS возвращает каждому плательщику, включая владельца, его собственную неиспользованную часть депозита. Деньги расходуются по принципу «первым пришёл — первым ушёл»: самый старый платёж расходуется полностью, прежде чем затрагивается следующий, поэтому самые недавние плательщики получают обратно больше всего.

Файл DFS или хранимый файл?

Файл DFSХранимый файл
Размерпримерно до 64 КиБдо 100 000 фрагментов по 1 МиБ
Содержимоевнутри транзакциифрагменты на пяти узлах-хранителях, никогда в цепочке
В цепочкеодна строка под dfs:манифест: корень, размеры и идентификаторы фрагментов
Измененияобновление и удаление по тому же путиу нового содержимого новый корень, поэтому это новый файл
Аренда идёт впул долголетияпул хранения
Управление доступомнет: содержимое находится в публичной транзакцииприватный флаг со списком допуска

Ни один из способов не зависит от машин ZooBC Foundation или от компьютера того, кто загрузил файл.

Два способа хранить файл: файл DFS внутри своей транзакции или хранимый файл, разрезанный на фрагменты, которые хранят пять узлов.
Два способа хранить файл: файл DFS внутри своей транзакции или хранимый файл, разрезанный на фрагменты, которые хранят пять узлов.

См. также