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
andscript
;
- New (optional) transaction fields
- A new
plutus:v2
script language;
- A new block type
- 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 whentotalCollateral
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 thescript
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. (🔨 @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 (🐛 @rhyslbw, @bakon11, @james-iohk).
-
The
missingRequiredScripts
error now contains an extra fieldresolved
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
andplutus:v1
scripts are no longer encoded asbase64
strings, but are encoded asbase16
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. Usingbase64
for input data here is a bit awkward since most existing interfaces in the ecosystem favorbase16
; -
⚠️ 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 ofdatum
). However, the server does a best-effort for the sake of backward compatibility and should still work if provided with a valid hash underdatum
. However, after the Vasil hard-fork, it'll be possible to also pass inline-datums usingdatum
, while datum hash digest are expected to be specified asdatumHash
. 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 adatum
field with the exact same value for backward compatibility reason. In Babbage however, transaction outputs will carry eitherdatum
ordatumHash
depending on the case; anddatum
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 withoutput
andminimumRequiredValue
fields; -
⚠️ A slightly modified block header:
leaderValue
andnounce
fields are gone and replaced by a singleinputVrf
field; -
⚠️ Few protocol parameters changes:
-
A new protocol parameter
coinsPerUTxOByte
comes to replacecoinsPerUtxoWord
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
Acknowledgements
Thanks to @alessandrokonrad, @coot, @lehins, @JaredCorduan, @angerman, @vhulchenko-iohk & @hamishmack for their prompt help and feedback on various matters.