% vim: set textwidth=70: \chapter{Дизайн} Итак, \term{hbs2-browser}{hb2-browser} это компонент, который позволяет просматривать некие метаданные, сохраненные в \term{ref}{ссылках}, видимо, типа \term{refchan}{рефчан}. Почему refchan: \begin{enumerate} \item Требуется несколько авторов, т.е агентов, которые будут публиковать данные; \item Требуется при этом исключить компрометацию всей системы при компрометации какого-то одного приватного ключа <<автора>>; \item Требуется возможность валидации; \item Требуется проверка ACL; \item Требуется включение/исключение авторов. \end{enumerate} \section{Стейт} Исходя из требований, введём стейт как рефчан блоков транзакций, где каждая транзакция содержит ссылку на блок, а каждый блок является \term{sstable}{sstable}, т.е индексированным, однократно записываемым отсортированным множеством пар \texttt{(ключ, значение)}. Такой формат гарантирует нам, что одинаковая кодовая база (в плане настроек LSM и соглашений) будет порождать идентичные блоки. В тоже время --- каждая отдельная <<транзакция>>, то есть <<факт>> -- не будет порождать отдельного адресуемого объекта, таким образом, будут снижены все связанные с этим накладные расходы. При этом мы можем относительно быстро находить блок и проверять его наличие в прочих сегментах. % \section{Структуры данных и протоколы} % \subsection*{Предпосылки} % \subsection*{Возможное византийское поведение узлов} % \begin{description} % \end{description} % \subsubsection*{Сообщение фактически неверных данных} % \subsubsection*{Флуд} % \section{Стейт} % Дизайн стейта строится из следующих предпосылок: % \paragraph{Жопа} % \paragraph{Кита} % \paragraph{Печень} % \paragraph{Трески}