Skip to content

Releases: Emurgo/cardano-serialization-lib

13.2.0 Errors and Taxes

14 Nov 15:39
Compare
Choose a tag to compare

API Changes:

Transaction Fee Calculation Updates

  • set_fee() now sets a static fee that remains unchanged during change calculation
    • TransactionBuilder.build_tx() will emit an error if minimal possible fee exceeds specified fee
  • New set_min_fee() method added
    • Sets minimum fee threshold
    • If minimal possible fee is lower, uses the specified minimum fee value

Additional Validation

  • Added balance validation in build_tx()
  • Added collateral balance check in set_total_collateral_and_return()

Published

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser/v/13.2.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs/v/13.2.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs/v/13.2.0
https://crates.io/crates/cardano-serialization-lib/13.2.0

Experimental packages with gc support

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs-gc/v/13.2.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser-gc/v/13.2.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs-gc/v/13.2.0

Full Changelog: 13.1.0...13.2.0

13.1.0 I have no words. NEW VERSION AGAIN

16 Oct 08:18
Compare
Choose a tag to compare

13.0.0 Set theory

09 Oct 09:50
Compare
Choose a tag to compare

Serialization Changes:

  • Set Type Serialization: All set types are now serialized with a tag "258", which will become mandatory after the next hard fork (HF). There is no way to force serialization without the tag. The period between the current and the next era serves as a transition between the old CBOR format and the new CBOR format for sets.

  • Preservation of Original Transaction Bytes: Only the FixedTransaction type can preserve original transaction bytes. This is crucial when signing a transaction from a third party, as there is no guarantee that all CBOR types will be in a specific format.

  • Redeemers Collection Serialization: The redeemers collection is now serialized as a map by default. After the next HF, redeemers will only be allowed as a map.

API Changes:

  • New Function has_transaction_set_tag: We've added the has_transaction_set_tag function to help you check if all sets in a transaction have the tag. It returns TransactionSetsState based on the transaction's content. This is useful for determining whether a transaction can be signed by a hardware wallet. In the case of MixedSets, it might be impossible to sign a transaction with a hardware wallet. Once the tag "258" becomes mandatory, we will remove the has_transaction_set_tag function.

    enum TransactionSetsState {
        AllSetsHaveTag = 0,
        AllSetsHaveNoTag = 1,
        MixedSets = 2,
    }
  • Removal of hash_transaction: The hash_transaction function has been removed because it cannot guarantee the correctness of a transaction hash for a transaction from a third-party tool. Instead, you should use the FixedTransaction type.

    WARNING: If you need to sign a transaction from a third party, use the FixedTransaction type. Do not use the Transaction type, as it is not serialization round-trip safe and the transaction hash might be incorrect.

Examples:

  • Getting a Transaction Hash from a Third-Party Transaction:

    let transaction = FixedTransaction::from_hex("tx_hex")?; // Or use from_bytes if you have a byte array.
    let tx_hash = transaction.transaction_hash();
  • Getting a Transaction Hash from a Transaction from a Transaction Builder:

    let tx = tx_builder.build_tx()?;
    let transaction = FixedTransaction::from_bytes(tx.to_bytes())?; 
    let tx_hash = transaction.transaction_hash();
  • Getting a Transaction Hash from a Transaction Body from a Transaction Builder:

    let tx_body = tx_builder.build()?;
    let transaction = FixedTransaction::new_from_body_bytes(tx_body.to_bytes())?;
    let tx_hash = transaction.transaction_hash();
  • Signing a Transaction or Adding a Signature:

    let mut transaction = FixedTransaction::new_from(tx_body.to_bytes())?;
    transaction.add_vkey_witness(get_vkey_witness()); // To add an existing signature.
    transaction.sign_and_add_vkey_signature(get_private_key()); // To sign and add a signature with a private key.
    // You can also use:
    // .add_bootstrap_witness
    // .sign_and_add_icarus_bootstrap_signature
    // .sign_and_add_daedalus_bootstrap_signature

