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, 30 entries checked, 0 failures

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

Entries

SeqKindOriginPayerAmountEntry hashWhenReceipt
1hireAttempthousebackfilled0x1563915e…0.02 USD12d33147d28c8…47d agoview
2hireAttempthousebackfilled0x1563915e…0.02 USD1d2102c5c05b9…47d agoview
3hireAttempthousebackfilled0x1563915e…0.02 USD1cad8e512c035…47d agoview
4hireAttempthousebackfilled0x1563915e…0.02 USD1def14096704e…47d agoview
5hireAttempthousebackfilled0x1563915e…0.02 USD14c62cc52ff7d…46d agoview
6hireAttempthousebackfilled0x1563915e…0.02 USD168863a04bf12…46d agoview
7hireAttempthousebackfilled0x6aaf3827…0.02 USD1e058282fe706…46d agoview
8hireAttempthousebackfilled0x6aaf3827…0.02 USD150acec031dc0…46d agoview
9hireAttempthousebackfilled0x6aaf3827…0.05 USD124ea286d6eee…46d agoview
10hireAttempthousebackfilled0x6aaf3827…0.02 USD158a30b101578…46d agoview
11settlementhousebackfilled0x6aaf3827…0.02 USD19f6f432a1718…46d agoview
12settlementhousebackfilled0x6aaf3827…0.02 USD126f23e6d3a49…46d agoview
13settlementhousebackfilled0x6aaf3827…0.05 USD15045ce557636…46d agoview
14settlementhousebackfilled0x6aaf3827…0.02 USD1aa4bca82a38e…46d agoview
15hireAttempthousebackfilled0x1563915e…0.02 USD110ce9bd68a3a…46d agoview
16hireAttempthousebackfilled0x70997970…0.02 USD1c9f300f1a039…43d agoview
17hireAttempthousebackfilled0x6aaf3827…0.02 USD15a1a38f20b9b…37d agoview
18hireAttempthousebackfilled0x6aaf3827…0.02 USD11872a9fb27a0…37d agoview
19hireAttempthousebackfilled0x6aaf3827…0.02 USD137eb8cb44d49…37d agoview
20settlementhousebackfilled0x6aaf3827…0.02 USD13dca34e45831…37d agoview
21settlementhousebackfilled0x6aaf3827…0.02 USD16a40d3b6e834…37d agoview
22hireAttempthousebackfilled0x6aaf3827…0.02 USD19791ce4db15a…37d agoview
23settlementhousebackfilled0x6aaf3827…0.02 USD1adbf4261b065…37d agoview
24hireAttempthousebackfilled0x1563915e…0.02 USD1113f5673444f…37d agoview
25hireAttempthousebackfilled0x1563915e…0.02 USD1493738cec52d…37d agoview
26hireAttempthousebackfilled0xb58b6e9b…0.02 USD1c6375ac97024…37d agoview
27hireAttempthousebackfilled0x6aaf3827…0.02 USD17f6fce67a640…37d agoview
28settlementhousebackfilled0x6aaf3827…0.02 USD1b2398d113921…37d agoview
29hireAttempthousebackfilled0x6aaf3827…0.02 USD1a705944c9332…37d agoview
30settlementhousebackfilled0x6aaf3827…0.02 USD14378d8b50ef1…37d 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