{"format":"receipts-proof/1","hash":"31ccb86521a15b4f6aa32d4b930fc2c098a620e6edcd6cf488f5b0a0b3632fda","provider":"demo-macd-momentum","seq":17,"kind":"signal","issued_at":"2026-09-28T15:40:36.695Z","prev":"4cb46a1d22e03b1eb9721cad33008c5e937bbe1488cde3ddf52d01fb8c8aab34","body":{"issued_at":"2026-09-28T15:40:36.695Z","kind":"signal","nonce":"d3e78016c739ec1943118de7a0c99405","payload":{"entry":{"type":"market"},"expires_at":"2026-09-29T03:40:36.695Z","market":{"kind":"perp","symbol":"ETHUSDT","venue":"binance-usdm"},"note":"Demo bot: MACD cross with EMA(100) trend filter, 5m. Mechanical rule, not advice.","side":"long","stop":"2660.36","targets":["2695.64","2722.1"]},"prev":"4cb46a1d22e03b1eb9721cad33008c5e937bbe1488cde3ddf52d01fb8c8aab34","provider":"demo-macd-momentum","seq":17,"v":1},"signer":null,"sig":null,"batch":{"root":"0c0ad521f20f4de8fd60aa141be8bdedfadd7a2117186587eb99c6af31df7c39","index":1,"leaf_count":2,"proof":[{"side":"L","hash":"4cb46a1d22e03b1eb9721cad33008c5e937bbe1488cde3ddf52d01fb8c8aab34"}],"sealed_at":"2026-09-28T15:41:26.712Z","opentimestamps":"AE9wZW5UaW1lc3RhbXBzAABQcm9vZgC/ieLohOiSlAEIDArVIfIPTej9YKoUG+i97frdeiEXGGWH65nGrzHffDn/8AisShXam337vgjwEG1IyVbBS+C1xoQZxPBWLsEI8SBjiu8D+qikTA564v5gSu+rUqXb2P9nkxGILAmgjTWvGQjxBGq6iqfwCCZe8GOTirc0CPEgLOIXfMypGf7LCcb0AZb3dp1RQNxSXHN+Br+PV8GzezEI8CCCcF7lMxXkh0PT8zGQiAeefAOZyq97YXNucaB4kvlj5wjwICgNifm0TE8oI/m7iY1FmKnVbOx2w1Tb3duYGvTMGuW1CPAgJdfG9ja/yoxvj8TljfZfzC2pVLXKyDuXQsGnV+JgQVAI8CAM39D28PnbvAC3/KOuwcBojICpXQSl49/w7fPrFjaO6gjwINfEeO3kpMYT6qRK1K73OfK/it+pWOX2gTvuVXegk6RDCPEgKFRnd+qh/LFhxStws8+Md3826g4GO0NFcbXzRJYQS+II8CB5FRp63uJZ4QqaBZZD2wGYT5RvjcJUCu66Wg6J26oDrAjwIHl09xlzr8lqMEtBYHQRI9rSp1J8A3X/KnICxLQSpR4ACPEgUlP6HtsSAYMcLjUC10EFqo9iJGlvKTRtDP9dq95imgYI8SDPEe1YWm2OPOIH1DZBxgxzB4SYUV9p376VjNhEXxp2zAjxWQEAAAABUzz4sbXiz68GHc30GXejXku5ctWkEveyFqMEcjMAX6oAAAAAAP7///8CjigBAAAAAAAWABTP1LC2wYLlwUTZmCuHd7vr/+Cu1wAAAAAAAAAAImog8AQ7yQ4ACAjxIMztqJBVOPFpFJcjEncVS7+kwKN03PW3jQWgqEj5h9xbCAjxIK8+PJe1FoM+0OyrP4/W56fj0OkIuQo5hoLJAfhe/HVvCAjxINXrAoo8nszXZL5tujd8pBmcs5yybqWxrFK66KijXMHpCAjwIOIVRRwgy0uUMOZ3ZReY9Kvg9pEbpYpJFvq6An39SFcRCAjwIMu/R8Z9l4GaWq7Et5QzP3Y5gTIaVPmOIJ8ObQYFeP8JCAjxIF8wqRUxh81tybB1yGlCuTF9oaEWRoBNZB+ZBJf+ulQ4CAjxIPW7QTeF9b7g1ljogLiY5Y9pkBsu5cTNhYSGIIiQ7MmMCAjxIOj6iebH+vjMchqbA2GQN6JnbQ8Zm5IbHu7HjxkqNhrfCAjxIICAVdT4C9Tm6hl+RHoWz18cKIFjtCga0givml2Jrma+CAjwIA2/MlioZySu69nAL8EbCRmhS0mpQo7avJLLIBTg/ucHCAjwIKJU/wMWGnQRUad8E39e3DhNZZDNhnaVYPfsnENir94dCAjwIB8KZIBlMm0/73BbjFyz+YMOIK8GxMh/YVlKR8y+gf9QCAjwIJlRVphCAfIVOEhaS9VZrIRIm883P2JssN0NOzpzZ1HtCAgABYiWDXPXGQEDvJI7//AIz6U+CcpRcP4I8BCSTeyt7FSBOoPV01LpDZi1CPEgzc218hLn39AANEjIvg0VvpHAScsqYbZGmUeyBbuWg44I8SCwfC3gUCgKN7XXG1UTOMa5z0g/A+NFf/AsOA5ZBxTedwjxBGq6iqfwCHdsyKdxiFamCPEgY00sT0dLRBhKWqjGWKqZ5EAz0w6tNmDjkuk/y8cEBrsI8SCn1Z/kvGxJnvHo8ceS6OKkCO8ybqGgTZPCH8myYHCp4gjwILGP8blV9TVoAHTnfIZAS9jQlTHD4hLEG3Tq8jz/1wOKCPEgO9bZCu/7VWKF8bHzEZ1NYaNee91Mf2N2afjJPVFQUagI8SAqPALk4Wh//v0gmw2IHbRnxqvNCTfU3+5Z9O512AiCTAjwIC6VNKWeQnocPtEAOFuYFj9q5F9Fpj5IJ/yy2E4TypbUCPAg1P+XTVPaW9+glFVNelqcJvwNCd8U7jSfbKhIfprfv8oI8SDLKrTImtOAutvGE1o8RBV6meoVLN91AUElaPAlG/093wjwIKDJieXWfbb30HWeegpl8UqDeM6SXCmL9U/WOJW/xqqgCPEgMpOxv4S8wtpMg0vABCTBrSZh85S33wyOw1q15DPuZvsI8SCyFz0B1r5yJYiTXq/+7X+QeiKRACtCT4VTHIBf2kejewjxWQEAAAABseRF60u54OQIau+0TxXMo3IxCuBgGG8MANHt2ZDYOL8AAAAAAP7///8CHXwBAAAAAAAWABR/lQbnhb6gpF+lcmTCVV+mA51iKwAAAAAAAAAAImog8AQ7yQ4ACAjxILjVEIYJOOMTb6KFi7k+HZWWGJEL/+oSSOgxygrWBUkUCAjwICUUywGglBTCLIzoZ+um+xW6czKXvEtJLve40A6Ems8pCAjwIGlO3U/dv032ICZ1Olflh57mK1vaN1mqJnZOw8CRfoPKCAjwIHUs+RU3ei4F74ZhGO8hiQCJBFRQK/mJ9p2NkSmal9kWCAjxIOdjo/ZVG9ZucCa17oztfeo5dfFAGTb+r7/1Ll8B8POwCAjwIAi1aA/0GEvh/JeNNVxsFGmgppHWELeI29eNHwMfp2nGCAjwIO9pU/kK1DyxzitY46TCfMGU68ReQJgHSmRt8IbYuA/mCAjxIA340R5X9kDrXxz7PnFCAOwqymtG0UvyApOwTK4KD3fJCAjxIPga7YHw6SxvQmwlkShdG00O/XPeQjsiLFkGUOu3lZ+/CAjxIFG0BbbyaMDr6BYbhJGq2QOsWliHm6MyGHRmpPKGcrlOCAjwIKJU/wMWGnQRUad8E39e3DhNZZDNhnaVYPfsnENir94dCAjwIB8KZIBlMm0/73BbjFyz+YMOIK8GxMh/YVlKR8y+gf9QCAjwIJlRVphCAfIVOEhaS9VZrIRIm883P2JssN0NOzpzZ1HtCAgABYiWDXPXGQEDvJI78BBChVR+a4TtcxGvW6prSqZBCPAgwyAlHcjkI69ydcN+vCxPuHEp/sSPyR+Mgzaf5NYhy5wI8CBwL94kKzSAZF6cXCA1giYvmKppGiKp5oLDalLbtrLm+AjxBGq6iqfwCJLfFClatKfvAIPf4w0u+QyOKShodHRwczovL2Zpbm5leS5jYWxlbmRhci5ldGVybml0eXdhbGwuY29t","chain_anchor":null,"bitcoin_block":969020},"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"]}