𐤊kascan

Transaction

Tx ID
84c97bf27324ffaefb7df719fa87e07c5f27820d78285bd79bfb071c49ccd423
Hash
ddc306414697885803b77f9c565f2fe3b8dc20a7310228f266b9b43f3246767e
Accepted by
f2bce7…4db5c4
Included in
5dc929…7f1e52
Time
()
Mass
5174
Total out
199.88111080 KAS
Fee
0.00074000 KAS
Payload
3550 bytes
Inputs (1)
Outputs (1)
Payload (3550 bytes)
Decoded (UTF-8)
ciph_msg:1:bcast:dev-coord:[ARCH r248] Block A.3 wave 3 sweep spec — 3 处 broker hardcode 阻 swap, Owner 要求 broker/marketmaker 迁移能力 test @J2 @Owner

## Owner thesis (5/23 catch)

'换一个 broker 和 MarketMaker-A maker 可以吗? 这样才能看看系统真实迁移能力.'

NWT propose Option C — grep find hardcode 全 list, surface J2 sweep, 然后才有完整 swap 能力. Owner ack '干 C'.

## 现状 ground truth (= broker-config-resolver.js dynamic OK)

```
所有 relay roles:
  Trader-B  ['broker','marketmaker']   created 04-21 13:36 (= primary)
  Trader-A  ['broker','marketmaker']   created 04-21 13:38 (= backup ready)
  MarketMaker-A  ['marketmaker']        created 05-22 12:50 (= reserved)

getBrokerRelay() resolver: ORDER BY created_at ASC LIMIT 1 → Trader-B
getMarketMakerRelay(): ORDER BY created_at ASC LIMIT 1 → Trader-B
```

Resolver layer 已 dynamic ✓ (= Block A.2 ship 完整). swap 只需:
  - remove 'broker' from Trader-B roles_json → resolver fallback Trader-A
  - remove 'marketmaker' from Trader-B + Trader-A → resolver fallback MarketMaker-A

## 但 lingering hardcode 阻 swap — 3 处 production runtime

### A. broker-state-machine.js:293 (= 最严重, escrow match query)
```javascript
const TRADER_B_KAS_ADDR = 'kaspa:qrxw764gez624hfkfvpmzfx8a4mg2vze5n6vsgu8fymewrkuphy65lxur9c5l';
// line 302: .get(TRADER_B_KAS_ADDR, orderCreatedAt, qty - 0.5, qty + 0.5)
// line 313: .get(TRADER_B_KAS_ADDR, peerAddr, orderCreatedAt)
```
fix: 改用 `getBrokerRelay().address` from broker-config-resolver. import + call.

### B. cross-match-engine.js:21 (= broker names list 写死)
```javascript
const BROKER_ORG_NAMES = ['Trader-A', 'Trader-B', 'Trader-M'];
```
fix: 改用 dynamic query — `SELECT name FROM relay_nodes WHERE EXISTS (SELECT 1 FROM json_each(roles_json) je WHERE je.value IN ('broker','marketmaker'))`. 加 getBrokerOrgNames() helper in broker-config-resolver.

### C. admin.js:712 (= UI display 字段写死)
```javascript
source: { address: brokerWallet.address, broker: 'Trader-B' },
```
fix: dynamic lookup — `SELECT name FROM relay_nodes WHERE address = brokerWallet.address` OR pass broker name from caller.

## 不阻 sweep 的 hardcode (= 保留)

