Skip to content

bennyhodl/dlcdevkit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

DLC Dev Kit

Crate Documentation Crates.io Total Downloads

โš ๏ธ dlcdevkit is alpha software and should not be used with real money. API is subject to change.

Application tooling to get started with DLCs build with rust-dlc and bdk.

Build DLC application by plugging in your own transport, storage, and oracle clients.

Get Started

$ cargo add ddk --features lightning
use ddk::builder::Builder;
use ddk::storage::SledStorage;
use ddk::transport::lightning::LightningTransport;
use ddk::oracle::P2PDOracleClient;
use bitcoin::Network;
use std::sync::Arc;

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

fn main() {
    let transport = Arc::new(LightningTransport::new([0u8;32], <port>, Network::Regtest));
    let storage = Arc::new(SledStorage::new("<storage path>")?);
    let oracle_client = Arc::new(P2PDOracleClient::new("<oracle host>")?);

    let ddk: ApplicationDdk = Builder::new()
        .set_seed_bytes([0u8;32])
        .set_network(Network::Regtest)
        .set_storage_path("<storage path>")
        .set_esplora_path("http://127.0.0.1:3000")
        .set_transport(transport.clone())
        .set_storage(storage.clone())
        .set_oracle(oracle_client.clone())
        .finish()
        .expect("could not build ddk node");

    ddk.start().expect("ddk could not start");
}

Crates

Ready-to-go clients for developing applications:

ddk - DLC management with an internal BDK wallet.

ddk-node - A ready-to-go node with an accompanying cli.

payouts - Functions to build DLC contracts.

You can create a custom DDK instance by implementing the required traits for storage and transport. DDK traits are defined in ddk/src/lib.rs. The traits are super traits from what is required in bdk and rust-dlc.

To quickly get started building a DDK application, there are pre-built components.

Storage

sled - A simple file based storage using sled

Transport

LDK Peer Manager - Communication over Lightning gossip using rust-dlc's implementation

nostr - DLC communication from the NIP-88 spec

Oracle Clients

P2PDerivatives - Spot price futures on the Bitcoin price repo

kormir - Enumeration based oracle with server and nostr support repo

Development

A bitcoin node, esplora server, and oracle server are required to run DDK. Developers can spin up a development environment with the justfile provided.

$ just deps

Go to the README in ddk-node to start the project's DDK node example and more development information.