Research / Audit ledger
Governance
A tamper-evident record of every committee decision
RM Club's internal trading desk decides trades by committee vote. Every proposal, every ballot and every command sent to the desk's terminals is sealed into a hash chain the moment it appears. If anyone later changes, deletes or reorders a sealed record, it shows up, and you can check the chain yourself.
Live ledger status
| Entry type | Count |
|---|---|
| Committee trades sealed (first version) | 8 |
| Desk commands sealed | 1 |
| Research journal calls sealed (frozen before outcome) | 2 |
| Research journal verdicts appended at resolution | 1 |
How it works
- Seal. Each record (a proposal with its ballots, or a desk command) is serialised in a fixed, sorted form and hashed with SHA-256. That record hash is appended to the chain together with a pseudonymous record ID and the time.
- Chain. Each entry's own hash covers the previous entry's hash:
hash = SHA-256(prev | seq | time | type | record ID | record hash). Changing any past entry changes its hash and breaks every link after it. - Record changes, don't overwrite. When a record legitimately changes, for example an open trade closes, a new version is appended as an update. A change to a record that was already final is appended as changed after close and counted above. Nothing is ever edited in place.
- Anchor publicly. Every daily report prints the head hash at build time, and the report archive keeps each day at a permanent URL. A rewritten history would produce a chain that no longer contains the heads already published.
What is public and what stays private
The published chain contains only hashes, times, entry types and pseudonymous record IDs. It does not reveal positions, prices, P&L, account details or how any member voted. Because each record is hashed, anyone later shown a record (an auditor, for instance) can hash it and confirm it matches the sealed version.
Verify it yourself
The full chain is published as JSON at /research/audit-ledger/chain.json. This short Python script checks every link:
import hashlib, json, urllib.request
data = json.load(urllib.request.urlopen("https://rmclub.org/research/audit-ledger/chain.json"))
prev = "0" * 64
for i, e in enumerate(data["chain"], start=1):
assert e["seq"] == i, f"sequence gap at {i}"
assert e["prev"] == prev, f"broken link at entry {i}"
raw = "|".join([prev, str(e["seq"]), e["at"], e["type"], e["key"], e["content"]])
assert hashlib.sha256(raw.encode()).hexdigest() == e["hash"], f"bad hash at entry {i}"
prev = e["hash"]
print("chain OK:", len(data["chain"]), "entries, head", prev)
Then compare the head it prints, or any earlier entry's hash, with the head published in the daily report for that date.
Limits
- This is a hash chain, not a blockchain. It does not stop someone with server access from deleting the ledger. It makes that kind of change detectable by anyone who kept, or can look up, a previously published head.
- It proves records were not changed after sealing. It cannot prove a record was accurate when it was first written.
- Records are sealed when the ledger next runs (on page views and the daily report build), usually within minutes of being written.
- These are records of RM Club's own internal desk. RM Intelligence membership is research and decision support: it does not route or execute orders for members.