From 79960751ca5a1ce9cae41337897cb88e0500daed Mon Sep 17 00:00:00 2001 From: Dmitry Zuikov Date: Sun, 19 Feb 2023 09:20:22 +0300 Subject: [PATCH] pep-03 --- .fixme/log | 3 +- docs/drafts/pep-04.txt | 80 +++++++++++++++++++++++++++++++++++++++--- 2 files changed, 78 insertions(+), 5 deletions(-) diff --git a/.fixme/log b/.fixme/log index 35d12575..8a172ee6 100644 --- a/.fixme/log +++ b/.fixme/log @@ -182,4 +182,5 @@ fixme-set "workflow" "backlog" "HwCVP8sL7m" fixme-set "workflow" "test" "FHMMGPm8Kh" fixme-set "workflow" "test" "Ac1F6f2pni" fixme-set "assigned" "voidlizard" "Ac1F6f2pni" -fixme-set "workflow" "wip" "4ZMqvoTMY3" \ No newline at end of file +fixme-set "workflow" "wip" "4ZMqvoTMY3" +fixme-merged "146adg8Dyy" "HycuVXNhiZ" \ No newline at end of file diff --git a/docs/drafts/pep-04.txt b/docs/drafts/pep-04.txt index 905b8957..1e9cd655 100644 --- a/docs/drafts/pep-04.txt +++ b/docs/drafts/pep-04.txt @@ -48,8 +48,7 @@ Ref: ;; из текущего состояния. ;; как оно вычисляется / в принципе может вычисляться пока не вполне ;; понятно, поэтому на текущий момент это проверка ACL: - ;; хэш коммита >- принадлежит -> owners. - + ;; ключ публикатора коммита принадлежит owners. ``` @@ -101,21 +100,94 @@ acl: owner удалить reader -RefUpdateState : (STATE, OP, ARGS*) ------------------------------------ +RefUpdateState : (STATE, OP, ARGS:[ARG-TYPE]) +--------------------------------------------- acl: writer +OP: Опкод операции, определяется Reference + +ARGS: список аргументов, возможно, пустой + +ARG-TYPE: BLOB INT HASH + +INT: целое число переменной размерности + +BLOB: произвольная строка фиксированной длины + +HASH: хэш блока + RefCommit : (STATE, NEW-STATE, PROOF:PROOF-TYPE) ------------------------------------------------ acl: зависит от PROOF-TYPE +RefGetJournal + +acl: readers (?) + Обработка команд протокола ========================== +RefCommit +--------- + +1. Проверить PROOF +3. Построить MERKLE TREE журнала, однозначно упорядочив операции +2. Текущий STATE = JOURNAL-MERKLE-TREE +3. Удалить JOURNAL +4. Создать новый пустой JOURNAL + +RefGetJournal +------------- + +acl: reader (?) + +1. Построить MERKLE TREE журнала, однозначно упорядочив операции +2. Вернуть HASH(MERKLE-TREE) журнала + + +Любая другая команда +-------------------- + +1. Распарсить +2. Проверить типы операндов +3. Проверить ACL +4. Записать в журнал + + +Журнал должен позволять добавлять записи в конец без +чтения всего журнала. + +Команды в журнал добавляются последовательно по мере +их поступления. + + + +Резюме +====== + +1. Состояние (state) однозначно задаётся потоком команд +2. Каждая команда может иметь своим аргументом ссылку на HASH + + +Утверждается, что имея подобный набор примитивов, мы можем построить +определенный (определить) класс распределенных систем. + +Так как ссылки на другие объекты задаются явно при помощи типа HASH, +мы знаем, на какие объекты ссылается ссылка. + +Таким образом, можно реализовать сборку мусора, когда объекты, +на которых не ссылается ни одна ссылка, могут удаляться. + TODO: journal-types-implementation + - Добавление в конец без чтения всего журнала + - Записи переменного размера + - Задавать размер страницы + - Запись может быть произвольного размера + - Для записи выделяется целое число страниц +