Published

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser/v/13.0.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs/v/13.0.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs/v/13.0.0
https://crates.io/crates/cardano-serialization-lib/13.0.0

Experimental packages with gc support

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs-gc/v/13.0.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser-gc/v/13.0.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs-gc/v/13.0.0

Full Changelog: 12.1.1...13.0.0

12.1.1 Banana Banana

12.1.0 Effect of butter and fly.

10 Sep 13:45
Compare
Choose a tag to compare

Release Notes

  • fixed script integrity hash calculation for the Conway era.

  • set_witness_set method of FixedTransaction is now deprecated. We do not recommend using this function as it may lead to script integrity hash issues. Its sole purpose was to sign transactions from third-party sources. Instead, use the following FixedTransaction methods:

    • .sign_and_add_vkey_signature()
    • .sign_and_add_icarus_bootstrap_signature()
    • .sign_and_add_daedalus_bootstrap_signature()
    • .add_vkey_witness()
    • .add_bootstrap_witness()
  • Added "arbitrary-precision-json" feature (enabled by default)

    • Enables arbitrary precision for serde_json
    • If you encounter build conflicts with other crates using serde_json, disable this feature in your Cargo.toml file

Published

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser/v/12.1.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs/v/12.1.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs/v/12.1.0
https://crates.io/crates/cardano-serialization-lib/12.1.0

Experimental packages with gc support

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs-gc/v/12.1.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser-gc/v/12.1.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs-gc/v/12.1.0

Full Changelog: 12.0.1...12.1.0

12.0.1 Yeah we know... It hasn’t even been a year

29 Aug 13:10
Compare
Choose a tag to compare

12.0.0 Conway's Game Of Li... CSL

28 Aug 04:45
Compare
Choose a tag to compare

We are happy to announce a new CSL release.

Release Summary

1. Address Types:

  • Added network_id getter to Address types.
  • Introduced new address type: Malformed. Used when it's impossible to deserialize an address in structs where the address is a nested type.
  • New getter for address: kind(). Returns an enum with address type.
  • New getter for address: payment_cred(). Returns payment credential.
  • New function for address: is_malformed().

2. PlutusV3 Support:

  • Added PlutusV3 support in all Plutus-specific structures.

3. Token Handling:

  • Prohibited sending and minting of zero tokens.

4. New Certificates:

Added support for the following certificates (can be added via CertificatesBuilder):

  • CommitteeColdResign
  • CommitteeHotAuth
  • DrepDeregistration
  • DrepRegistration
  • DrepUpdate
  • StakeAndVoteDelegation
  • StakeRegistrationAndDelegation
  • StakeVoteRegistrationAndDelegation
  • VoteDelegation
  • VoteRegistrationAndDelegation

5. Reference Script Fee:

  • TransactionBuilderConfigBuilder: Added ref_script_coins_per_byte setter to account for new fees for reference script inputs.
  • PlutusScriptSource: Now requires an additional mandatory parameter for script size for reference inputs.

6. New Builder Types:

  • VotingBuilder: For participation in voting for governance actions.
  • VotingProposalBuilder: For proposing voting actions.
  • TransactionBuilder: Now has setters for these new builders.

7. Extended Coin Selection Functions:

TransactionBuilder has two new coin selection functions to account for change output and collateral return during fee estimation:

  • add_inputs_from_and_change: Considers change calculation; no need to call add_change_if_needed after it.
  • add_inputs_from_and_change_with_collateral_return: Considers change calculation and collateral return; no need to call add_change_if_needed after it.
    • NOTE: add_inputs_from_and_change_with_collateral_return doesn't perform coin selection for collateral inputs; you need to specify collateral inputs manually.

