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,
    );
  });
}