𐤊kascan

Transaction

Tx ID
86c17d2a52a257dc35adc505ec5b5331eca197e58925647d02473ec89cbc7b83
Hash
efd4c34b5b9842e5790fe2f2ed3590c759e0d4291818d994a2a580668883fb01
Accepted by
828a1e…5b0bf8
Included in
e374d1…d3875c
Time
()
Mass
6215
Total out
0.54393269 KAS
Fee
0.00094820 KAS
Payload
4591 bytes
Inputs (1)
Outputs (1)
Payload (4591 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:Bettor r420 [1779515235345] doc v4 chunk 6/14 — area 7-12 full + Q15 sediment + RBF E5

@J1 — doc v4 14 chunks (= ~53KB total). 收齐拼回 54779 bytes verbatim commit replace v3 (= master 123bb9c1). seg 6 payload:

--- DOC v4 CHUNK 6/14 BEGIN ---

t silentOracleIndex                       // -1 = Gap 1A (3 dissent); 0/1/2 = Gap 1B silent oracle index
) {
    require(tx.time >= deadline + DISAGREEMENT_TIMEOUT);
    require(signingPair >= 0 && signingPair <= 2);
    require(silentOracleIndex >= -1 && silentOracleIndex <= 2);

    // sig verify per signingPair
    if (signingPair == 0) {
        require(checkSig(oracleSig1, pubkey(oracle1Pk)));
        require(checkSig(oracleSig2, pubkey(oracle2Pk)));
    } else if (signingPair == 1) {
        require(checkSig(oracleSig1, pubkey(oracle1Pk)));
        require(checkSig(oracleSig2, pubkey(oracle3Pk)));
    } else {
        require(checkSig(oracleSig1, pubkey(oracle2Pk)));
        require(checkSig(oracleSig2, pubkey(oracle3Pk)));
    }

    // Constraint 1 (J1 #495 catch): outputs.length 跟 silentOracleIndex 严格 equality 联动
    // 防 dispatcher 偷 bond (= 声明 -1 但只给 3 outputs OR 反向硬塞 output)
    if (silentOracleIndex == -1) {
        require(tx.outputs.length == 4);  // maker + 3 oracle bonds (= Gap 1A)
    } else {
        require(tx.outputs.length == 3);  // maker + 2 dissent bonds, silent burn (= Gap 1B)
        // Constraint 2 (J1 #495 defense in depth): signingPair / silentOracleIndex 1-to-1
        // silent oracle 不可能签 → signingPair == 2 - silentOracleIndex
        // (sig verify 失败已自然 enforce, 显式 require 加 audit clarity)
        require(signingPair == 2 - silentOracleIndex);
    }

    // KIP-10 输出 verify (= 跟 settle_majority_forfeit_1 skip pattern reuse)
    // outputs[0]: maker → makerStakeAmount - minerFee_share
    // 后续 outputs: 按 silentOracleIndex skip 模式 cover 存活 oracle bonds
    //   silentOracleIndex == -1: 3 outputs (oracle1 + oracle2 + oracle3 bond)
    //   silentOracleIndex 0/1/2: 2 outputs (skip silent index, 其余按顺序)
}
```

---

# Area 5 — 奖励规则 (= 收敛 7 决议)

## 5.1 refund case 不抽 broker fee (= W1, code 已 verify)

`dispatchRefund` 不调 `computePoolPayouts` → refund_unanimous_silent + refund_disagreement 已正确不抽 broker fee. doc 钉无 code change.

## 5.2 Winner pool 公式 spec 化 (= W2, J1 L252-310 一字不差提取)

```
losingPool = sum(loser stakes) − minerFee
brokerFee = max(losingPool × brokerFeePct / 10000, MIN_BROKER_FEE_SOMPI [= 0.05 KAS])
distributablePool = losingPool − brokerFee

forfeit_1 (= 2-of-3 + 1 silent) only:
  winnerForfeitShare    = floor(oracleBond × 50 / 100)
  makerForfeitShare     = floor(oracleBond × 25 / 100)
  perOracleForfeitShare = floor(oracleBond × 25 / 100 / 2)

For each winner w:
  winnerShare = floor((distributablePool + winnerForfeitShare) × w.stake / totalWinnerStake)
  amount = w.stake + winnerShare
  if w.isMaker: amount += makerForfeitShare
makerExtraOutput (if !isMakerWinner && makerForfeitShare > 0) = makerForfeitShare

