From 4f1ec9aa282e5e0e04ef7d2fca6f1305d863a32f Mon Sep 17 00:00:00 2001 From: david Date: Tue, 19 May 2026 15:56:37 +0200 Subject: [PATCH] =?UTF-8?q?shared/tx:=20bump=20live-tx=20setMinFee=20floor?= =?UTF-8?q?=20200K=20=E2=86=92=20500K=20(all=20builders)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The comment at every setMinFee call site said "500K is a comfortable floor" but the actual value was 200K — the floor wasn't high enough to cover lucid 0.4.30's Conway-era fee underestimation. Smoke-tested mainnet Accept tx hit Ogmios code 3122: lucid declared 343,132 lovelace fee but Ogmios required 347,726 (off by ~5K). With the floor at 200K the floor was inert (343K > 200K), so the underestimated fee stood. Bumping all six builder paths (PostEscrow, Claim/Submit, Accept, Reclaim, PostAdvert, UpdateAdvert/RetireAdvert) to 500K — comfortably above the empirical minimum across operations, ~0.15 AP3X surcharge per tx, excess becomes change. Co-Authored-By: Claude Opus 4.7 (1M context) --- packages/shared/src/tx/internal/liveCbor.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/shared/src/tx/internal/liveCbor.ts b/packages/shared/src/tx/internal/liveCbor.ts index eee0751..5b77d2e 100644 --- a/packages/shared/src/tx/internal/liveCbor.ts +++ b/packages/shared/src/tx/internal/liveCbor.ts @@ -374,7 +374,7 @@ export async function buildLiveTxForEscrow( // lucid 0.4.30 under-estimates Conway fees by ~1K lovelace on // PostEscrow (Ogmios 3122). 500K is a comfortable floor; excess // becomes change. Same fix as Claim/Submit/Accept paths. - .setMinFee(200_000n); + .setMinFee(500_000n); const completed = await txBuilder.complete(); signed = await completed.sign.withWallet().complete(); @@ -472,7 +472,7 @@ async function buildSpendOpenOrClaimedTx(opts: { // without masking the savings from CIP-33 ref-scripts (natural // ref-script tx fee is ~0.24 AP3X; inlined is ~0.34 AP3X — both above // the floor, so lucid's estimate wins and the size delta surfaces). - .setMinFee(200_000n); + .setMinFee(500_000n); // Let lucid pick coins + compute fee normally; production wallets have // multiple real UTxOs (no need for the test-side leftover-as-fee hack). @@ -610,7 +610,7 @@ export async function buildLiveTxForAccept(params: LiveAcceptParams): Promise= deliver_by, so a 60s back-pad is safe. .validFrom(params.tipMs - 60_000) .validTo(params.tipMs + 60_000) - .setMinFee(200_000n); + .setMinFee(500_000n); // Same UPLC eval delegation as Accept — lucid's CML evaluator falsely // rejects valid Plutus V3 spends; route to Ogmios. @@ -738,7 +738,7 @@ export async function buildLiveTxForAdvert( .addSignerKey(walletKey.pubKeyHash) .validFrom(advertisedAt - 60_000) .validTo(advertisedAt + 5 * 60_000) - .setMinFee(200_000n); + .setMinFee(500_000n); const completed = await txBuilder.complete(); signed = await completed.sign.withWallet().complete(); @@ -801,7 +801,7 @@ export async function buildLiveTxForRetireAdvert( // propagation lag the same as sibling builders. .validFrom(nowMs - 60_000) .validTo(nowMs + 5 * 60_000) - .setMinFee(200_000n); + .setMinFee(500_000n); // Same UPLC-eval delegation as Claim/Submit/Accept — see // buildSpendOpenOrClaimedTx for the lucid 0.4.30 false-rejection rationale.