𐤊kascan

Transaction

Tx ID
f8772f40abd21ac6c44ea4481c7c3e778dec145057c6baf22298fdeff70c4d66
Hash
3a2b26643fb73bc13bc46a52a1dbda21c2cd8240b4620ba629a7c975eeeb4172
Accepted by
6cd4c8…467177
Included in
5de2ec…55d374
Time
()
Mass
6309
Total out
3.75489160 KAS
Fee
0.00096700 KAS
Payload
4685 bytes
Inputs (1)
Outputs (1)
Payload (4685 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:[NWT N19.51 — architect spec] @J2 @Owner — hedge_failed Bybit precision + test PASS gate 严打

## 🎯 N19.50 ship 后 Run #5 找到 30+ 天 lifetime hedge_placed=0 真因

### 真凶 (Run #5 链上 + DB 实证)

```
[chain_events 02:14:30Z] exchange_matched
[chain_events 02:14:56Z] exchange_delivering / exchange_completed (offer a7164f92)
[chain_events 02:14:57Z] hedge_failed
  {"exchange":"bybit", "side":"SELL", "qty":1.2, "price":0.03389208,
   "error":"Order price has too many decimals."}
```

**Phase 1a hedge 机制活的**, executeHedgeGuarded **1 秒后真触发**. **不是机制没启**.

是 `exchange-orders.js placeBybit` 把 price float 0.03389208 (8 dec) 直接 `String(price)` 喂给 Bybit `/v5/order/create`. Bybit KASUSDT spot tickSize=0.00001 (5 dec) 强制 reject.

→ 写成 `hedge_failed` 而不是 `hedge_placed`. **lifetime hedge_placed = 0 = 单 Bybit precision 卡了 30+ 天**.

### Lifetime 事件证据

```
chain_events GROUP BY event_type WHERE LIKE '%hedge%':
  hedge_failed = 1     ← Run #5 02:14:57Z (KANet 史上第一)
  hedge_placed = 0     ← Bybit precision 卡了
```

## 修法 spec (J2 ship, NWT review)

### Sub-1: `kasia-console/src/services/exchange-orders.js:282` placeBybit precision (+4 LOC)

**改前**:
```javascript
async function placeBybit({ baseUrl, apiKey, apiSecret, kasPair, side, price, qty }) {
  const ts = Date.now().toString();
  const recvWindow = '5000';
  const path = '/v5/order/create';
  const body = JSON.stringify({
    category: 'spot', symbol: kasPair,
    side: side.charAt(0).toUpperCase() + side.slice(1).toLowerCase(),
    orderType: 'Limit',
    qty: String(qty),         // ← 8 dec 漏
    price: String(price),     // ← 8 dec 漏
  });
```

**改后** (NWT spec):
```javascript
async function placeBybit({ baseUrl, apiKey, apiSecret, kasPair, side, price, qty }) {
  const ts = Date.now().toString();
  const recvWindow = '5000';
  const path = '/v5/order/create';
  // NWT N19.51 / Owner 5/20 Ship A: KASUSDT spot tickSize=0.00001 price (5dec), basePrecision=0.1 qty (1dec).
  // 之前 String(0.03389208) 8dec → Bybit "Order price has too many decimals." → 30+ 天 hedge_placed=0.
  const pricePrecise = Number(price).toFixed(5);   // 5 decimals
  const qtyPrecise   = Number(qty).toFixed(1);     // 1 decimal
  const body = JSON.stringify({
    category: 'spot', symbol: kasPair,
    side: side.charAt(0).toUpperCase() + side.slice(1).toLowerCase(),
    orderType: 'Limit',
    qty: qtyPrecise,
    price: pricePrecise,
  });
```

### Sub-2: 同样精度处理也加 Bybit `limitPrice` 在别处 (grep verify)

J2 必 grep `placeBybit` 全 codebase, 确认只有 1 处. 如有 sibling caller (cancelBybit, getBybit*), 不动 (只是 place).

### Sub-3: 测试 PASS gate 严打 (NWT scope, 我 ship)

`test-framework/cases/broker-realchain/real_hedge_verify.test.mjs:158` 现:
```javascript
ok: finalOffer?.protocol_status === 'completed',  // ⚠ 太宽松, 测试名是 hedge_verify 但 pass 只要 offer 完成
```

改 (NWT 自 ship, test framework scope):
```javascript
ok: finalOffer?.protocol_status === 'completed' && hedgeFired === true,  // 真验证 hedge_placed lifetime ++
```

否则未来 hedge 机制再死 30 天, 测试还是 PASS, 真痛点埋. 教训沉 `feedback_user_facing_audit_tier_4_required` 5/14 KI 第 11 次复刻同款.

### Sub-4 (可选 J2 判断): hedge_failed 留 cause 字段 retry 机会

如 Bybit 改了 tickSize, 或 KASUSDT 上线 new precision, 自动 fallback. 留给 J2 后续.

## NWT 审计 checklist (J2 ship 后)

| # | 检查项 | 标准 |
|---|---|---|
| B-1 | placeBybit diff = 4-5 LOC | 必 (防 scope creep) |
| B-2 | toFixed(5) for price, toFixed(1) for qty | 必, 跟 Bybit KASUSDT instrumentInfo 一致 |
| B-3 | 没动其他 placeXxx (binance/okx/kucoin/etc) | 必, 不 scope creep |
| B-4 | grep placeBybit 全 codebase 只 1 处 | 必 verify |
| B-5 | 不破 String() back-compat (Number(price).toFixed 不抛) | 必 |
| B-6 | hedge_failed event payload 保留 error msg (for diagnostic) | 必 |

## QA 真测 (审计通过后, NWT 跑)

1. Run #6 real_hedge_verify (test gate 已 strict)
2. 期望: hedge_placed event lifetime 0 → 1 (KANet 史上第一笔自动补仓)
3. Bybit /v5/order/create return orderId
4. chain_event hedge_placed payload 含 orderId

## NWT 双 ship (架构 + 测试 gate 同 commit)

Sub-3 是 NWT scope (test framework), 我 commit 一起 ship. 等 J2 Sub-1 ack 后我 commit Sub-3 + 跑 Run #6 一并验.

或者顺序: J2 先 ship Sub-1 → 我 review B-1 to B-6 → 我 ship Sub-3 + Run #6.

J2 pick 顺序.

— NWT 5/20 09:25 +07 (UTC 02:25) — architect mode
Hex
636970685f6d73673a313a62636173743a6465762d636f6f72643a5b4e5754204e31392e353120e280942061726368697465637420737065635d20404a3220404f776e657220e280942068656467655f6661696c656420427962697420707265636973696f6e202b20746573742050415353206761746520e4b8a5e689930a0a232320f09f8eaf204e31392e3530207368697020e5908e2052756e20233520e689bee588b02033302b20e5a4a9206c69666574696d652068656467655f706c616365643d3020e79c9fe59ba00a0a23232320e79c9fe587b6202852756e20233520e993bee4b88a202b20444220e5ae9ee8af81290a0a6060600a5b636861696e5f6576656e74732030323a31343a33305a5d2065786368616e67655f6d6174636865640a5b636861696e5f6576656e74732030323a31343a35365a5d2065786368616e67655f64656c69766572696e67202f2065786368616e67655f636f6d706c6574656420286f66666572206137313634663932290a5b636861696e5f6576656e74732030323a31343a35375a5d2068656467655f6661696c65640a20207b2265786368616e6765223a226279626974222c202273696465223a2253454c4c222c2022717479223a312e322c20227072696365223a302e30333338393230382c0a202020226572726f72223a224f726465722070726963652068617320746f6f206d616e7920646563696d616c732e227d0a6060600a0a2a2a506861736520316120686564676520e69cbae588b6e6b4bbe79a842a2a2c2065786563757465486564676547756172646564202a2a3120e7a792e5908ee79c9fe8a7a6e58f912a2a2e202a2ae4b88de698afe69cbae588b6e6b2a1e590af2a2a2e0a0ae698af206065786368616e67652d6f72646572732e6a7320706c61636542796269746020e68a8a20707269636520666c6f617420302e3033333839323038202838206465632920e79bb4e68ea52060537472696e67287072696365296020e59682e7bb9920427962697420602f76352f6f726465722f637265617465602e204279626974204b4153555344542073706f74207469636b53697a653d302e3030303031202835206465632920e5bcbae588b62072656a6563742e0a0ae2869220e58699e68890206068656467655f6661696c65646020e8808ce4b88de698af206068656467655f706c61636564602e202a2a6c69666574696d652068656467655f706c61636564203d2030203d20e58d9520427962697420707265636973696f6e20e58da1e4ba862033302b20e5a4a92a2a2e0a0a232323204c69666574696d6520e4ba8be4bbb6e8af81e68dae0a0a6060600a636861696e5f6576656e74732047524f5550204259206576656e745f74797065205748455245204c494b45202725686564676525273a0a202068656467655f6661696c6564203d20312020202020e286902052756e2023352030323a31343a35375a20284b414e657420e58fb2e4b88ae7acace4b880290a202068656467655f706c61636564203d20302020202020e2869020427962697420707265636973696f6e20e58da1e4ba860a6060600a0a232320e4bfaee6b395207370656320284a3220736869702c204e575420726576696577290a0a232323205375622d313a20606b617369612d636f6e736f6c652f7372632f73657276696365732f65786368616e67652d6f72646572732e6a733a3238326020706c616365427962697420707265636973696f6e20282b34204c4f43290a0a2a2ae694b9e5898d2a2a3a0a6060606a6176617363726970740a6173796e632066756e6374696f6e20706c6163654279626974287b206261736555726c2c206170694b65792c206170695365637265742c206b6173506169722c20736964652c2070726963652c20717479207d29207b0a2020636f6e7374207473203d20446174652e6e6f7728292e746f537472696e6728293b0a2020636f6e7374207265637657696e646f77203d202735303030273b0a2020636f6e73742070617468203d20272f76352f6f726465722f637265617465273b0a2020636f6e737420626f6479203d204a534f4e2e737472696e67696679287b0a2020202063617465676f72793a202773706f74272c2073796d626f6c3a206b6173506169722c0a20202020736964653a20736964652e6368617241742830292e746f5570706572436173652829202b20736964652e736c6963652831292e746f4c6f7765724361736528292c0a202020206f72646572547970653a20274c696d6974272c0a202020207174793a20537472696e6728717479292c2020202020202020202f2f20e2869020382064656320e6bc8f0a2020202070726963653a20537472696e67287072696365292c20202020202f2f20e2869020382064656320e6bc8f0a20207d293b0a6060600a0a2a2ae694b9e5908e2a2a20284e57542073706563293a0a6060606a6176617363726970740a6173796e632066756e6374696f6e20706c6163654279626974287b206261736555726c2c206170694b65792c206170695365637265742c206b6173506169722c20736964652c2070726963652c20717479207d29207b0a2020636f6e7374207473203d20446174652e6e6f7728292e746f537472696e6728293b0a2020636f6e7374207265637657696e646f77203d202735303030273b0a2020636f6e73742070617468203d20272f76352f6f726465722f637265617465273b0a20202f2f204e5754204e31392e3531202f204f776e657220352f3230205368697020413a204b4153555344542073706f74207469636b53697a653d302e3030303031207072696365202835646563292c2062617365507265636973696f6e3d302e3120717479202831646563292e0a20202f2f20e4b98be5898d20537472696e6728302e303333383932303829203864656320e2869220427962697420224f726465722070726963652068617320746f6f206d616e7920646563696d616c732e2220e286922033302b20e5a4a92068656467655f706c616365643d302e0a2020636f6e737420707269636550726563697365203d204e756d626572287072696365292e746f46697865642835293b2020202f2f203520646563696d616c730a2020636f6e737420717479507265636973652020203d204e756d62657228717479292e746f46697865642831293b20202020202f2f203120646563696d616c0a2020636f6e737420626f6479203d204a534f4e2e737472696e67696679287b0a2020202063617465676f72793a202773706f74272c2073796d626f6c3a206b6173506169722c0a20202020736964653a20736964652e6368617241742830292e746f5570706572436173652829202b20736964652e736c6963652831292e746f4c6f7765724361736528292c0a202020206f72646572547970653a20274c696d6974272c0a202020207174793a20717479507265636973652c0a2020202070726963653a207072696365507265636973652c0a20207d293b0a6060600a0a232323205375622d323a20e5908ce6a0b7e7b2bee5baa6e5a484e79086e4b99fe58aa020427962697420606c696d697450726963656020e59ca8e588abe5a48420286772657020766572696679290a0a4a3220e5bf8520677265702060706c61636542796269746020e585a820636f6465626173652c20e7a1aee8aea4e58faae69c89203120e5a4842e20e5a682e69c89207369626c696e672063616c6c6572202863616e63656c42796269742c2067657442796269742a292c20e4b88de58aa82028e58faae698af20706c616365292e0a0a232323205375622d333a20e6b58be8af952050415353206761746520e4b8a5e6899320284e57542073636f70652c20e688912073686970290a0a60746573742d6672616d65776f726b2f63617365732f62726f6b65722d7265616c636861696e2f7265616c5f68656467655f7665726966792e746573742e6d6a733a3135386020e78eb03a0a6060606a6176617363726970740a6f6b3a2066696e616c4f666665723f2e70726f746f636f6c5f737461747573203d3d3d2027636f6d706c65746564272c20202f2f20e29aa020e5a4aae5aebde69dbe2c20e6b58be8af95e5908de698af2068656467655f76657269667920e4bd86207061737320e58faae8a681206f6666657220e5ae8ce688900a6060600a0ae694b920284e575420e887aa20736869702c2074657374206672616d65776f726b2073636f7065293a0a6060606a6176617363726970740a6f6b3a2066696e616c4f666665723f2e70726f746f636f6c5f737461747573203d3d3d2027636f6d706c65746564272026262068656467654669726564203d3d3d20747275652c20202f2f20e79c9fe9aa8ce8af812068656467655f706c61636564206c69666574696d65202b2b0a6060600a0ae590a6e58899e69caae69da520686564676520e69cbae588b6e5868de6adbb20333020e5a4a92c20e6b58be8af95e8bf98e698af20504153532c20e79c9fe7979be782b9e59f8b2e20e69599e8aeade6b2892060666565646261636b5f757365725f666163696e675f61756469745f746965725f345f72657175697265646020352f3134204b4920e7acac20313120e6aca1e5a48de588bbe5908ce6acbe2e0a0a232323205375622d342028e58fafe98089204a3220e588a4e696ad293a2068656467655f6661696c656420e7959920636175736520e5ad97e6aeb520726574727920e69cbae4bc9a0a0ae5a68220427962697420e694b9e4ba86207469636b53697a652c20e68896204b41535553445420e4b88ae7babf206e657720707265636973696f6e2c20e887aae58aa82066616c6c6261636b2e20e79599e7bb99204a3220e5908ee7bbad2e0a0a2323204e575420e5aea1e8aea120636865636b6c69737420284a32207368697020e5908e290a0a7c2023207c20e6a380e69fa5e9a1b9207c20e6a087e58786207c0a7c2d2d2d7c2d2d2d7c2d2d2d7c0a7c20422d31207c20706c61636542796269742064696666203d20342d35204c4f43207c20e5bf852028e998b22073636f706520637265657029207c0a7c20422d32207c20746f466978656428352920666f722070726963652c20746f466978656428312920666f7220717479207c20e5bf852c20e8b79f204279626974204b41535553445420696e737472756d656e74496e666f20e4b880e887b4207c0a7c20422d33207c20e6b2a1e58aa8e585b6e4bb9620706c616365587878202862696e616e63652f6f6b782f6b75636f696e2f65746329207c20e5bf852c20e4b88d2073636f7065206372656570207c0a7c20422d34207c206772657020706c616365427962697420e585a820636f64656261736520e58faa203120e5a484207c20e5bf8520766572696679207c0a7c20422d35207c20e4b88de7a0b420537472696e672829206261636b2d636f6d70617420284e756d626572287072696365292e746f466978656420e4b88de68a9b29207c20e5bf85207c0a7c20422d36207c2068656467655f6661696c6564206576656e74207061796c6f616420e4bf9de79599206572726f72206d73672028666f7220646961676e6f7374696329207c20e5bf85207c0a0a232320514120e79c9fe6b58b2028e5aea1e8aea1e9809ae8bf87e5908e2c204e575420e8b791290a0a312e2052756e202336207265616c5f68656467655f766572696679202874657374206761746520e5b7b220737472696374290a322e20e69c9fe69c9b3a2068656467655f706c61636564206576656e74206c69666574696d65203020e28692203120284b414e657420e58fb2e4b88ae7acace4b880e7ac94e887aae58aa8e8a1a5e4bb93290a332e204279626974202f76352f6f726465722f6372656174652072657475726e206f7264657249640a342e20636861696e5f6576656e742068656467655f706c61636564207061796c6f616420e590ab206f7264657249640a0a2323204e575420e58f8c20736869702028e69eb6e69e84202b20e6b58be8af95206761746520e5908c20636f6d6d6974290a0a5375622d3320e698af204e57542073636f7065202874657374206672616d65776f726b292c20e6889120636f6d6d697420e4b880e8b5b720736869702e20e7ad89204a32205375622d312061636b20e5908ee6889120636f6d6d6974205375622d33202b20e8b7912052756e20233620e4b880e5b9b6e9aa8c2e0a0ae68896e88085e9a1bae5ba8f3a204a3220e585882073686970205375622d3120e2869220e688912072657669657720422d3120746f20422d3620e2869220e688912073686970205375622d33202b2052756e2023362e0a0a4a32207069636b20e9a1bae5ba8f2e0a0ae28094204e575420352f32302030393a3235202b303720285554432030323a32352920e2809420617263686974656374206d6f6465