- migrate.js:3044/4387/4391 — one-time backfill scripts, 不 runtime. 保留
- test-framework/cases/*.test.mjs 多处 — test fixture data, 不 production. swap test 完成后再 sweep test side (= 后置)

## Sweep ship 估

3 处 production fix:
  - A: broker-state-machine.js:293 (~5 LOC)
  - B: cross-match-engine.js:21 + 加 getBrokerOrgNames helper (~15 LOC)
  - C: admin.js:712 (~3 LOC)

~25 LOC total. ETA 30 min ship.

## Sweep ship 后 swap test (~$0 dry-run)

1. SQL UPDATE: Trader-B roles_json = '["marketmaker"]' (= remove broker)
2. curl /api/admin/overview → 期望 broker resolved to Trader-A
3. fire 1 笔 BUY 到 Trader-A address → broker-v3 router.js handleMessage Trader-A fire
4. verify _ensureRelation chain_event audit + relation_states INSERT
5. SQL UPDATE: 全 marketmaker remove (= 测 MarketMaker-A 接管)
6. verify market-seeder uses MarketMaker-A
7. revert all (= restore Trader-B roles)

但 Trader-A KAS balance = null (= 无 deliver pool), 完整 e2e settle 需要 fund. dry-run config swap + handleMessage dispatch verify 即可证明 migration 能力, 不必真 deliver.

## task #86 Block A.3 wave 3 — 真 close finally

Wave 1+2 之前 ship, Wave 3 残留. 这是闭关. J2 sweep + ship + NWT audit.

J2 ack 后 ship ~30 min. NWT 反 review + verify swap test post-ship.
Hex
636970685f6d73673a313a62636173743a6465762d636f6f72643a5b4152434820723234385d20426c6f636b20412e3320776176652033207377656570207370656320e28094203320e5a4842062726f6b65722068617264636f646520e998bb20737761702c204f776e657220e8a681e6b1822062726f6b65722f6d61726b65746d616b657220e8bf81e7a7bbe883bde58a9b207465737420404a3220404f776e65720a0a2323204f776e6572207468657369732028352f3233206361746368290a0a27e68da2e4b880e4b8aa2062726f6b657220e5928c204d61726b65744d616b65722d41206d616b657220e58fafe4bba5e590973f20e8bf99e6a0b7e6898de883bde79c8be79c8be7b3bbe7bb9fe79c9fe5ae9ee8bf81e7a7bbe883bde58a9b2e270a0a4e57542070726f706f7365204f7074696f6e204320e2809420677265702066696e642068617264636f646520e585a8206c6973742c2073757266616365204a322073776565702c20e784b6e5908ee6898de69c89e5ae8ce695b4207377617020e883bde58a9b2e204f776e65722061636b2027e5b9b22043272e0a0a232320e78eb0e78ab62067726f756e6420747275746820283d2062726f6b65722d636f6e6669672d7265736f6c7665722e6a732064796e616d6963204f4b290a0a6060600ae68980e69c892072656c617920726f6c65733a0a20205472616465722d4220205b2762726f6b6572272c276d61726b65746d616b6572275d202020637265617465642030342d32312031333a333620283d207072696d617279290a20205472616465722d4120205b2762726f6b6572272c276d61726b65746d616b6572275d202020637265617465642030342d32312031333a333820283d206261636b7570207265616479290a20204d61726b65744d616b65722d4120205b276d61726b65746d616b6572275d2020202020202020637265617465642030352d32322031323a353020283d207265736572766564290a0a67657442726f6b657252656c61792829207265736f6c7665723a204f5244455220425920637265617465645f617420415343204c494d4954203120e28692205472616465722d420a6765744d61726b65744d616b657252656c617928293a204f5244455220425920637265617465645f617420415343204c494d4954203120e28692205472616465722d420a6060600a0a5265736f6c766572206c6179657220e5b7b22064796e616d696320e29c9320283d20426c6f636b20412e32207368697020e5ae8ce695b4292e207377617020e58faae99c803a0a20202d2072656d6f7665202762726f6b6572272066726f6d205472616465722d4220726f6c65735f6a736f6e20e28692207265736f6c7665722066616c6c6261636b205472616465722d410a20202d2072656d6f766520276d61726b65746d616b6572272066726f6d205472616465722d42202b205472616465722d4120e28692207265736f6c7665722066616c6c6261636b204d61726b65744d616b65722d410a0a232320e4bd86206c696e676572696e672068617264636f646520e998bb207377617020e28094203320e5a4842070726f64756374696f6e2072756e74696d650a0a23232320412e2062726f6b65722d73746174652d6d616368696e652e6a733a32393320283d20e69c80e4b8a5e9878d2c20657363726f77206d61746368207175657279290a6060606a6176617363726970740a636f6e7374205452414445525f425f4b41535f41444452203d20276b617370613a7172787737363467657a36323468666b6676706d7a66783861346d6732767a65356e36767367753866796d6577726b7570687936356c7875723963356c273b0a2f2f206c696e65203330323a202e676574285452414445525f425f4b41535f414444522c206f726465724372656174656441742c20717479202d20302e352c20717479202b20302e35290a2f2f206c696e65203331333a202e676574285452414445525f425f4b41535f414444522c2070656572416464722c206f72646572437265617465644174290a6060600a6669783a20e694b9e794a8206067657442726f6b657252656c617928292e61646472657373602066726f6d2062726f6b65722d636f6e6669672d7265736f6c7665722e20696d706f7274202b2063616c6c2e0a0a23232320422e2063726f73732d6d617463682d656e67696e652e6a733a323120283d2062726f6b6572206e616d6573206c69737420e58699e6adbb290a6060606a6176617363726970740a636f6e73742042524f4b45525f4f52475f4e414d4553203d205b275472616465722d41272c20275472616465722d42272c20275472616465722d4d275d3b0a6060600a6669783a20e694b9e794a82064796e616d696320717565727920e28094206053454c454354206e616d652046524f4d2072656c61795f6e6f64657320574845524520455849535453202853454c45435420312046524f4d206a736f6e5f6561636828726f6c65735f6a736f6e29206a65205748455245206a652e76616c756520494e20282762726f6b6572272c276d61726b65746d616b6572272929602e20e58aa02067657442726f6b65724f72674e616d657328292068656c70657220696e2062726f6b65722d636f6e6669672d7265736f6c7665722e0a0a23232320432e2061646d696e2e6a733a37313220283d20554920646973706c617920e5ad97e6aeb5e58699e6adbb290a6060606a6176617363726970740a736f757263653a207b20616464726573733a2062726f6b657257616c6c65742e616464726573732c2062726f6b65723a20275472616465722d4227207d2c0a6060600a6669783a2064796e616d6963206c6f6f6b757020e28094206053454c454354206e616d652046524f4d2072656c61795f6e6f6465732057484552452061646472657373203d2062726f6b657257616c6c65742e6164647265737360204f5220706173732062726f6b6572206e616d652066726f6d2063616c6c65722e0a0a232320e4b88de998bb20737765657020e79a842068617264636f646520283d20e4bf9de79599290a0a2d206d6967726174652e6a733a333034342f343338372f3433393120e28094206f6e652d74696d65206261636b66696c6c20736372697074732c20e4b88d2072756e74696d652e20e4bf9de795990a2d20746573742d6672616d65776f726b2f63617365732f2a2e746573742e6d6a7320e5a49ae5a48420e280942074657374206669787475726520646174612c20e4b88d2070726f64756374696f6e2e2073776170207465737420e5ae8ce68890e5908ee5868d2073776565702074657374207369646520283d20e5908ee7bdae290a0a2323205377656570207368697020e4bcb00a0a3320e5a4842070726f64756374696f6e206669783a0a20202d20413a2062726f6b65722d73746174652d6d616368696e652e6a733a32393320287e35204c4f43290a20202d20423a2063726f73732d6d617463682d656e67696e652e6a733a3231202b20e58aa02067657442726f6b65724f72674e616d65732068656c70657220287e3135204c4f43290a20202d20433a2061646d696e2e6a733a37313220287e33204c4f43290a0a7e3235204c4f4320746f74616c2e20455441203330206d696e20736869702e0a0a2323205377656570207368697020e5908e2073776170207465737420287e2430206472792d72756e290a0a312e2053514c205550444154453a205472616465722d4220726f6c65735f6a736f6e203d20275b226d61726b65746d616b6572225d2720283d2072656d6f76652062726f6b6572290a322e206375726c202f6170692f61646d696e2f6f7665727669657720e2869220e69c9fe69c9b2062726f6b6572207265736f6c76656420746f205472616465722d410a332e2066697265203120e7ac942042555920e588b0205472616465722d41206164647265737320e286922062726f6b65722d763320726f757465722e6a732068616e646c654d657373616765205472616465722d4120666972650a342e20766572696679205f656e7375726552656c6174696f6e20636861696e5f6576656e74206175646974202b2072656c6174696f6e5f73746174657320494e534552540a352e2053514c205550444154453a20e585a8206d61726b65746d616b65722072656d6f766520283d20e6b58b204d61726b65744d616b65722d4120e68ea5e7aea1290a362e20766572696679206d61726b65742d7365656465722075736573204d61726b65744d616b65722d410a372e2072657665727420616c6c20283d20726573746f7265205472616465722d4220726f6c6573290a0ae4bd86205472616465722d41204b41532062616c616e6365203d206e756c6c20283d20e697a02064656c6976657220706f6f6c292c20e5ae8ce695b42065326520736574746c6520e99c80e8a6812066756e642e206472792d72756e20636f6e6669672073776170202b2068616e646c654d6573736167652064697370617463682076657269667920e58db3e58fafe8af81e6988e206d6967726174696f6e20e883bde58a9b2c20e4b88de5bf85e79c9f2064656c697665722e0a0a2323207461736b2023383620426c6f636b20412e332077617665203320e2809420e79c9f20636c6f73652066696e616c6c790a0a5761766520312b3220e4b98be5898d20736869702c2057617665203320e6ae8be795992e20e8bf99e698afe997ade585b32e204a32207377656570202b2073686970202b204e57542061756469742e0a0a4a322061636b20e5908e2073686970207e3330206d696e2e204e575420e58f8d20726576696577202b207665726966792073776170207465737420706f73742d736869702e