Все работы

netbank

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

Тип
Спецпроект, прототип
Платформа
C++20, веб
Что делали
Архитектура и разработка
Год
2026
netbank

Идея

В обычном банке клиент верит выписке. Здесь хотелось, чтобы ошибку или подлог оператора можно было доказать, а не только заметить.

Как устроено

Деньги двигаются только подписью клиента Ed25519. Рубли выпускает один шлюз. Свидетели заново исполняют каждый блок и подписывают его, и блок становится окончательным, когда набирается кворум — две подписи из трёх. Оператор, подписавший два разных блока одной высоты, попадает в доказательства подлога.

Кабинет клиента

Кабинет работает как приложение на телефоне. Ключ хранится в браузере, а баланс проверяется доказательством Меркла по заголовку блока у свидетеля, а не у оператора. Заморозка счёта возможна только открыто: с причиной и сроком. В кабинете есть задержка крупных переводов, доверенные лица, двое из трёх которых могут восстановить ключ, и смена ключа с задержкой.

Честно о границах

Это прототип. Смена операторов не дотягивает до полного BFT, ключи в браузере демонстрационные, между узлами нет TLS.

Блок с кворумом печатей

Реестр — это книга, блок — страница. Рычаг оператора только переворачивает страницы, а печать на странице появляется, когда опускаются хотя бы две из трёх печатей свидетелей.

3 665
Штампы свидетелей, касающиеся страницы: две из трёх закрепляют блокСтраницы — блоки цепочки; рычаг оператора лишь листаетЯщик с ключом клиента и бирки с хэшами — Меркл-доказательствоМодель netbank — прототипа банка, который не может потерять клиента. Это леджер на C++20: счета лежат в общей цепочке блоков, которую независимо хранят узлы сети. Деньги двигаются только по собственной подписи клиента (Ed25519): оператор их тронуть не может, как и открыть ящик без ключа; рубли выпускает только шлюз. Узлы-свидетели заново исполняют каждый блок и подписывают его, и блок окончателен при кворуме в 2 подписи из 3 — на стенде это две печати из трёх; рычаг оператора переворачивает страницу, но прижать печать не может. Остаток клиент проверяет сам: доказательством Меркла по заголовку блока у свидетеля, а не у оператора (в демо-кабинете — «подтверждено блоком №3665, 3 подписи свидетелей»). Оператор, подписавший два разных блока на одной высоте, попадает в доказательство мошенничества. В демо-сети 2 оператора, 3 свидетеля и 1 регулятор.

Технически

  • C++20: детерминированное ядро без сети, диска и времени, цепочка блоков и узел с HTTP API.
  • Monocypher: подписи Ed25519 и хеши BLAKE2b, доказательства Меркла для каждого счёта.
  • Демо-сеть в Docker Compose: два оператора, три свидетеля и регулятор.
  • Веб-клиенты проверяют подписи и доказательства прямо в браузере: обозреватель, кабинет и панель оператора.
  • Кросс-проверка вычислений на Python и сценарий «злого оператора», которого ловят свидетели.

C++20 · Monocypher · Ed25519 · Merkle · Docker · PWA

Обсудим ваш проект?

Обсудить проект