{"format":"receipts-proof/1","hash":"52ed786132ad4b5b21a3895092e268c12834417b334f904ddbf77f33f23a9936","provider":"demo-bollinger-squeeze","seq":123,"kind":"signal","issued_at":"2026-10-20T12:30:55.580Z","prev":"86446e15d8a0055170800e152929ad282a0308d2bef815d20cb8bbd28706f0fa","body":{"issued_at":"2026-10-20T12:30:55.580Z","kind":"signal","nonce":"67bcc33799fb526dce9b42fac4d155b9","payload":{"entry":{"type":"market"},"expires_at":"2026-10-21T12:30:55.580Z","market":{"kind":"perp","symbol":"LINKUSDT","venue":"binance-usdm"},"note":"Demo bot: Bollinger squeeze breakout, 15m. Mechanical rule, not advice.","side":"long","stop":"11.925","targets":["12.065","12.135","12.205"]},"prev":"86446e15d8a0055170800e152929ad282a0308d2bef815d20cb8bbd28706f0fa","provider":"demo-bollinger-squeeze","seq":123,"v":1},"signer":null,"sig":null,"batch":{"root":"752d887fede4d4be4ffd84650e01de9b790f15cf60e4ea28f87f75d35401e3b7","index":1,"leaf_count":4,"proof":[{"side":"L","hash":"cfd3c99ae8400be33b006e148c62512a4ad07de7dcafc79573ef79822beb9de1"},{"side":"R","hash":"44fb2cee5ac91cd00cadc40dde99d267e9423f2c3506db93fc460c3fa8eb774d"}],"sealed_at":"2026-10-20T12:31:49.882Z","opentimestamps":"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","chain_anchor":null,"bitcoin_block":972326},"how_to_verify":["hash = sha256(\"receipts/v1\\n\" + canonical_json(body)), keys sorted, no whitespace.","body.prev must equal the hash of the same provider's event seq - 1 (64 zeros for seq 1).","If signer is set: sig must be a valid Ed25519 signature by signer over the UTF-8 bytes of \"receipts/v1/sig\\n\" + hash.","Fold the Merkle proof: node = sha256(0x01 || left || right); the result must equal batch.root.","Decode opentimestamps (base64) to a .ots file, then run: ots upgrade file.ots && ots verify -d <batch.root> file.ots","Or run: node scripts/verify-bundle.mjs bundle.json"]}