-
Notifications
You must be signed in to change notification settings - Fork 24
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Summary
calculateReferenceScriptFee receives [...state.selectedUtxos, ...state.referenceInputs]. If the same UTxO appears in both arrays (e.g. spent via collectFrom and also listed via readFrom), its scriptRef size is counted twice.
The Cardano node deduplicates using Set.union before scanning:
-- eras/conway/impl/src/Cardano/Ledger/Conway/UTxO.hs
txNonDistinctRefScriptsSize utxo tx = ...
where
inputs = (tx ^. bodyTxL . referenceInputsTxBodyL)
`Set.union` (tx ^. bodyTxL . inputsTxBodyL) -- union deduplicatesImpact
Only affects the edge case where the same UTxO is both spent and read. Over-charges the ref script fee for that UTxO. Safe (node accepts fees above minimum) but imprecise.
Fix
Deduplicate by UTxO output reference before scanning:
const seen = new Set<string>()
const deduped = [...state.selectedUtxos, ...state.referenceInputs].filter(utxo => {
const key = `${utxo.txHash}#${utxo.outputIndex}`
if (seen.has(key)) return false
seen.add(key)
return true
})Affected File
packages/evolution/src/sdk/builders/phases/FeeCalculation.ts — the call site that builds the utxo array passed to calculateReferenceScriptFee
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request