Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Dependency Injection

Whisky uses a trait-based dependency injection pattern that lets you swap out core components: the serializer backend, blockchain data fetcher, script evaluator, and transaction submitter.

TxBuilderParam

When creating a TxBuilder, you can inject dependencies via TxBuilderParam:

use whisky::*;
use whisky_pallas::WhiskyPallas;

let mut tx_builder = TxBuilder::new(TxBuilderParam {
    serializer: Box::new(WhiskyPallas::new(None)),  // Required
    evaluator: None,    // Optional — defaults to OfflineTxEvaluator
    fetcher: None,      // Optional — for blockchain data
    submitter: None,    // Optional — for tx submission
    params: None,       // Optional — protocol parameters
});

Or use the convenience constructor with all defaults:

let mut tx_builder = TxBuilder::new_core();
// Equivalent to: WhiskyPallas serializer, offline evaluator, no fetcher/submitter

The TxBuilder Struct

pub struct TxBuilder {
    pub serializer: Box<dyn TxBuildable>,       // Serializes tx body to CBOR
    pub fetcher: Option<Box<dyn Fetcher>>,      // Fetches blockchain data
    pub evaluator: Option<Box<dyn Evaluator>>,  // Evaluates Plutus scripts
    pub submitter: Option<Box<dyn Submitter>>,  // Submits transactions
    pub protocol_params: Option<Protocol>,      // Network parameters
    // ... internal state fields
}

Why Dependency Injection?

This design enables:

  • Swappable serializers: Use Pallas (recommended) or CSL backend without changing transaction logic
  • Testing: Mock fetchers and evaluators in unit tests
  • Custom providers: Implement your own blockchain data source
  • Offline mode: Build transactions without any network dependency (the default)
  • Full pipeline: Wire up fetcher + evaluator + submitter for end-to-end transaction handling

Trait Overview

TraitPurposeBuilt-in Implementations
TxBuildableSerialize transaction body to CBORWhiskyPallas, WhiskyCSL
FetcherFetch UTxOs, protocol params, block infoMaestroProvider, BlockfrostProvider
EvaluatorEvaluate Plutus script execution unitsOfflineTxEvaluator
SubmitterSubmit signed transactionsMaestroProvider, BlockfrostProvider

Chapters

  • Serializer BackendsTxBuildable trait, WhiskyPallas vs WhiskyCSL
  • Providers — Fetcher, Evaluator, Submitter traits and implementations