decodeRedeems function
All LiveOrderRedeemed receipts in result.
Implementation
List<RedeemReceipt> decodeRedeems(
PredictConfig cfg, DecodableTransactionResult result) {
return _decodeAll(result, cfg.packages.predictV1, 'order_events',
'LiveOrderRedeemed', order_events.LiveOrderRedeemed, (e) {
// Mirrors the deployed close-side accounting exactly (the same expression
// `min_proceeds` is asserted against): the net credited to the account is
// redeem_amount PLUS the inventory-impact rebate, minus trading, builder
// and penalty fees. The event's redeem_amount is GROSS.
final gross = _big(e['redeem_amount'] as Object);
final trading = _big(e['trading_fee'] as Object);
final builder = _big(e['builder_fee'] as Object);
final penalty = _big(e['penalty_fee'] as Object);
final rebate = _big(e['inventory_impact_rebate'] as Object);
final proceeds = gross + rebate - trading - builder - penalty;
final raw = RedeemReceiptRaw(
quantityClosed: _big(e['quantity_closed'] as Object),
remaining: _big(e['remaining_quantity'] as Object),
proceeds: proceeds,
gross: gross,
tradingFee: trading,
builderFee: builder,
penaltyFee: penalty,
inventoryImpactRebate: rebate,
);
return RedeemReceipt(
marketId: normalizeSuiAddress(e['expiry_market_id'] as String),
accountId: normalizeSuiAddress(e['account_id'] as String),
owner: normalizeSuiAddress(e['owner'] as String),
orderId: _big(e['order_id'] as Object),
positionRootId: _big(e['position_root_id'] as Object),
quantityClosed: fromRaw(raw.quantityClosed, 6),
remaining: fromRaw(raw.remaining, 6),
replacementOrderId: _optBig(e['replacement_order_id']),
proceeds: fromRaw(proceeds, 6),
gross: fromRaw(gross, 6),
fees: RedeemReceiptFees(
trading: fromRaw(trading, 6),
builder: fromRaw(builder, 6),
penalty: fromRaw(penalty, 6),
inventoryImpactRebate: fromRaw(rebate, 6),
),
builderCodeId: _optId(e['builder_code_id']),
raw: raw,
);
});
}