Практикум — шаг 3: ledger и переводы
Собираем Ledger — объект, который связывает блокчейн, подписи и «биржевой» слой балансов. Это упрощённая модель spot-перевода без стакана заявок.
Модель балансов
balances: dict[str, dict[str, float]] # address -> asset -> amount
- Актив по умолчанию —
LAB(учебный токен). - При
create_walletначисляется стартовый баланс (как testnet faucet). - Реальные сети хранят состояние в реестре; CEX — в SQL. Здесь состояние в памяти, а в блок уходит журнал операций.
Mempool — очередь до блока
@dataclass
class Mempool:
pending: list[Transfer] = field(default_factory=list)
def drain(self) -> list[dict[str, Any]]:
batch = [tx.to_dict() for tx in self.pending]
self.pending.clear()
return batch
Аналогия с mempool в Bitcoin: транзакция сначала ожидает, затем майнер (у нас — метод mine_pending) включает пакет в блок.
submit_transfer — сквозной путь
def submit_transfer(self, sender, recipient, asset, amount) -> tuple[bool, str]:
ok, reason = self.compliance.check_transfer(sender, recipient, amount)
if not ok:
return False, reason
if self.balances[sender].get(asset, 0) < amount:
return False, "недостаточно средств"
tx = Transfer(..., nonce=self.nonces[sender])
tx.sign(self.keys[sender])
self.mempool.add(tx)
return True, "в mempool"
Порядок проверок намеренный:
- Compliance (регуляторика до движения денег).
- Баланс (бизнес-правило).
- Подпись (криптографическое авторство).
mine_pending — финализация
def mine_pending(self) -> tuple[bool, str]:
batch = self.mempool.drain()
for raw in batch:
# списание / зачисление
self.compliance.record_successful_transfer(sender, amount)
self.blockchain.mine_block(batch)
return True, f"добавлен блок #{self.blockchain.last_block.index}"
После майнинга:
- балансы обновлены;
nonceотправителя увеличен;- блок добавлен в цепь с PoW.
Соберите в demo.py короткий сценарий: два кошелька, перевод 50 LAB, майнинг, затем попытка перевода 5000 без enhanced KYC. Ожидаемое поведение: первый перевод в mempool и в блоке, второй отклонён compliance, blockchain.is_valid() — True.
Сравнение с криптотрейдингом
| Операция | Ledger Lab | Биржа (CEX) |
|---|---|---|
| Депозит | faucet / стартовый баланс | Банковский перевод / on-chain deposit |
| Вывод | submit_transfer + mine | Вывод + проверки AML |
| Сделка spot | Перевод актива между адресами | Сделка в matching engine |
| История | Цепочка блоков + audit | Таблицы trades + отчёты |
Стакан заявок (order book), маржа и деривативы в практикум не входят — их можно добавить отдельным модулем order.py (см. шаг 4).
Практическое задание
- Создайте два кошелька, переведите 25
LAB, смайньте блок, выведитеbalances. - Отправьте второй перевод с тем же
nonceвручную (скопируйтеTransfer) — обсудите, почему нужен учёт nonce. - Добавьте актив
BTCвbalancesи перевод между активами (потребуется расширитьTransfer).
После шага 4 добавьте pytest-сценарий «успешный перевод после KYC basic».
Что дальше
См. также
Другие статьи этого же раздела в боковом меню (как на странице "О разделе"). Блокчейн как распределённый реестр, криптовалюты, транзакции, токены, смарт-контракты и NFT — вводная глава для новичков с примерами кода и интерактивом. Пошаговый практикум: учебное приложение Crypto Ledger Lab — блокчейн, подписи, переводы активов и compliance на Python. Ledger Lab, шаг 1: структура блока, SHA-256, связь previous_hash и учебный proof-of-work. Ledger Lab, шаг 2: Ed25519, цифровая подпись перевода, AES-GCM для шифрования приватного ключа. Ledger Lab, шаг 4: KYC-уровни, лимиты, sanctions, журнал аудита, pytest и идеи развития проекта. Цифровые и криптовалюты, история до Bitcoin, волатильность и практика — продолжение вводной главы о блокчейне. Краткие итоги раздела "Блокчейн, криптовалюты и NFT" и практикума Ledger Lab. Чек-лист раздела Блокчейн, криптовалюты и NFT — вопросы для самопроверки в энциклопедии Вселенная IT.Блокчейн, крипта и NFT
Практикум Ledger Lab
Практикум 1 — блокчейн
Практикум 2 — криптография
Практикум 4 — compliance
Криптовалюты
Итоги
Чек-лист самопроверки