Chrysalis 0.4.1
See the version list below for details.
dotnet add package Chrysalis --version 0.4.1
NuGet\Install-Package Chrysalis -Version 0.4.1
<PackageReference Include="Chrysalis" Version="0.4.1" />
paket add Chrysalis --version 0.4.1
#r "nuget: Chrysalis, 0.4.1"
// 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">
<a href="https://www.nuget.org/packages/Chrysalis"> <img src="https://img.shields.io/nuget/v/Chrysalis.svg" alt="NuGet"> </a>
</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 🚀
- (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.
- Transaction Handling: Introduce capabilities for building and signing Cardano transactions.
- Advanced Address Management: Implement address generation, derivation, and other associated functionalities.
Getting Started 📦
To use Chrysalis in your .NET project:
You can install Chrysalis via NuGet:
dotnet add package Chrysalis
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
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 | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net9.0 is compatible. |
-
net9.0
- NSec.Cryptography (>= 24.4.0)
- SauceControl.Blake2Fast (>= 2.0.0)
- System.Formats.Cbor (>= 8.0.0)
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 |