Что это за проект, зачем он и как устроен — без единого умного слова.
Это серверная часть приложения-кошелька — как Payme или Click: у пользователя в телефоне лежат деньги, он пополняет, переводит друзьям, платит по QR.
У любого такого приложения две половины:
Кнопки и экраны, которые видит пользователь. Это интерфейс — вот эта страница и сам кошелёк.
Невидимая программа, которая решает, у кого сколько денег и можно ли провести операцию. Вот это и было главным заданием.
Все страшные слова из задания — ledger, KYC, OTP, blacklist — это просто список функций, которые есть в каждом банковском приложении.
Как хранить, сколько у человека денег?
Завести колонку «баланс = 100 000» и переписывать её. Упадёт программа посреди записи или придут два перевода разом — цифра собьётся, и никто не узнает, как так вышло.
Колонки «баланс» нет вообще. Есть тетрадь, куда только дописывают строки: «+100 000», «−30 000». Баланс — это сумма всех строк.
Исправлять и удалять строки нельзя никогда; ошибся — допиши строку-исправление. Это и называется ledger (журнал). Ничего не теряется при сбоях, ничего нельзя втихую подправить, и всегда видно, откуда взялась каждая копейка.
Пользователь нажал «Пополнить 50 000». Что происходит:
Перевод, вывод, оплата по QR — тот же круг, меняется только шаг 5. Перевод — это две строки разом: «−25 000» у тебя и «+25 000» у получателя, либо обе, либо ни одной.