2.1.7 • Published 5 months ago

@wingriders/cab v2.1.7

Weekly downloads
-
License
ISC
Repository
github
Last release
5 months ago

@wingriders/cab

CAB (Cardano Application Backend) is a powerful library designed to streamline the development of Cardano applications for both browser and Node.js environments.

Features

CAB provides essential tools for:

  • Wallet & Account Management – Securely manage Cardano wallets and accounts.
  • Custom Data Sources – Define and integrate blockchain data providers.
  • Cryptographic Utilities – Generate mnemonics and derive keys.
  • CIP-30 dApp Connector – Easily connect with Cardano dApps.
  • Transaction Planning – Build Plutus-compatible transactions with metadata and automatic UTxO selection.
  • Plutus V1 & V2 Support – Compatible with both Plutus versions.

Installation

Using Yarn

yarn add @wingriders/cab

Using npm

npm install @wingriders/cab

Development Roadmap

  • Add comprehensive documentation
  • Support Plutus V2
  • Improve transaction planner
  • Open-source data providers
  • Enhance error reporting and helper functions
  • Expand test coverage
  • Add ES Modules support

Basic Usage

CAB offers a wide range of functionalities. Below are some basic examples to help you get started.

Account Management

Manage a wallet using a mnemonic phrase.

import {NETWORKS} from '@wingriders/cab/constants'
import {JsCryptoProvider, mnemonicToWalletSecretDef} from '@wingriders/cab/crypto'
import {CabBackend} from '@wingriders/cab/dataProvider'
import {NetworkName} from '@wingriders/cab/types/network'
import {Wallet} from '@wingriders/cab/wallet'

const dataProvider = new CabBackend('https://cab-server.mainnet.wingriders.com', NetworkName.MAINNET)

const wallet = new Wallet({
  dataProvider,
  cryptoProvider: new JsCryptoProvider({
    // Here we assume the mnemonic is in a variable called `secretMnemonic`
    // for example loaded from the environment variables
    walletSecretDef: await mnemonicToWalletSecretDef(secretMnemonic),
    network: NETWORKS[NetworkName.MAINNET],
    config: {
      shouldExportPubKeyBulk: true,
    },
  }),
  gapLimit: 20,
})

const account = await wallet.getOrLoadAccount(0)
const utxos = account.getUtxos()

Transaction Planner

Send 10 ADA to Alice using a planned transaction.

import {getTxPlan} from '@wingriders/cab/ledger/transaction'
import {Lovelace, TxPlanArgs} from '@wingriders/cab/types'

// Obtain the protocol parameters from your ledger state provider
const protocolParameters = await dataProvider.getProtocolParameters()

// Define the plan of the transaction
const txPlanArgs: TxPlanArgs = {
  planId: 'send-ada-to-Alice',
  outputs: [
    {
      address: 'addr1z8n...u6v8',
      coins: new Lovelace(10_000_000) as Lovelace,
      tokenBundle: [],
    },
  ],
  protocolParameters,
}

// Try to create the transaction plan, using available utxos in your account
// and send the change to your account's change address
const txPlanResult = getTxPlan(txPlanArgs, account.getUtxos(), account.getChangeAddress())

if (!txPlanResult.success) {
  console.error(txPlanResult.error)
  process.exit(1)
}

// Sign the transaction using your account and submit the transaction
// via your wallet's dataProvider
const txAux = prepareTxAux(txPlanResult.txPlan)
const signedTx = await account.signTxAux(txAux)
console.log(`Submitting transaction ${signedTx.txHash}`)
await wallet.submitTx(signedTx.txBody)