8. New Protocol Types for Governance-related Actions:

  • VotingProcedure: Vote for specific governance action proposal.
  • VotingProcedures: Collection of votes.
  • VotingProposal: Proposal of specific governance action.
  • VotingProposals: Collection of VotingProposal.
  • DRep: Abstraction of delegate representative; can be a credential or a predefined DRep type.
  • Voter: Abstraction of voter; can be DRep, SPO, or CC member.
  • GovernanceActionId: ID of governance action; tuple of (tx_hash, index_of_voting_proposal). Similar to tx input abstraction.
  • Anchor: Abstraction to specify off-chain data; tuple of URL and data hash.
  • Governance action types:
    • HardForkInitiationAction
    • InfoAction
    • NewConstitutionAction
    • NoConfidenceAction
    • ParameterChangeAction
    • TreasuryWithdrawalsAction
    • UpdateCommitteeAction

9. Serialization Improvement:

  • CSL now doesn't serialize empty collections for most witness types, in accordance with CDDL.

10. Set Behavior and Add Function:

The following types work as a set, and their add function returns a boolean. It returns true if the element is added and false if the element already exists in the collection. In the case of false, the size of the collection remains unchanged:

  • Credentials
  • Ed25519KeyHashes
  • Vkeywitnesses
  • VotingProposals
  • TransactionInputs
  • Certificates

11. New Transaction Builder Functions:

TransactionBuilder has a new functions to set donation to the treasury (TransactionBuilder.set_donation()) and the current treasury value (TransactionBuilder.set_current_treasury_value()). However, if you use these fields, the Cardano node will reject all non-Plutus V3 scripts. These transaction fields can help facilitate direct donations to the treasury and limit transaction execution based on the current treasury value.

12. New Packages With GC Support (EXPERIMENTAL):

CSL now includes NPM packages with GC (Garbage Collection) support, which means you no longer need to manually call .free for every CSL object. This was achieved by enabling the WEAK_REF flag on wasm_bindgen, and it utilizes FinalizationRegistry to automatically call free for each CSL struct when it is no longer needed. However, please use this feature with caution, as it may lead to unpredictable behavior. For package links, refer to the packages in the "Published" section.

Breaking Changes:

StakeCredential Renaming:

  • StakeCredential was renamed to Credential.
  • StakeCredKind was renamed to CredKind.
  • StakeCredentials was renamed to Credentials.

TransactionBody Struct Changes:

  • Removed: multiassets() due to its confusing naming.
  • Note: Use mint() to obtain information about minting in a transaction.

Fee Calculation Functions Changes:

  • Removed: All functions based on 'cons per word', aligning with the protocol's transition to 'coins per byte' in the Babbage era.
  • Replacement Guidelines:
    • Use new_coins_per_byte instead of the removed new_coins_per_word in DataCost.
    • In TransactionOutputAmountBuilder, switch to with_asset_and_min_required_coin_by_utxo_cost, as with_asset_and_min_required_coin is now removed.

ADA Requirement Function Updates:

  • Removed: min_ada_required due to its inability to account for full transaction output fields and reliance on the outdated coins per word parameter.
  • Replacement Guideline: Use min_ada_for_output.

TransactionBuilderConfigBuilder Adjustments:

  • Removed: coins_per_utxo_word.
  • Replacement Guideline: Use coins_per_utxo_byte.

NetworkInfo Simplification:

  • Removed: testnet() function, as the testnet has been replaced by testnet preprod and testnet preview.

Script Transaction Inputs Overhaul:

  • Removed: Functions like add_script_input, add_input, count_missing_input_scripts, add_required_script_input_witnesses, and add_required_plutus_input_scripts, used for adding script transaction inputs without a script witness.
  • Replacement Guideline:
    • For non-script inputs: Use add_regular_input, add_key_input, or add_bootstrap_input.
    • For script inputs: Use add_native_script_input or add_plutus_script_input.

