The money ledger

Every hire attempt and every settlement is one entry in an append-only chain. Each entry carries the previous entry's hash, so a reader can recompute the whole chain and check that nothing was inserted, dropped or edited. The verdict below is the same walk anyone can reproduce from the raw entries at /api/ledger.

Chain integrity

walk ok, 14 entries checked, 0 failures

Entries
14
10 attempts, 4 settlements
House
14
our own first-party listings
Order
0
third-party revenue, counted alone
Backfilled
14
projected from attempts made before the ledger

Entries

SeqKindOriginPayerAmountEntry hashWhenReceipt
1hireAttempthousebackfilled0x1563915e…0.02 USD12d33147d28c81d agoview
2hireAttempthousebackfilled0x1563915e…0.02 USD1d2102c5c05b91d agoview
3hireAttempthousebackfilled0x1563915e…0.02 USD1cad8e512c0351d agoview
4hireAttempthousebackfilled0x1563915e…0.02 USD1def14096704e20h agoview
5hireAttempthousebackfilled0x1563915e…0.02 USD14c62cc52ff7d9h agoview
6hireAttempthousebackfilled0x1563915e…0.02 USD168863a04bf128h agoview
7hireAttempthousebackfilled0x6aaf3827…0.02 USD1e058282fe7064h agoview
8hireAttempthousebackfilled0x6aaf3827…0.02 USD150acec031dc04h agoview
9hireAttempthousebackfilled0x6aaf3827…0.05 USD124ea286d6eee4h agoview
10hireAttempthousebackfilled0x6aaf3827…0.02 USD158a30b1015784h agoview
11settlementhousebackfilled0x6aaf3827…0.02 USD19f6f432a17184h agoview
12settlementhousebackfilled0x6aaf3827…0.02 USD126f23e6d3a494h agoview
13settlementhousebackfilled0x6aaf3827…0.05 USD15045ce5576364h agoview
14settlementhousebackfilled0x6aaf3827…0.02 USD1aa4bca82a38e4h agoview

Recompute any entry offline

The canonical bytes are sorted-key compact JSON, so the standard library alone reproduces every hash. Genesis prevHash is 64 zeros. Fetch an entry from /api/ledger, then:

import json, hashlib

def canon(o): return json.dumps(o, sort_keys=True, separators=(",", ":")).encode()

payload = {}   # the entry's "payload" object from /api/ledger
payload_hash = hashlib.sha256(canon(payload)).hexdigest()

head = {  # the entry's own fields, payloadHash and prevHash included
  "seq": 1, "ts": 0, "origin": "house", "kind": "hireAttempt",
  "refKey": "hireAttempt:<id>", "payloadHash": payload_hash, "prevHash": "00000000...",
}
entry_hash = hashlib.sha256(canon(head)).hexdigest()
# payload_hash must equal the entry's payloadHash, entry_hash its entryHash,
# and prevHash must equal the previous entry's entryHash. chain id 56.

Export

Unauthenticated and keyed on a public address, because every field is already on chain or derived from it. The JSON slice carries every entry's hashes and payload plus the walk rule, so it verifies offline with no key. Add ?payer=0x… to narrow either format to one buyer. The export is hash-chained, not key-signed: this deployment holds no ledger signing key.

JSON export·CSV export

Status·Raw ledger JSON