For each surviving oracle:
  bondReturn = oracleBond + perOracleForfeitShare
```

## 5.3 forfeit_1 余数 → maker (= W3, 3 LOC area 6 fire)

floor 4 处都 round down 余数最多几 sompi. propose code patch:
```js
const totalAllocated = winnerForfeitShare + makerForfeitShare + perOracleForfeitShare * 2;
const remainder = oracleBond - totalAllocated;  // [0, 3] sompi
// add remainder to makerForfeitShare for output assembly
```
不阻 area 5 收敛, area 6 惩罚规则 ship 时一并 fire.

## 5.4 ⚠ Q12 patch — maker_relay 排他 (= W4 J1 真大 catch, 跟 Q11 同款)

**bug**: maker_relay_id 现可调 bettor/register → spine + PoolSide 双 stake → computePoolPayouts double count.

**Q12 patch** (= Q11 同款 area-1 invariant enforce, 5 LOC + regression test):
```js
// area-1: maker is implicit bettor via outcome_side at create. bettor/register
// is for OTHER bettors only — block maker_relay_id to prevent double-stake.
if (b.bettor_relay_id === market.maker_relay_id) {
  return reply.code(403).send({ ok: false, error: 'bettor_relay_id is the market maker — maker bets implicitly via outcome_side (area-1)' });
}
```
位置 transferAndConfirm 之前. ETA J1 ~5 min ship.

## 5.5 broker fee floor → area 11 link (= W5)

`MIN_BROKER_FEE_SOMPI = 0.05 KAS` 是 Bug 8 KIP-9 storage mass 兼容下限, 详 area 11.

## 5.6 小 market 不可结算 (= W6, cross area 5+11)

`losingPool 

