cardano_sdk_ledger_interop 0.5.9 copy "cardano_sdk_ledger_interop: ^0.5.9" to clipboard
cardano_sdk_ledger_interop: ^0.5.9 copied to clipboard

Part of Cardano Flutter SDK containing the data models.

Cardano SDK Ledger Interop #

pub package MIT License

Cardano SDK Ledger Interop is a Dart package that bridges the gap between cardano_dart_types, cardano_flutter_sdk, and ledger_cardano_plus. It provides the essential mapping and conversion logic to serialize Cardano transactions and related data structures for use with Ledger hardware wallets.


Overview #

When building Cardano applications in Dart/Flutter, you often need to sign transactions with a Ledger device. However, the data models and serialization formats used by the Cardano SDKs differ from those required by Ledger's signing APIs. This package provides the "connective tissue"β€”it takes transactions and types from the Cardano SDKs and converts them into the specific formats and models required by the Ledger device libraries.

  • Input: Cardano transaction models from cardano_flutter_sdk / cardano_dart_types
  • Output: Data structures and serialization compatible with ledger_cardano_plus for secure signing on Ledger devices

Features #

  • Transaction Mapping: Convert Cardano transactions into Ledger-compatible signing requests.
  • Type Conversion: Map Cardano SDK types (inputs, outputs, certificates, etc.) to Ledger models.
  • Serialization: Prepare and serialize data for Ledger device communication.
  • Error Handling: Custom error types for unsupported or invalid transaction scenarios.

Getting Started #

Installation #

Add to your pubspec.yaml:

dependencies:
  cardano_sdk_ledger_interop: ^0.5.5
  cardano_flutter_sdk: ^2.5.0
  ledger_cardano_plus: ^0.5.5
  cardano_dart_types: # version as required by cardano_flutter_sdk

Then run:

dart pub get

Usage Example #

Here's a minimal example of converting a Cardano transaction to a Ledger signing request:

import 'package:cardano_dart_types/cardano_dart_types.dart';
import 'package:cardano_sdk_ledger_interop/src/mapper.dart';

void main() async {
  final rawTxHex = '...'; // Your transaction CBOR hex
  final tx = CardanoTransaction.deserializeFromHex(rawTxHex);

  final ledgerRequest = await tx.toLedgerSigningRequest(
    accountIndex: 0,
    inputUtxoToAddress: {
      // Map of UTXO#idx to address
      'txhash#index': 'addr1...',
    },
    maxDeriveAddressCount: 10,
    networkId: NetworkId.mainnet,
    xPubBech32: 'xpub1...',
  );

  print(ledgerRequest);
}

For a more complete example, see example/hex_tx_to_ledger_example.dart.


API #

The main entry point is the extension on CardanoTransaction:

Future<SignatureRequestData> toLedgerSigningRequest({
  required NetworkId networkId,
  required String xPubBech32,
  required int accountIndex,
  required int maxDeriveAddressCount,
  required Map<UtxoAndIndex, Bech32OrBase58CardanoAddress> inputUtxoToAddress,
})

This produces a SignatureRequestData object, which contains all the information needed to sign the transaction on a Ledger device.

Error Handling #

Custom errors are defined in lib/src/errors/errors.dart:

  • CardanoLedgerInteropError
  • NotSupportedError
  • InvalidTransactionError

Dependencies #


Contributing #

Contributions, issues, and feature requests are welcome! Please open an issue or submit a pull request.


License #

This project is licensed under the MIT License.



Maintainers #