Start with a sandbox. Move to production when you are ready.
Sign up in the Portal, create an organisation, open a sandbox. When you need production, join the waitlist.
Sandboxes run on staging with test data. Production access is by waitlist.
LedgerHash
Journal entries sealed into a hash chain, periods closed under a Merkle root, inclusion proofs you can verify offline.
An entry of 2 to 500 lines is inserted as a draft.
Lines are sorted canonically, so input order cannot change the hash. The payload is pipe-delimited and deterministic.
entry_hash = SHA-256(canonical payload ‖ previous_hash). The previous hash is the prior entry's hash; the root is SHA-256(“LEDGERHASH GENESIS v1”). The posting sequence is gapless.
On draft → posted the database independently re-derives the seal and refuses forged hashes or gaps.
leaf = SHA-256(0x00 ‖ entry hash), node = SHA-256(0x01 ‖ left ‖ right), an odd node is promoted. The result is the period's merkle_root.
period_hash = SHA-256(merkle_root ‖ previous_period_hash). Closed periods chain to one another.
One seal per period. Seals are immutable for every role; the database enforces it.
The illustration below follows one entry from posting to an inclusion proof, then shows what happens when an earlier entry is altered.
Entries are sealed with the previous hash; a closed period gets a Merkle root and a period hash chained to the previous period. One altered entry changes the root and every later period hash.
Anchoring of sealed periods to write-once storage is supported.
GET /v1/verify/entry/{id}/proof returns a Merkle inclusion path that can be verified offline against the period root.
/v1/verify/* re-derives every payload and reports FINGERPRINT_MISMATCH or CHAIN_LINK_BROKEN at the first altered posting sequence, cascading into that period's Merkle root and every later period hash. An empty result means intact.
/v1/proofs snapshots are durable, content-hashed attestation wrappers. They are not cryptographic proofs by themselves.
An anchor record for a sealed period can be written to storage with Object Lock in compliance mode (365 days) and verified via GET /v1/verify/anchor/{code}. Anchoring is operator-triggered today; there is no automated worker.
Sandbox keys are prefixed lh_test_, live keys lh_live_. Platform sandboxes are constrained to the test environment in the database.
Sign up in the Portal, create an organisation, open a sandbox. When you need production, join the waitlist.
Sandboxes run on staging with test data. Production access is by waitlist.