diff --git a/modules/amm/ffi/src/api/request.rs b/modules/amm/ffi/src/api/request.rs index fee626e..4fe9046 100644 --- a/modules/amm/ffi/src/api/request.rs +++ b/modules/amm/ffi/src/api/request.rs @@ -111,6 +111,10 @@ pub struct SwapExactInPlanRequest { pub amount_in: String, pub min_out: String, pub deadline_ms: String, + /// Pool account data (hex Borsh `PoolDefinition`) — its stored `vault_a_id` / + /// `vault_b_id` are used verbatim (the guest asserts the vaults in the pool's + /// creation order, which needn't match the canonical token order). + pub pool_data: String, } #[derive(Clone, Debug, Deserialize, Eq, PartialEq)] diff --git a/modules/amm/ffi/src/api/swap.rs b/modules/amm/ffi/src/api/swap.rs index 0ec2d5c..dba7276 100644 --- a/modules/amm/ffi/src/api/swap.rs +++ b/modules/amm/ffi/src/api/swap.rs @@ -287,6 +287,18 @@ pub(super) fn swap_exact_in_plan(request: SwapExactInPlanRequest) -> Result(&bytes).ok()) + else { + return Ok(json!({ "status": "error", "code": "no_pool" })); + }; + let user_input_holding = account_id_from_hex(&request.user_input_holding_id, "user input holding id")?; let user_output_holding = @@ -307,8 +319,8 @@ pub(super) fn swap_exact_in_plan(request: SwapExactInPlanRequest) -> Result