4 releases

new 0.0.8 Jun 19, 2024
0.0.7 Jun 7, 2024
0.0.6 Jun 7, 2024
0.0.5 Jun 7, 2024

#2640 in Magic Beans

Download history 254/week @ 2024-06-03 39/week @ 2024-06-10

293 downloads per month

MIT license

84KB
2K SLoC

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
use ddk::builder::DdkBuilder;
use ddk::{DdkOracle, DdkStorage, DdkTransport};
use std::sync::Arc;

#[derive(Clone)]
pub struct MockTransport;

#[async_trait]
impl DdkTransport for MockTransport {
    async fn listen(&self) {
        println!("Listening with MockTransport")
    }
    async fn handle_dlc_message(&self, _manager: &Arc<Mutex<DlcDevKitDlcManager>>) {
        println!("Handling DLC messages with MockTransport")
    }
}

#[derive(Clone)]
struct MockStorage;
impl DdkStorage for MockStorage {}

#[derive(Clone)]
struct MockOracle;
impl DdkOracle for MockOracle {
    fn name(&self) -> String {
        "mock-oracle".into()
    }
}

impl dlc_manager::Oracle for MockOracle {
    fn get_public_key(&self) -> bitcoin::key::XOnlyPublicKey {
        todo!("Trait inherited from rust-dlc")
    }

    fn get_attestation(&self, _event_id: &str) -> Result<dlc_messages::oracle_msgs::OracleAttestation, dlc_manager::error::Error> {
        todo!("Trait inherited from rust-dlc")
    }

    fn get_announcement(&self, _event_id: &str) -> Result<dlc_messages::oracle_msgs::OracleAnnouncement, dlc_manager::error::Error> {
        todo!("Trait inherited from rust-dlc") 
    }
}

type ApplicationDdk = ddk::DlcDevKit<MockTransport, MockStorage, MockOracle>;

#[tokio::main]
async fn main() {
    let transport = Arc::new(MockTransport {});
    let storage = Arc::new(MockStorage {});
    let oracle_client = Arc::new(MockOracle {});

    let ddk: ApplicationDdk = DdkBuilder::new()
        .set_name("ddk")
        .set_esplora_url("https://mempool.space/api")
        .set_network(bitcoin::Network::Regtest)
        .set_transport(transport.clone())
        .set_storage(storage.clone())
        .set_oracle(oracle_client.clone())
        .finish()
        .await
        .unwrap();

    let wallet = ddk.wallet.new_external_address();

    assert!(wallet.is_ok());

    ddk.start().await
}

Crates

Ready-to-go clients for developing applications:

  • ddk - Contains DLC management w/ rust-dlc and the internal wallet w/ bdk.

Storage

  • filestore - crate soon™️
  • sqlite - crate soon™️

Transport

  • tcp (lightning p2p) - Tcp listener with the ldk peer manager
  • nostr - NIP04 encrypted transport

Oracle

  • P2PDerivatives - crate soon™️
  • kormir - crate soon™️

Dependencies

~76MB
~1M SLoC