PEP: pep-03-reference-update ``` $$$ (set lang ru) ``` Reference представляет собой адресуемую мутабельную ссылку на контент. Предпосылки =========== 1. Ссылка (Reference) представляет собой единицу адресации "потока" блоков (топики, чаты, блокчейны, статический файл с обновлениями и так далее) 2. Со ссылкой ассоциируются владельцы/информация о списке тех, кто может читать данные по ссылке / писать данные по ссылке 3. Пир должен знать, как обрабатывать операции над ссылкой, а именно Парсить, проверять полномочия 4. Пир должен уметь обрабатывать команды изменения полномочий Тезисы ====== 1. При создании ссылки устанавливается первоначальный ACB 2. При создании ссылки устанавливается список доступных для неё операций 3. Операции над ACB являются предопределенными 4. Остальные операции определяется типом ссылки Структуры данных ================ ``` Ref: ACB ;; ссылка на ACB Journal ;; ссылка на merkle tree текущего журнала операций Head ;; ссылка на текущее (commited) состояние ссылки Proof ;; потенциально -- тип proof. Как его сделать расширяемым ;; пока что неизвестно, вероятно, это нечто, вычисляемое ;; из текущего состояния. ;; как оно вычисляется / в принципе может вычисляться пока не вполне ;; понятно, поэтому на текущий момент это проверка ACL: ;; хэш коммита >- принадлежит -> owners. ``` Команды протокола ================= RefAddOwner : (STATE,BLOB) ---------------------------- acl: root добавить owner RefDelOwner : (STATE, BLOB) ---------------------------- acl: root удалить owner RefAddWriter : (STATE, BLOB) ---------------------------- acl: owner добавить writer RefDelWriter : (STATE, BLOB) ---------------------------- acl: owner удалить writer RefAddReader : (STATE, BLOB) ---------------------------- acl: owner добавить reader RefDelReader : (STATE, BLOB) ---------------------------- acl: owner удалить reader RefUpdateState : (STATE, OP, ARGS*) ----------------------------------- acl: writer RefCommit : (STATE, NEW-STATE, PROOF:PROOF-TYPE) ------------------------------------------------ acl: зависит от PROOF-TYPE Обработка команд протокола ========================== TODO: journal-types-implementation