Repository navigation
ci(changesets): version packages - #609
Open
github-actions[bot] wants to merge 1 commit into
Open
github-actions[bot] wants to merge 1 commit into
github-actions[bot] wants to merge 1 commit into
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
October 9, 2026 21:24
2c98bb3 to
a7366e5
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
5 times, most recently
from
October 16, 2026 17:29
79096a7 to
eb589da
Compare
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
October 16, 2026 18:04
eb589da to
d65615d
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@evolution-sdk/evolution@0.7.0
Minor Changes
#652
f4e7823Thanks @solidsnakedev! -build()takes a newcodecOptionsoption, the CBOR options to encode the transaction with. The builder computes the fee, the size limit, the minimum UTxO of payment, change and collateral return outputs, the script data hash and the auxiliary data hash over that encoding. The built transaction keeps the encoding throughsign(),partialSign(),signWithWitness(),assemble()andsubmit(), and evaluators and providers write the same bytes.For a transaction that hardware wallet tooling witnesses, pass
CBOR.TX_HW_CLI_OPTIONS. Before it witnesses a transaction, that tooling checks that the map keys are in bytewise order, andCBOR.TX_CANONICAL_OPTIONSwrites them in length-first order.The build fails when the options write a native script in the witness set with other bytes than the default options, as options with indefinite arrays do. The ledger hashes the written bytes, so the script would no longer match its script hash.
Before, the builder always hashed the default encoding, so a transaction written with
CBOR.TX_CANONICAL_OPTIONScarried a stale script data hash and auxiliary data hash.With no
codecOptions,CBOR.TX_DEFAULT_OPTIONSorCBOR.CML_DEFAULT_OPTIONS, every byte, transaction id, fee and signature stays the same.Transaction.withCodecOptions(tx, options)records options for a transaction.Transaction.toCBORBytesandTransaction.toCBORHexthen use them when the caller passes no options. Options passed explicitly, other thanCBOR.TX_DEFAULT_OPTIONSandCBOR.CML_DEFAULT_OPTIONS, come first, then the encoding a decoded transaction was read from, then the recorded options.Transaction.addVKeyWitnesseskeeps the recorded options.The chain
txHashand the seed and private key wallets now hash the body bytes the transaction is written with. Some valid bytes decode to aTransactionthat the default encoder writes differently, such as a body with its keys in another order. Given such aTransaction,signTxnow signs the decoded body bytes and gives the signature it gives for the hex. Before, it signed a re-encoded body, and the node rejected the witness.#650
4c0ac79Thanks @solidsnakedev! -CBOR.CodecOptionstakes akeyOrderoption, the order of map keys when the encoder sorts them: in canonical mode, and in custom mode withsortMapKeys: true."lengthFirst", the default, puts the shorter encoded key first and orders keys of equal length bytewise (RFC 7049 Section 3.9)."bytewise"orders the encoded keys bytewise, and a key that is a prefix of another comes first (RFC 8949 Section 4.2.1).Two new presets write the bytewise order, which hardware wallet tooling checks before it witnesses a transaction:
CBOR.HW_CLI_OPTIONS:{ mode: "canonical", keyOrder: "bytewise" }.CBOR.TX_HW_CLI_OPTIONS:CBOR.HW_CLI_OPTIONSfor bothledgerandplutusData.No preset passes that check when a redeemer or a witness datum holds a byte string over 64 bytes, the bytes of a bignum included. Plutus requires such a string in 64-byte chunks, and the check requires it in one piece.
Every existing preset writes the same bytes as before.
CBOR.CANONICAL_OPTIONSandCBOR.TX_CANONICAL_OPTIONSkeep the length-first order, and their documentation now cites RFC 7049 Section 3.9 for it instead of RFC 8949 Section 4.2.1.#617
98e8b38Thanks @solidsnakedev! - Plutus data is now encoded by default withCBOR.PLUTUS_DATA_OPTIONS, the layout the node writes: non-empty lists and constructor fields indefinite, maps definite. Before, the default wasCBOR.CML_DATA_DEFAULT_OPTIONS, which also wrote non-empty maps indefinite.Data.DEFAULT_CBOR_OPTIONSandCBOR.TX_DEFAULT_OPTIONS.plutusDataare nowCBOR.PLUTUS_DATA_OPTIONS, andCBOR.toTxCodecOptionsmapsCBOR.CML_DEFAULT_OPTIONSto it.Only data that holds a non-empty map changes, and only in its map headers.
Data.map([[1n, 2n]])wasbf0102ffand is nowa10102. For such data these change:Data.toDatumHash, which now match the hashes the node computesApplied script hashes do not change, since
UPLC.applyParamsToScriptalready usedCBOR.PLUTUS_DATA_OPTIONS. Decoding is unchanged, and a decoded transaction keeps the original bytes of its datums and redeemers.To keep the old bytes, pass the old options:
The transaction options cover inline datums, witness datums and redeemer data, so the second call keeps the old bytes for all three.
CBOR.CML_DATA_DEFAULT_OPTIONSis deprecated in favor ofCBOR.PLUTUS_DATA_OPTIONS. It keeps its bytes, but matches no tool exactly, so use it only to reproduce bytes and datum hashes written before this release.#618
4e748e6Thanks @solidsnakedev! - A new inline datum is now written with theplutusDatatransaction options, as witness datums and redeemer data are. Before, it was written withData.DEFAULT_CBOR_OPTIONSwhatever options the caller passed to the transaction encoder.The encoders and schemas of
TransactionBody,TxOut,TransactionOutputandDatumOptiontakeCBOR.TxCodecOptionsand default toCBOR.TX_DEFAULT_OPTIONS. PlainCBOR.CodecOptionsare still accepted, read asCBOR.toTxCodecOptionsreads them.DatumOption.makeFromCDDLandTxOut.makeFromCDDLbuild the CDDL schema for givenplutusDataoptions.With no options,
CBOR.TX_DEFAULT_OPTIONSorCBOR.CML_DEFAULT_OPTIONS, every byte stays the same. Under other options only the bytes inside tag 24 change, so the transaction id of a transaction with a new inline datum changes. A decoded inline datum keeps its bytes, and an inline datum added to a decoded transaction is written with the default options.#616
6f6a471Thanks @solidsnakedev! - Plutus data now has its own encoder, so three kinds of value get the bytes the node writes under every option preset. Their bytes and datum hashes change:[index, fields]pair as a definite two-item array.Data.constr(128n, [1n])wasd8669f18809f01ffffand is nowd8668218809f01ff.3bffffffffffffffff, where it was a negative bignum.Data.toCBORBytes,Data.toCBORHex,Data.toDatumHashand the encode side ofData.FromCBORBytesandData.FromCBORHexuse the new encoder, and so do redeemers, witness datums, inline datums, UPLC data constants andRedeemers.toScriptDataHash. All other data keeps its bytes under every preset. Decoding is unchanged.Data.toCBORBytesandData.toCBORHexno longer validate their input with the schema first; a value that is not Plutus data now throwsDataErrorinstead ofParseError.The CBOR encoder also writes -2^64 as
3bffffffffffffffff. When a decoded transaction or witness set is written back, an integer decoded from a bignum tag keeps that tag, so a decoded -2^64 keeps its bytes in either form.#610
a1b619bThanks @solidsnakedev! - Witness datums and redeemer data are now written with their own Plutus data options. Before, the witness set wrote them with the transaction options, so a datum in the witness set did not match the bytes its datum hash covers.CBOR.TxCodecOptionsholds two sets of options.ledgeris for ledger structures: the body, the witness set, and the containers that hold datums and redeemers.plutusDatais for Plutus data items: new inline datums, witness datums and redeemer data. Two presets come with it:CBOR.TX_DEFAULT_OPTIONS:ledgerisCBOR.CML_DEFAULT_OPTIONSandplutusDataisCBOR.PLUTUS_DATA_OPTIONS, theDatadefault.CBOR.TX_CANONICAL_OPTIONS:CBOR.CANONICAL_OPTIONSfor both.The encoders and schemas of
Transaction,TransactionWitnessSet,RedeemersandRedeemer, andRedeemers.toScriptDataHash, takeCBOR.TxCodecOptionsand default toCBOR.TX_DEFAULT_OPTIONS:Plain
CBOR.CodecOptionsare still accepted, read asCBOR.toTxCodecOptionsreads them: the options serve as both, except thatCBOR.CML_DEFAULT_OPTIONSwrites Plutus data withCBOR.PLUTUS_DATA_OPTIONS, as passing no options does. Decoded datums and redeemers keep their bytes, and a datum or redeemer added to a decoded transaction is written with the default Plutus data options.Script transactions whose redeemer data or witness datums hold a non-empty list, map or constructor fields change bytes. Simple data such as
Data.constr(0n, [])or an integer keeps its bytes. The builder wrote redeemer data definite, for exampled87982a101028103, and now writes it in the data default with indefinite lists and constructor fields and a definite map:d8799fa101029f03ffff. To keep the old redeemer layout, pass{ ledger: CBOR.CML_DEFAULT_OPTIONS, plutusData: CBOR.CML_DATA_DEFINITE_OPTIONS }to the encoders and toRedeemers.toScriptDataHash. That call also writes new inline datums fully definite.#613
0656f6aThanks @solidsnakedev! - A proposal procedure now requires an anchor. The ledger has no null anchor for a proposal, so the node rejected a transaction whose proposal had one as malformed. Before,ProposalProcedureacceptedanchor: nulland wrote it as CBOR null.ProposalProcedure.anchor, theanchorparameter ofProposalProcedures.singleandProposeParams.anchorforpropose()are nowAnchor.Anchor. Decoding a proposal procedure with a null anchor fails. Callers that passednullmust pass an anchor with the metadata URL and hash of the proposal. Voting procedure anchors can still be null.Patch Changes
#654
22a848cThanks @solidsnakedev! -Transaction.addVKeyWitnessesHexandTransaction.addVKeyWitnessesBytesnow write the vkey witnesses key at its ascending position when the decoded witness set keys ascend. A transaction that passes a hardware wallet's canonical check stays canonical after each signature, so a second hardware wallet can witness it.This changes the bytes these functions write by default. Signing an unsigned transaction whose witness set holds keys 5 and 7 now writes key 0 first, where it came last before. The transaction id, the body bytes and the bytes of each existing entry stay the same. The same holds for
Transaction.addVKeyWitnessesfollowed byTransaction.toCBORHex, and for a key added throughTransaction.toCBORHexWithFormatorTransactionWitnessSet.toCBORHexWithFormat. A witness set whose decoded keys do not ascend still gets the new key last.#608
04c4ec3Thanks @solidsnakedev! - A decoded transaction now keeps the original bytes of witness datums and redeemers that contain a Plutus data map whose keys hold byte strings. This covers byte-string keys, list and constructor keys that contain them, and repeated keys. Before, re-encoding the transaction or adding a witness withTransaction.addVKeyWitnessesHexrewrote the value under each such key, so the node reported a script data hash mismatch.#656
cc277beThanks @solidsnakedev! - The builder now computes the fee with the redeemer indices the transaction is written with. Before, the fee estimate numbered redeemers 0, 1, 2 and so on, and a real index of 24 or more takes one more CBOR byte. A script transaction with two or more redeemers at index 24 or later, such as two script inputs that sort after 24 other inputs, paid too small a fee, and the node rejected it.The fee changes only where a redeemer's index and its old number take a different number of bytes. Each redeemer at index 24 or more whose old number was under 24 adds the fee of one byte. With 25 or more redeemers, the reverse case removes one. Every other transaction keeps its bytes.
#654
22a848cThanks @solidsnakedev! -SignBuilder.signWithWitnessnow keeps the transaction's own witness set and adds the vkey and bootstrap witnesses of the given set. Before, it built the signed transaction from the given set alone. A Plutus transaction signed with only the vkey witnesses a hardware wallet returns lost its scripts, datums and redeemers. It skips a vkey witness the transaction already holds and adds a repeated one once. It ignores scripts, datums and redeemers in the given set, since the body's script data hash covers the transaction's own.#655
d0ef3e8Thanks @solidsnakedev! - The redeemerData.int(0n)now works in every builder operation. A Plutus integer is abigint, so that redeemer is0n, and the operations tested the redeemer for truthiness.collectFromand the stake operations, such aswithdraw, failed with "Redeemer required". The DRep and committee operations andvotedropped the redeemer, so the build failed later.mintAssetsdropped it without an error and built a transaction with no mint redeemer. The operations now test whether a redeemer was given, asproposealready did.@evolution-sdk/aiken-uplc@2.0.21
Patch Changes
f4e7823,22a848c,4c0ac79,98e8b38,04c4ec3,4e748e6,6f6a471,a1b619b,0656f6a,cc277be,22a848c,d0ef3e8]:@evolution-sdk/devnet@3.0.22
Patch Changes
f4e7823,22a848c,4c0ac79,98e8b38,04c4ec3,4e748e6,6f6a471,a1b619b,0656f6a,cc277be,22a848c,d0ef3e8]:@evolution-sdk/scalus-uplc@2.0.21
Patch Changes
f4e7823,22a848c,4c0ac79,98e8b38,04c4ec3,4e748e6,6f6a471,a1b619b,0656f6a,cc277be,22a848c,d0ef3e8]: