ddk 1.0.10

application tooling for DLCs 🌊
Documentation

ddk

Crate Documentation

The main DLC Dev Kit library for building DLC applications with an integrated BDK wallet.

DDK provides a high-level, pluggable framework with an actor-based architecture for thread-safe, lock-free DLC operations. It integrates wallet management, transport layers, storage backends, and oracle clients into a unified API.

Usage

$ cargo add ddk

Example

use ddk::builder::{Builder, SeedConfig};
use ddk::oracle::kormir::KormirOracleClient;
use ddk::storage::sled::SledStorage;
use ddk::transport::lightning::LightningTransport;
use std::sync::Arc;

type ApplicationDdk = ddk::DlcDevKit<LightningTransport, SledStorage, KormirOracleClient>;

#[tokio::main]
async fn main() -> Result<(), ddk::error::Error> {
    let transport = Arc::new(LightningTransport::new(&[0u8; 32], 1776, logger.clone())?);
    let storage = Arc::new(SledStorage::new("/tmp/ddk-example", logger.clone())?);
    let oracle = Arc::new(KormirOracleClient::new("http://localhost:8082", None, logger.clone()).await?);

    let mut builder: Builder<LightningTransport, SledStorage, KormirOracleClient> = Builder::new();
    builder.set_seed_bytes(SeedConfig::Random)?;
    builder.set_transport(transport);
    builder.set_storage(storage);
    builder.set_oracle(oracle);

    let ddk: ApplicationDdk = builder.finish().await?;

    ddk.start()?;

    // Send a DLC offer
    let offer = ddk.send_dlc_offer(&contract_input, counterparty, announcements).await?;

    // Accept a DLC offer  
    let (contract_id, counter_party, accept) = ddk.accept_dlc_offer(contract_id).await?;

    // Get wallet balance
    let balance = ddk.balance().await?;

    ddk.stop()?;
    Ok(())
}

Key Types

Type Description
DlcDevKit Main entry point managing the DLC runtime, wallet, and background tasks
Builder Builder pattern for constructing DlcDevKit instances
Transport Trait for DLC message communication between peers
Storage Trait for contract and wallet data persistence
Oracle Trait for oracle client implementations

Features

Feature Description
lightning Lightning Network transport using LDK
nostr Nostr protocol transport
sled Sled embedded database storage
postgres PostgreSQL storage
kormir Kormir HTTP oracle client
p2pderivatives P2P Derivatives oracle client
nostr-oracle Nostr-based oracle client

License

This project is licensed under the MIT License.