From f39ce11bf27c7dff408135e82e3a1467af0ffee2 Mon Sep 17 00:00:00 2001 From: Hossein Zoda Date: Fri, 17 Jul 2026 21:52:52 +0000 Subject: [PATCH] ido: keep offeredTokenTotalSupply in Active parameters IdoActiveParameters dropped offeredTokenTotalSupply, so clients couldn't compute the offered-vs-total-supply share for live (non-PREINIT) IDOs. Carry it forward from the preinit parameters at the PreInit->Active transition and add it to the struct. A serde default of -1 (the pre-existing-token "unknown supply" sentinel) lets ido_state rows written before this field existed still deserialize. Co-Authored-By: Claude Opus 4.8 (1M context) --- src/db/ido/mod.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/db/ido/mod.rs b/src/db/ido/mod.rs index f77a888..1ad4794 100644 --- a/src/db/ido/mod.rs +++ b/src/db/ido/mod.rs @@ -305,6 +305,13 @@ pub struct IdoPreInitParameters { permanentLiquidityMinFee: Integer, } +// Default for `IdoActiveParameters::offeredTokenTotalSupply` so state rows +// written before the field existed still deserialize. `-1` is the +// pre-existing-token "unknown supply" sentinel. +fn default_offered_token_total_supply() -> Integer { + Integer::from(-1i64) +} + #[serde_as] #[derive(Serialize, Deserialize, Clone)] pub struct IdoActiveParameters { @@ -313,6 +320,11 @@ pub struct IdoActiveParameters { collectorNFTH: Vec, #[serde_as(as = "IntegerAsStr")] permanentLiquidityShareNumerator: Integer, + // Carried forward from the preinit parameters so it survives the + // PreInit→Active transition. + #[serde_as(as = "IntegerAsStr")] + #[serde(default = "default_offered_token_total_supply")] + offeredTokenTotalSupply: Integer, #[serde_as(as = "IntegerAsStr")] offeredTokenAmount: Integer, offering: IdoParametersOffering, @@ -2309,6 +2321,9 @@ fn ido_add_tx(context: &IdoContext, tx: &Transaction) -> Result { permanentLiquidityShareNumerator: preinit_params .permanentLiquidityShareNumerator .clone(), + offeredTokenTotalSupply: preinit_params + .offeredTokenTotalSupply + .clone(), offeredTokenAmount: preinit_params.offeredTokenAmount.clone(), offering: preinit_params.offering.clone(), orbPoolParamsCategory: preinit_params.orbPoolParamsCategory.clone(),