Prevents hindsight edits and selective disclosure. Commits reveal nothing about content but fix the existence/time. Reveal proves content identity.
We use RFC 8785 JSON Canonicalization Scheme to ensure deterministic bytes:
Let C(payload_no_nonce) be the JCS bytes.
1hash = keccak256( C(payload_no_nonce) || nonce )nonce: 32-byte CSPRNG secret, revealed later.payload_no_nonce excludes the nonce field to avoid self-reference.hash directly.L_i = keccak256( C_i || nonce_i ) , build Merkle tree, store root R.(payload_i, nonce_i, proof_i) ; contract verifies leaf and path to R.minRevealAt prevents immediate leakage; maxRevealAt enforces timely disclosure.publisher address.sig (ECDSA secp256k1) over C(payload_no_nonce) in reveal payload; SDK verifies off-chain.1{
2 "ts": "2025-08-15T18:22:43Z",
3 "pair": "BTCUSDT",
4 "tf": "5m",
5 "dir": "LONG",
6 "entry": {"from": 64250, "to": 64290},
7 "tp": [64520, 64780, 65150],
8 "sl": 63940,
9 "model": "ob-v3.2",
10 "confidence": 0.74,
11 "notes": "imbalance>30%",
12 "channel": "telegram://@chaintick",
13 "publisher": "0xPUB..."
14}0x7fd1c3...01e3 Compute H = keccak256( JCS(payload_no_nonce) || nonce ). Store H (or leaf in batch root). On reveal, recompute and match.