integrity.py
# StockFlow · transaction integrity
def register_movement(
product: Product, qty: int, kind: str
) -> Movement:
txn = Movement(
product_id=product.id,
quantity=qty,
kind=kind, # "in" | "out"
)
# 1 · fingerprint the transaction
digest = sha256(txn.payload).hexdigest()
# 2 · timestamp it with OpenTimestamps
proof = ots.stamp(digest) # → Bitcoin
txn.hash, txn.proof = digest, proof
return repo.save(txn)
def verify(txn: Movement) -> datetime:
ok = ots.verify(txn.proof)
assert ok.bitcoin_block # tamper-evident
return ok.timestamp
# → auditable & immutable, forever