{
  "group": "draw",
  "protocol": 1,
  "description": "draw-v1: seed = SHA-256(JCS(DrawInput)); block(i) = SHA-256(seed || uint32_be(i)); x = uint64_be(block[0..8]); T = 2^64 - (2^64 mod n); accept x < T, value = x mod n. Real quicknet signatures. Trace: for each position {position, remaining = free places before the pick, blocks = block indices used, j = uniform(remaining), place = j-th free place counting from 0, seq}; or {position, remaining: 0} when nothing is left.",
  "cases": [
    {
      "name": "single_entry",
      "leaves": [
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-single",
          "seq": 0,
          "t": "2026-10-16T11:50:01.000Z",
          "subject": "b1f5bb57b74f089961a0bca933d298ad8ddf8456757cd2599dcaebf17d310b26",
          "chances": 1,
          "ref": null,
          "entry_commit": "11d1d847e440cbc7c07490cecee915ed3ed320eebdb5380e5b97c65d6a3bc2ce",
          "claim_commit": "d72bac0b1a2840772a9dc5509a22ce31a64f874d4484d80012ab52ba26d17af9"
        }
      ],
      "formula": {
        "name": "draw-v1",
        "population": "entries",
        "winners": 1,
        "alternates": 1,
        "one_prize_per_subject": true
      },
      "round_note": "round 33116213 is given here: there are no conditions in this case",
      "input": {
        "alg": "draw-v1",
        "draw": "vec-single",
        "chain": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
        "round": 33116213,
        "signature": "8c88efb1bb273346a0be76f90b262b61e79b2f7230a84edfe13157a06357f87dc1999fc643c979694673c9d6dd599a10",
        "secret": "a5be75717210814a201b37c34338badcc387acc72952d709dcfa2ffe3cd4d927",
        "list_root": "f1ce8e938819056ef6affe61f1c24d6797d7e7e2ac7353db618c16db51d5a2aa",
        "n": 1,
        "ref": null
      },
      "expected_input_jcs": "{\"alg\":\"draw-v1\",\"chain\":\"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\",\"draw\":\"vec-single\",\"list_root\":\"f1ce8e938819056ef6affe61f1c24d6797d7e7e2ac7353db618c16db51d5a2aa\",\"n\":1,\"ref\":null,\"round\":33116213,\"secret\":\"a5be75717210814a201b37c34338badcc387acc72952d709dcfa2ffe3cd4d927\",\"signature\":\"8c88efb1bb273346a0be76f90b262b61e79b2f7230a84edfe13157a06357f87dc1999fc643c979694673c9d6dd599a10\"}",
      "expected_seed": "6649aea056e850be30c9e316e4f9a5563c01ccf759c2bf22da598f1bd66a4d48",
      "expected_block_0": "08c15b7a64ef4e0fbd794b4afbd1f0f2e5d0a7ee9c7bb55f41f484779d2754d0",
      "expected_trace": [
        {
          "position": 0,
          "remaining": 1,
          "blocks": [
            0
          ],
          "j": 0,
          "place": 0,
          "seq": 0
        },
        {
          "position": 1,
          "remaining": 0
        }
      ],
      "expected_winners": [
        {
          "place": 0,
          "seq": 0,
          "subject": "b1f5bb57b74f089961a0bca933d298ad8ddf8456757cd2599dcaebf17d310b26"
        }
      ],
      "expected_alternates": [
        null
      ]
    },
    {
      "name": "stream_seven_entries",
      "leaves": [
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 0,
          "t": "2026-10-16T11:50:05.120Z",
          "subject": "a7c8e351b804dab4789b3de6c263eba010cb8c62e861cbbb2ce2ef8ba531b478",
          "chances": 1,
          "ref": null,
          "entry_commit": "2fef588f2fec85ec67745729753ee1e328d42a59a2cc58465cdbfa7272f1b66d",
          "claim_commit": "48f050b178db2257195353fd92af69b85c8b45d9196b9d7510802f4fce0ad38b"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 1,
          "t": "2026-10-16T11:51:10.004Z",
          "subject": "a9e5e200f1a33d12ab31cfc7228deb0dcca29b4a2bd639d228f720ae201863e0",
          "chances": 1,
          "ref": null,
          "entry_commit": "cb5cf724c43043cc4b8302a8ae3186eddce6029629dae67477e5f385d69bd8df",
          "claim_commit": "0d99e57b98f839044c0e4c24e2d5d5cd9b13551b7ba802936b48aa9519e06276"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 2,
          "t": "2026-10-16T11:52:00.500Z",
          "subject": "5c08dcfd91728ba104e37dd67d7df5f9e54aa83b1f84b8316b178ae4dda586e7",
          "chances": 1,
          "ref": null,
          "entry_commit": "e8436b6a440f52ff795c93f2fd8485e8a647678697273b8908966edf1a33de42",
          "claim_commit": "7646b9798e7aa0f5a808d748b60c30b1ea4768d979bbf08978d8a431c1a9b232"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 3,
          "t": "2026-10-16T11:53:33.333Z",
          "subject": "c87a6cd9b42b119547afcbf183081d915e3cf5c236cc1847393ab8de3eac5d23",
          "chances": 1,
          "ref": null,
          "entry_commit": "d0ed1d40d0f926230f0366d0e5270dfe88bc26b4e8e95a3118e41ebfe1c01352",
          "claim_commit": "dd4ba0eb22afbc72fa142ba9775527adf0784ac2821c5d953e2bf215deb00d2f"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 4,
          "t": "2026-10-16T11:55:00.000Z",
          "subject": "84ca7eaa529980fb5c198b641922abc91e9a526dfa4969076819bff110dcfda2",
          "chances": 1,
          "ref": null,
          "entry_commit": "49de6461fd9dd4d7181998861ade3281ab6446a9ad30a7e1cc6557ac47ea85f2",
          "claim_commit": "e0f3135d01dfe242d2c5fbfec68bf84fab3ecc4c442020e83a4eded22cee7f2a"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 5,
          "t": "2026-10-16T11:57:12.900Z",
          "subject": "bdcab761cc571aaaf1a9560b252f0ee1e9b8e61fdae22aa5e3e5533bcdcfa572",
          "chances": 1,
          "ref": null,
          "entry_commit": "32f2d2cc5c71e91b629a77a04076ee1d361238780f660cd0a992e83001ed56f0",
          "claim_commit": "f5f987d0eb6f5fc36538dc7d8aab99d14b933186906de5725b0e927ee633bcb9"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-stream-1",
          "seq": 6,
          "t": "2026-10-16T11:58:59.999Z",
          "subject": "c44f48028427c5a09c1b3328f60d8b13a8c3bfa1d7452828adab9ad6906335bd",
          "chances": 1,
          "ref": null,
          "entry_commit": "a5682c40758196fee325ce0fd686686c4b05d4d6d1a58435ed51122a78294ffb",
          "claim_commit": "11873b3cdb4b68dfd805fb244c66109263324aaed5be7aa191d2ae068a53a6c9"
        }
      ],
      "formula": {
        "name": "draw-v1",
        "population": "entries",
        "winners": 1,
        "alternates": 2,
        "one_prize_per_subject": true
      },
      "conditions": {
        "v": 1,
        "type": "conditions",
        "service": "vec-service",
        "draw": "vec-stream-1",
        "version": 1,
        "organizer": "Тестовый канал",
        "title": "Розыгрыш гарнитуры среди зрителей",
        "rules_ack": [
          "free_participation",
          "prize_from_organizer"
        ],
        "network": {
          "chain_hash": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
          "public_key": "83cf0f2896adee7eb8b5f01fcad3912212c437e0073e911fb90022d3e760183c8c4b450b6a0a6c3ac6a5776a2d1064510d1fec758c921cc22b0e17e63aaf4bcb5ed66304de9cf809bd274ca73bab4af5a6e9c76a4bc09e76eae8991ef5ece45a",
          "scheme": "bls-unchained-g1-rfc9380",
          "period": 3,
          "genesis": 1692803367
        },
        "open_at": "2026-10-16T11:50:00.000Z",
        "close_at": "2026-10-16T11:59:00.000Z",
        "margin_s": 60,
        "round": 33116213,
        "round_time": "2026-10-16T12:00:03.000Z",
        "commitment": "285754267832da358512cf05a5c2507644a07af9abab11d9bec4045b88a1cc71",
        "reveal_deadline": "2026-10-16T12:02:03.000Z",
        "salt_commit": "271137340c8a436f4e4b0c9a9b5bf098d3127cb8532c7a3dc9eb5ae2ca8a8837",
        "min_participants": 1,
        "min_duration_s": 60,
        "chances_max": 1,
        "formula": {
          "name": "draw-v1",
          "population": "entries",
          "winners": 1,
          "alternates": 2,
          "one_prize_per_subject": true
        },
        "kind": "free_draw",
        "surface": "stream",
        "participation": "free",
        "prize_provider": "streamer",
        "prize": {
          "text": "Игровая гарнитура",
          "count": 1
        }
      },
      "input": {
        "alg": "draw-v1",
        "draw": "vec-stream-1",
        "chain": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
        "round": 33116213,
        "signature": "8c88efb1bb273346a0be76f90b262b61e79b2f7230a84edfe13157a06357f87dc1999fc643c979694673c9d6dd599a10",
        "secret": "2486bbce0ae83007269d5655d2ef3cbdc7893cfb0b90255247a49ee435050bed",
        "list_root": "463590a662dd181d5bf442c81c938f0893b6f7df9d79bcc2ee3bd511e472acad",
        "n": 7,
        "ref": null
      },
      "expected_input_jcs": "{\"alg\":\"draw-v1\",\"chain\":\"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\",\"draw\":\"vec-stream-1\",\"list_root\":\"463590a662dd181d5bf442c81c938f0893b6f7df9d79bcc2ee3bd511e472acad\",\"n\":7,\"ref\":null,\"round\":33116213,\"secret\":\"2486bbce0ae83007269d5655d2ef3cbdc7893cfb0b90255247a49ee435050bed\",\"signature\":\"8c88efb1bb273346a0be76f90b262b61e79b2f7230a84edfe13157a06357f87dc1999fc643c979694673c9d6dd599a10\"}",
      "expected_seed": "07a665095de214c4ebed9568e4d2f3d3845b2072906ed30f4c30392eb40d78f7",
      "expected_trace": [
        {
          "position": 0,
          "remaining": 7,
          "blocks": [
            0
          ],
          "j": 1,
          "place": 1,
          "seq": 1
        },
        {
          "position": 1,
          "remaining": 6,
          "blocks": [
            1
          ],
          "j": 4,
          "place": 5,
          "seq": 5
        },
        {
          "position": 2,
          "remaining": 5,
          "blocks": [
            2
          ],
          "j": 4,
          "place": 6,
          "seq": 6
        }
      ],
      "expected_winners": [
        {
          "place": 1,
          "seq": 1,
          "subject": "a9e5e200f1a33d12ab31cfc7228deb0dcca29b4a2bd639d228f720ae201863e0"
        }
      ],
      "expected_alternates": [
        {
          "place": 5,
          "seq": 5,
          "subject": "bdcab761cc571aaaf1a9560b252f0ee1e9b8e61fdae22aa5e3e5533bcdcfa572"
        },
        {
          "place": 6,
          "seq": 6,
          "subject": "c44f48028427c5a09c1b3328f60d8b13a8c3bfa1d7452828adab9ad6906335bd"
        }
      ]
    },
    {
      "name": "rejection_takes_next_block",
      "seed": "8be301591d787b03013b18cdd15a9bd75a270c23dbaf023414109da3f1e78498",
      "n": 9002803354665472,
      "expected_blocks": [
        0,
        1
      ],
      "expected_x": [
        "18442335449523116188",
        "16579762399399333178"
      ],
      "expected_value": 5601423460199226,
      "threshold": "18437741270354886656"
    },
    {
      "name": "three_winners_subject_with_two_leaves",
      "leaves": [
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 0,
          "t": "2026-10-16T11:50:01.000Z",
          "subject": "7e3cd379b7fb3da54da7ebf6cfbdee8a54da0fd3806fba1b7c10e6de741109e4",
          "chances": 1,
          "ref": null,
          "entry_commit": "cf37d5f27ddad8df80ee1fe5e2431fd78f30f6f034ab608476bdacb56012b07b",
          "claim_commit": "54b90efa0541dd07001753fa1f9fb22939e290244b50482e663626c08e7694fe"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 1,
          "t": "2026-10-16T11:50:02.000Z",
          "subject": "fe3a4a6c1254c3e719747555a70829e08a37bb37617cd7be572ed7d8af51e9b1",
          "chances": 1,
          "ref": null,
          "entry_commit": "5e6fe0b851b57cac5206c4d17ae9aa3f773d12c4bfaa0b4949d053c53b9845a2",
          "claim_commit": "b2c1a264b58d62dbe0005b0fbb8ce2454aa465c7031591b74f2411ddeb9a1f38"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 2,
          "t": "2026-10-16T11:50:03.000Z",
          "subject": "da81a78b3dbd4d6e458b14aee094b77a2136647a1c12adb8f791d25e1cbc4c43",
          "chances": 1,
          "ref": null,
          "entry_commit": "0ba7375d24872197c83a9aa74856736cdac0cc31461ebe06ffae1e3ce71b597a",
          "claim_commit": "01390bd1f004e3b064774647fcc5f00d053e206d09545f1982f5c8c0a997a98e"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 3,
          "t": "2026-10-16T11:50:04.000Z",
          "subject": "862a8929d1b6b4251694cf161fe96db801d27974fa49893e3668a620404c64bd",
          "chances": 1,
          "ref": null,
          "entry_commit": "cd0c64d5c7fe643f65b22a699b8c8ff69c7b9bcef05a761ed351397c47a21d5d",
          "claim_commit": "494a5b5ecbff9bc27433c70f8d49939e3bcfdcf99410bf8afa88842bd985d1fd"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 4,
          "t": "2026-10-16T11:50:05.000Z",
          "subject": "fe3a4a6c1254c3e719747555a70829e08a37bb37617cd7be572ed7d8af51e9b1",
          "chances": 1,
          "ref": null,
          "entry_commit": "225cffcc539a21f2bce000c4429758f33334a7e440ed9aa6bea63c74ca57db6c",
          "claim_commit": "e0e45ba9155ea7116b6966a65c67b45799808f56531912de2471642813afba0d"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 5,
          "t": "2026-10-16T11:50:06.000Z",
          "subject": "e1717cefdb9d5e462d221d3a645abea72631d1bea7bfa50a8a6f370836400d31",
          "chances": 1,
          "ref": null,
          "entry_commit": "35f01ec5d63c149bc8afcaa9d8dde330dbbd8d7f02eaacd09cc8356d463236b2",
          "claim_commit": "acb77f660de9b993410e440ba911615d02445e333873963d6781a68930b7c482"
        },
        {
          "v": 1,
          "type": "entry",
          "draw": "vec-two-leaves-0",
          "seq": 6,
          "t": "2026-10-16T11:50:07.000Z",
          "subject": "b625d332b690d468afe27f6fd795ab6228393bc7434e270fa6aba4fc0ad11691",
          "chances": 1,
          "ref": null,
          "entry_commit": "42fb6eca6e4a1248262ae8d128e7c99f9d38943756bc1f7fd17021ee090ded50",
          "claim_commit": "86a170b9e7900f2ab320c3ce2fe1b4dd1266578b66a207fb3d1d9d0a0ff3f907"
        }
      ],
      "formula": {
        "name": "draw-v1",
        "population": "entries",
        "winners": 3,
        "alternates": 0,
        "one_prize_per_subject": true
      },
      "round_note": "round 33116213 is given here: there are no conditions in this case",
      "input": {
        "alg": "draw-v1",
        "draw": "vec-two-leaves-0",
        "chain": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
        "round": 33116213,
        "signature": "8c88efb1bb273346a0be76f90b262b61e79b2f7230a84edfe13157a06357f87dc1999fc643c979694673c9d6dd599a10",
        "secret": "f70ff67872e2fca1bfb684eac63211ce265272e698e9004164aa4688f5b7531e",
        "list_root": "757a10b518acdc484962dba0ad41d97defacdf1fee4297f4a41ec4598cc1b4d4",
        "n": 7,
        "ref": null
      },
      "expected_input_jcs": "{\"alg\":\"draw-v1\",\"chain\":\"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\",\"draw\":\"vec-two-leaves-0\",\"list_root\":\"757a10b518acdc484962dba0ad41d97defacdf1fee4297f4a41ec4598cc1b4d4\",\"n\":7,\"ref\":null,\"round\":33116213,\"secret\":\"f70ff67872e2fca1bfb684eac63211ce265272e698e9004164aa4688f5b7531e\",\"signature\":\"8c88efb1bb273346a0be76f90b262b61e79b2f7230a84edfe13157a06357f87dc1999fc643c979694673c9d6dd599a10\"}",
      "expected_seed": "69f888d2613c964d43f86797a5a54ec76a41e8b0fc2b3d0f94eb1ab71a492edc",
      "expected_block_0": "c2a361aaa57e8c7dd14393e22347735aab6ba85ab8e840361770d16eb125b241",
      "expected_trace": [
        {
          "position": 0,
          "remaining": 7,
          "blocks": [
            0
          ],
          "j": 3,
          "place": 3,
          "seq": 3
        },
        {
          "position": 1,
          "remaining": 6,
          "blocks": [
            1
          ],
          "j": 1,
          "place": 1,
          "seq": 1
        },
        {
          "position": 2,
          "remaining": 4,
          "blocks": [
            2
          ],
          "j": 1,
          "place": 2,
          "seq": 2
        }
      ],
      "expected_winners": [
        {
          "place": 3,
          "seq": 3,
          "subject": "862a8929d1b6b4251694cf161fe96db801d27974fa49893e3668a620404c64bd"
        },
        {
          "place": 1,
          "seq": 1,
          "subject": "fe3a4a6c1254c3e719747555a70829e08a37bb37617cd7be572ed7d8af51e9b1"
        },
        {
          "place": 2,
          "seq": 2,
          "subject": "da81a78b3dbd4d6e458b14aee094b77a2136647a1c12adb8f791d25e1cbc4c43"
        }
      ],
      "expected_alternates": [],
      "note": "u2 has leaves seq 1 and seq 4; with one_prize_per_subject it can win only once"
    },
    {
      "name": "wheel_five_sectors_no_secret_draft",
      "note": "draft for Ф7 (§12.6): list_root = tagged(\"notarius/spin/v1\", draw, conditions_hash, ref)",
      "conditions_hash": "d0d0f905def014a041e3e79fefa05207bf084e2d48d0f88a395603d550c81f9e",
      "sectors": [
        {
          "label": "Спеть песню",
          "weight": 50
        },
        {
          "label": "Отжаться 10 раз",
          "weight": 25
        },
        {
          "label": "Сменить игру",
          "weight": 15
        },
        {
          "label": "Ответить на вопрос чата",
          "weight": 9
        },
        {
          "label": "Стрим ещё час",
          "weight": 1
        }
      ],
      "spin_leaf": {
        "v": 1,
        "type": "spin",
        "draw": "vec-wheel-1",
        "seq": 0,
        "t": "2026-10-16T12:10:05.250Z",
        "round": 33116416,
        "ref": "evt-0001"
      },
      "input": {
        "alg": "draw-v1",
        "draw": "vec-wheel-1",
        "chain": "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971",
        "round": 33116416,
        "signature": "94105416c9ba63c3eb6b8e0e1ed647ee1938d00816a355b68c4cfdd85f373586261f121817795ced3914bab2c1268eca",
        "secret": null,
        "list_root": "e681e0086f9bf0cf0dc79051439a6f2ff07e7576d4e14502ffc3cb7da5bde70a",
        "n": 100,
        "ref": "evt-0001"
      },
      "expected_input_jcs": "{\"alg\":\"draw-v1\",\"chain\":\"52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971\",\"draw\":\"vec-wheel-1\",\"list_root\":\"e681e0086f9bf0cf0dc79051439a6f2ff07e7576d4e14502ffc3cb7da5bde70a\",\"n\":100,\"ref\":\"evt-0001\",\"round\":33116416,\"secret\":null,\"signature\":\"94105416c9ba63c3eb6b8e0e1ed647ee1938d00816a355b68c4cfdd85f373586261f121817795ced3914bab2c1268eca\"}",
      "expected_seed": "aa76d551a0ae5837ba85159a33b41ae238fe840b0c33eb88e080dcad664b2283",
      "expected_x": 29,
      "expected_blocks": [
        0
      ],
      "expected_sector": 0,
      "expected_label": "Спеть песню"
    }
  ]
}
