diff --git a/apps/amm/client/src/api/commitment.rs b/apps/amm/client/src/api/commitment.rs index 4a6dc9f..c30d855 100644 --- a/apps/amm/client/src/api/commitment.rs +++ b/apps/amm/client/src/api/commitment.rs @@ -29,7 +29,6 @@ pub(super) struct FundingCommitment { #[derive(BorshSerialize)] pub(super) struct QuoteCommitment { - pub(super) schema: String, pub(super) network_id: String, pub(super) network_fingerprint: String, pub(super) amm_program_id: [u8; 32], diff --git a/apps/amm/client/src/api/context.rs b/apps/amm/client/src/api/context.rs index 601bdc4..4f3d4f2 100644 --- a/apps/amm/client/src/api/context.rs +++ b/apps/amm/client/src/api/context.rs @@ -11,7 +11,7 @@ use super::{ config::load_config, holding::{select_holding, wallet_holdings, SelectedHolding}, quote_error::issue, - ContextRequest, TokenIdsRequest, SCHEMA, + ContextRequest, TokenIdsRequest, }; use crate::account::{ account_id_from_hex, account_id_hex, decode_account, parse_base58_id, parse_program_id, @@ -117,7 +117,6 @@ pub(super) fn context(request: ContextRequest) -> Result { }); Ok(json!({ - "schema": SCHEMA, "status": if request.wallet_available { "ready" } else { "no_wallet" }, "networkId": request.network_id, "networkFingerprint": request.network_fingerprint, @@ -136,7 +135,6 @@ pub(super) fn context(request: ContextRequest) -> Result { fn context_error(request: &ContextRequest, code: &str) -> Value { json!({ - "schema": SCHEMA, "status": "error", "code": code, "networkId": request.network_id, diff --git a/apps/amm/client/src/api/mod.rs b/apps/amm/client/src/api/mod.rs index c774511..dc9ba54 100644 --- a/apps/amm/client/src/api/mod.rs +++ b/apps/amm/client/src/api/mod.rs @@ -29,11 +29,6 @@ use serde_json::Value; pub use crate::account::{AccountRead, WalletAccount}; -/// Schema identifier expected by position quote and plan requests. -pub const NEW_POSITION_SCHEMA: &str = "new-position.v1"; - -pub(crate) const SCHEMA: &str = NEW_POSITION_SCHEMA; - /// JSON response shared by direct Rust callers and transport adapters. pub type AmmResponse = Value; diff --git a/apps/amm/client/src/api/plan.rs b/apps/amm/client/src/api/plan.rs index b87ce0b..a0f9d2b 100644 --- a/apps/amm/client/src/api/plan.rs +++ b/apps/amm/client/src/api/plan.rs @@ -5,7 +5,7 @@ use super::{ clock::decode_clock, position::{NewPositionPlan, QuoteBranch, QuoteComputation}, quote::compute_quote, - PlanRequest, QuoteRequest, SCHEMA, + PlanRequest, QuoteRequest, }; use crate::account::{account_id_hex, decode_account, AccountRead}; @@ -22,7 +22,6 @@ pub(super) fn plan(input: PlanRequest) -> Result { let quote = compute_quote("e_input)?; if quote.quote_hash() != Some(input.quote_hash.as_str()) { return Ok(json!({ - "schema": SCHEMA, "status": "error", "code": "quote_changed", "recoverable": true, @@ -33,7 +32,6 @@ pub(super) fn plan(input: PlanRequest) -> Result { QuoteComputation::Evaluated(evaluated) => evaluated, QuoteComputation::Failed(failure) => { return Ok(json!({ - "schema": SCHEMA, "status": "error", "code": "quote_not_submittable", "recoverable": true, @@ -43,7 +41,6 @@ pub(super) fn plan(input: PlanRequest) -> Result { }; let Some(plan) = evaluated.plan else { return Ok(json!({ - "schema": SCHEMA, "status": "error", "code": "quote_not_submittable", "recoverable": true, @@ -53,7 +50,6 @@ pub(super) fn plan(input: PlanRequest) -> Result { let fresh_lp = if plan.requires_fresh_lp() { let Some(read) = input.fresh_lp.as_ref() else { return Ok(json!({ - "schema": SCHEMA, "status": "needs_fresh_lp", "code": "fresh_lp_required", })); @@ -112,7 +108,6 @@ pub(super) fn plan(input: PlanRequest) -> Result { }; Ok(json!({ - "schema": SCHEMA, "status": "ready", "programId": input.amm_program_id, "accountIds": account_ids.into_iter().map(account_id_hex).collect::>(), @@ -124,7 +119,6 @@ pub(super) fn plan(input: PlanRequest) -> Result { fn plan_error(code: &str) -> Value { json!({ - "schema": SCHEMA, "status": "error", "code": code, "recoverable": true, diff --git a/apps/amm/client/src/api/position.rs b/apps/amm/client/src/api/position.rs index c173faa..85389b9 100644 --- a/apps/amm/client/src/api/position.rs +++ b/apps/amm/client/src/api/position.rs @@ -3,7 +3,7 @@ use serde_json::{json, Value}; use super::{ commitment::SourceCommitment, holding::SelectedHolding, pair::PairIds, quote_error::issue, - PairSnapshot, PositionRequest, SCHEMA, + PairSnapshot, PositionRequest, }; use crate::account::{account_id_from_hex, program_id_base58}; @@ -82,7 +82,6 @@ impl QuoteComputation { impl QuoteFailure { pub(super) fn into_value(self, request: &PositionRequest) -> Value { json!({ - "schema": SCHEMA, "status": "error", "canSubmit": false, "code": self.code, diff --git a/apps/amm/client/src/api/quote.rs b/apps/amm/client/src/api/quote.rs index 9d4e322..4d335ea 100644 --- a/apps/amm/client/src/api/quote.rs +++ b/apps/amm/client/src/api/quote.rs @@ -24,7 +24,7 @@ use super::{ QuoteComputation, }, quote_error::{fatal_quote, issue}, - QuoteRequest, SCHEMA, + QuoteRequest, }; use crate::account::{ decode_account, parse_base58_id, parse_program_id, program_id_bytes, AccountRead, @@ -40,13 +40,6 @@ pub(super) fn quote(request: QuoteRequest) -> Result { } pub(super) fn compute_quote(input: &QuoteRequest) -> Result { - if input.request.schema != SCHEMA { - return Ok(fatal_quote( - "unsupported_schema", - &["schema"], - json!({ "received": input.request.schema }), - )); - } let amm_program = parse_program_id(&input.amm_program_id)?; let token_a = match parse_base58_id(&input.request.token_a_id, "token A id") { Ok(id) => id, @@ -238,7 +231,6 @@ fn compute_missing_quote( let sources = account_plan.take_sources(); let funding_commitment = funding_commitments(pair, &holding_a, amount_a, &holding_b, amount_b); let commitment = QuoteCommitment { - schema: String::from(SCHEMA), network_id: input.network_id.clone(), network_fingerprint: input.network_fingerprint.clone(), amm_program_id: program_id_bytes(amm_program), @@ -261,7 +253,6 @@ fn compute_missing_quote( let quote_hash = hash_quote(&commitment)?; let preview = account_plan.preview(); let value = json!({ - "schema": SCHEMA, "status": "ok", "canSubmit": can_submit, "code": if can_submit { "ready" } else { "funding_required" }, @@ -482,7 +473,6 @@ fn compute_active_quote( )?; let sources = account_plan.take_sources(); let commitment = QuoteCommitment { - schema: String::from(SCHEMA), network_id: input.network_id.clone(), network_fingerprint: input.network_fingerprint.clone(), amm_program_id: program_id_bytes(amm_program), @@ -509,7 +499,6 @@ fn compute_active_quote( let quote_hash = hash_quote(&commitment)?; let preview = account_plan.preview(); let value = json!({ - "schema": SCHEMA, "status": "ok", "canSubmit": can_submit, "code": if can_submit { "ready" } else { "funding_required" }, diff --git a/apps/amm/client/src/api/request.rs b/apps/amm/client/src/api/request.rs index 883e817..698aafb 100644 --- a/apps/amm/client/src/api/request.rs +++ b/apps/amm/client/src/api/request.rs @@ -90,7 +90,6 @@ pub struct ProgramIdRequest { #[derive(Clone, Debug, Deserialize, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct PositionRequest { - pub schema: String, pub token_a_id: String, pub token_b_id: String, pub fee_bps: u32, diff --git a/apps/amm/client/src/api/swap.rs b/apps/amm/client/src/api/swap.rs index a57e485..84c81ab 100644 --- a/apps/amm/client/src/api/swap.rs +++ b/apps/amm/client/src/api/swap.rs @@ -104,8 +104,8 @@ pub(super) fn swap_plan(request: SwapPlanRequest) -> Result { let token_out = account_id_from_hex(&request.token_out_id, "token out id")?; // Domain errors (a bad pair, an unavailable config) mirror `swap_pair`'s // `{ status: "error", code }` shape rather than `Err`, which is reserved for - // malformed inputs. `SwapRuntime::swap` treats any non-"ready" status as a - // failed plan, so both map to the same UI outcome. + // malformed inputs. Callers treat any non-"ready" status as a failed plan, + // so both map to the same outcome. if token_in == token_out { return Ok(json!({ "status": "error", "code": "same_token_pair" })); } diff --git a/apps/amm/client/src/api/tests.rs b/apps/amm/client/src/api/tests.rs index 520899d..f622483 100644 --- a/apps/amm/client/src/api/tests.rs +++ b/apps/amm/client/src/api/tests.rs @@ -23,7 +23,7 @@ use super::{ position::AccountPlanHoldings, quote::{div_ceil_u256, minimum_opening_pair, quote, Q64}, ContextRequest, PairIdsRequest, PairSnapshot, PlanRequest, PositionRequest, QuoteRequest, - TokenIdsRequest, SCHEMA, + TokenIdsRequest, }; use crate::{ account::{account_id_hex, account_read, decode_account, parse_base58_id, program_id_bytes}, @@ -140,7 +140,6 @@ fn base_snapshot(pair: PairIds) -> PairSnapshot { fn request(pair: PairIds) -> PositionRequest { assert!(is_canonical_pair(pair.token_a, pair.token_b)); PositionRequest { - schema: String::from(SCHEMA), token_a_id: pair.token_a.to_string(), token_b_id: pair.token_b.to_string(), fee_bps: 30, diff --git a/apps/amm/client/src/lib.rs b/apps/amm/client/src/lib.rs index b0f0b1b..d9eb986 100644 --- a/apps/amm/client/src/lib.rs +++ b/apps/amm/client/src/lib.rs @@ -10,5 +10,4 @@ pub use api::{ token_ids, AccountRead, AmmApiError, AmmResponse, AmmResult, ConfigIdRequest, ContextRequest, PairIdsRequest, PairSnapshot, PlanRequest, PositionRequest, ProgramIdRequest, QuoteRequest, ResolvePoolRequest, SwapPairRequest, SwapPlanRequest, TokenIdsRequest, WalletAccount, - NEW_POSITION_SCHEMA, }; diff --git a/apps/amm/client/tests/public_api.rs b/apps/amm/client/tests/public_api.rs index 7d38289..0319345 100644 --- a/apps/amm/client/tests/public_api.rs +++ b/apps/amm/client/tests/public_api.rs @@ -1,4 +1,4 @@ -use amm_client::{config_id, ConfigIdRequest, NEW_POSITION_SCHEMA}; +use amm_client::{config_id, ConfigIdRequest}; #[test] fn direct_rust_api_does_not_require_ffi() { @@ -9,5 +9,4 @@ fn direct_rust_api_does_not_require_ffi() { assert_eq!(response["status"], "ok"); assert!(response["configId"].is_string()); - assert_eq!(NEW_POSITION_SCHEMA, "new-position.v1"); } diff --git a/apps/amm/qml/components/liquidity/NewPositionForm.qml b/apps/amm/qml/components/liquidity/NewPositionForm.qml index 9cd9896..0c2f6a5 100644 --- a/apps/amm/qml/components/liquidity/NewPositionForm.qml +++ b/apps/amm/qml/components/liquidity/NewPositionForm.qml @@ -87,8 +87,7 @@ AmmActionCard { && root.selectedTokenBId.length > 0 && root.selectedTokenAId !== root.selectedTokenBId readonly property bool resolvingToken: root.resolvingTokenId.length > 0 - readonly property bool canConfirm: root.quotePayload.schema === "new-position.v1" - && root.quotePayload.status === "ok" + readonly property bool canConfirm: root.quotePayload.status === "ok" && root.quotePayload.canSubmit === true && root.quoteMatchesPair() && String(root.quotePayload.quoteHash || "").length > 0 @@ -858,8 +857,7 @@ AmmActionCard { } function acceptPoolActivation(quote) { - if (!quote || quote.schema !== "new-position.v1" - || quote.status !== "ok" + if (!quote || quote.status !== "ok" || quote.poolStatus !== "active_pool" || !root.quoteMatchesSelectedPair(quote)) { return false @@ -1077,7 +1075,6 @@ AmmActionCard { function pairRequest() { return { - "schema": "new-position.v1", "tokenAId": root.displayIsCanonical ? root.selectedTokenAId : root.selectedTokenBId, "tokenBId": root.displayIsCanonical diff --git a/apps/amm/qml/state/NewPositionFlow.qml b/apps/amm/qml/state/NewPositionFlow.qml index 6edba5c..087e5f7 100644 --- a/apps/amm/qml/state/NewPositionFlow.qml +++ b/apps/amm/qml/state/NewPositionFlow.qml @@ -182,8 +182,8 @@ QtObject { root.quoteLoading = false root.quoteStale = false root.quoteErrorCode = "" - if (!quote || quote.schema !== "new-position.v1") - root.newPositionQuote = root.quoteError("unsupported_schema") + if (!quote || !quote.status) + root.newPositionQuote = root.quoteError("backend_error") else root.newPositionQuote = quote }, @@ -209,8 +209,7 @@ QtObject { root.runtime.watch(root.backend.submitNewPosition(snapshot.request, snapshot.quoteHash), function(result) { - if (result && result.schema === "new-position.v1" - && result.status === "submitted" + if (result && result.status === "submitted" && /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test( String(result.transactionId || ""))) { if (snapshot.request.initialPriceRealRaw !== undefined) @@ -234,7 +233,7 @@ QtObject { function finishSubmitFailure(result) { root.submitting = false const hasFreshQuote = result && result.quote - && result.quote.schema === "new-position.v1" + && result.quote.status if (hasFreshQuote) { root.newPositionQuote = result.quote root.quoteLoading = false @@ -283,8 +282,7 @@ QtObject { function finishPoolProbe(pending, quote) { root.poolProbeInFlight = false - if (quote && quote.schema === "new-position.v1" - && quote.poolStatus === "active_pool") { + if (quote && quote.poolStatus === "active_pool") { root.removePendingPool(pending.key) if (root.matchesSelectedPair(pending.request)) { root.poolActivated(quote) @@ -349,7 +347,6 @@ QtObject { function loadingContext() { return { - "schema": "new-position.v1", "status": "loading", "tokens": [], "feeTiers": [] @@ -358,7 +355,6 @@ QtObject { function quoteError(code) { return { - "schema": "new-position.v1", "status": "error", "canSubmit": false, "code": code, diff --git a/apps/amm/src/AmmUiBackend.cpp b/apps/amm/src/AmmUiBackend.cpp index 71f29da..967f163 100644 --- a/apps/amm/src/AmmUiBackend.cpp +++ b/apps/amm/src/AmmUiBackend.cpp @@ -9,14 +9,11 @@ #include "logos_sdk.h" namespace { - const char NEW_POSITION_SCHEMA[] = "new-position.v1"; - // The new-position context placeholder published before the module // connection is up (matches the module's "loading" contextState). QVariantMap loadingContext() { return QVariantMap { - { QStringLiteral("schema"), QString::fromLatin1(NEW_POSITION_SCHEMA) }, { QStringLiteral("status"), QStringLiteral("loading") }, { QStringLiteral("networkId"), QStringLiteral("lez") }, { QStringLiteral("networkFingerprint"), QString() }, @@ -26,12 +23,11 @@ namespace { }; } - // A new-position.v1 error envelope (matches the module's publicError), for + // A new-position error envelope (matches the module's publicError), for // the backend-side failure paths (e.g. LP-account creation failing). QVariantMap newPositionError(const QString& code) { return QVariantMap { - { QStringLiteral("schema"), QString::fromLatin1(NEW_POSITION_SCHEMA) }, { QStringLiteral("status"), QStringLiteral("error") }, { QStringLiteral("canSubmit"), false }, { QStringLiteral("code"), code }, @@ -223,7 +219,7 @@ QString AmmUiBackend::swapExactInput(QString defAHex, QString defBHex, QString u // only locks this UI and leaves the shared logos_execution_zone wallet open (another // app may keep it open, or this app opened-then-disconnected), and the QML submit path // doesn't check isWalletOpen — so without this a swap could sign/submit while the UI - // shows "Connect". Mirrors the guard the old SwapRuntime::swap() enforced. + // shows "Connect". if (!isWalletOpen()) return {}; diff --git a/apps/amm/tests/qml/tst_LiquidityPage.qml b/apps/amm/tests/qml/tst_LiquidityPage.qml index afc9b4a..8374c60 100644 --- a/apps/amm/tests/qml/tst_LiquidityPage.qml +++ b/apps/amm/tests/qml/tst_LiquidityPage.qml @@ -19,12 +19,10 @@ TestCase { property bool walletStateReady: false property var submitResult: ({}) property var quoteResult: ({ - "schema": "new-position.v1", "status": "ok", "poolStatus": "missing_pool" }) property var newPositionContext: ({ - "schema": "new-position.v1", "status": "ready", "tokens": [], "feeTiers": [] @@ -151,11 +149,9 @@ TestCase { page.flow.quoteSerial = 7 page.flow.finishSubmitFailure({ - "schema": "new-position.v1", "status": "error", "code": "quote_not_submittable", "quote": { - "schema": "new-position.v1", "status": "ok", "canSubmit": false, "quoteHash": "sha256:fresh" @@ -171,7 +167,6 @@ TestCase { var backend = createTemporaryObject(backendComponent, testCase, { "walletStateReady": true, "submitResult": { - "schema": "new-position.v1", "status": "submitted", "transactionId": submittedTransactionId, "deadlineMs": String(Date.now() + 60000) @@ -200,7 +195,6 @@ TestCase { var backend = createTemporaryObject(backendComponent, testCase, { "walletStateReady": true, "submitResult": { - "schema": "new-position.v1", "status": "submitted", "transactionId": submittedTransactionId, "deadlineMs": String(Date.now() + 60000) @@ -239,7 +233,6 @@ TestCase { var backend = createTemporaryObject(backendComponent, testCase, { "walletStateReady": true, "submitResult": { - "schema": "new-position.v1", "status": "submitted", "transactionId": "000102030405060708090a0b0c0d0e0f" + "101112131415161718191a1b1c1d1e1f" @@ -282,7 +275,6 @@ TestCase { page.flow.pendingQuoteRequest = { "ok": true, "request": request } page.flow.pendingPoolProbes = [pending] page.flow.newPositionQuote = { - "schema": "new-position.v1", "status": "ok", "poolStatus": "missing_pool", "tokenAId": request.tokenAId, @@ -291,7 +283,6 @@ TestCase { page.flow.quoteStale = false page.flow.finishPoolProbe(pending, { - "schema": "new-position.v1", "status": "ok", "poolStatus": "active_pool", "tokenAId": request.tokenAId, diff --git a/apps/amm/tests/qml/tst_NewPositionForm.qml b/apps/amm/tests/qml/tst_NewPositionForm.qml index d2a8192..28c9a31 100644 --- a/apps/amm/tests/qml/tst_NewPositionForm.qml +++ b/apps/amm/tests/qml/tst_NewPositionForm.qml @@ -354,7 +354,6 @@ TestCase { form.minimumAmountBRaw = "2000000" verify(form.acceptPoolActivation({ - "schema": "new-position.v1", "status": "ok", "tokenAId": tokenHigh, "tokenBId": tokenLow, @@ -378,7 +377,6 @@ TestCase { function test_staleQuoteErrorsDoNotMarkCurrentDraft() { var quote = { - "schema": "new-position.v1", "status": "ok", "tokenAId": tokenHigh, "tokenBId": tokenLow, diff --git a/modules/amm/README.md b/modules/amm/README.md index bf21b3a..dacd179 100644 --- a/modules/amm/README.md +++ b/modules/amm/README.md @@ -28,7 +28,7 @@ methods (the module API is generated from the header) are: `definitionId`/`holding` normalized to hex. - `newPositionContext(request, walletOpen, refreshWalletAccounts)` — the add-liquidity view state (available tokens, fee tiers, warnings) as a - `new-position.v1` map. + context map. - `quoteNewPosition(request, walletOpen)` — prices an add-liquidity request against current on-chain state (read-only). - `submitNewPosition(request, quoteHash, walletOpen, freshLpId)` — submits an diff --git a/modules/amm/src/amm_module_impl.cpp b/modules/amm/src/amm_module_impl.cpp index 29b6047..5817450 100644 --- a/modules/amm/src/amm_module_impl.cpp +++ b/modules/amm/src/amm_module_impl.cpp @@ -47,10 +47,6 @@ constexpr char AMM_PROGRAM_BIN_ENV[] = "AMM_PROGRAM_BIN"; // Absolute path to the JSON token-list config consumed by tokenList(). constexpr char TOKENS_CONFIG_ENV[] = "TOKENS_CONFIG"; -// new-position.v1 response schema tag (matches the app-side NewPositionRuntime -// and the Rust client's NEW_POSITION_SCHEMA). -constexpr char SCHEMA[] = "new-position.v1"; - int hexVal(char c) { if (c >= '0' && c <= '9') return c - '0'; if (c >= 'a' && c <= 'f') return c - 'a' + 10; @@ -233,7 +229,7 @@ FfiResult call(char* (*op)(const char*), const json& request) { return {true, *it}; } -// new-position.v1 envelope builders (ported from NewPositionRuntime). +// new-position response envelope builders. json issue(const std::string& code, const json& blockingFields = json::array()) { return { {"code", code}, @@ -249,7 +245,6 @@ json publicError(const std::string& code, json error = issue(code, blockingFields); error["details"] = details; return { - {"schema", SCHEMA}, {"status", "error"}, {"canSubmit", false}, {"code", code}, @@ -264,7 +259,6 @@ json contextState(const std::string& status, const std::string& network_fingerprint, const std::string& code = {}) { json state = { - {"schema", SCHEMA}, {"status", status}, {"networkId", network_id}, {"networkFingerprint", network_fingerprint}, @@ -750,7 +744,6 @@ LogosMap AmmModuleImpl::submitNewPosition(const LogosMap& request, if (quote.value("requiresFreshLp", false)) { if (fresh_lp_id.empty()) { return json{ - {"schema", SCHEMA}, {"status", "requires_fresh_lp"}, {"quote", quote}, }; @@ -794,7 +787,6 @@ LogosMap AmmModuleImpl::submitNewPosition(const LogosMap& request, if (transaction_id.empty()) return publicError("wallet_submission_failed"); return { - {"schema", SCHEMA}, {"status", "submitted"}, {"transactionId", transaction_id}, {"deadlineMs", plan.value("deadlineMs", json())}, diff --git a/modules/amm/src/amm_module_impl.h b/modules/amm/src/amm_module_impl.h index ba35bb2..70a5dc7 100644 --- a/modules/amm/src/amm_module_impl.h +++ b/modules/amm/src/amm_module_impl.h @@ -17,10 +17,10 @@ // `logos_execution_zone` wallet module (reached via modules().logos_execution_zone). // // The same surface is consumed by the QML UI (via modules().amm_module) and -// headlessly (logoscore call amm_module ...). Ported from the app-side -// SwapRuntime / NewPositionRuntime orchestration (apps/amm/src) plus the -// backend's network-context derivation, made Qt-free (std::string / LogosMap / -// LogosList / nlohmann::json) as the universal authoring model requires. +// headlessly (logoscore call amm_module ...). The swap / add-liquidity +// orchestration and the backend's network-context derivation are made Qt-free +// (std::string / LogosMap / LogosList / nlohmann::json) as the universal +// authoring model requires. // // Public methods ARE the module's API; the Qt plugin glue is generated from // this header because metadata.json sets "interface": "universal". Keep the @@ -65,7 +65,7 @@ public: LogosList tokenList(); /// New-position (add-liquidity) view state: reads the AMM config + the - /// user's wallet accounts and returns the `new-position.v1` context map the + /// user's wallet accounts and returns the new-position context map the /// UI renders (available tokens, fee tiers, warnings). `wallet_open` gates /// whether wallet accounts are included; `refresh_wallet_accounts` forces a /// fresh read rather than a cached one. @@ -74,7 +74,7 @@ public: bool refresh_wallet_accounts); /// Prices an add-liquidity request against current on-chain state and - /// returns the `new-position.v1` quote map (quoteHash, canSubmit, + /// returns the new-position quote map (quoteHash, canSubmit, /// requiresFreshLp, amounts, warnings). Read-only — no submission. LogosMap quoteNewPosition(const LogosMap& request, bool wallet_open); @@ -84,7 +84,7 @@ public: /// WITHOUT submitting — the caller (the app backend, which owns the wallet /// keyset) creates the account and calls again with its id. Otherwise builds /// the plan (injecting the fresh LP account when given) and submits, then - /// returns the `new-position.v1` submitted/error map. + /// returns the new-position submitted/error map. LogosMap submitNewPosition(const LogosMap& request, const std::string& quote_hash, bool wallet_open, @@ -138,7 +138,7 @@ private: // Builds the { networkId, networkFingerprint, ammProgramId, request, // snapshot } input shared by quoteNewPosition / submitNewPosition. On a - // recoverable precondition failure, sets *error to a new-position.v1 error + // recoverable precondition failure, sets *error to a new-position error // map and returns a null json. nlohmann::json buildQuoteInput(const LogosMap& request, const Network& net,