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")