IntersectMBO / IntersectMBO/evolution-sdk
bug: maxRefScriptSizePerTx limit is 200,000 bytes instead of 204,800
- Dominant language
- TypeScript
- Stars
- 22
- Forks
- 30
- Avg merge
- 13h
- Merged PRs (30d)
- 14
Description
## Summary
`calculateReferenceScriptFee` in `TxBuilderImpl.ts` rejects transactions whose total reference script size exceeds 200,000 bytes. The correct Conway-era hard cap is **204,800 bytes** (200 × 1024 = 200 KiB).
Transactions with total reference script sizes between **200,001 and 204,800 bytes** are incorrectly rejected by the SDK but would be accepted by the node.
## Root Cause
```ts
// current (wrong)
if (totalScriptSize > 200_000) {
```
The Cardano Conway ledger hardcodes the limit as `200 * 1024`:
```haskell
ppMaxRefScriptSizePerTxG = L.to . const $ 200 * 1024 -- 204,800 bytes
```
Source: `ConwayEraPParams` instance in [`eras/conway/impl/src/Cardano/Ledger/Conway/PParams.hs`](https://github.com/IntersectMBO/cardano-ledger/blob/master/eras/conway/impl/src/Cardano/Ledger/Conway/PParams.hs). Documented in [ADR-009](https://github.com/IntersectMBO/cardano-ledger/blob/master/docs/adr/2024-08-14_009-refscripts-fee-change.md).
Note: these become proper protocol parameters in Dijkstra era (`ppMaxRefScriptSizePerTxL`).
## Fix
```ts
if (totalScriptSize > 204_800) {
// maxRefScriptSizePerTx: 200 * 1024 = 204,800 bytes (200 KiB)
// Hardcoded in Conway era, becomes a protocol parameter in Dijkstra era.
```
## Affected File
`packages/evolution/src/sdk/builders/TxBuilderImpl.ts` — `calculateReferenceScriptFee`
Contributor guide
Research direction
Open packages/evolution/src/sdk/builders/TxBuilderImpl.ts and inspect calculateReferenceScriptFee and its current 200,000-byte comparison. Change the Conway-era cap to 204,800 bytes (200 KiB), then verify that totals through 204,800 bytes are accepted while larger totals are rejected.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- typescript
- Domain
- blockchain
- Issue type
- Bug
- Difficulty
- 1/5
- Estimated time
- Under an hour
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 58/100