IntersectMBO / IntersectMBO/evolution-sdk

improvement: tx size includes IsValid field, Haskell omits it

Aperta
#179 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

`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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.