netbank
Прототип банка, которому не нужно верить на слово. Счета живут в общей цепочке блоков, её ведут независимые узлы, а клиент сам проверяет свой баланс.

Идея
В обычном банке клиент верит выписке. Здесь хотелось, чтобы ошибку или подлог оператора можно было доказать, а не только заметить.
Как устроено
Деньги двигаются только подписью клиента Ed25519. Рубли выпускает один шлюз. Свидетели заново исполняют каждый блок и подписывают его, и блок становится окончательным, когда набирается кворум — две подписи из трёх. Оператор, подписавший два разных блока одной высоты, попадает в доказательства подлога.
Кабинет клиента
Кабинет работает как приложение на телефоне. Ключ хранится в браузере, а баланс проверяется доказательством Меркла по заголовку блока у свидетеля, а не у оператора. Заморозка счёта возможна только открыто: с причиной и сроком. В кабинете есть задержка крупных переводов, доверенные лица, двое из трёх которых могут восстановить ключ, и смена ключа с задержкой.
Честно о границах
Это прототип. Смена операторов не дотягивает до полного BFT, ключи в браузере демонстрационные, между узлами нет TLS.
Блок с кворумом печатей
Реестр — это книга, блок — страница. Рычаг оператора только переворачивает страницы, а печать на странице появляется, когда опускаются хотя бы две из трёх печатей свидетелей.
Экраны
Технически
- C++20: детерминированное ядро без сети, диска и времени, цепочка блоков и узел с HTTP API.
- Monocypher: подписи Ed25519 и хеши BLAKE2b, доказательства Меркла для каждого счёта.
- Демо-сеть в Docker Compose: два оператора, три свидетеля и регулятор.
- Веб-клиенты проверяют подписи и доказательства прямо в браузере: обозреватель, кабинет и панель оператора.
- Кросс-проверка вычислений на Python и сценарий «злого оператора», которого ловят свидетели.
C++20 · Monocypher · Ed25519 · Merkle · Docker · PWA