CIP idea, dust-pays-for-fees

edit: i forgot this is already a non-issue on Cardano because of minAda.

Since Cardano’s beginning as far as I know (i.e. Shelley when I came on board), the minimum value of any UTxO that only contains ada has always been around 1 ada (a million lovelace)… although the derivation of the exact threshold has changed over time from the evolution of protocol parameters that determine transaction pricing and admissibility:

I can’t see a more recent version of this document above, which I think is currently needed: the Alonzo protocol parameters it refers to aren’t in the current protocol.json. Still I’ve seen empirically that there cannot be “dust” as you describe because any unassigned balance less than almost exactly 1 ada is already being absorbed into the transaction fee.

Was changed with Babbage/Vasil protocol upgrade in 2022:
https://github.com/intersectmbo/cardano-ledger/releases/latest/download/babbage-ledger.pdf
screenshot-2025-03-17-18:25:32
screenshot-2025-03-17-18:26:01

They are not needed anymore. The only relevant parameter has been utxoCostPerByte (currently set to 4310 Lovelaces) for 2.5 years.

No idea why nobody updated the end user documentation accordingly. But it kind of has a history that only the documents on https://github.com/IntersectMBO/cardano-ledger/ are really binding and everything else might be horribly outdated or even never have been correct.

The code comment

claims that the resulting minima are 0.978597 ADA for an address with staking part and 0.857690 ADA for an address without staking part (“enterprise” address … whoever invented that misleading name). The 0.978597 ADA make no sense whatsoever, are not even a multiple of 4310 Lovelace. Should be the 0.978370 ADA from the line above. But even that is wrong:

A test transaction 5571503d29e2dc12867acf18972593ef9d68879c9aae240b598ee19b76880224 shows 0.969750 ADA for a delegated address and 0.849070 ADA for an undelegated one. This corresponds to 65 byte for the output to the delegated address and 37 byte for the output to the undelegated one. No idea if the on-chain output format was made two byte more efficient in the meantime, the comment was wrong from the start, or the size measurement function has a bug.

1 Like