Практикум — шаг 4: compliance и тесты
Завершаем практикум слоем compliance и автотестами. Этот слой отделяет учебную игрушку от сервиса, который можно показывать комплаенсу и аудиторам.
KYC-уровни
class KycLevel(str, Enum):
NONE = "none"
BASIC = "basic"
ENHANCED = "enhanced"
| Уровень | В практикуме | На бирже |
|---|---|---|
none | Суточный лимит 100 LAB, крупные переводы запрещены | Ограниченный вывод |
basic | Обычные переводы после «проверки паспорта» | Стандартный retail |
enhanced | Переводы ≥ 1000 LAB | VIP, юрлица, источник средств |
Пороги заданы константами в compliance.py — в продакшене они приходят из конфигурации и политик AML.
Проверки перед переводом
def check_transfer(self, sender, recipient, amount) -> tuple[bool, str]:
if recipient in SANCTIONED_ADDRESSES:
return False, "адрес в учебном sanctions-списке"
...
if amount >= ENHANCED_KYC_THRESHOLD and profile.kyc_level is not KycLevel.ENHANCED:
return False, "крупный перевод требует enhanced KYC"
Типичные категории в реальных системах:
- Sanctions screening (списки OFAC, МВФ, национальные перечни).
- Лимиты по KYC (суточные / месячные).
- Travel Rule для крупных переводов (передача данных контрагента между VASP).
Материал про KYC на биржах — в главе о криптовалютах и вводной.
Журнал аудита (audit log)
Каждое решение compliance записывается:
def _audit(self, event: str, **fields: Any) -> None:
self.audit_log.append({"ts": time.time(), "event": event, **fields})
События: register, kyc_update, transfer_ok, blocked_kyc, blocked_sanctions.
В продакшене журнал:
- пишется в append-only хранилище (WORM, отдельная БД);
- коррелирует с
trace_idHTTP-запроса; - хранится по срокам политики (годы).
Для разбора инцидента выведите хвост в demo.py:
import json
print(json.dumps(ledger.compliance.audit_log[-3:], indent=2, ensure_ascii=False))
Автотесты (pytest)
Из корня ledger-lab/:
pytest -q
Пример теста целостности цепи (tests/test_ledger.py):
from ledger_lab.block import genesis_block
from ledger_lab.chain import Blockchain
def test_chain_after_mine():
chain = Blockchain(difficulty=1)
chain.mine_block([{"type": "transfer", "amount": 1}])
ok, _ = chain.is_valid()
assert ok
| Сценарий | Что проверить |
|---|---|
Цепочка после mine_block | is_valid() → успех |
Подмена transactions без нового хеша | is_valid() → отказ |
| Подпись Ed25519 | sign / verify на одном сообщении |
| Vault AES | round-trip PEM с паролем |
| Крупный перевод без enhanced KYC | submit_transfer → отказ |
| Адрес из sanctions-списка | submit_transfer → отказ |
Тесты — живой чек-лист регрессии. На каждое правило compliance заведите отдельный кейс «ожидаем отказ» и «ожидаем успех».
Дисклеймер и право
Практикум иллюстрирует технические механизмы. Запуск обмена криптоактивами для клиентов в РФ и других странах требует правового анализа (лицензии, 115-ФЗ, FATF, GDPR для данных KYC). Учебный код не является готовым compliance-решением.
Куда развивать проект
Идеи для самостоятельной доработки (от простого к сложному):
- REST API (FastAPI) поверх
Ledger— эндпоинтыPOST /transfer,GET /chain. - Стакан заявок — лимитные заявки buy/sell и matching в памяти.
- Persist — SQLite для цепи и audit log; перезапуск без потери истории.
- P2P — два процесса обмениваются блоками и выбирают длинную цепь (
replace_chain). - Testnet — подключение к Sepolia через
web3.pyтолько для чтения блоков (без хранения ключей в коде).
Смежные разделы:
- DevOps / CI — прогон
pytestв пайплайне. - Информационная безопасность — угрозы и контроли.
- Чек-лист раздела — самопроверка по теории.
Итог практикума
Вы собрали приложение, где:
- Блокчейн отвечает за неизменяемый журнал операций.
- Криптография подтверждает авторство переводов и защищает секреты.
- Ledger моделирует учёт активов и очередь транзакций.
- Compliance показывает, как продуктовые правила стоят перед движением средств.
Вернитесь к обзору или к итогам раздела, чтобы связать практику с теорией.
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Блокчейн как распределённый реестр, криптовалюты, транзакции, токены, смарт-контракты и NFT — вводная глава для новичков с примерами кода и интерактивом. Пошаговый практикум: учебное приложение Crypto Ledger Lab — блокчейн, подписи, переводы активов и compliance на Python. Ledger Lab, шаг 1: структура блока, SHA-256, связь previous_hash и учебный proof-of-work. Ledger Lab, шаг 2: Ed25519, цифровая подпись перевода, AES-GCM для шифрования приватного ключа. Ledger Lab, шаг 3: балансы активов, mempool, применение переводов и симуляция spot-операции. Цифровые и криптовалюты, история до Bitcoin, волатильность и практика — продолжение вводной главы о блокчейне. Краткие итоги раздела "Блокчейн, криптовалюты и NFT" и практикума Ledger Lab. Чек-лист раздела Блокчейн, криптовалюты и NFT — вопросы для самопроверки в энциклопедии Вселенная IT.Блокчейн, крипта и NFT
Практикум Ledger Lab
Практикум 1 — блокчейн
Практикум 2 — криптография
Практикум 3 — ledger
Криптовалюты
Итоги
Чек-лист самопроверки