Skip to content

Quickstart

DDK provides an internal opinionated bdk and a rust-dlc manager to handle on-chain logic and DLC creation.

Application consumers provide custome implementations of a transport, storage, and oracle trait for an end-to-end DLC application. As a starting point, ddk provides pre-built clients for these services as a drop in solution.

Getting Started

Set up DDK with the pre built clients that DDK implements.

SledStorageProvider - Flat file implementation for DLC related storage.

Lightning Transport - DLC communication over LN gossip network with ldk message handler

P2PDerivativesOracle - Oracle client by crypto garage

use std::env::current_dir;
use std::sync::Arc;
use ddk::DdkConfig;
use ddk::builder::DdkBuilder;
use ddk::oracle::P2PDOracleClient;
use ddk::storage::SledStorageProvider;
use ddk::transport::lightning::LightningTransport;
type GettingStartedDdk = ddk::DlcDevKit<LightningTransport, SledStorageProvider, P2PDOracleClient>;
fn main() {
/// Set configuration for network, seed, storage directory, and esplora host.
let mut config = DdkConfig::default();
config.storage_path = current_dir().unwrap();
// DLC communication implementing the `ddk::DdkTransport` trait.
let transport = Arc::new(LightningTransport::new(&config.seed_config, config.network)?);
// DLC storage implementing the `ddk::DdkStorage` trait.
let storage = Arc::new(SledStorageProvider::new(
config.storage_path.join("sled_db").to_str().expect("No storage."),
)?);
// Oracle implemntation that satisfies the `ddk::DdkOracle` trait.
let oracle_client = Arc::new(P2PDOracleClient::new(ddk::ORACLE_HOST).expect("no oracle"));
let mut builder = DdkBuilder::new();
builder.set_name("dlc-dev-kit")
builder.set_config(config);
builder.set_transport(transport.clone());
builder.set_storage(storage.clone());
builder.set_oracle(oracle_client.clone());
// Build the DDK instance.
let ddk: GettingStartedDdk = builder.finish()?;
// Starts the transport listener, chain watcher, updates fee rates,
// and DLC management.
ddk.start().expect("starting ddk failed");
}