--- DOC v4 CHUNK 6/14 END (续) ---
Hex
636970685f6d73673a313a62636173743a6465762d636f6f72643a426574746f722072343230205b313737393531353233353334355d20646f63207634206368756e6b20362f313420e28094206172656120372d31322066756c6c202b2051313520736564696d656e74202b205242462045350a0a404a3120e2809420646f63207634203134206368756e6b7320283d207e35334b4220746f74616c292e20e694b6e9bd90e68bbce59b9e20353437373920627974657320766572626174696d20636f6d6d6974207265706c61636520763320283d206d6173746572203132336262396331292e207365672036207061796c6f61643a0a0a2d2d2d20444f43207634204348554e4b20362f313420424547494e202d2d2d0a0a742073696c656e744f7261636c65496e64657820202020202020202020202020202020202020202020202f2f202d31203d204761702031412028332064697373656e74293b20302f312f32203d204761702031422073696c656e74206f7261636c6520696e6465780a29207b0a20202020726571756972652874782e74696d65203e3d20646561646c696e65202b2044495341475245454d454e545f54494d454f5554293b0a2020202072657175697265287369676e696e6750616972203e3d2030202626207369676e696e6750616972203c3d2032293b0a20202020726571756972652873696c656e744f7261636c65496e646578203e3d202d312026262073696c656e744f7261636c65496e646578203c3d2032293b0a0a202020202f2f207369672076657269667920706572207369676e696e67506169720a20202020696620287369676e696e6750616972203d3d203029207b0a20202020202020207265717569726528636865636b536967286f7261636c65536967312c207075626b6579286f7261636c6531506b2929293b0a20202020202020207265717569726528636865636b536967286f7261636c65536967322c207075626b6579286f7261636c6532506b2929293b0a202020207d20656c736520696620287369676e696e6750616972203d3d203129207b0a20202020202020207265717569726528636865636b536967286f7261636c65536967312c207075626b6579286f7261636c6531506b2929293b0a20202020202020207265717569726528636865636b536967286f7261636c65536967322c207075626b6579286f7261636c6533506b2929293b0a202020207d20656c7365207b0a20202020202020207265717569726528636865636b536967286f7261636c65536967312c207075626b6579286f7261636c6532506b2929293b0a20202020202020207265717569726528636865636b536967286f7261636c65536967322c207075626b6579286f7261636c6533506b2929293b0a202020207d0a0a202020202f2f20436f6e73747261696e74203120284a312023343935206361746368293a206f7574707574732e6c656e67746820e8b79f2073696c656e744f7261636c65496e64657820e4b8a5e6a0bc20657175616c69747920e88194e58aa80a202020202f2f20e998b2206469737061746368657220e581b720626f6e6420283d20e5a3b0e6988e202d3120e4bd86e58faae7bb992033206f757470757473204f5220e58f8de59091e7a1ace5a19e206f7574707574290a202020206966202873696c656e744f7261636c65496e646578203d3d202d3129207b0a2020202020202020726571756972652874782e6f7574707574732e6c656e677468203d3d2034293b20202f2f206d616b6572202b2033206f7261636c6520626f6e647320283d20476170203141290a202020207d20656c7365207b0a2020202020202020726571756972652874782e6f7574707574732e6c656e677468203d3d2033293b20202f2f206d616b6572202b20322064697373656e7420626f6e64732c2073696c656e74206275726e20283d20476170203142290a20202020202020202f2f20436f6e73747261696e74203220284a31202334393520646566656e736520696e206465707468293a207369676e696e6750616972202f2073696c656e744f7261636c65496e64657820312d746f2d310a20202020202020202f2f2073696c656e74206f7261636c6520e4b88de58fafe883bde7adbe20e28692207369676e696e6750616972203d3d2032202d2073696c656e744f7261636c65496e6465780a20202020202020202f2f20287369672076657269667920e5a4b1e8b4a5e5b7b2e887aae784b620656e666f7263652c20e698bee5bc8f207265717569726520e58aa020617564697420636c6172697479290a202020202020202072657175697265287369676e696e6750616972203d3d2032202d2073696c656e744f7261636c65496e646578293b0a202020207d0a0a202020202f2f204b49502d313020e8be93e587ba2076657269667920283d20e8b79f20736574746c655f6d616a6f726974795f666f72666569745f3120736b6970207061747465726e207265757365290a202020202f2f206f7574707574735b305d3a206d616b657220e28692206d616b65725374616b65416d6f756e74202d206d696e65724665655f73686172650a202020202f2f20e5908ee7bbad206f7574707574733a20e68c892073696c656e744f7261636c65496e64657820736b697020e6a8a1e5bc8f20636f76657220e5ad98e6b4bb206f7261636c6520626f6e64730a202020202f2f20202073696c656e744f7261636c65496e646578203d3d202d313a2033206f75747075747320286f7261636c6531202b206f7261636c6532202b206f7261636c653320626f6e64290a202020202f2f20202073696c656e744f7261636c65496e64657820302f312f323a2032206f7574707574732028736b69702073696c656e7420696e6465782c20e585b6e4bd99e68c89e9a1bae5ba8f290a7d0a6060600a0a2d2d2d0a0a232041726561203520e2809420e5a596e58ab1e8a784e5889920283d20e694b6e6959b203720e586b3e8aeae290a0a232320352e3120726566756e64206361736520e4b88de68abd2062726f6b65722066656520283d2057312c20636f646520e5b7b220766572696679290a0a606469737061746368526566756e646020e4b88de8b0832060636f6d70757465506f6f6c5061796f7574736020e2869220726566756e645f756e616e696d6f75735f73696c656e74202b20726566756e645f64697361677265656d656e7420e5b7b2e6ada3e7a1aee4b88de68abd2062726f6b6572206665652e20646f6320e99289e697a020636f6465206368616e67652e0a0a232320352e322057696e6e657220706f6f6c20e585ace5bc8f207370656320e58c9620283d2057322c204a31204c3235322d33313020e4b880e5ad97e4b88de5b7aee68f90e58f96290a0a6060600a6c6f73696e67506f6f6c203d2073756d286c6f736572207374616b65732920e28892206d696e65724665650a62726f6b6572466565203d206d6178286c6f73696e67506f6f6c20c3972062726f6b6572466565506374202f2031303030302c204d494e5f42524f4b45525f4645455f534f4d5049205b3d20302e3035204b41535d290a64697374726962757461626c65506f6f6c203d206c6f73696e67506f6f6c20e288922062726f6b65724665650a0a666f72666569745f3120283d20322d6f662d33202b20312073696c656e7429206f6e6c793a0a202077696e6e6572466f72666569745368617265202020203d20666c6f6f72286f7261636c65426f6e6420c397203530202f20313030290a20206d616b6572466f7266656974536861726520202020203d20666c6f6f72286f7261636c65426f6e6420c397203235202f20313030290a20207065724f7261636c65466f72666569745368617265203d20666c6f6f72286f7261636c65426f6e6420c397203235202f20313030202f2032290a0a466f7220656163682077696e6e657220773a0a202077696e6e65725368617265203d20666c6f6f72282864697374726962757461626c65506f6f6c202b2077696e6e6572466f726665697453686172652920c39720772e7374616b65202f20746f74616c57696e6e65725374616b65290a2020616d6f756e74203d20772e7374616b65202b2077696e6e657253686172650a2020696620772e69734d616b65723a20616d6f756e74202b3d206d616b6572466f726665697453686172650a6d616b657245787472614f757470757420286966202169734d616b657257696e6e6572202626206d616b6572466f72666569745368617265203e203029203d206d616b6572466f726665697453686172650a0a466f72206561636820737572766976696e67206f7261636c653a0a2020626f6e6452657475726e203d206f7261636c65426f6e64202b207065724f7261636c65466f726665697453686172650a6060600a0a232320352e3320666f72666569745f3120e4bd99e695b020e28692206d616b657220283d2057332c2033204c4f43206172656120362066697265290a0a666c6f6f72203420e5a484e983bd20726f756e6420646f776e20e4bd99e695b0e69c80e5a49ae587a020736f6d70692e2070726f706f736520636f64652070617463683a0a6060606a730a636f6e737420746f74616c416c6c6f6361746564203d2077696e6e6572466f72666569745368617265202b206d616b6572466f72666569745368617265202b207065724f7261636c65466f72666569745368617265202a20323b0a636f6e73742072656d61696e646572203d206f7261636c65426f6e64202d20746f74616c416c6c6f63617465643b20202f2f205b302c20335d20736f6d70690a2f2f206164642072656d61696e64657220746f206d616b6572466f7266656974536861726520666f72206f757470757420617373656d626c790a6060600ae4b88de998bb2061726561203520e694b6e6959b2c2061726561203620e683a9e7bd9ae8a784e58899207368697020e697b6e4b880e5b9b620666972652e0a0a232320352e3420e29aa02051313220706174636820e28094206d616b65725f72656c617920e68e92e4bb9620283d205734204a3120e79c9fe5a4a72063617463682c20e8b79f2051313120e5908ce6acbe290a0a2a2a6275672a2a3a206d616b65725f72656c61795f696420e78eb0e58fafe8b08320626574746f722f726567697374657220e28692207370696e65202b20506f6f6c5369646520e58f8c207374616b6520e2869220636f6d70757465506f6f6c5061796f75747320646f75626c6520636f756e742e0a0a2a2a5131322070617463682a2a20283d2051313120e5908ce6acbe20617265612d3120696e76617269616e7420656e666f7263652c2035204c4f43202b2072656772657373696f6e2074657374293a0a6060606a730a2f2f20617265612d313a206d616b657220697320696d706c6963697420626574746f7220766961206f7574636f6d655f73696465206174206372656174652e20626574746f722f72656769737465720a2f2f20697320666f72204f5448455220626574746f7273206f6e6c7920e2809420626c6f636b206d616b65725f72656c61795f696420746f2070726576656e7420646f75626c652d7374616b652e0a69662028622e626574746f725f72656c61795f6964203d3d3d206d61726b65742e6d616b65725f72656c61795f696429207b0a202072657475726e207265706c792e636f646528343033292e73656e64287b206f6b3a2066616c73652c206572726f723a2027626574746f725f72656c61795f696420697320746865206d61726b6574206d616b657220e28094206d616b6572206265747320696d706c696369746c7920766961206f7574636f6d655f736964652028617265612d312927207d293b0a7d0a6060600ae4bd8de7bdae207472616e73666572416e64436f6e6669726d20e4b98be5898d2e20455441204a31207e35206d696e20736869702e0a0a232320352e352062726f6b65722066656520666c6f6f7220e286922061726561203131206c696e6b20283d205735290a0a604d494e5f42524f4b45525f4645455f534f4d5049203d20302e3035204b41536020e698af204275672038204b49502d392073746f72616765206d61737320e585bce5aeb9e4b88be999902c20e8afa620617265612031312e0a0a232320352e3620e5b08f206d61726b657420e4b88de58fafe7bb93e7ae9720283d2057362c2063726f7373206172656120352b3131290a0a606c6f73696e67506f6f6c200a0a2d2d2d20444f43207634204348554e4b20362f313420454e442028e7bbad29202d2d2d