5 个版本

0.0.9 2024 年 6 月 25 日
0.0.8 2024 年 6 月 19 日
0.0.7 2024 年 6 月 7 日
0.0.6 2024 年 6 月 7 日
0.0.5 2024 年 6 月 7 日

#2 in #dlc

MIT 许可证

105KB
2K SLoC

DLC 开发工具包

Crate Documentation Crates.io Total Downloads

⚠️ dlcdevkit 是 alpha 软件,不应与真实货币一起使用。API 可能会更改。

使用 DLCsrust-dlc 以及 bdk 的应用程序工具。

通过连接自己的传输、存储和预言机客户端来构建 DLC 应用程序。

开始使用

$ 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

用于开发应用程序的现成客户端

  • ddk - 包含使用 rust-dlc 的 DLC 管理,以及使用 bdk 的内部钱包。

存储

  • filestore - crate 即将推出™️
  • sqlite - crate 即将推出™️

传输

  • tcp (lightning p2p) - Tcp 监听器与 ldk peer manager
  • nostr - NIP04 加密传输

预言机

  • P2PDerivatives - crate 即将推出™️
  • kormir - crate 即将推出™️

依赖关系

~75MB
~1M SLoC