Chrysalis 0.4.1

There is a newer version of this package available.
See the version list below for details.
dotnet add package Chrysalis --version 0.4.1                
NuGet\Install-Package Chrysalis -Version 0.4.1                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Chrysalis" Version="0.4.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Chrysalis --version 0.4.1                
#r "nuget: Chrysalis, 0.4.1"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Chrysalis as a Cake Addin
#addin nuget:?package=Chrysalis&version=0.4.1

// Install Chrysalis as a Cake Tool
#tool nuget:?package=Chrysalis&version=0.4.1                

<div align="center"> <h1 style="font-size: 3em;">Chrysalis: Cardano Serialization Library for .NET 🦋</h1> <h4>A .NET Serialization Library for Cardano</h4> </div>

<div align="center">

Forks Stars License Contributors Issues Issues Closed

<a href="https://www.nuget.org/packages/Chrysalis"> <img src="https://img.shields.io/nuget/v/Chrysalis.svg" alt="NuGet"> </a>

C#

</div>

Chrysalis is an open-source .NET library designed to help you create, build, and sign Cardano transactions. As a C# serialization library, Chrysalis facilitates the serialization and deserialization of Cardano blockchain data structures. With a strong focus on adhering to the Cardano standards and enhancing the .NET Cardano developer ecosystem, Chrysalis aims to provide developers with a reliable and consistent toolkit for working with Cardano.

🚧 NOTE: This library is currently a work in progress. Feedback and contributions are welcome!

Features ✨

  • Cardano Serialization: Convert Cardano blockchain data structures to and from CBOR (Concise Binary Object Representation), allowing seamless and efficient data exchanges while reducing manual handling.
  • Utility functions: Use provided functions to intuitively interact with the Cardano data types and serialization formats.
    • Bech32 Address Encoding/Decoding: Simplifies the encoding and decoding of Cardano addresses, ensuring compatibility with widely used formats. This allows you to handle Cardano addresses seamlessly.
  • Extension Functions: Simplifies the retrieval of values from Cardano data types by providing functions to access various variables within the data structures.
  • Extensive Data Model Support: Use a wide range of pre-built Cardano data types, including Transactions, Assets, MultiAssets, and more.
  • Smart Contract Interaction: Utilize Chrysalis' Cbor types in Datum creation and interact with Cardano smart contracts.
  • Cross-Platform Compatibility: Use Chrysalis in any .NET project, including .NET Core, .NET Framework, Xamarin, and more. This not only allows you to assemble Cardano data through C# but other .NEt languages such as F# or VB.NET.

Roadmap 🚀

  1. (De)serialization Support: Achieve complete serialization and deserialization for any Cardano data type described in CDDL https://github.com/IntersectMBO/cardano-ledger/blob/master/eras/conway/impl/cddl-files/conway.cddl.
  2. Transaction Handling: Introduce capabilities for building and signing Cardano transactions.
  3. Advanced Address Management: Implement address generation, derivation, and other associated functionalities.

Getting Started 📦

To use Chrysalis in your .NET project:

  1. You can install Chrysalis via NuGet: dotnet add package Chrysalis

  2. Example Usage 🧑‍💻

    CBOR (De)serialization

        var serializedTransaction = CborSerializer.Serialize(originalTransaction);
        var deserializedTransaction = CborSerializer.Deserialize<TransactionBody>(serializedTransaction);
    

    Block Deserialization and Serialization

        byte[] serializedBlock = CborSerializer.Serialize(originalBlock);
        BlockEntity deserializedBlock = CborSerializer.Deserialize<BlockEntity>(serializedBlock);
    

    Access Deserialized Transactions, Transaction Inputs, and Transaction Outputs from a Deserialized Block

        IEnumerable<TransactionBody> transactions = originalBlock.TransactionBodies();
        foreach (TransactionBody tx in transactions)
        {
            IEnumerable<TransactionInput> inputs = tx.Inputs();
            IEnumerable<TransactionOutput> outputs = tx.Outputs();    
        }
    

    Access a Transaction Input's Transaction Id and Index

        foreach (TransactionInput input in tx.Inputs())
        {
            string id = input.TransacationId();
            ulong index = input.Index();
        }
    

    Access a Transaction Output's Address and Balance

        foreach (TransactionOutput output in tx.Outputs())
        {
            string addr = output.Address().Value.ToBech32();
            Value balance = output.Amount();
            ulong lovelace = balance.Lovelace();
            MultiAssetOutput multiasset = balance.MultiAsset();
        }
    

    Serialize Transactions in a Block

        for (uint x = 0; x < transactions.Count(); x++)
        {
            CborSerializer.Serialize(transactions.ElementAt((int)x))
        }
    

    Bech32 Address Encoding or Decoding

        var addressBech32 = "addr...";
        var addressObject = Address.FromBech32(addressBech32);
        var addressBech32Again = addressObject.ToBech32();
        var paymentKeyHash = addressObject.GetPaymentKeyHash();
        var stakeKeyHash = addressObject.GetStakeKeyHash();
    

Smart Contract Datums 📝

Cbor Types Example Image

Datum Example

    public record AssetClass(CborBytes[] Value) : CborIndefiniteList<CborBytes>(Value);
    public record AssetClassTuple(AssetClass[] Value) : CborIndefiniteList<AssetClass>(Value);

    [CborSerializable(CborType.Constr, Index = 0)]
    public record SundaeSwapLiquidityPool(
        [CborProperty(0)]
        CborBytes Identifier,
        
        [CborProperty(1)]
        AssetClassTuple Assets,
        
        [CborProperty(2)]
        CborUlong CirculatingLp,
        
        [CborProperty(3)]
        CborUlong BidFeesPer10Thousand,
        
        [CborProperty(4)]
        CborUlong AskFeesPer10Thousand,
        
        [CborProperty(5)]
        Option<MultisigScript> FeeManager,
        
        [CborProperty(6)]
        CborUlong MarketOpen,
        
        [CborProperty(7)]
        CborUlong ProtocolFees
    ) : RawCbor;

How to Contribute 🤝

Interested in contributing to Chrysalis? Great! We appreciate any help, be it in the form of code contributions, documentation, or even bug reports.

  • Fork and Clone: Fork this repository, clone it locally, and set up the necessary development environment.
  • Branch: Always create a new branch for your work.
  • Pull Request: Submit a pull request once you're ready. Ensure you describe your changes clearly.
  • Feedback: Wait for feedback and address any comments or suggestions.
Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on Chrysalis:

Package Downloads
Argus.Sync

A ASP.NET Framework for Indexing Cardano Data storing it in PostgresSQL

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.4.2 53 11/27/2024
0.4.1 38 11/27/2024
0.4.0 104 11/22/2024
0.3.1 85 11/22/2024
0.3.0 88 11/5/2024
0.2.8 90 10/21/2024
0.2.7 122 10/20/2024
0.2.6 141 10/18/2024
0.2.5 93 10/17/2024
0.2.4 89 10/17/2024
0.2.3 95 10/16/2024
0.2.2 249 9/20/2024
0.2.1 102 9/19/2024
0.2.0 83 9/19/2024
0.1.9 340 9/13/2024
0.1.8 127 9/11/2024
0.1.7 120 9/11/2024
0.1.6 121 9/11/2024
0.1.5 110 9/6/2024
0.1.4 103 9/5/2024
0.1.3 102 9/5/2024
0.1.0 60 9/3/2024
0.0.7 101 10/10/2023
0.0.6 86 10/6/2023
0.0.5 86 10/6/2023
0.0.1 49 9/3/2024