PlutusScriptSource Enhancement:

  • Updated: new_ref_input in PlutusScriptSource now includes a language version argument, replacing the old new_ref_input.
  • Removed: new_ref_input_with_lang_ver because new_ref_input has the same functionality and no need for a specific function with a language version.
  • Changed: PlutusScriptSource.new_ref_input now requires script_size parameter to respect ref_script_coins_per_byte from protocol parameters and correct fee calculation from Conway era. You need also set ref_script_coins_per_byte via TransactionBuilderConfig to use it correctly.

NativeScriptSource Enhancement:

  • Changed: NativeScriptSource.new_ref_input now requires script_size parameter to respect ref_script_coins_per_byte from protocol parameters and correct fee calculation from Conway era. You need also set ref_script_coins_per_byte via TransactionBuilderConfig to use it correctly.

Script Source Unification:

  • Updated: NativeScriptSource and PlutusScriptSource now has required_signers option. To set it, use NativeScriptSource.set_required_signers or PlutusScriptSource.set_required_signers and TrsansactionBuilder will allocate space for these required_signers during fee calculation.

Multiple Mints:

  • Updated: Mint.get() now returns MintsAssets type to respect key duplication in Mint field.
  • Replacement Guideline: Use MintsAssets instead of MintAssets.

Referenced Native Script:

  • Changed: TxInputsBuilder.add_native_script_input now requires NativeScriptSource to support referenced native script. Use NativeScriptSource::new to use NativeScript witness as before, and use NativeScriptSource::new_ref_input to use referenced native script.
  • Replacement Guideline: Use NativeScriptSource::new(NativeScript::new()) instead of NativeScript::new().

Duplicated Keys Support in Plutus Datum Maps:

  • Changed: PlutusMap.get returns an instance of PlutusMapValues, PlutusMap.insert accepts an instance of PlutusMapValues to support duplicated keys in a datum map.
  • Replacement Guideline: Use PlutusMapValues.add and then PlutusMap.insert or just use PlutusMap.add_value. PlutusMapValues has an accessor function PlutusMapValues.get() to get a specific value and PlutusMapValues.len() to get the total number of values.

Ref Script Fee Support:

  • Changed: TransitionBuilder now can throw an error during the building process if you are using reference inputs with a Plutus script. To avoid it, you need to use TransactionBuilderConfigBuilder.ref_script_coins_per_byte to specify ref script byte cost and have correct fee calculations. PlutusScriptSource.new_ref_input requires script size to have correct fee calculation.
  • Note: If you use CSL in a pre-Conway environment, you can set script size and ref_script_coins_per_byte to zero.

