provable
What gno.land can and cannot prove about itself, demonstrated rather than asserted.
The log
An append-only Merkle mountain range. Appending costs O(log n) hashes and never rebuilds.
| Field | Value |
|---|---|
| Entries | 3 / 512 |
| Stored hashes | 4 |
| Peaks | 2 |
| Root | c9d22dd237c668944fde619edb56cc1bee0e988b03ac08694f6d3aba440c0776 |
This root is also the Tendermint simple-tree root over the same entries, so any
Tendermint verifier accepts it. Verify and VerifyFixed check the two proof
encodings against it.
What the chain can prove
gno.land/pkg/gnoland/app.go mounts exactly two stores. One is IAVL and merkleized,
the other is a plain dbadapter whose Commit is documented as "Always returns a zero
commitID, as dbadapter store doesn't merkleize".
| Data | Store | Provable against the app hash |
|---|---|---|
| Package source | iavl | yes |
| Account balances | iavl | yes |
| Escaped object hashes (cross-realm) | iavl | yes, the hash only |
| Realm objects, types, realm metadata | base | no |
| This log | base | no |
What that means here
A proof from this realm says this entry is consistent with the root this realm published. It cannot say this root is the chain's own, for two independent reasons:
- Realm state is not merkleized, so there is no state proof to produce.
chain/runtimeexposesChainID,ChainDomain,ChainHeightandGetSessionInfoand nothing else. No app hash, no block hash, no header. A realm has no trusted root to check anything against.
Anything built on Merkle proofs in a gno realm is trust-minimised relative to a committed root, never trustless. Saying otherwise would be the interesting-sounding half of a true story.
Entries
| # | Entry |
|---|---|
| 0 | genesis of this log |
| 1 | a second commitment |
| 2 | a third commitment |