IntersectMBO / IntersectMBO/evolution-sdk

improvement: scriptRef size double-counted when UTxO appears in both spent and reference inputs

Aperta
#180 1 commento 0 reazioni 0 assegnatari Vedi su GitHub
enhancement
Lingua principale
TypeScript
Stelle
22
Fork
30
Merge medio
5h 29m
PR unite (30g)
12

Descrizione

## 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:

```haskell
-- eras/conway/impl/src/Cardano/Ledger/Conway/UTxO.hs
txNonDistinctRefScriptsSize utxo tx = ...
where
inputs = (tx ^. bodyTxL . referenceInputsTxBodyL)
`Set.union` (tx ^. bodyTxL . inputsTxBodyL) -- union deduplicates
```

## Impact

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:

```ts
const seen = new Set()
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`

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Start in packages/evolution/src/sdk/builders/phases/FeeCalculation.ts at the call site that combines state.selectedUtxos and state.referenceInputs for calculateReferenceScriptFee. Verify how output references are represented, then ensure a UTxO present in both inputs is scanned once; done means the duplicate edge case no longer overcharges the reference script fee.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
typescript
Ambito
blockchain
Tipo di issue
Bug
Difficoltà
2/5
Tempo stimato
1-3 ore
Stato di attività
Ferma
Chiarezza
Specificata chiaramente
Idoneità per principianti
55/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.