{
  "ok": true,
  "service": "fairo-draws",
  "stage": "S2",
  "proto": "fairo-record-v1",
  "resultProto": "fairo-result-v1",
  "endpoints": {
    "POST /commit": "提交名单指纹，换回带服务端时间与签名的收据",
    "POST /open": "开奖：取回并验签 drand 轮次，算出中奖下标。同一场只开一次",
    "GET /d/:drawId": "按编号查全部版本、链自检与开奖结果",
    "GET /receipt/:nonce": "按收据号取回记录原文与签名",
    "GET /pubkey": "取签名公钥，供独立核对",
    "GET /health": "连通性与库状态"
  },
  "limits": {
    "writePerHourPerIp": 30,
    "readPerHourPerIp": 240,
    "maxBodyBytes": 4096,
    "maxNames": 100000,
    "maxWinners": 500,
    "drawLockStaleMs": 60000
  },
  "drand": {
    "supportedChains": [
      "52db9ba70e0cc0f6eaf7803dd07447a1f5477735fd3f661792ba94600c84e971"
    ],
    "name": "quicknet",
    "scheme": "bls-unchained-g1-rfc9380",
    "periodSeconds": 3,
    "roundRule": "targetRound = floor((deadline_unix - genesis) / period) + 1，客户端不能自选轮次",
    "verifyNote": "服务端用 RFC 9380 BLS12-381 验签；消息是 sha256(round 的 8 字节大端)"
  },
  "boundaries": [
    "只存名单指纹（commitment），不存任何姓名",
    "服务端时间可信于浏览器时间，但 D1 管理员仍能改库；这一层靠 S4 外部锚定「让改动被发现」",
    "证明不了名单的完整性与真实性——那是报名规则、公示期与异议处理的事",
    "证明不了主办方没在开奖后提交新版本——只能让新版 created_at 明显晚于 deadline，被看出来"
  ]
}