Wallet Code: E

self.balance -= amount recipient_wallet.balance += amount

def _log_transaction(self, txn_type, amount, counterparty=None): txn = "id": str(uuid.uuid4()), "type": txn_type, "amount": amount, "timestamp": datetime.utcnow().isoformat(), "counterparty": counterparty, "balance_after": self.balance self.transactions.append(txn) alice = SimpleWallet("alice_123") bob = SimpleWallet("bob_456") e wallet code

import hashlib import uuid from datetime import datetime class SimpleWallet: def (self, user_id): self.user_id = user_id self.balance = 0.0 self.transactions = [] Concurrency & Race Conditions Imagine two API calls

def deposit(self, amount): if amount <= 0: return "Amount must be positive" self.balance += amount self._log_transaction("DEPOSIT", amount) return f"Deposited $amount. New balance: $self.balance" counterparty=None): txn = "id": str(uuid.uuid4())

self._log_transaction("SEND", amount, recipient_wallet.user_id) recipient_wallet._log_transaction("RECEIVE", amount, self.user_id)

This works for a script, but real e-wallet code is much more complex. 1. Concurrency & Race Conditions Imagine two API calls trying to deduct from the same balance at the same time. Without proper locking or database transactions, users could overspend.

print(f"Alice balance: $alice.balance") print(f"Bob balance: $bob.balance")