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
293 downloads per month
84KB
2K
SLoC
DLC Dev Kit
⚠️
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:
Storage
filestore
- crate soon™️sqlite
- crate soon™️
Transport
tcp (lightning p2p)
- Tcp listener with the ldk peer managernostr
- NIP04 encrypted transport
Oracle
P2PDerivatives
- crate soon™️kormir
- crate soon™️
Dependencies
~76MB
~1M SLoC