Skip to content

v5.5.0

Compare
Choose a tag to compare
@KtorZ KtorZ released this 29 Jun 14:03
· 652 commits to master since this release
v5.5.0
237b4ea

Photo: Xiaolong Wong

Added

  • Added Vasil/Babbage support, including:
    • A new block type babbage with:
      • New (optional) transaction fields references, collateralReturn, totalCollateral;
      • New (optional) transaction output's fields datum and script;
    • A new plutus:v2 script language;
  • New transaction error submission failures in the Babbage era:
    • mirNegativeTransfer: returned when attempting to perform a negative MIR transfer from a reward pot to another;
    • totalCollateralMismatch: returned when totalCollateral is set but does not match what is actually computed by the ledger (i.e. sum of collateral inputs minus collateral return);
    • malformedReferenceScripts: returned when the script specified in an output isn't actually a well-formed Plutus script;
    • malformedScriptWitnesses, occurs when a script witness specified in the transaction does not properly deserialize to a Plutus script.
  • New server evaluation failures:
    • NotEnoughSynced: Happens when attempting to evaluate execution units on a node that isn't enough synchronized. This is, if the node is still in an era prior to Alonzo, evaluation of execution units won't be possible.
    • CannotCreateEvaluationContext: Happens when the ledger fails to create an evaluation context from a given transaction. This is mostly due to the transaction being malformed (e.g. wrong redeemer pointer, missing UTxO).

See the 📘 API reference for more details.

Changed

  • Updated cardano-configurations to include the vasil-dev network and switch to cardano-world as a source instead of Hydra artifacts -- now being deprecated. (:hammer: @rhyslbw)

  • Partially fixed an issue (#230, #208) causing websocket connection to be terminated by the server when p2p is enabled on the underlying node. Ogmios now has a workaround which makes the issue less likely, but the real fix belongs in the upstream networking stack (:bug: @rhyslbw, @bakon11, @james-iohk).

  • The missingRequiredScripts error now contains an extra field resolved that is a map of (pointer → script hash) that have been correctly resolved by said pointers.

  • The introduction of the Babbage era comes with some minor (albeit possibly breaking) changes and deprecations:

    • ⚠️ datums, redeemerData and plutus:v1 scripts are no longer encoded as base64 strings, but are encoded as base16 strings. The data payload remains however identical.
      This change is meant for more compatibility across the API since those data-types can now also be submitted to the server when evaluating execution units for transactions. Using base64 for input data here is a bit awkward since most existing interfaces in the ecosystem favor base16;

    • ⚠️ When passing transaction outputs to the server (e.g. when providing an additional UTxO for script evaluation), datum hashes in output must now be specified as datumHash (instead of datum). However, the server does a best-effort for the sake of backward compatibility and should still work if provided with a valid hash under datum. However, after the Vasil hard-fork, it'll be possible to also pass inline-datums using datum, while datum hash digest are expected to be specified as datumHash. Said differently, existing applications relying on this functionality will keep working without a change on this release, but applications willing to make use of the new inline-datum functionality coming in Vasil must abide by the new notation;

    • ⚠️ Similarly, Alonzo transaction outputs will now contain a datumHash field, carrying the datum hash digest. However, they will also contain a datum field with the exact same value for backward compatibility reason. In Babbage however, transaction outputs will carry either datum or datumHash depending on the case; and datum will only contain inline datums;

    • ⚠️ The outputTooSmall errors from transaction submission will slightly change format for transactions submitted during the Babbage era. Instead of an array of outputs, it is an array of objects with output and minimumRequiredValue fields;

    • ⚠️ A slightly modified block header: leaderValue and nounce fields are gone and replaced by a single inputVrf field;

    • ⚠️ Few protocol parameters changes:

      • A new protocol parameter coinsPerUTxOByte comes to replace coinsPerUtxoWord with a slightly different semantic. coinsPerUTxOByte is meant to compute the minimum Lovelace requirement on transaction outputs, and is simply a coefficient in a linear function of the serialized (CBOR) output:

        minUTxOValue(output) =  |serialise(output)| * coinsPerUTxOByte
        
      • The decentralizationParameter no longer exists. The block production is forever decentralized 🎉!

      • The extraEntropy no longer exists.

See the 📘 API reference for more details.

Removed

N/A

Details

v5.4.0...v5.5.0

Acknowledgements

Thanks to @alessandrokonrad, @coot, @lehins, @JaredCorduan, @angerman, @vhulchenko-iohk & @hamishmack for their prompt help and feedback on various matters.