IntersectMBO / IntersectMBO/evolution-sdk
improvement: tx size includes IsValid field, Haskell omits it
- Lingua principale
- TypeScript
- Stelle
- 22
- Fork
- 30
- Merge medio
- 5h 29m
- PR unite (30g)
- 12
Descrizione
## Summary
`calculateFeeIteratively` serializes the transaction using a 4-element CBOR array (body, witnessSet, isValid, auxiliaryData). The Cardano node computes the fee-relevant size using `toCBORForSizeComputation`, which omits `IsValid` and produces a **3-element array**.
This results in a tx size ~1 byte larger than the node calculates, causing a fee over-estimate of ~44 lovelace (1 byte × minFeeCoefficient).
## Haskell Reference
```haskell
-- eras/alonzo/impl/src/Cardano/Ledger/Alonzo/Tx.hs
toCBORForSizeComputation AlonzoTx {atBody, atWits, atAuxData} =
encodeListLen 3 -- 3 elements, no IsValid
<> encCBOR atBody
<> encCBOR atWits
<> encodeNullStrictMaybe encCBOR atAuxData
```
## Our Code
```ts
// TxBuilderImpl.ts — calculateFeeIteratively
const transaction = new Transaction.Transaction({
body,
witnessSet: fakeWitnessSet,
isValid: true, // included in CBOR, node does not count this
auxiliaryData: ...
})
const size = yield* calculateTransactionSize(transaction)
```
## Impact
~44 lovelace over-charge per transaction. Safe (node accepts fees above minimum) but imprecise.
## Fix
Serialize only `[body, witnessSet, auxiliaryData]` (3-element array) for size computation, or subtract the `isValid` CBOR overhead (~2 bytes) from the measured size.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia in TxBuilderImpl.ts da calculateFeeIteratively e segui calculateTransactionSize. Poi confronta la sua serializzazione con il riferimento Haskell toCBORForSizeComputation citato. Il lavoro è completato quando il calcolo della dimensione della fee usa la rappresentazione della transazione a tre elementi senza IsValid e non include più l’overhead CBOR di quel campo.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- typescript
- Ambito
- blockchain
- Tipo di issue
- Bug
- Difficoltà
- 3/5
- Tempo stimato
- 1-2 giorni
- Stato di attività
- Ferma
- Chiarezza
- Specificata chiaramente
- Idoneità per principianti
- 48/100