事件投影
7 个事件域 · 61 个变体 所有事件走外部 tag 包裹:
{seq, block_height, envelope_idx, kind: {"Domain": {"Variant": {...}}}}数值字段经 ADR-0026 投影为 decimal string
1. 事件外壳
所有事件(getBlockEvents、getTx.events、WS 推送、写操作 result.events)走统一外壳:
{
"seq": 3,
"block_height": 12346,
"envelope_idx": 1,
"kind": {
"DomainTag": {
"Variant": { ... }
}
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
seq | u64 | 块内单调递增的事件序号 |
block_height | u64 | 产生该事件的块高 |
envelope_idx | u32 | 产生该事件的 envelope 在块内的下标 |
kind | EventKind | externally-tagged:{"DomainTag": {"Variant": {...}}} |
数值字段精度约定:
| 语境 | 字段 | 精度 |
|---|---|---|
| 价格 | price/mark_price/limit_price/entry_vwap/bid_price/ask_price/last_price | 市场 price_decimals |
| 数量 | qty/size/remaining/volume/old_size/new_size | 市场 size_decimals |
| 金额 | notional/fee/pnl/balance/margin/amount | SCALE_6 |
2. Core 域(14 变体)
系统级事件:余额、标记价、拒绝、统计、费率、推荐、返佣、DMS、破产。
| 变体 | 关键字段 | 说明 |
|---|---|---|
BalanceChanged | owner, delta(SCALE_6), new_balance(SCALE_6), reason | 余额变动。逐仓 IM 划转:ImManualAllocate(手动 SetIsolatedMargin 划入,delta 负)· ImAutoAllocate(下单/改单/调杠杆自动补 deficit,delta 负)· ImRelease(手动划出或 flat sweep,delta 正)。与 Exec::IsolatedMarginUpdated 成对 |
MarkUpdated | market_id, mark_price(px), previous_mark_price(px) | 标记价更新 |
MarketStatsSnapshot | market_id, long_size(sz), short_size(sz), net_size(sz), oracle_counter_pnl(SCALE_6) | 市场统计快照 |
Rejected | action_kind, reason: RejectReason | 交易被拒(含 InsufficientBalance{required,have} 等) |
BatchItemRejected | index(u32), action_kind, reason | 批量操作子项被拒 |
RuntimeReject | order_id?, engine_reason | 撮合引擎拒收 |
Bankruptcy | target_owner, market_id, shortfall_amount(SCALE_6), source | 破产事件 |
UserFeeRateChanged | owner, maker_fee_rate?, taker_fee_rate? | 用户费率变更 |
ReferrerRegistered | owner, code | 推荐码注册 |
ReferrerBound | owner, code | 推荐码绑定 |
InviterKeepRatioChanged | owner, old_ratio_bps, new_ratio_bps | 邀请者自留比例变更 |
RebatePaid | trader, inviter, referral_code, total_amount(SCALE_6), inviter_share(SCALE_6), invitee_share(SCALE_6) | 返佣实际分发(与 BalanceChanged{RebateToInviter/RebateToInvitee} 成对) |
DeadMansSwitchScheduled | owner, trigger_time_ms? | DMS 截止设置/清除 |
DeadMansSwitchTriggered | owner, cancelled(u32) | DMS 触发(批量撤单数) |
示例:Filled 事件
{
"seq": 3, "block_height": 12346, "envelope_idx": 1,
"kind": {
"Exec": {
"Filled": {
"taker_order_id": 1001, "maker_order_id": 1002, "market_id": 1,
"taker_owner": "0x...", "maker_owner": "0x...",
"price": "97234.50", "qty": "0.50000",
"notional": "48617.250000",
"taker_fee": "24.308625", "maker_fee": "-4.861725",
"aggressor_side": "Bid",
"taker_source_trigger_id": null, "taker_source_tx_hash": "0x…",
"maker_source_trigger_id": null, "maker_source_tx_hash": "0x…"
}
}
}
}
3. Exec 域(17 变体)
撮合执行事件:订单生命周期、成交、持仓变更、保证金、预言机报价。
| 变体 | 关键字段 | 说明 |
|---|---|---|
OrderAccepted | order_id, owner, market_id, side, limit_price(px), qty(sz), tif | 订单受理 |
Filled | taker_order_id, maker_order_id, market_id, price(px), qty(sz), notional(SCALE_6), taker_fee(SCALE_6), maker_fee(SCALE_6), aggressor_side, taker_source_trigger_id?(TriggerOrderId), taker_source_tx_hash?, maker_source_trigger_id?, maker_source_tx_hash? | 撮合成交(4 个 source 字段标识触发来源:trigger 单触发或入口 tx) |
OrderResting | order_id, owner, market_id, resting{price,qty,remaining,im_reserved,prepaid_maker_fee} | 订单挂簿(含 in-place 改单后快照) |
OrderDone | order_id, owner, market_id, reason(DoneReason), remaining(sz) | 订单离簿(含改单撤单 + 重挂前的撤单腿) |
PositionUpdated | owner, market_id, old_size(sz), new_size(sz), new_entry_vwap(px), realized_pnl(SCALE_6) | 持仓更新 |
PositionFlattened | owner, market_id, old_size(sz) | 持仓清零 |
OrderCancelledByPositionFlat | order_id, owner, market_id, remaining(sz) | 挂单因持仓清零被撤;若为某 OCO 的挂簿限价腿,链会 resolve 该 OCO pair |
TriggerCancelledByPositionFlat | trigger_id, owner, market_id | 触发单因持仓清零被撤;若为某 OCO 的触发腿,链会撤 OCO 兄弟腿并 resolve pair |
IsolatedMarginUpdated | owner, market_id, new_isolated_margin(SCALE_6) | 逐仓保证金变更 |
LeverageUpdated | owner, market_id, leverage(u32) | 杠杆变更 |
MarginModeUpdated | owner, market_id, margin_mode | 保证金模式切换 |
PositionForceClosedAtMark | target, market_id, size(sz), mark_price(px), realized_pnl(SCALE_6) | 按 mark 强制清退(清算 5b / 下市) |
OracleQuoteAccepted | market_id, quoter, bid_price(px), ask_price(px), mark_price(px), last_price(px), volume(sz), source_ts_ms | 预言机报价受理(时间单调校验:source_ts_ms >= 上一笔) |
OracleCounterDepleted | market_id, required(SCALE_6), available(SCALE_6) | OracleCounter 额度耗尽 |
MarketHaltedQuoteStale | market_id, last_quote_ts_ms, block_ts_ms | 块末报价过期自动暂停(halt_reason = QuoteStale;可自动恢复) |
MarketResumedAfterQuote | market_id | 报价恢复新鲜后自动恢复(报价接受路径或块末检查;管理员 HaltMarket 不会自动恢复) |
QuoteRejectStorm | market_id, quoter, streak(u32) | 连续拒报风暴(批量路径在子项回滚点之后累计,连续 5 次触发;单笔 SubmitOracleQuote 拒绝只发 Core::Rejected,不累计) |
4. Oco 域(4 变体)
OCO 组合单机制事件。
| 变体 | 关键字段 | 说明 |
|---|---|---|
OrderCancelledByOcoSibling | order_id, owner, market_id, remaining(sz), pair_id, winning_leg | OCO 互斥撤单 |
TriggerOrderCancelled | trigger_id, market_id, owner, reason | OCO 触发腿撤销 |
LimitTriggerOrderCancelled | trigger_id, market_id, owner, reason | OCO 限价腿撤销 |
OcoPairResolved | pair_id, owner, market_id, winner_leg?, reason | OCO 组合单完成。Bracket entry 零成交级联 → reason = PairCancelled;用户 CancelOco → ManualCancel |
5. Liquidation 域(1 变体)
| 变体 | 关键字段 | 说明 |
|---|---|---|
Liquidated | target, market_id, closed_via_book(sz), force_closed_at_mark(sz), total_realized_pnl(SCALE_6), mark_price(px) | 清算完成 |
6. Trigger 域(9 变体)
触发单生命周期事件。
| 变体 | 关键字段 | 说明 |
|---|---|---|
TriggerOrderPlaced | trigger_id, market_id, owner, trigger_price(px), trigger_direction, payload{Market|Limit}, expires_at_ms? | 触发单创建 |
TriggerOrderAmended | trigger_id, market_id, owner, trigger_price(px), trigger_direction, payload{Market|Limit}, expires_at_ms? | 触发单原地修改(改后完整快照) |
TriggerOrderCancelled | trigger_id, market_id, owner, reason | 触发单被撤销 |
LimitTriggerOrderCancelled | trigger_id, market_id, owner, reason | 限价触发单被撤销 |
TriggerOrderExpired | trigger_id, market_id, owner | 触发单过期 |
TriggerActivated | trigger_id, market_id, owner, mark_price(px), trigger_price(px) | 触发激活 |
TriggerFireFailed | trigger_id, market_id, owner, reason: RejectReason | 触发后业务拒(触发单已消费) |
OcoPairPlaced | pair_id, owner, market_id, legs, client_pair_id?, parent_order_id? | OCO 组合单创建;parent_order_id 仅 Bracket 绑定 entry 时存在 |
OcoPairResolved | pair_id, owner, market_id, winner_leg?, reason | OCO 组合单完成(Trigger 域事件;bracket 级联另见 Oco 域同名变体) |
7. Bridge 域(6 变体)
充提桥接事件。全部金额走 SCALE_6。
| 变体 | 关键字段 | 说明 |
|---|---|---|
DepositRecorded | seq, external_ref, tx_hash?, account, amount(SCALE_6) | 充值登记 |
DepositCredited | seq, owner, amount(SCALE_6), new_balance(SCALE_6) | 充值入账 |
WithdrawRequested | request_id, owner, amount(SCALE_6), chain, new_balance(SCALE_6) | 提现请求 |
WithdrawSettled | request_id, owner, amount(SCALE_6), tx_hash | 提现放款完成 |
WithdrawRefunded | request_id, owner, amount(SCALE_6), reason_code(u8), new_balance(SCALE_6) | 提现退款 |
SettlementPausedChanged | paused(bool) | 结算闸门切换 |
8. Ops 域(11 变体)
管理操作事件。无数值字段,无需 decimal 投影。
| 变体 | 关键字段 | 说明 |
|---|---|---|
AccountRoleChanged | target, role, granted(bool), new_mask | 账户角色变更 |
AgentRegistered | owner, agent_address, role_mask, expires_at_ms | Agent 注册 |
AgentRevoked | owner, agent_address | Agent 撤销 |
EmergencyHaltChanged | market_id, halted(bool) | 紧急熔断切换 |
MarketCreated | market_id, kind, lifecycle | 市场创建 |
MarketLifecycleChanged | market_id, from, to | 市场生命周期变更 |
MarketCancelled | market_id | 撤销未激活市场(CancelMarket;与 MarketLifecycleChanged 成对发出) |
FeeRecipientChanged | market_id, old_recipient, new_recipient | 手续费接收方变更 |
MarketConfigAmended | market_id, max_leverage?, maker_fee_rate?, taker_fee_rate?, margin_table_len?, mark_max_change_bps? | 市场配置已修改 |
GlobalRebateRatioChanged | old_ratio_bps, new_ratio_bps | 全局默认返佣比例变更 |
AccountRebateRatioChanged | owner, ratio_bps? | 邀请者返佣档位设置/清除(null = 回退全局默认) |