Transaction Inputs and Reference Inputs Deduplication:

  • Changed: TransactionBuilder now automatically removes reference inputs that are also present in the transaction inputs field. The Cardano node will not accept a transaction that has the same transaction input in both the transaction inputs field and the reference inputs field. The deduplication logic applies to all reference inputs set via builders, except for those explicitly set using TransactionBuilder.set_ref_inputs(). If there is a duplicate between explicitly set reference inputs (via `...
Read more

12.0.0 beta 1

24 Jun 08:25
Compare
Choose a tag to compare
12.0.0 beta 1 Pre-release
Pre-release

THIS IS A BETA RELEASE, AND SOME THINGS MIGHT CHANGE IN THE FINAL 12.0.0

Update Summary

1. Address Types:

  • Added network_id getter to Address types.
  • Introduced new address type: Malformed. Used when it's impossible to deserialize an address in structs where the address is a nested type.
  • New getter for address: kind(). Returns an enum with address type.
  • New getter for address: payment_cred(). Returns payment credential.
  • New function for address: is_malformed().

2. PlutusV3 Support:

  • Added PlutusV3 support in all Plutus-specific structures.

3. Token Handling:

  • Prohibited sending and minting of zero tokens.

4. New Certificates:

Added support for the following certificates (can be added via CertificatesBuilder):

  • CommitteeColdResign
  • CommitteeHotAuth
  • DrepDeregistration
  • DrepRegistration
  • DrepUpdate
  • StakeAndVoteDelegation
  • StakeRegistrationAndDelegation
  • StakeVoteRegistrationAndDelegation
  • VoteDelegation
  • VoteRegistrationAndDelegation

5. Reference Script Fee:

  • TransactionBuilderConfigBuilder: Added ref_script_coins_per_byte setter to account for new fees for reference script inputs.
  • PlutusScriptSource: Now requires an additional mandatory parameter for script size for reference inputs.

6. New Builder Types:

  • VotingBuilder: For participation in voting for governance actions.
  • VotingProposalBuilder: For proposing voting actions.
  • TransactionBuilder: Now has setters for these new builders.

7. Extended Coin Selection Functions:

TransactionBuilder has two new coin selection functions to account for change output and collateral return during fee estimation:

  • add_inputs_from_and_change: Considers change calculation; no need to call add_change_if_needed after it.
  • add_inputs_from_and_change_with_collateral_return: Considers change calculation and collateral return; no need to call add_change_if_needed after it.
    • NOTE: add_inputs_from_and_change_with_collateral_return doesn't perform coin selection for collateral inputs; you need to specify collateral inputs manually.

8. New Protocol Types for Governance-related Actions:

  • VotingProcedure: Vote for specific governance action proposal.
  • VotingProcedures: Collection of votes.
  • VotingProposal: Proposal of specific governance action.
  • VotingProposals: Collection of VotingProposal.
  • DRep: Abstraction of delegate representative; can be a credential or a predefined DRep type.
  • Voter: Abstraction of voter; can be DRep, SPO, or CC member.
  • GovernanceActionId: ID of governance action; tuple of (tx_hash, index_of_voting_proposal). Similar to tx input abstraction.
  • Anchor: Abstraction to specify off-chain data; tuple of URL and data hash.
  • Governance action types:
    • HardForkInitiationAction
    • InfoAction
    • NewConstitutionAction
    • NoConfidenceAction
    • ParameterChangeAction
    • TreasuryWithdrawalsAction
    • UpdateCommitteeAction

9. Serialization Improvement:

  • CSL now doesn't serialize empty collections for most witness types, in accordance with CDDL.

10. Set Behavior and Add Function:

The following types work as a set, and their add function returns a boolean. It returns true if the element is added and false if the element already exists in the collection. In the case of false, the size of the collection remains unchanged:

  • Credentials
  • Ed25519KeyHashes
  • Vkeywitnesses
  • VotingProposals
  • TransactionInputs
  • Certificates

Breaking Changes:

StakeCredential Renaming:

  • StakeCredential was renamed to Credential.
  • StakeCredKind was renamed to CredKind.
  • StakeCredentials was renamed to Credentials.

TransactionBody Struct Changes:

  • Removed: multiassets() due to its confusing naming.
  • Note: Use mint() to obtain information about minting in a transaction.

Fee Calculation Functions Changes:

  • Removed: All functions based on 'cons per word', aligning with the protocol's transition to 'coins per byte' in the Babbage era.
  • Replacement Guidelines:
    • Use new_coins_per_byte instead of the removed new_coins_per_word in DataCost.
    • In TransactionOutputAmountBuilder, switch to with_asset_and_min_required_coin_by_utxo_cost, as with_asset_and_min_required_coin is now removed.

ADA Requirement Function Updates:

  • Removed: min_ada_required due to its inability to account for full transaction output fields and reliance on the outdated coins per word parameter.
  • Replacement Guideline: Use min_ada_for_output.

TransactionBuilderConfigBuilder Adjustments:

  • Removed: coins_per_utxo_word.
  • Replacement Guideline: Use coins_per_utxo_byte.

NetworkInfo Simplification:

  • Removed: testnet() function, as the testnet has been replaced by testnet preprod and testnet preview.

Script Transaction Inputs Overhaul:

  • Removed: Functions like add_script_input, add_input, count_missing_input_scripts, add_required_script_input_witnesses, and add_required_plutus_input_scripts, used for adding script transaction inputs without a script witness.
  • Replacement Guideline:
    • For non-script inputs: Use add_regular_input, add_key_input, or add_bootstrap_input.
    • For script inputs: Use add_native_script_input or add_plutus_script_input.

PlutusScriptSource Enhancement:

  • Updated: new_ref_input in PlutusScriptSource now includes a language version argument, replacing the old new_ref_input.
  • Removed: new_ref_input_with_lang_ver because new_ref_input has the same functionality and no need for a specific function with a language version.
  • Changed: PlutusScriptSource.new_ref_input now requires script_size parameter to respect ref_script_coins_per_byte from protocol parameters and correct fee calculation from Conway era. You need also set ref_script_coins_per_byte via TransactionBuilderConfig to use it correctly.

Script Source Unification:

  • Updated: new_ref_input in NativeScriptSource now requires required_signers. To set it, use NativeScriptSource.set_required_signers.

Multiple Mints:

  • Updated: Mint.get() now returns MintsAssets type to respect key duplication in Mint field.
  • Replacement Guideline: Use MintsAssets instead of MintAssets.

Referenced Native Script:

  • Changed: TxInputsBuilder.add_native_script_input now requires NativeScriptSource to support referenced native script. Use NativeScriptSource::new to use NativeScript witness as before, and use NativeScriptSource::new_ref_input to use referenced native script.
  • Replacement Guideline: Use NativeScriptSource::new(NativeScript::new()) instead of NativeScript::new().

Duplicated Keys Support in Plutus Datum Maps:

  • Changed: PlutusMap.get returns an instance of PlutusMapValues, PlutusMap.insert accepts an instance of PlutusMapValues to support duplicated keys in a datum map.
  • Replacement Guideline: Use PlutusMapValues.add and then PlutusMap.insert or just use PlutusMap.add_value. PlutusMapValues has an accessor function PlutusMapValues.get() to get a specific value and PlutusMapValues.len() to get the total number of values.

Ref Script Fee Support:

  • Changed: TransitionBuilder now can throw an error during the building process if you are using reference inputs with a Plutus script. To avoid it, you need to use TransactionBuilderConfigBuilder.ref_script_coins_per_byte to specify ref script byte cost and have correct fee calculations. PlutusScriptSource.new_ref_input requires script size to have correct fee calculation.
  • Note: If you use CSL in a pre-Conway environment, you can set script size and ref_script_coins_per_byte to zero.

Published

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser/v/12.0.0-beta.1
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs/v/12.0.0-beta.1
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs/v/12.0.0-beta.1
https://crates.io/crates/cardano-serialization-lib/12.0.0-beta.1

Experimental packages with gc support

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs-gc
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser-gc
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs-gc

Full Changelog: 11.5.0...12.0.0-beta.1

11.5.0 "Amnesia"

21 Aug 10:33
Compare
Choose a tag to compare

Release PR: #633

Changes

Added add_change_if_needed_with_datum function to the TransactionBuilder type. The function provides ability to send change to a plutus script address with a datum or datum hash. Added a new type OutputDatum specify datum or datum hash as function argument. .
Fixed memory issue for asmjs version.
Updated link in the CSL doc. Thanks @katomm

Published

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser/v/11.5.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs/v/11.5.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs/v/11.5.0
https://crates.io/crates/cardano-serialization-lib/11.5.0

11.4.0 "Who are you, mister tx output"

19 Apr 13:40
6702dd7
Compare
Choose a tag to compare

Release PR: #612

Changes

Added from_address function to the PlutusData type. The function converts address to a datum format.
Added serialization_formatfunction to the TransactionOutput type. This function provides access to information about TransactionOutput format after deserialization.

Published

https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-browser/v/11.4.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-nodejs/v/11.4.0
https://www.npmjs.com/package/@emurgo/cardano-serialization-lib-asmjs/v/11.4.0
https://crates.io/crates/cardano-serialization-lib/11.4.0