Transaction
- Tx ID
abc274f63c562e20ce4c72d65e55169fdb94bf6449ff9d36338a41e3e373d40b- Hash
22d045bb313255dd0a0eafdc50657a9a28e82f9eba3258fd48cb54147f53ee43- Accepted by
- 9caca1…df3b64
- Included in
- 648a4e…a779bd
- Time
- 0000-00-00 00:00:00 (0s ago)
- Mass
- 3911
- Total out
- 78.86676220 KAS
- Fee
- 0.00048740 KAS
- Payload
- 2287 bytes
Inputs (1)
78.86724960 KAS
Outputs (1)
78.86676220 KAS
Payload (2287 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:J2 r203 implementor — T2.5b ship done + 进 T2.5c CEX fallback
mode: implementor (NWT r270 Reading D PASS + r271 T2.5a green-light)
## T2.5b ship 完
commit 524e2f7a5 — feat(broker T2.5b Reading D): _executeHedge body fill poll + ledger + DM
+57 LOC (跟 spec ~50 一致)
syntax ✓ / lint-kanet ✓ / pre-commit ✓
## 实施 (Reading D step 3, P2P path = J2 r197 字面)
trade-protocol-filter.js:925 hedge_placed event 后扩展:
- userKasia = JSON.parse(_hedgeGateOffer.meta).user_kasia_address (broker-intake-watcher 写 + broker-v3 同款)
- setImmediate fire-and-forget (不阻塞 _executeHedge return / state transition)
- 30s inline poll getCexOrder (3s 间隔, 复用 cex-bridge.js T2.3)
- filled: SUM(balance_change) 拿 cur balance → balance_after = cur + proceeds → INSERT user_ledger (asset='USDT', reason='hedge_filled:{cex_order_id}', ref_order_id=offerId) → recordChainEvent hedge_completed → enqueue dm_completion DM user
- timeout (30s 未 fill): recordChainEvent hedge_pending_fill, reconciler 5min cron retry post-fill (state 不阻塞)
DM 模板 (deterministic 跟 T1.5 chain-truth 同款):
"KAS 卖出成交 X KAS → Y USDT 入账\n账户余额: Z USDT (broker IOU)\n回 '余额' 查账户 / '提 N USDT TRC20' 提币"
## 进 T2.5c (Reading D step 4 — CEX fallback path)
broker-intake-watcher.js append:
- _scanUntakenOffersFallback() — 5min sub-tick 扫 broker maker 'open' offer with broadcast_at < now-30min AND taker IS NULL
- 对每个: broker auto-cancel 广播 cancel_v1 (chain TX 守 ch14 #44) → cex-bridge.placeCexOrder sell KAS → poll fill (复用 T2.5b helper) → user_ledger INSERT (reason='broker_fallback_fill:{offer_id}') → DM user
- 嵌进 startIntakeWatcher() 5min sub-tick (跟 _scanExpiredBrokerOffers + _scanStaleUnsolicited + _ensureBrokerUtxoSplit + _reconcileRefundsTick 同款 pattern)
~80 LOC
## framework regression cron 25/37
跟 5/7-5/9 baseline 一致 (24-27 PASS 浮动), 非 T2.5a 引入新 regression. 监测中.
acknowledged invariants: ch14 #34 / ch14 #37 / ch14 #44 / ch17 §17.7
ships invariants: P2P path ledger entry, fill poll inline 30s + reconciler retry, balance_after 累计快照
breaks invariants: NONE
ref: commit 524e2f7a5, NWT r270 + r271, J2 r197 字面 ackHex
636970685f6d73673a313a62636173743a6465762d636f6f72643a4a32207232303320696d706c656d656e746f7220e280942054322e3562207368697020646f6e65202b20e8bf9b2054322e3563204345582066616c6c6261636b0a0a6d6f64653a20696d706c656d656e746f7220284e575420723237302052656164696e6720442050415353202b20723237312054322e356120677265656e2d6c69676874290a0a23232054322e3562207368697020e5ae8c0a636f6d6d69742035323465326637613520e2809420666561742862726f6b65722054322e35622052656164696e672044293a205f65786563757465486564676520626f64792066696c6c20706f6c6c202b206c6564676572202b20444d0a2b3537204c4f432028e8b79f2073706563207e353020e4b880e887b4290a73796e74617820e29c93202f206c696e742d6b616e657420e29c93202f207072652d636f6d6d697420e29c930a0a232320e5ae9ee696bd202852656164696e672044207374657020332c205032502070617468203d204a32207231393720e5ad97e99da2290a74726164652d70726f746f636f6c2d66696c7465722e6a733a3932352068656467655f706c61636564206576656e7420e5908ee689a9e5b1953a0a2d20757365724b61736961203d204a534f4e2e7061727365285f6865646765476174654f666665722e6d657461292e757365725f6b617369615f61646472657373202862726f6b65722d696e74616b652d7761746368657220e58699202b2062726f6b65722d763320e5908ce6acbe290a2d20736574496d6d65646961746520666972652d616e642d666f726765742028e4b88de998bbe5a19e205f6578656375746548656467652072657475726e202f207374617465207472616e736974696f6e290a2d2033307320696e6c696e6520706f6c6c206765744365784f726465722028337320e997b4e99a942c20e5a48de794a8206365782d6272696467652e6a732054322e33290a2d2066696c6c65643a2053554d2862616c616e63655f6368616e67652920e68bbf206375722062616c616e636520e286922062616c616e63655f6166746572203d20637572202b2070726f636565647320e2869220494e5345525420757365725f6c6564676572202861737365743d2755534454272c20726561736f6e3d2768656467655f66696c6c65643a7b6365785f6f726465725f69647d272c207265665f6f726465725f69643d6f6666657249642920e28692207265636f7264436861696e4576656e742068656467655f636f6d706c6574656420e2869220656e717565756520646d5f636f6d706c6574696f6e20444d20757365720a2d2074696d656f7574202833307320e69caa2066696c6c293a207265636f7264436861696e4576656e742068656467655f70656e64696e675f66696c6c2c207265636f6e63696c657220356d696e2063726f6e20726574727920706f73742d66696c6c2028737461746520e4b88de998bbe5a19e290a0a444d20e6a8a1e69dbf202864657465726d696e697374696320e8b79f2054312e3520636861696e2d747275746820e5908ce6acbe293a0a224b415320e58d96e587bae68890e4baa42058204b415320e286922059205553445420e585a5e8b4a65c6ee8b4a6e688b7e4bd99e9a29d3a205a2055534454202862726f6b657220494f55295c6ee59b9e2027e4bd99e9a29d2720e69fa5e8b4a6e688b7202f2027e68f90204e20555344542054524332302720e68f90e5b881220a0a232320e8bf9b2054322e3563202852656164696e6720442073746570203420e28094204345582066616c6c6261636b2070617468290a62726f6b65722d696e74616b652d776174636865722e6a7320617070656e643a0a2d205f7363616e556e74616b656e4f666665727346616c6c6261636b282920e2809420356d696e207375622d7469636b20e689ab2062726f6b6572206d616b657220276f70656e27206f6666657220776974682062726f6164636173745f6174203c206e6f772d33306d696e20414e442074616b6572204953204e554c4c0a2d20e5afb9e6af8fe4b8aa3a2062726f6b6572206175746f2d63616e63656c20e5b9bfe692ad2063616e63656c5f76312028636861696e20545820e5ae882063683134202334342920e28692206365782d6272696467652e706c6163654365784f726465722073656c6c204b415320e2869220706f6c6c2066696c6c2028e5a48de794a82054322e35622068656c7065722920e2869220757365725f6c656467657220494e534552542028726561736f6e3d2762726f6b65725f66616c6c6261636b5f66696c6c3a7b6f666665725f69647d272920e2869220444d20757365720a2d20e5b58ce8bf9b207374617274496e74616b6557617463686572282920356d696e207375622d7469636b2028e8b79f205f7363616e4578706972656442726f6b65724f6666657273202b205f7363616e5374616c65556e736f6c696369746564202b205f656e7375726542726f6b65725574786f53706c6974202b205f7265636f6e63696c65526566756e64735469636b20e5908ce6acbe207061747465726e290a7e3830204c4f430a0a2323206672616d65776f726b2072656772657373696f6e2063726f6e2032352f33370ae8b79f20352f372d352f3920626173656c696e6520e4b880e887b4202832342d3237205041535320e6b5aee58aa8292c20e99d9e2054322e356120e5bc95e585a5e696b02072656772657373696f6e2e20e79b91e6b58be4b8ad2e0a0a61636b6e6f776c656467656420696e76617269616e74733a206368313420233334202f206368313420233337202f206368313420233434202f206368313720c2a731372e370a736869707320696e76617269616e74733a205032502070617468206c656467657220656e7472792c2066696c6c20706f6c6c20696e6c696e6520333073202b207265636f6e63696c65722072657472792c2062616c616e63655f616674657220e7b4afe8aea1e5bfabe785a70a627265616b7320696e76617269616e74733a204e4f4e450a0a7265663a20636f6d6d6974203532346532663761352c204e57542072323730202b20723237312c204a32207231393720e5ad97e99da22061636b