diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 76d135f0..5dc8e890 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -48,6 +48,38 @@ jobs: override: true - name: cargo check run: cargo check --all-features + unit-tests: + name: unit tests + runs-on: ubuntu-latest + env: + DATABASE_URL: postgresql://dlcdevkit:dlcdevkit@localhost:5433/postgres + BITCOIND_HOST: http://localhost:18443 + ESPLORA_HOST: http://localhost:30000 + + steps: + - name: Install Protoc + run: sudo apt-get update && sudo apt-get install -y protobuf-compiler + - uses: actions/checkout@v2 + - uses: actions-rs/toolchain@v1 + with: + toolchain: 1.88.0 + components: rustfmt + override: true + - name: Start Docker Compose services + run: docker compose up -d + - name: Wait for Bitcoin container + run: | + chmod +x ./testconfig/scripts/wait_for_container.sh + ./testconfig/scripts/wait_for_container.sh bitcoin + - name: Wait for Electrs to be ready + run: | + chmod +x ./testconfig/scripts/wait_for_electrs.sh + ./testconfig/scripts/wait_for_electrs.sh + - name: Run unit tests + run: cargo test --all-features + - name: Stop Docker Compose services + if: always() + run: docker compose down -v integration_tests_prepare: runs-on: ubuntu-latest timeout-minutes: 30 diff --git a/Cargo.lock b/Cargo.lock index fe78a1ff..fdf9b2f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -939,7 +939,7 @@ checksum = "2a2330da5de22e8a3cb63252ce2abb30116bf5265e89c0e01bc17015ce30a476" [[package]] name = "ddk" -version = "0.0.18" +version = "0.0.21" dependencies = [ "async-trait", "base64 0.13.1", @@ -949,11 +949,11 @@ dependencies = [ "bitcoin", "bitcoincore-rpc", "chrono", + "ddk-dlc", "ddk-manager", + "ddk-messages", "ddk-payouts", - "dlc", - "dlc-messages", - "dlc-trie", + "ddk-trie", "hex", "hmac", "kormir", @@ -975,6 +975,18 @@ dependencies = [ "uuid", ] +[[package]] +name = "ddk-dlc" +version = "0.0.21" +dependencies = [ + "bitcoin", + "miniscript", + "rayon", + "secp256k1-sys", + "secp256k1-zkp", + "serde", +] + [[package]] name = "ddk-manager" version = "0.7.6" @@ -985,9 +997,9 @@ dependencies = [ "bitcoincore-rpc-json", "criterion", "ddk", - "dlc", - "dlc-messages", - "dlc-trie", + "ddk-dlc", + "ddk-messages", + "ddk-trie", "env_logger 0.9.3", "futures", "hex-conservative 0.1.2", @@ -1000,19 +1012,32 @@ dependencies = [ "tracing", ] +[[package]] +name = "ddk-messages" +version = "0.0.21" +dependencies = [ + "bitcoin", + "ddk-dlc", + "ddk-messages", + "lightning", + "secp256k1-zkp", + "serde", + "serde_json", +] + [[package]] name = "ddk-node" -version = "0.0.16" +version = "0.0.21" dependencies = [ "anyhow", "bitcoin", "chrono", "clap 4.5.42", "ddk", + "ddk-dlc", "ddk-manager", + "ddk-messages", "ddk-payouts", - "dlc", - "dlc-messages", "hex", "homedir", "inquire", @@ -1029,19 +1054,30 @@ dependencies = [ [[package]] name = "ddk-payouts" -version = "0.0.16" +version = "0.0.21" dependencies = [ "anyhow", "bitcoin", + "ddk-dlc", "ddk-manager", - "dlc", - "dlc-messages", - "dlc-trie", + "ddk-messages", + "ddk-trie", "serde", "serde_json", "thiserror 2.0.12", ] +[[package]] +name = "ddk-trie" +version = "0.0.21" +dependencies = [ + "bitcoin", + "ddk-dlc", + "rayon", + "secp256k1-zkp", + "serde", +] + [[package]] name = "der" version = "0.7.10" @@ -1085,42 +1121,6 @@ dependencies = [ "syn", ] -[[package]] -name = "dlc" -version = "0.7.1" -dependencies = [ - "bitcoin", - "miniscript", - "rayon", - "secp256k1-sys", - "secp256k1-zkp", - "serde", -] - -[[package]] -name = "dlc-messages" -version = "0.7.1" -dependencies = [ - "bitcoin", - "dlc", - "dlc-messages", - "lightning", - "secp256k1-zkp", - "serde", - "serde_json", -] - -[[package]] -name = "dlc-trie" -version = "0.7.1" -dependencies = [ - "bitcoin", - "dlc", - "rayon", - "secp256k1-zkp", - "serde", -] - [[package]] name = "dnssec-prover" version = "0.6.8" @@ -2114,18 +2114,19 @@ dependencies = [ [[package]] name = "kormir" -version = "0.4.4" +version = "0.5.0" dependencies = [ "base64 0.13.1", "bitcoin", - "dlc", - "dlc-messages", + "ddk-dlc", + "ddk-messages", "hex", "lightning", "log", "nostr", "secp256k1-zkp", "serde", + "serde_json", "tokio", ] diff --git a/ddk-manager/Cargo.toml b/ddk-manager/Cargo.toml index 3eaa15aa..457b2223 100644 --- a/ddk-manager/Cargo.toml +++ b/ddk-manager/Cargo.toml @@ -10,18 +10,18 @@ version = "0.7.6" [features] default= ["std"] -std = ["dlc/std", "dlc-messages/std", "dlc-trie/std", "bitcoin/std", "lightning/std"] +std = ["ddk-dlc/std", "ddk-messages/std", "ddk-trie/std", "bitcoin/std", "lightning/std"] fuzztarget = ["rand_chacha"] -parallel = ["dlc-trie/parallel"] -use-serde = ["serde", "dlc/use-serde", "dlc-messages/use-serde", "dlc-trie/use-serde"] +parallel = ["ddk-trie/parallel"] +use-serde = ["serde", "ddk-dlc/use-serde", "ddk-messages/use-serde", "ddk-trie/use-serde"] [dependencies] async-trait = "0.1.50" bitcoin = { version = "0.32.6", default-features = false } -dlc = { path = "../dlc", features = ["use-serde"] } -dlc-messages = { path = "../dlc-messages", features = [ "use-serde"] } -dlc-trie = { path = "../dlc-trie", features = ["use-serde"] } +ddk-dlc = { path = "../dlc", features = ["use-serde"] } +ddk-messages = { path = "../dlc-messages", features = [ "use-serde"] } +ddk-trie = { path = "../dlc-trie", features = ["use-serde"] } futures = "0.3.31" hex = { package = "hex-conservative", version = "0.1" } diff --git a/ddk-manager/benches/benchmarks.rs b/ddk-manager/benches/benchmarks.rs index 2ffae215..eb691345 100644 --- a/ddk-manager/benches/benchmarks.rs +++ b/ddk-manager/benches/benchmarks.rs @@ -4,6 +4,11 @@ use bitcoin::OutPoint; use bitcoin::ScriptBuf; use bitcoin::WPubkeyHash; use criterion::{black_box, criterion_group, criterion_main, Criterion}; +use ddk_dlc::create_dlc_transactions; +use ddk_dlc::DlcTransactions; +use ddk_dlc::PartyParams; +use ddk_dlc::Payout; +use ddk_dlc::TxInputInfo; use ddk_manager::contract::contract_info::ContractInfo; use ddk_manager::contract::numerical_descriptor::DifferenceParams; use ddk_manager::contract::numerical_descriptor::NumericalDescriptor; @@ -14,15 +19,10 @@ use ddk_manager::payout_curve::PayoutPoint; use ddk_manager::payout_curve::PolynomialPayoutCurvePiece; use ddk_manager::payout_curve::RoundingInterval; use ddk_manager::payout_curve::RoundingIntervals; -use dlc::create_dlc_transactions; -use dlc::DlcTransactions; -use dlc::PartyParams; -use dlc::Payout; -use dlc::TxInputInfo; -use dlc_messages::oracle_msgs::DigitDecompositionEventDescriptor; -use dlc_messages::oracle_msgs::EventDescriptor; -use dlc_messages::oracle_msgs::OracleAnnouncement; -use dlc_messages::oracle_msgs::OracleEvent; +use ddk_messages::oracle_msgs::DigitDecompositionEventDescriptor; +use ddk_messages::oracle_msgs::EventDescriptor; +use ddk_messages::oracle_msgs::OracleAnnouncement; +use ddk_messages::oracle_msgs::OracleEvent; use secp256k1_zkp::{ global::SECP256K1, rand::thread_rng, schnorr::Signature, Keypair, SecretKey, XOnlyPublicKey, }; @@ -121,7 +121,7 @@ fn create_contract_descriptor() -> ContractDescriptor { rounding_mod: ROUNDING_MOD, }], }, - oracle_numeric_infos: dlc_trie::OracleNumericInfo { + oracle_numeric_infos: ddk_trie::OracleNumericInfo { base: BASE as usize, nb_digits: std::iter::repeat(NB_DIGITS) .take(NB_ORACLES) diff --git a/ddk-manager/src/chain_monitor.rs b/ddk-manager/src/chain_monitor.rs index 9aa28571..eb6be8c7 100644 --- a/ddk-manager/src/chain_monitor.rs +++ b/ddk-manager/src/chain_monitor.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use bitcoin::{Block, OutPoint, Transaction, Txid}; -use dlc_messages::ser_impls::{ +use ddk_messages::ser_impls::{ read_ecdsa_adaptor_signature, read_hash_map, write_ecdsa_adaptor_signature, write_hash_map, }; use lightning::ln::msgs::DecodeError; diff --git a/ddk-manager/src/channel/accepted_channel.rs b/ddk-manager/src/channel/accepted_channel.rs index 24a43f56..c40dd9af 100644 --- a/ddk-manager/src/channel/accepted_channel.rs +++ b/ddk-manager/src/channel/accepted_channel.rs @@ -1,7 +1,7 @@ //! # Structure and methods for channels that have been accepted. use bitcoin::{ScriptBuf, Transaction}; -use dlc_messages::channel::AcceptChannel; +use ddk_messages::channel::AcceptChannel; use secp256k1_zkp::{EcdsaAdaptorSignature, PublicKey}; use crate::{contract::accepted_contract::AcceptedContract, ChannelId, ContractId}; diff --git a/ddk-manager/src/channel/mod.rs b/ddk-manager/src/channel/mod.rs index 93b1c938..0686aaef 100644 --- a/ddk-manager/src/channel/mod.rs +++ b/ddk-manager/src/channel/mod.rs @@ -1,7 +1,7 @@ //! # Module containing structures and methods for working with DLC channels. use bitcoin::{hashes::Hash, Transaction, Txid}; -use dlc_messages::channel::{AcceptChannel, SignChannel}; +use ddk_messages::channel::{AcceptChannel, SignChannel}; use secp256k1_zkp::PublicKey; use crate::{ChannelId, ContractId}; diff --git a/ddk-manager/src/channel/offered_channel.rs b/ddk-manager/src/channel/offered_channel.rs index 6dc6b445..344d0bcc 100644 --- a/ddk-manager/src/channel/offered_channel.rs +++ b/ddk-manager/src/channel/offered_channel.rs @@ -1,9 +1,8 @@ //! # A channel is offered when an offer was made or received. This module contains //! the model for it and method for working with it. -use dlc::PartyParams; -use dlc_messages::channel::OfferChannel; -// use dlc_messages::channel::OfferChannel; +use ddk_dlc::PartyParams; +use ddk_messages::channel::OfferChannel; use secp256k1_zkp::PublicKey; use crate::{ diff --git a/ddk-manager/src/channel/party_points.rs b/ddk-manager/src/channel/party_points.rs index 88add5a2..73c794f0 100644 --- a/ddk-manager/src/channel/party_points.rs +++ b/ddk-manager/src/channel/party_points.rs @@ -4,7 +4,7 @@ use super::utils::{derive_public_key, derive_public_revocation_key}; use bitcoin::PublicKey as BitcoinPublicKey; -use dlc::channel::RevokeParams; +use ddk_dlc::channel::RevokeParams; use secp256k1_zkp::{All, PublicKey, Secp256k1, Signing, Verification}; /// Base points used by a party of a DLC channel to derive public and private diff --git a/ddk-manager/src/channel/ser.rs b/ddk-manager/src/channel/ser.rs index 62d79c2c..ff14249b 100644 --- a/ddk-manager/src/channel/ser.rs +++ b/ddk-manager/src/channel/ser.rs @@ -5,7 +5,7 @@ use super::party_points::PartyBasePoints; use super::signed_channel::{SignedChannel, SignedChannelState}; use super::{ClosedChannel, ClosedPunishedChannel, ClosingChannel, FailedAccept, FailedSign}; -use dlc_messages::ser_impls::{ +use ddk_messages::ser_impls::{ read_ecdsa_adaptor_signature, read_string, write_ecdsa_adaptor_signature, write_string, }; use lightning::ln::msgs::DecodeError; @@ -33,11 +33,11 @@ impl_dlc_writeable!(SignedChannel, { (temporary_channel_id, writeable), (fund_output_index, usize), (own_points, writeable), - (own_params, { cb_writeable, dlc_messages::ser_impls::party_params::write, dlc_messages::ser_impls::party_params::read }), + (own_params, { cb_writeable, ddk_messages::ser_impls::party_params::write, ddk_messages::ser_impls::party_params::read }), (own_per_update_point, writeable), (counter_points, writeable), (counter_per_update_point, writeable), - (counter_params, { cb_writeable, dlc_messages::ser_impls::party_params::write, dlc_messages::ser_impls::party_params::read }), + (counter_params, { cb_writeable, ddk_messages::ser_impls::party_params::write, ddk_messages::ser_impls::party_params::read }), (state, writeable), (update_idx, writeable), (fund_tx, writeable), diff --git a/ddk-manager/src/channel/signed_channel.rs b/ddk-manager/src/channel/signed_channel.rs index 14e8cd24..cb3986cc 100644 --- a/ddk-manager/src/channel/signed_channel.rs +++ b/ddk-manager/src/channel/signed_channel.rs @@ -3,7 +3,7 @@ //! the possible states in which it can be as well as methods to work with it. use bitcoin::{Amount, ScriptBuf, Transaction}; -use dlc::PartyParams; +use ddk_dlc::PartyParams; use lightning::ln::chan_utils::CounterpartyCommitmentSecrets; use secp256k1_zkp::{ecdsa::Signature, EcdsaAdaptorSignature, PublicKey}; diff --git a/ddk-manager/src/channel_updater.rs b/ddk-manager/src/channel_updater.rs index 5d8b2378..dee80da3 100644 --- a/ddk-manager/src/channel_updater.rs +++ b/ddk-manager/src/channel_updater.rs @@ -27,11 +27,11 @@ use crate::{ Time, Wallet, }; use bitcoin::{Amount, OutPoint, Script, ScriptBuf, Sequence, Transaction, TxIn, Witness}; -use dlc::{ +use ddk_dlc::{ channel::{get_tx_adaptor_signature, verify_tx_adaptor_signature, DlcChannelTransactions}, PartyParams, }; -use dlc_messages::{ +use ddk_messages::{ channel::{ AcceptChannel, CollaborativeCloseOffer, Reject, RenewAccept, RenewConfirm, RenewFinalize, RenewOffer, RenewRevoke, SettleAccept, SettleConfirm, SettleFinalize, SettleOffer, @@ -209,7 +209,7 @@ where buffer_transaction, buffer_script_pubkey, dlc_transactions, - } = dlc::channel::create_channel_transactions( + } = ddk_dlc::channel::create_channel_transactions( &offered_contract.offer_params, &accept_params, &offer_revoke_params, @@ -347,7 +347,7 @@ where buffer_transaction, dlc_transactions, buffer_script_pubkey, - } = dlc::channel::create_channel_transactions( + } = ddk_dlc::channel::create_channel_transactions( &offered_contract.offer_params, &accept_params, &offer_revoke_params, @@ -1313,7 +1313,7 @@ where buffer_transaction, buffer_script_pubkey, dlc_transactions, - } = dlc::channel::create_renewal_channel_transactions( + } = ddk_dlc::channel::create_renewal_channel_transactions( &offered_contract.offer_params, &signed_channel.own_params, &offer_revoke_params, @@ -1424,7 +1424,7 @@ where buffer_transaction, dlc_transactions, buffer_script_pubkey, - } = dlc::channel::create_renewal_channel_transactions( + } = ddk_dlc::channel::create_renewal_channel_transactions( &offered_contract.offer_params, &signed_channel.counter_params, &offer_revoke_params, @@ -1841,7 +1841,7 @@ where let offer_payout = total_collateral - counter_payout; let fund_output_value = signed_channel.fund_tx.output[signed_channel.fund_output_index].value; - let close_tx = dlc::channel::create_collaborative_close_transaction( + let close_tx = ddk_dlc::channel::create_collaborative_close_transaction( &signed_channel.own_params, offer_payout, &signed_channel.counter_params, @@ -1859,7 +1859,7 @@ where .ok_or(Error::InvalidState("No keys_id available".to_string()))?; let contract_signer = signer_provider.derive_contract_signer(keys_id)?; - let close_signature = dlc::util::get_raw_sig_for_tx_input( + let close_signature = ddk_dlc::util::get_raw_sig_for_tx_input( secp, &close_tx, 0, @@ -1917,7 +1917,7 @@ where let offer_payout = total_collateral - close_offer.counter_payout; let fund_output_value = signed_channel.fund_tx.output[signed_channel.fund_output_index].value; - let close_tx = dlc::channel::create_collaborative_close_transaction( + let close_tx = ddk_dlc::channel::create_collaborative_close_transaction( &signed_channel.counter_params, offer_payout, &signed_channel.own_params, @@ -1969,7 +1969,7 @@ where let mut close_tx = close_tx.clone(); - dlc::util::sign_multi_sig_input( + ddk_dlc::util::sign_multi_sig_input( secp, &mut close_tx, offer_signature, @@ -2036,7 +2036,7 @@ fn get_settle_tx_and_adaptor_sig( accept_per_update_point, ); - let settle_tx = dlc::channel::create_settle_transaction( + let settle_tx = ddk_dlc::channel::create_settle_transaction( &fund_tx_in, &offer_revoke_params, &accept_revoke_params, @@ -2066,7 +2066,7 @@ fn get_settle_tx_and_adaptor_sig( offer_revoke_params.publish_pk.inner }; - let settle_adaptor_signature = dlc::channel::get_tx_adaptor_signature( + let settle_adaptor_signature = ddk_dlc::channel::get_tx_adaptor_signature( secp, &settle_tx, fund_tx.output[fund_vout].value, @@ -2135,7 +2135,7 @@ where let buffer_input_sk = signer.get_secret_key_for_pubkey(&signed_channel.own_params.fund_pubkey)?; - dlc::util::sign_multi_sig_input( + ddk_dlc::util::sign_multi_sig_input( secp, &mut buffer_transaction, &counter_buffer_signature, @@ -2246,7 +2246,7 @@ where let base_secret = signer.get_secret_key_for_pubkey(own_basepoint)?; let own_sk = derive_private_key(secp, own_per_update_point, &base_secret); - dlc::channel::sign_cet( + ddk_dlc::channel::sign_cet( secp, &mut cet, buffer_transaction.output[0].value, @@ -2302,7 +2302,7 @@ where let fund_sk = signer.get_secret_key_for_pubkey(&signed_channel.own_params.fund_pubkey)?; - dlc::util::sign_multi_sig_input( + ddk_dlc::util::sign_multi_sig_input( secp, &mut settle_tx, &counter_settle_signature, diff --git a/ddk-manager/src/contract/accepted_contract.rs b/ddk-manager/src/contract/accepted_contract.rs index a5a8d2d6..cdaf86a8 100644 --- a/ddk-manager/src/contract/accepted_contract.rs +++ b/ddk-manager/src/contract/accepted_contract.rs @@ -3,8 +3,8 @@ use super::offered_contract::OfferedContract; use super::AdaptorInfo; use bitcoin::{Amount, SignedAmount, Transaction}; -use dlc::{DlcTransactions, PartyParams}; -use dlc_messages::{AcceptDlc, FundingInput}; +use ddk_dlc::{DlcTransactions, PartyParams}; +use ddk_messages::{AcceptDlc, FundingInput}; use secp256k1_zkp::ecdsa::Signature; use secp256k1_zkp::EcdsaAdaptorSignature; @@ -98,21 +98,3 @@ impl AcceptedContract { SignedAmount::from_sat(final_payout.to_sat() as i64 - collateral.to_sat() as i64) } } - -#[cfg(test)] -mod tests { - use super::*; - use crate::contract::ser::Serializable; - - #[test] - fn pnl_compute_test() { - let buf = include_bytes!("../../../ddk/tests/data/dlc_storage/Accepted"); - let accepted_contract = AcceptedContract::deserialize(&mut buf.as_slice()).unwrap(); - let cets = &accepted_contract.dlc_transactions.cets; - assert_eq!(accepted_contract.compute_pnl(&cets[0]), SignedAmount::ZERO); - assert_eq!( - accepted_contract.compute_pnl(&cets[cets.len() - 1]), - SignedAmount::from_sat(101000000) - ); - } -} diff --git a/ddk-manager/src/contract/contract_info.rs b/ddk-manager/src/contract/contract_info.rs index 4b8746a4..9e314b17 100644 --- a/ddk-manager/src/contract/contract_info.rs +++ b/ddk-manager/src/contract/contract_info.rs @@ -6,10 +6,10 @@ use crate::error::Error; use crate::ContractSigner; use bitcoin::Amount; use bitcoin::{Script, Transaction}; -use dlc::{OracleInfo, Payout}; -use dlc_messages::oracle_msgs; -use dlc_messages::oracle_msgs::{EventDescriptor, OracleAnnouncement}; -use dlc_trie::{DlcTrie, RangeInfo}; +use ddk_dlc::{OracleInfo, Payout}; +use ddk_messages::oracle_msgs; +use ddk_messages::oracle_msgs::{EventDescriptor, OracleAnnouncement}; +use ddk_trie::{DlcTrie, RangeInfo}; use secp256k1_zkp::{All, EcdsaAdaptorSignature, PublicKey, Secp256k1, SecretKey, Verification}; use std::ops::Deref; @@ -297,7 +297,7 @@ impl ContractInfo { let mut points = Vec::with_capacity(base); for j in 0..base { let msg = oracle_msgs::tagged_attestation_msg(&j.to_string()); - let sig_point = dlc::secp_utils::schnorrsig_compute_sig_point( + let sig_point = ddk_dlc::secp_utils::schnorrsig_compute_sig_point( secp, pubkey, nonce, &msg, )?; points.push(sig_point); diff --git a/ddk-manager/src/contract/contract_input.rs b/ddk-manager/src/contract/contract_input.rs index 9ee31ae1..8a8eaa82 100644 --- a/ddk-manager/src/contract/contract_input.rs +++ b/ddk-manager/src/contract/contract_input.rs @@ -112,14 +112,14 @@ impl ContractInput { contract_info.oracles.validate()?; } - dlc::util::validate_fee_rate(self.fee_rate) + ddk_dlc::util::validate_fee_rate(self.fee_rate) .map_err(|_| Error::InvalidParameters("Fee rate too high.".to_string())) } } #[cfg(test)] mod tests { - use dlc::{EnumerationPayout, Payout}; + use ddk_dlc::{EnumerationPayout, Payout}; use secp256k1_zkp::{Keypair, SecretKey, SECP256K1}; use crate::contract::enum_descriptor::EnumDescriptor; diff --git a/ddk-manager/src/contract/enum_descriptor.rs b/ddk-manager/src/contract/enum_descriptor.rs index f930d565..f3593186 100644 --- a/ddk-manager/src/contract/enum_descriptor.rs +++ b/ddk-manager/src/contract/enum_descriptor.rs @@ -5,11 +5,11 @@ use super::utils::{get_majority_combination, unordered_equal}; use super::AdaptorInfo; use crate::error::Error; use bitcoin::{Amount, Script, Transaction}; -use dlc::OracleInfo; -use dlc::{EnumerationPayout, Payout}; -use dlc_messages::oracle_msgs; -use dlc_messages::oracle_msgs::EnumEventDescriptor; -use dlc_trie::{combination_iterator::CombinationIterator, RangeInfo}; +use ddk_dlc::OracleInfo; +use ddk_dlc::{EnumerationPayout, Payout}; +use ddk_messages::oracle_msgs; +use ddk_messages::oracle_msgs::EnumEventDescriptor; +use ddk_trie::{combination_iterator::CombinationIterator, RangeInfo}; use secp256k1_zkp::{ All, EcdsaAdaptorSignature, Message, PublicKey, Secp256k1, SecretKey, Verification, }; @@ -122,13 +122,13 @@ impl EnumDescriptor { cets: &[Transaction], adaptor_sigs: &[EcdsaAdaptorSignature], adaptor_sig_start: usize, - ) -> Result { + ) -> Result { let mut adaptor_sig_index = adaptor_sig_start; let mut callback = - |adaptor_point: &PublicKey, cet_index: usize| -> Result<(), dlc::Error> { + |adaptor_point: &PublicKey, cet_index: usize| -> Result<(), ddk_dlc::Error> { let sig = adaptor_sigs[adaptor_sig_index]; adaptor_sig_index += 1; - dlc::verify_cet_adaptor_sig_from_point( + ddk_dlc::verify_cet_adaptor_sig_from_point( secp, &sig, &cets[cet_index], @@ -158,7 +158,7 @@ impl EnumDescriptor { cets: &[Transaction], adaptor_sigs: &[EcdsaAdaptorSignature], adaptor_sig_start: usize, - ) -> Result<(AdaptorInfo, usize), dlc::Error> { + ) -> Result<(AdaptorInfo, usize), ddk_dlc::Error> { let adaptor_sig_index = self.verify_adaptor_info( secp, oracle_infos, @@ -213,8 +213,8 @@ impl EnumDescriptor { ) -> Result, Error> { let mut adaptor_sigs = Vec::new(); let mut callback = - |adaptor_point: &PublicKey, cet_index: usize| -> Result<(), dlc::Error> { - let sig = dlc::create_cet_adaptor_sig_from_point( + |adaptor_point: &PublicKey, cet_index: usize| -> Result<(), ddk_dlc::Error> { + let sig = ddk_dlc::create_cet_adaptor_sig_from_point( secp, &cets[cet_index], adaptor_point, @@ -237,9 +237,9 @@ impl EnumDescriptor { oracle_infos: &[OracleInfo], threshold: usize, callback: &mut F, - ) -> Result<(), dlc::Error> + ) -> Result<(), ddk_dlc::Error> where - F: FnMut(&PublicKey, usize) -> Result<(), dlc::Error>, + F: FnMut(&PublicKey, usize) -> Result<(), ddk_dlc::Error>, { let messages: Vec>> = self .outcome_payouts @@ -265,7 +265,7 @@ impl EnumDescriptor { } }) .collect(); - let adaptor_point = dlc::get_adaptor_point_from_oracle_info( + let adaptor_point = ddk_dlc::get_adaptor_point_from_oracle_info( secp, &cur_oracle_infos, outcome_messages, diff --git a/ddk-manager/src/contract/mod.rs b/ddk-manager/src/contract/mod.rs index 21b15235..c65ff998 100644 --- a/ddk-manager/src/contract/mod.rs +++ b/ddk-manager/src/contract/mod.rs @@ -3,12 +3,12 @@ use crate::error::Error; use crate::ContractId; use bitcoin::{Amount, SignedAmount, Transaction, Txid}; -use dlc_messages::{ +use ddk_messages::{ oracle_msgs::{EventDescriptor, OracleAnnouncement, OracleAttestation}, AcceptDlc, SignDlc, }; -use dlc_trie::multi_oracle_trie::MultiOracleTrie; -use dlc_trie::multi_oracle_trie_with_diff::MultiOracleTrieWithDiff; +use ddk_trie::multi_oracle_trie::MultiOracleTrie; +use ddk_trie::multi_oracle_trie_with_diff::MultiOracleTrieWithDiff; use secp256k1_zkp::PublicKey; #[cfg(feature = "use-serde")] use serde::{Deserialize, Serialize}; diff --git a/ddk-manager/src/contract/numerical_descriptor.rs b/ddk-manager/src/contract/numerical_descriptor.rs index ec2d5ab2..6a9ec1e8 100644 --- a/ddk-manager/src/contract/numerical_descriptor.rs +++ b/ddk-manager/src/contract/numerical_descriptor.rs @@ -4,10 +4,10 @@ use super::AdaptorInfo; use crate::error::Error; use crate::payout_curve::{PayoutFunction, RoundingIntervals}; use bitcoin::{Amount, Script, Transaction}; -use dlc::{Payout, RangePayout}; -use dlc_trie::multi_oracle_trie::MultiOracleTrie; -use dlc_trie::multi_oracle_trie_with_diff::MultiOracleTrieWithDiff; -use dlc_trie::{DlcTrie, OracleNumericInfo}; +use ddk_dlc::{Payout, RangePayout}; +use ddk_trie::multi_oracle_trie::MultiOracleTrie; +use ddk_trie::multi_oracle_trie_with_diff::MultiOracleTrieWithDiff; +use ddk_trie::{DlcTrie, OracleNumericInfo}; use secp256k1_zkp::{All, EcdsaAdaptorSignature, PublicKey, Secp256k1, SecretKey}; #[cfg(feature = "use-serde")] use serde::{Deserialize, Serialize}; diff --git a/ddk-manager/src/contract/offered_contract.rs b/ddk-manager/src/contract/offered_contract.rs index 35a9302a..b632850d 100644 --- a/ddk-manager/src/contract/offered_contract.rs +++ b/ddk-manager/src/contract/offered_contract.rs @@ -11,9 +11,9 @@ use super::contract_input::ContractInput; use super::ContractDescriptor; use crate::{ContractId, KeysId}; use bitcoin::Amount; -use dlc::PartyParams; -use dlc_messages::oracle_msgs::OracleAnnouncement; -use dlc_messages::{FundingInput, OfferDlc}; +use ddk_dlc::PartyParams; +use ddk_messages::oracle_msgs::OracleAnnouncement; +use ddk_messages::{FundingInput, OfferDlc}; use secp256k1_zkp::PublicKey; /// Contains information about a contract that was offered. @@ -55,7 +55,7 @@ impl OfferedContract { /// Validate that the contract info covers all the possible outcomes that /// can be attested by the oracle(s). pub fn validate(&self) -> Result<(), crate::error::Error> { - dlc::util::validate_fee_rate(self.fee_rate_per_vb).map_err(|_| { + ddk_dlc::util::validate_fee_rate(self.fee_rate_per_vb).map_err(|_| { crate::error::Error::InvalidParameters("Fee rate is too high".to_string()) })?; diff --git a/ddk-manager/src/contract/ser.rs b/ddk-manager/src/contract/ser.rs index b3fcb782..97aaf0ee 100644 --- a/ddk-manager/src/contract/ser.rs +++ b/ddk-manager/src/contract/ser.rs @@ -15,17 +15,17 @@ use crate::payout_curve::{ HyperbolaPayoutCurvePiece, PayoutFunction, PayoutFunctionPiece, PayoutPoint, PolynomialPayoutCurvePiece, RoundingInterval, RoundingIntervals, }; -use dlc::DlcTransactions; -use dlc_messages::impl_dlc_writeable; -use dlc_messages::ser_impls::{ +use ddk_dlc::DlcTransactions; +use ddk_messages::impl_dlc_writeable; +use ddk_messages::ser_impls::{ read_ecdsa_adaptor_signatures, read_option_cb, read_usize, read_vec, read_vec_cb, write_ecdsa_adaptor_signatures, write_option_cb, write_usize, write_vec, write_vec_cb, }; -use dlc_trie::digit_trie::{DigitNodeData, DigitTrieDump}; -use dlc_trie::multi_oracle_trie::{MultiOracleTrie, MultiOracleTrieDump}; -use dlc_trie::multi_oracle_trie_with_diff::{MultiOracleTrieWithDiff, MultiOracleTrieWithDiffDump}; -use dlc_trie::multi_trie::{MultiTrieDump, MultiTrieNodeData, TrieNodeInfo}; -use dlc_trie::{OracleNumericInfo, RangeInfo}; +use ddk_trie::digit_trie::{DigitNodeData, DigitTrieDump}; +use ddk_trie::multi_oracle_trie::{MultiOracleTrie, MultiOracleTrieDump}; +use ddk_trie::multi_oracle_trie_with_diff::{MultiOracleTrieWithDiff, MultiOracleTrieWithDiffDump}; +use ddk_trie::multi_trie::{MultiTrieDump, MultiTrieNodeData, TrieNodeInfo}; +use ddk_trie::{OracleNumericInfo, RangeInfo}; use lightning::io::Read; use lightning::ln::msgs::DecodeError; use lightning::util::ser::{Readable, Writeable, Writer}; @@ -84,14 +84,14 @@ impl_dlc_writeable!(ContractInfo, { (contract_descriptor, writeable), (oracle_an impl_dlc_writeable!(EnumDescriptor, { ( outcome_payouts, - {vec_cb, dlc_messages::ser_impls::enum_payout::write, dlc_messages::ser_impls::enum_payout::read} + {vec_cb, ddk_messages::ser_impls::enum_payout::write, ddk_messages::ser_impls::enum_payout::read} ) }); impl_dlc_writeable!(OfferedContract, { (id, writeable), (is_offer_party, writeable), (contract_info, vec), - (offer_params, { cb_writeable, dlc_messages::ser_impls::party_params::write, dlc_messages::ser_impls::party_params::read }), + (offer_params, { cb_writeable, ddk_messages::ser_impls::party_params::write, ddk_messages::ser_impls::party_params::read }), (total_collateral, writeable), (funding_inputs, vec), (fund_output_serial_id, writeable), @@ -113,7 +113,7 @@ impl_dlc_writeable_external!( ); impl_dlc_writeable!(AcceptedContract, { (offered_contract, writeable), - (accept_params, { cb_writeable, dlc_messages::ser_impls::party_params::write, dlc_messages::ser_impls::party_params::read }), + (accept_params, { cb_writeable, ddk_messages::ser_impls::party_params::write, ddk_messages::ser_impls::party_params::read }), (funding_inputs, vec), (adaptor_infos, vec), (adaptor_signatures, {option_cb, write_ecdsa_adaptor_signatures, read_ecdsa_adaptor_signatures }), diff --git a/ddk-manager/src/contract/signed_contract.rs b/ddk-manager/src/contract/signed_contract.rs index db755d02..96019ce7 100644 --- a/ddk-manager/src/contract/signed_contract.rs +++ b/ddk-manager/src/contract/signed_contract.rs @@ -5,11 +5,11 @@ use crate::utils::get_new_serial_id; use crate::ChannelId; use super::accepted_contract::AcceptedContract; -use dlc::dlc_input::DlcInputInfo; -use dlc_messages::CetAdaptorSignature; -use dlc_messages::CetAdaptorSignatures; -use dlc_messages::FundingSignatures; -use dlc_messages::SignDlc; +use ddk_dlc::dlc_input::DlcInputInfo; +use ddk_messages::CetAdaptorSignature; +use ddk_messages::CetAdaptorSignatures; +use ddk_messages::FundingSignatures; +use ddk_messages::SignDlc; use secp256k1_zkp::ecdsa::Signature; use secp256k1_zkp::EcdsaAdaptorSignature; diff --git a/ddk-manager/src/contract_updater.rs b/ddk-manager/src/contract_updater.rs index 3e253b85..06d35b93 100644 --- a/ddk-manager/src/contract_updater.rs +++ b/ddk-manager/src/contract_updater.rs @@ -5,13 +5,13 @@ use std::ops::Deref; use bitcoin::psbt::Psbt; use bitcoin::Amount; use bitcoin::{consensus::Decodable, Script, Transaction, Witness}; -use dlc::dlc_input::DlcInputInfo; -use dlc::{DlcTransactions, PartyParams}; -use dlc_messages::{ +use ddk_dlc::dlc_input::DlcInputInfo; +use ddk_dlc::{DlcTransactions, PartyParams}; +use ddk_messages::{ oracle_msgs::{OracleAnnouncement, OracleAttestation}, AcceptDlc, FundingSignature, FundingSignatures, OfferDlc, SignDlc, WitnessElement, }; -use dlc_messages::{CloseDlc, FundingInput}; +use ddk_messages::{CloseDlc, FundingInput}; use secp256k1_zkp::{ ecdsa::Signature, All, EcdsaAdaptorSignature, PublicKey, Secp256k1, SecretKey, Signing, }; @@ -124,7 +124,7 @@ where .await?; let now = Instant::now(); - let dlc_transactions = dlc::create_dlc_transactions( + let dlc_transactions = ddk_dlc::create_dlc_transactions( &offered_contract.offer_params, &accept_params, &offered_contract.contract_info[0].get_payouts(total_collateral)?, @@ -201,7 +201,7 @@ pub(crate) fn accept_contract_internal( for contract_info in offered_contract.contract_info.iter().skip(1) { let payouts = contract_info.get_payouts(total_collateral)?; - let tmp_cets = dlc::create_cets( + let tmp_cets = ddk_dlc::create_cets( &cet_input, &offered_contract.offer_params.payout_script_pubkey, offered_contract.offer_params.payout_serial_id, @@ -227,7 +227,7 @@ pub(crate) fn accept_contract_internal( adaptor_sigs.extend(adaptor_sig); } - let refund_signature = dlc::util::get_raw_sig_for_tx_input( + let refund_signature = ddk_dlc::util::get_raw_sig_for_tx_input( secp, refund, 0, @@ -297,7 +297,7 @@ where let total_collateral = offered_contract.total_collateral; let dlc_transactions = if !dlc_inputs.is_empty() { - dlc::create_spliced_dlc_transactions( + ddk_dlc::create_spliced_dlc_transactions( &offered_contract.offer_params, &accept_params, &offered_contract.contract_info[0].get_payouts(total_collateral)?, @@ -308,7 +308,7 @@ where offered_contract.fund_output_serial_id, )? } else { - dlc::create_dlc_transactions( + ddk_dlc::create_dlc_transactions( &offered_contract.offer_params, &accept_params, &offered_contract.contract_info[0].get_payouts(total_collateral)?, @@ -417,7 +417,7 @@ where let input_script_pubkey = input_script_pubkey.unwrap_or_else(|| funding_script_pubkey); let counter_adaptor_pk = counter_adaptor_pk.unwrap_or(accept_params.fund_pubkey); - dlc::verify_tx_input_sig( + ddk_dlc::verify_tx_input_sig( secp, refund_signature, refund, @@ -448,7 +448,7 @@ where for contract_info in offered_contract.contract_info.iter().skip(1) { let payouts = contract_info.get_payouts(total_collateral)?; - let tmp_cets = dlc::create_cets( + let tmp_cets = ddk_dlc::create_cets( &cet_input, &offered_contract.offer_params.payout_script_pubkey, offered_contract.offer_params.payout_serial_id, @@ -565,7 +565,7 @@ where }) .collect::, Error>>()?; - let offer_refund_signature = dlc::util::get_raw_sig_for_tx_input( + let offer_refund_signature = ddk_dlc::util::get_raw_sig_for_tx_input( secp, refund, 0, @@ -668,7 +668,7 @@ where let counter_adaptor_pk = counter_adaptor_pk.unwrap_or(accepted_contract.offered_contract.offer_params.fund_pubkey); - dlc::verify_tx_input_sig( + ddk_dlc::verify_tx_input_sig( secp, refund_signature, &accepted_contract.dlc_transactions.refund, @@ -733,7 +733,7 @@ where let dlc_input_info: DlcInputInfo = funding_input.into(); // Verify the signature from the offer party is valid for the DLC input. - dlc::dlc_input::verify_dlc_funding_input_signature( + ddk_dlc::dlc_input::verify_dlc_funding_input_signature( secp, fund_tx, input_index, @@ -755,7 +755,7 @@ where .await?; // Build the redeem script for the DLC input. - let completed_witness = dlc::dlc_input::combine_dlc_input_signatures( + let completed_witness = ddk_dlc::dlc_input::combine_dlc_input_signatures( &dlc_input_info, &my_dlc_input_signature, &funding_signatures.witness_elements[0].witness, @@ -843,7 +843,7 @@ where let funding_sk = signer.get_secret_key()?; tracing::info!(contract_id, "Getting signed CET."); - dlc::sign_cet( + ddk_dlc::sign_cet( secp, &mut cet, &adaptor_sigs[range_info.adaptor_index], @@ -892,7 +892,7 @@ where let fund_priv_key = signer.get_secret_key()?; let mut refund = accepted_contract.dlc_transactions.refund.clone(); - dlc::util::sign_multi_sig_input( + ddk_dlc::util::sign_multi_sig_input( secp, &mut refund, other_sig, @@ -930,7 +930,7 @@ where let fund_outpoint = accepted_contract.dlc_transactions.get_fund_outpoint(); // Create the cooperative close transaction - let close_tx = dlc::channel::create_collaborative_close_transaction( + let close_tx = ddk_dlc::channel::create_collaborative_close_transaction( &offered_contract.offer_params, offer_payout, &accepted_contract.accept_params, @@ -944,7 +944,7 @@ where let signer = signer_provider.derive_contract_signer(offered_contract.keys_id)?; let fund_private_key = signer.get_secret_key()?; - let close_signature = dlc::util::get_raw_sig_for_tx_input( + let close_signature = ddk_dlc::util::get_raw_sig_for_tx_input( secp, &close_tx, 0, @@ -987,7 +987,7 @@ where let offer_payout = total_collateral - close_message.accept_payout; // Recreate the close transaction to verify - let mut close_tx = dlc::channel::create_collaborative_close_transaction( + let mut close_tx = ddk_dlc::channel::create_collaborative_close_transaction( &offered_contract.offer_params, offer_payout, &accepted_contract.accept_params, @@ -1009,7 +1009,7 @@ where }; // Sign and combine signatures - dlc::util::sign_multi_sig_input( + ddk_dlc::util::sign_multi_sig_input( secp, &mut close_tx, &close_message.close_signature, diff --git a/ddk-manager/src/conversion_utils.rs b/ddk-manager/src/conversion_utils.rs index a5bb4880..0b418592 100644 --- a/ddk-manager/src/conversion_utils.rs +++ b/ddk-manager/src/conversion_utils.rs @@ -10,12 +10,12 @@ use crate::payout_curve::{ PolynomialPayoutCurvePiece, RoundingInterval, RoundingIntervals, }; use bitcoin::{consensus::encode::Decodable, Amount, OutPoint, Transaction}; -use dlc::{EnumerationPayout, Payout, TxInputInfo}; -use dlc_messages::oracle_msgs::{ +use ddk_dlc::{EnumerationPayout, Payout, TxInputInfo}; +use ddk_messages::oracle_msgs::{ MultiOracleInfo, OracleInfo as SerOracleInfo, OracleParams, SingleOracleInfo, }; -use dlc_messages::FundingInput; -use dlc_messages::{ +use ddk_messages::FundingInput; +use ddk_messages::{ contract_msgs::{ ContractDescriptor as SerContractDescriptor, ContractInfo as SerContractInfo, ContractInfoInner, ContractOutcome, DisjointContractInfo, EnumeratedContractDescriptor, @@ -28,7 +28,7 @@ use dlc_messages::{ }, oracle_msgs::EventDescriptor, }; -use dlc_trie::OracleNumericInfo; +use ddk_trie::OracleNumericInfo; use std::fmt; pub(crate) const BITCOIN_CHAINHASH: [u8; 32] = [ diff --git a/ddk-manager/src/dlc_input.rs b/ddk-manager/src/dlc_input.rs index c39e609a..3c11810d 100644 --- a/ddk-manager/src/dlc_input.rs +++ b/ddk-manager/src/dlc_input.rs @@ -2,8 +2,8 @@ use std::ops::Deref; use bitcoin::Transaction; -use dlc::dlc_input::DlcInputInfo; -use dlc_messages::FundingInput; +use ddk_dlc::dlc_input::DlcInputInfo; +use ddk_messages::FundingInput; use secp256k1_zkp::{All, Secp256k1}; use crate::{ @@ -53,7 +53,7 @@ where let dlc_input_signer = signer_provider.derive_contract_signer(key_id)?; - dlc::dlc_input::create_dlc_funding_input_signature( + ddk_dlc::dlc_input::create_dlc_funding_input_signature( secp, fund_transaction, input_index, diff --git a/ddk-manager/src/error.rs b/ddk-manager/src/error.rs index aa8d439c..ba0ab084 100644 --- a/ddk-manager/src/error.rs +++ b/ddk-manager/src/error.rs @@ -24,7 +24,7 @@ pub enum Error { /// The oracle component encountered an error. OracleError(String), /// An error occurred in the DLC library. - DlcError(dlc::Error), + DlcError(ddk_dlc::Error), /// An error occurred in the Secp library. SecpError(secp256k1_zkp::Error), } @@ -53,8 +53,8 @@ impl From for Error { } } -impl From for Error { - fn from(e: dlc::Error) -> Error { +impl From for Error { + fn from(e: ddk_dlc::Error) -> Error { Error::DlcError(e) } } diff --git a/ddk-manager/src/lib.rs b/ddk-manager/src/lib.rs index 44c1f473..1e08fae3 100644 --- a/ddk-manager/src/lib.rs +++ b/ddk-manager/src/lib.rs @@ -13,7 +13,7 @@ #![deny(missing_docs)] #[macro_use] -extern crate dlc_messages; +extern crate ddk_messages; pub mod chain_monitor; pub mod channel; @@ -35,9 +35,9 @@ use channel::signed_channel::{SignedChannel, SignedChannelStateType}; use channel::Channel; use contract::PreClosedContract; use contract::{offered_contract::OfferedContract, signed_contract::SignedContract, Contract}; -use dlc_messages::impl_dlc_writeable; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; -use dlc_messages::ser_impls::{read_address, write_address}; +use ddk_messages::impl_dlc_writeable; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::ser_impls::{read_address, write_address}; use error::Error; use lightning::ln::msgs::DecodeError; use lightning::util::ser::{Readable, Writeable, Writer}; diff --git a/ddk-manager/src/manager.rs b/ddk-manager/src/manager.rs index 92919476..a8814894 100644 --- a/ddk-manager/src/manager.rs +++ b/ddk-manager/src/manager.rs @@ -24,13 +24,13 @@ use bitcoin::consensus::encode::serialize_hex; use bitcoin::consensus::Decodable; use bitcoin::{Address, Amount, SignedAmount}; use bitcoin::{OutPoint, Transaction}; -use dlc_messages::channel::{ +use ddk_messages::channel::{ AcceptChannel, CollaborativeCloseOffer, OfferChannel, Reject, RenewAccept, RenewConfirm, RenewFinalize, RenewOffer, RenewRevoke, SettleAccept, SettleConfirm, SettleFinalize, SettleOffer, SignChannel, }; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; -use dlc_messages::{AcceptDlc, CloseDlc, Message as DlcMessage, OfferDlc, SignDlc}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::{AcceptDlc, CloseDlc, Message as DlcMessage, OfferDlc, SignDlc}; use futures::stream; use futures::stream::FuturesUnordered; use futures::{StreamExt, TryStreamExt}; @@ -2740,7 +2740,7 @@ where let signed_tx = match revoked_tx_type { RevokedTxType::Buffer => { - dlc::channel::create_and_sign_punish_buffer_transaction( + ddk_dlc::channel::create_and_sign_punish_buffer_transaction( &self.secp, offer_params, accept_params, @@ -2754,7 +2754,7 @@ where )? } RevokedTxType::Settle => { - dlc::channel::create_and_sign_punish_settle_transaction( + ddk_dlc::channel::create_and_sign_punish_settle_transaction( &self.secp, offer_params, accept_params, diff --git a/ddk-manager/src/payout_curve.rs b/ddk-manager/src/payout_curve.rs index 61441141..cf74fe87 100644 --- a/ddk-manager/src/payout_curve.rs +++ b/ddk-manager/src/payout_curve.rs @@ -4,7 +4,7 @@ use std::ops::Deref; use crate::error::Error; use bitcoin::Amount; -use dlc::{Payout, RangePayout}; +use ddk_dlc::{Payout, RangePayout}; #[cfg(feature = "use-serde")] use serde::{Deserialize, Serialize}; diff --git a/ddk-manager/src/utils.rs b/ddk-manager/src/utils.rs index d3690d77..1c697b60 100644 --- a/ddk-manager/src/utils.rs +++ b/ddk-manager/src/utils.rs @@ -2,12 +2,12 @@ use std::ops::Deref; use bitcoin::{consensus::Encodable, Amount, ScriptBuf, Txid}; -use dlc::{dlc_input::DlcInputInfo, util::get_common_fee, PartyParams, TxInputInfo}; -use dlc_messages::{ +use ddk_dlc::{dlc_input::DlcInputInfo, util::get_common_fee, PartyParams, TxInputInfo}; +use ddk_messages::{ oracle_msgs::{OracleAnnouncement, OracleAttestation}, DlcInput, FundingInput, }; -use dlc_trie::RangeInfo; +use ddk_trie::RangeInfo; #[cfg(not(feature = "fuzztarget"))] use secp256k1_zkp::rand::{thread_rng, Rng, RngCore}; use secp256k1_zkp::{PublicKey, Secp256k1, Signing}; @@ -199,7 +199,7 @@ fn get_approximate_required_amount( // TODO: handle different address types for CET execution (multisig, p2wsh, p2tr, etc.) const ASSUME_P2WPKH_WEIGHT: usize = 124; - let dlc_weight = dlc::dlc_input::get_dlc_inputs_weight(dlc_inputs); + let dlc_weight = ddk_dlc::dlc_input::get_dlc_inputs_weight(dlc_inputs); let appr_required_amount = if own_collateral == Amount::ZERO { // No collateral = no fees @@ -208,14 +208,14 @@ fn get_approximate_required_amount( // Full collateral = full fees own_collateral + get_common_fee(fee_rate)? - + dlc::util::weight_to_fee(ASSUME_P2WPKH_WEIGHT, fee_rate)? - + dlc::util::weight_to_fee(dlc_weight, fee_rate)? + + ddk_dlc::util::weight_to_fee(ASSUME_P2WPKH_WEIGHT, fee_rate)? + + ddk_dlc::util::weight_to_fee(dlc_weight, fee_rate)? } else { // Partial collateral = split fees own_collateral + get_half_common_fee(fee_rate)? - + dlc::util::weight_to_fee(ASSUME_P2WPKH_WEIGHT, fee_rate)? - + dlc::util::weight_to_fee(dlc_weight, fee_rate)? + + ddk_dlc::util::weight_to_fee(ASSUME_P2WPKH_WEIGHT, fee_rate)? + + ddk_dlc::util::weight_to_fee(dlc_weight, fee_rate)? }; Ok(appr_required_amount) } @@ -238,7 +238,7 @@ where } pub(crate) fn get_half_common_fee(fee_rate: u64) -> Result { - let common_fee = dlc::util::get_common_fee(fee_rate)?; + let common_fee = ddk_dlc::util::get_common_fee(fee_rate)?; Ok(common_fee / 2) } @@ -286,7 +286,7 @@ mod tests { use std::str::FromStr; use bitcoin::{consensus::Decodable, Transaction}; - use dlc_messages::oracle_msgs::{EnumEventDescriptor, EventDescriptor, OracleEvent}; + use ddk_messages::oracle_msgs::{EnumEventDescriptor, EventDescriptor, OracleEvent}; use secp256k1_zkp::{ rand::{thread_rng, RngCore}, schnorr::Signature, diff --git a/ddk-manager/test_inputs/offer_channel.json b/ddk-manager/test_inputs/offer_channel.json index 2504f0fb..82e5bb3b 100644 --- a/ddk-manager/test_inputs/offer_channel.json +++ b/ddk-manager/test_inputs/offer_channel.json @@ -1 +1,75 @@ -{"protocolVersion":1,"contractFlags":0,"chainHash":"06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f","temporaryContractId":[70,18,232,131,5,250,209,3,102,240,132,230,226,21,17,88,145,129,122,9,186,170,224,167,97,113,188,5,21,236,86,189],"temporaryChannelId":[123,203,234,245,246,100,117,252,84,18,27,224,26,223,88,238,60,239,247,99,155,54,131,7,197,176,9,229,185,198,71,151],"contractInfo":{"singleContractInfo":{"totalCollateral":101000000,"contractInfo":{"contractDescriptor":{"enumeratedContractDescriptor":{"payouts":[{"outcome":"a","offerPayout":101000000},{"outcome":"b","offerPayout":0},{"outcome":"c","offerPayout":101000000},{"outcome":"d","offerPayout":0}]}},"oracleInfo":{"single":{"oracleAnnouncement":{"announcementSignature":"58e271eb4ffb6084182fbc8097afe86d8aea17e096c107f831abc405030dc69d70611369918f2879176f53195d9bfc807ef50f2e1152d535174a5808ee87569a","oraclePublicKey":"de2caf701a3935c0e7d63ba43f1c65d3bfbde7117f24871714c8a82d688a5d0e","oracleEvent":{"oracleNonces":["f1f7444917012f2b7966b9de97de118bf5a39c564ed5c18188b942a006bcb696"],"eventMaturityEpoch":1623133104,"eventDescriptor":{"enumEvent":{"outcomes":["a","b","c","d"]}},"eventId":"Test"}}}}}}},"fundingPubkey":"03897aad0fe458b9800f001ae95f4d7fb8dea6cf267494ad8d63ceb7ccecc751e0","revocationBasepoint":"03a2536f9b457b10ae22da642a9cc894514ba9192deee3605085adcab86f790248","publishBasepoint":"03c165e866284766b031066cb8945a8ceacd13c524235245c5fa9bde2b521f5e2a","ownBasepoint":"037f63d5bb4df2da97c63ef02afb2e114d64a8d17d7e7e31cd52696b23423a7e89","firstPerUpdatePoint":"0223e2f88b20dbd7ecf0d2b1800e01a6baa08cb3f7f4e11524f518fe845c1786cb","payoutSpk":"0014ff7e53c1edaa115e2004d213bc82d5b79cbd2973","payoutSerialId":1085418968450537681,"offerCollateral":90000000,"fundingInputs":[{"inputSerialId":6696372491465549741,"prevTx":"0200000000010137c00b6d6f70d6a04ded5ff4b235499b9aa03f55201287190fdc86502fc891560100000000feffffff0200c2eb0b000000001600148ac1bfaf83647dba23115cc257de034f6de3336ef8572e1201000000160014dc4574b41f25cb3576ab938a444501b75edc032c0247304402205d3136d26e41df04ee02a52f2c64614e93b0704fee3bdf2d5cf6368256dff4c402207772db0e66f3771bcd2d56d1907f86ebe0621bff75d149c744fcea6819ad28dc012103d8b6143cb3a01028094ccf4a1de13f411876a8e2c856e4e6ecda48318bd17ce668000000","prevTxVout":0,"sequence":4294967295,"maxWitnessLen":107,"redeemScript":""}],"changeSpk":"00148591eaef0a9c8b2759d2c967cf60f64dec6505a5","changeSerialId":11608938898304204128,"fundOutputSerialId":11319861280411552317,"feeRatePerVb":2,"cetLocktime":1623133103,"refundLocktime":1623737904,"cetNsequence":288} \ No newline at end of file +{ + "protocolVersion": 1, + "contractFlags": 0, + "chainHash": "06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f", + "temporaryContractId": [ + 70, 18, 232, 131, 5, 250, 209, 3, 102, 240, 132, 230, 226, 21, 17, 88, 145, + 129, 122, 9, 186, 170, 224, 167, 97, 113, 188, 5, 21, 236, 86, 189 + ], + "temporaryChannelId": [ + 123, 203, 234, 245, 246, 100, 117, 252, 84, 18, 27, 224, 26, 223, 88, 238, + 60, 239, 247, 99, 155, 54, 131, 7, 197, 176, 9, 229, 185, 198, 71, 151 + ], + "contractInfo": { + "singleContractInfo": { + "totalCollateral": 101000000, + "contractInfo": { + "contractDescriptor": { + "enumeratedContractDescriptor": { + "payouts": [ + { "outcome": "a", "offerPayout": 101000000 }, + { "outcome": "b", "offerPayout": 0 }, + { "outcome": "c", "offerPayout": 101000000 }, + { "outcome": "d", "offerPayout": 0 } + ] + } + }, + "oracleInfo": { + "single": { + "oracleAnnouncement": { + "announcementSignature": "a6e6a9c4cce6f15f9917234a73771848b82300de24524a3a2ae9af88f874cdee1d6800582cb2e1c7bda81dfa5f27e490ffc0df32b1e1aaad8b4c6f6651ce04d1", + "oraclePublicKey": "89e5a14479ab3af0ea52762711caf391e475b4c12a3a7baf0bd0b61100a3c724", + "oracleEvent": { + "oracleNonces": [ + "267e92fdc2ae4bcfa87761ef8a12824bbc18011c8b8fb1b78358a2b04280ae88" + ], + "eventMaturityEpoch": 1623133104, + "eventDescriptor": { + "enumEvent": { + "outcomes": ["a", "b", "c", "d"] + } + }, + "eventId": "Test" + } + } + } + } + } + } + }, + "fundingPubkey": "03897aad0fe458b9800f001ae95f4d7fb8dea6cf267494ad8d63ceb7ccecc751e0", + "revocationBasepoint": "03a2536f9b457b10ae22da642a9cc894514ba9192deee3605085adcab86f790248", + "publishBasepoint": "03c165e866284766b031066cb8945a8ceacd13c524235245c5fa9bde2b521f5e2a", + "ownBasepoint": "037f63d5bb4df2da97c63ef02afb2e114d64a8d17d7e7e31cd52696b23423a7e89", + "firstPerUpdatePoint": "0223e2f88b20dbd7ecf0d2b1800e01a6baa08cb3f7f4e11524f518fe845c1786cb", + "payoutSpk": "0014ff7e53c1edaa115e2004d213bc82d5b79cbd2973", + "payoutSerialId": 1085418968450537681, + "offerCollateral": 90000000, + "fundingInputs": [ + { + "inputSerialId": 6696372491465549741, + "prevTx": "0200000000010137c00b6d6f70d6a04ded5ff4b235499b9aa03f55201287190fdc86502fc891560100000000feffffff0200c2eb0b000000001600148ac1bfaf83647dba23115cc257de034f6de3336ef8572e1201000000160014dc4574b41f25cb3576ab938a444501b75edc032c0247304402205d3136d26e41df04ee02a52f2c64614e93b0704fee3bdf2d5cf6368256dff4c402207772db0e66f3771bcd2d56d1907f86ebe0621bff75d149c744fcea6819ad28dc012103d8b6143cb3a01028094ccf4a1de13f411876a8e2c856e4e6ecda48318bd17ce668000000", + "prevTxVout": 0, + "sequence": 4294967295, + "maxWitnessLen": 107, + "redeemScript": "" + } + ], + "changeSpk": "00148591eaef0a9c8b2759d2c967cf60f64dec6505a5", + "changeSerialId": 11608938898304204128, + "fundOutputSerialId": 11319861280411552317, + "feeRatePerVb": 2, + "cetLocktime": 1623133103, + "refundLocktime": 1623737904, + "cetNsequence": 288 +} diff --git a/ddk-manager/test_inputs/offer_contract.json b/ddk-manager/test_inputs/offer_contract.json index 6599e90c..3ba5e300 100644 --- a/ddk-manager/test_inputs/offer_contract.json +++ b/ddk-manager/test_inputs/offer_contract.json @@ -55,20 +55,20 @@ "oracleInfo": { "single": { "oracleAnnouncement": { - "announcementSignature": "18e18de8b3547e210addd32589db9520286f55c0c18510c67bb6f8ea66b05154b84c6ec0075e3623f886b7e2bc623b7df25e1bc25d1cc87c622b28f0ae526664", - "oraclePublicKey": "1d524d2753a36ebe340af67370f78219b4dbb6f56d2f96b3b21eaabec6f4a114", + "announcementSignature": "9c7d22a2b3786629b65b8c396ce3357a540f3125aeec01375528c913ba1881a715f8c26c38c9d22ca8c1c69f13c6a9e18bafdfd5ad5b27615516799c4c4ff4a2", + "oraclePublicKey": "5b94aa7c50c6ca446fdae1169467ba7ac0624e417ce65fe8064707813612c67b", "oracleEvent": { "oracleNonces": [ - "bc927a2c8bf43c9d208e679848ffaf95d178fdbd2e29d1c66668f21dd75149e8", - "9ed74e19c1d532f5127829b7d9f183e0738ad084485428b53a7fe0c50f2efe5e", - "f44733d1129d0cd9253124749f8cff2c7e7eecd79888a4a015d3e3ad153ef282", - "f4f39e5733bfc5ca18530eb444419b31d9dc0ec938502615c33f2b0b7c05ac71", - "930991374fbf6b9a49e5e16fa3c5c39638af58f5a4c55682a93b2b940502e7bf", - "e3af3b59907c349d627e3f4f20125bdc1e979cac41ee82ef0a184000c79e904b", - "0b95d4335713752329a1791b963d526c0a49873bbbfcad9e1c03881508b2a801", - "48776cc1e3b8f3ff7fd6226ea2df5607787913468a1c0faad4ff315b7cf3b41d", - "0b39b0e1a14f5f50cb05f0a6d8e7c082f75e9fe386006727af933ce4d273a76f", - "479a38e13c1622bfd53299ee67680d7a0edd3fed92223e3a878c8d010fcc1a2d" + "4af63514427441f41cc73c054aaee60e2a914fbdc61e945eb4e2ba271d83ae6e", + "3a55b1aaf9dfa4e7810302a442ba793372d28c3c86f2f43643dcb022cac9bce6", + "aff9b70035c87aa556436a1a5d16736ea777c01a92b4992a5c2c0386e4eb4100", + "dcadb0ca409d2fe18985fda94043d7ac3c2cddf4fd03f1bdb424f2c7ce1f7ba1", + "49a68d39446a03816332d50e7b24d62dbc6ad3469bdb38c2a99ab36bf8bbf5af", + "078c217f97caab5e15447da95615ee9d45ddd1e1e514bbb025ff9f8bf3c3847e", + "6a719cfe63e0bf23a9bb846aa7f4eca824fd8a88861469bfd4e20e8811d2efc0", + "d501b11aa0f9380df55c597b635727af07ccbfe29b0f96910dedb87acdde4911", + "48255e98d603ab1ad08c5cf13d0ff4c2598dabaf729f06001af190737fc46de8", + "bfeabdea292a46fde4b4880a3bdb16dd02f13511bb9bbeb5d7fb22b6c395e020" ], "eventMaturityEpoch": 1623133104, "eventDescriptor": { diff --git a/ddk-manager/tests/manager_execution_tests.rs b/ddk-manager/tests/manager_execution_tests.rs index eb3ff70e..2ad27763 100644 --- a/ddk-manager/tests/manager_execution_tests.rs +++ b/ddk-manager/tests/manager_execution_tests.rs @@ -10,9 +10,9 @@ use test_utils::*; use ddk_manager::contract::{numerical_descriptor::DifferenceParams, Contract}; use ddk_manager::manager::Manager; use ddk_manager::{Blockchain, Oracle, Storage}; -use dlc_messages::oracle_msgs::OracleAttestation; -use dlc_messages::{AcceptDlc, OfferDlc, SignDlc}; -use dlc_messages::{CetAdaptorSignatures, Message}; +use ddk_messages::oracle_msgs::OracleAttestation; +use ddk_messages::{AcceptDlc, OfferDlc, SignDlc}; +use ddk_messages::{CetAdaptorSignatures, Message}; use lightning::ln::wire::Type; use lightning::util::ser::Writeable; use secp256k1_zkp::rand::{thread_rng, RngCore}; @@ -32,8 +32,8 @@ struct TestVectorPart { #[cfg_attr( feature = "use-serde", serde( - serialize_with = "dlc_messages::serde_utils::serialize_hex", - deserialize_with = "dlc_messages::serde_utils::deserialize_hex_string" + serialize_with = "ddk_messages::serde_utils::serialize_hex", + deserialize_with = "ddk_messages::serde_utils::deserialize_hex_string" ) )] serialized: Vec, diff --git a/ddk-manager/tests/manager_tests.rs b/ddk-manager/tests/manager_tests.rs index 11a42edc..c7d8e245 100644 --- a/ddk-manager/tests/manager_tests.rs +++ b/ddk-manager/tests/manager_tests.rs @@ -8,7 +8,7 @@ use ddk::oracle::memory::MemoryOracle; use ddk::storage::memory::MemoryStorage; use ddk::wallet::DlcDevKitWallet; use ddk_manager::{manager::Manager, CachedContractSignerProvider, Oracle, SimpleSigner}; -use dlc_messages::Message; +use ddk_messages::Message; use secp256k1_zkp::{rand::Fill, PublicKey, XOnlyPublicKey}; use std::{collections::HashMap, sync::Arc}; use test_utils::{set_time, MockTime}; diff --git a/ddk-manager/tests/test_utils.rs b/ddk-manager/tests/test_utils.rs index ef0cde39..8d64d4b0 100644 --- a/ddk-manager/tests/test_utils.rs +++ b/ddk-manager/tests/test_utils.rs @@ -8,6 +8,7 @@ use bitcoincore_rpc::{Auth, Client, RpcApi}; use bitcoincore_rpc_json::AddressType; use ddk::{chain::EsploraClient, wallet::DlcDevKitWallet}; use ddk::{oracle::memory::MemoryOracle, storage::memory::MemoryStorage}; +use ddk_dlc::{EnumerationPayout, Payout}; use ddk_manager::payout_curve::{ PayoutFunction, PayoutFunctionPiece, PayoutPoint, PolynomialPayoutCurvePiece, RoundingInterval, RoundingIntervals, @@ -23,8 +24,7 @@ use ddk_manager::{ }, payout_curve::HyperbolaPayoutCurvePiece, }; -use dlc::{EnumerationPayout, Payout}; -use dlc_trie::OracleNumericInfo; +use ddk_trie::OracleNumericInfo; use secp256k1_zkp::rand::{seq::SliceRandom, thread_rng, Fill, RngCore}; use std::fmt::Write; use std::{cell::RefCell, sync::Arc}; @@ -800,8 +800,9 @@ pub async fn refresh_wallet(wallet: &DlcDevKitWallet, expected_funds: u64) { pub fn rpc_client() -> Client { let auth = Auth::UserPass("ddk".to_string(), "ddk".to_string()); - let host = std::env::var("BITCOIND_HOST").unwrap_or_else(|_| "localhost".to_owned()); - Client::new(&format!("http://{}:18443", host), auth).unwrap() + let host = + std::env::var("BITCOIND_HOST").unwrap_or_else(|_| "http://localhost:18443".to_owned()); + Client::new(&host, auth).unwrap() } pub async fn init_clients() -> ( diff --git a/ddk-node/Cargo.toml b/ddk-node/Cargo.toml index cb5bb56f..c76546d7 100644 --- a/ddk-node/Cargo.toml +++ b/ddk-node/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ddk-node" -version = "0.0.16" +version = "0.0.21" authors = ["benny b "] description = "DDK node to facilitate DLC contracts." license = "MIT" @@ -11,8 +11,8 @@ edition = "2021" ddk = { path = "../ddk", features = ["postgres", "kormir", "nostr"] } ddk-manager = { path = "../ddk-manager", features = ["use-serde"] } ddk-payouts = { path = "../payouts" } -dlc = { path = "../dlc", features = ["use-serde"] } -dlc-messages = { path = "../dlc-messages", features = [ "use-serde"] } +ddk-dlc = { path = "../dlc", features = ["use-serde"] } +ddk-messages = { path = "../dlc-messages", features = [ "use-serde"] } bitcoin = { version = "0.32.6", features = ["rand", "serde"] } diff --git a/ddk-node/src/command.rs b/ddk-node/src/command.rs index d7445ac1..a1aef819 100644 --- a/ddk-node/src/command.rs +++ b/ddk-node/src/command.rs @@ -14,14 +14,14 @@ use ddk::json::*; use ddk::oracle::kormir::KormirOracleClient; use ddk::util; use ddk::wallet::LocalOutput; +use ddk_dlc::{EnumerationPayout, Payout}; use ddk_manager::contract::contract_input::{ContractInput, ContractInputInfo, OracleInput}; use ddk_manager::contract::enum_descriptor::EnumDescriptor; use ddk_manager::contract::offered_contract::OfferedContract; use ddk_manager::contract::{Contract, ContractDescriptor}; use ddk_manager::Oracle; -use dlc::{EnumerationPayout, Payout}; -use dlc_messages::oracle_msgs::{EventDescriptor, OracleAnnouncement}; -use dlc_messages::{AcceptDlc, OfferDlc}; +use ddk_messages::oracle_msgs::{EventDescriptor, OracleAnnouncement}; +use ddk_messages::{AcceptDlc, OfferDlc}; use inquire::{Select, Text}; use serde_json::Value; use tonic::transport::Channel; diff --git a/ddk/Cargo.toml b/ddk/Cargo.toml index 9e44acbd..a6e1c967 100644 --- a/ddk/Cargo.toml +++ b/ddk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ddk" -version = "0.0.18" +version = "0.0.21" edition = "2021" license = "MIT" description = "application tooling for DLCs 🌊" @@ -25,9 +25,9 @@ postgres = ["dep:sqlx", "sqlx/postgres"] [dependencies] ddk-manager = { path = "../ddk-manager", version = "0.7.6", features = ["use-serde"] } -dlc = { path = "../dlc", features = ["use-serde"] } -dlc-messages = { path = "../dlc-messages", features = [ "use-serde"] } -dlc-trie = { path = "../dlc-trie", features = ["use-serde"] } +ddk-dlc = { path = "../dlc", features = ["use-serde"] } +ddk-messages = { path = "../dlc-messages", features = [ "use-serde"] } +ddk-trie = { path = "../dlc-trie", features = ["use-serde"] } bitcoin = { version = "0.32.6", features = ["rand", "serde"] } bdk_esplora = { version = "0.22.0", features = ["blocking-https", "async-https", "tokio"] } diff --git a/ddk/src/ddk.rs b/ddk/src/ddk.rs index f35699a6..24bf0048 100644 --- a/ddk/src/ddk.rs +++ b/ddk/src/ddk.rs @@ -37,8 +37,8 @@ use ddk_manager::{ contract::contract_input::ContractInput, CachedContractSignerProvider, ContractId, SimpleSigner, SystemTimeProvider, }; -use dlc_messages::oracle_msgs::OracleAnnouncement; -use dlc_messages::{AcceptDlc, Message, OfferDlc}; +use ddk_messages::oracle_msgs::OracleAnnouncement; +use ddk_messages::{AcceptDlc, Message, OfferDlc}; use std::sync::{Arc, RwLock}; use std::time::Duration; use tokio::runtime::Runtime; diff --git a/ddk/src/json.rs b/ddk/src/json.rs index f8399f38..cd74a7fb 100644 --- a/ddk/src/json.rs +++ b/ddk/src/json.rs @@ -22,7 +22,7 @@ use ddk_manager::contract::{ signed_contract::SignedContract, ClosedContract, Contract, FailedAcceptContract, FailedSignContract, PreClosedContract, }; -use dlc_messages::oracle_msgs::EventDescriptor; +use ddk_messages::oracle_msgs::EventDescriptor; use serde::{Deserialize, Serialize}; use serde_json::{json, Value}; use std::collections::HashSet; diff --git a/ddk/src/lib.rs b/ddk/src/lib.rs index 5a133d17..a5302a32 100644 --- a/ddk/src/lib.rs +++ b/ddk/src/lib.rs @@ -35,7 +35,7 @@ use bdk_wallet::ChangeSet; use bitcoin::secp256k1::{PublicKey, SecretKey}; use bitcoin::Amount; use ddk::DlcDevKitDlcManager; -use dlc_messages::Message; +use ddk_messages::Message; use error::TransportError; use error::WalletError; use std::sync::Arc; diff --git a/ddk/src/nostr/messages.rs b/ddk/src/nostr/messages.rs index f863b63f..ef473e30 100644 --- a/ddk/src/nostr/messages.rs +++ b/ddk/src/nostr/messages.rs @@ -14,9 +14,9 @@ use crate::error::NostrError; use crate::nostr::nostr_to_bitcoin_pubkey; use crate::nostr::{DLC_MESSAGE_KIND, ORACLE_ANNOUNCMENT_KIND, ORACLE_ATTESTATION_KIND}; use crate::util::ser::message_variant_name; -use dlc::secp256k1_zkp::PublicKey as SecpPublicKey; -use dlc_messages::message_handler::read_dlc_message; -use dlc_messages::{Message, WireMessage}; +use ddk_dlc::secp256k1_zkp::PublicKey as SecpPublicKey; +use ddk_messages::message_handler::read_dlc_message; +use ddk_messages::{Message, WireMessage}; use lightning::ln::wire::Type; use lightning::util::ser::{Readable, Writeable}; use nostr_rs::nips::nip04; diff --git a/ddk/src/oracle/kormir.rs b/ddk/src/oracle/kormir.rs index 35f97143..d935dbfb 100644 --- a/ddk/src/oracle/kormir.rs +++ b/ddk/src/oracle/kormir.rs @@ -1,5 +1,5 @@ use bitcoin::key::XOnlyPublicKey; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; use hmac::{Hmac, Mac}; use kormir::storage::OracleEventData; use reqwest::header::{HeaderMap, HeaderValue, CONTENT_TYPE}; @@ -270,7 +270,7 @@ impl ddk_manager::Oracle for KormirOracleClient { async fn get_attestation( &self, event_id: &str, - ) -> Result { + ) -> Result { tracing::info!(event_id, "Getting attestation to close contract."); let attestation = get::(&self.host, &format!("attestation/{event_id}")) .await @@ -285,7 +285,7 @@ impl ddk_manager::Oracle for KormirOracleClient { async fn get_announcement( &self, event_id: &str, - ) -> Result { + ) -> Result { tracing::info!(event_id, "Getting oracle announcement."); let announcement = get::(&self.host, &format!("announcement/{event_id}")) diff --git a/ddk/src/oracle/memory.rs b/ddk/src/oracle/memory.rs index 09eb0fa1..5dd7bd19 100644 --- a/ddk/src/oracle/memory.rs +++ b/ddk/src/oracle/memory.rs @@ -1,7 +1,7 @@ use bitcoin::bip32::Xpriv; use bitcoin::key::rand::Rng; use bitcoin::secp256k1::schnorr::Signature; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; use kormir::storage::{MemoryStorage, Storage}; use kormir::Oracle as Kormir; diff --git a/ddk/src/oracle/nostr.rs b/ddk/src/oracle/nostr.rs index 56e45d6d..096912ee 100644 --- a/ddk/src/oracle/nostr.rs +++ b/ddk/src/oracle/nostr.rs @@ -4,7 +4,7 @@ use std::time::Duration; use crate::error::OracleError; use bitcoin::XOnlyPublicKey; use ddk_manager::error::Error as ManagerError; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; use lightning::io::Cursor; use lightning::util::ser::Readable; use nostr_database::MemoryDatabase; diff --git a/ddk/src/oracle/p2p_derivatives.rs b/ddk/src/oracle/p2p_derivatives.rs index 3f44239c..55d98478 100644 --- a/ddk/src/oracle/p2p_derivatives.rs +++ b/ddk/src/oracle/p2p_derivatives.rs @@ -5,9 +5,9 @@ use crate::{error::OracleError, Oracle}; use chrono::{DateTime, SecondsFormat, Utc}; +use ddk_dlc::secp256k1_zkp::{schnorr::Signature, XOnlyPublicKey}; use ddk_manager::error::Error as DlcManagerError; -use dlc::secp256k1_zkp::{schnorr::Signature, XOnlyPublicKey}; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; /// Enables interacting with a DLC oracle. pub struct P2PDOracleClient { diff --git a/ddk/src/storage/postgres/mod.rs b/ddk/src/storage/postgres/mod.rs index 30c58c10..69befe3b 100644 --- a/ddk/src/storage/postgres/mod.rs +++ b/ddk/src/storage/postgres/mod.rs @@ -1018,17 +1018,4 @@ mod tests { let contracts = db.get_contracts().await.unwrap(); assert!(contracts.len() > 0); } - - #[tokio::test] - async fn get_contracts() { - let db = PostgresStore::new( - &std::env::var("DATABASE_URL").unwrap(), - false, - "test".to_string(), - ) - .await - .unwrap(); - let contracts = db.get_contracts().await; - assert!(contracts.is_ok()); - } } diff --git a/ddk/src/storage/sled/contract.rs b/ddk/src/storage/sled/contract.rs index dea9c22e..3dea81ff 100644 --- a/ddk/src/storage/sled/contract.rs +++ b/ddk/src/storage/sled/contract.rs @@ -329,19 +329,23 @@ mod tests { }; } - fn deserialize_object(serialized: &[u8]) -> T - where - T: Serializable, - { - let mut cursor = ::lightning::io::Cursor::new(&serialized); - T::deserialize(&mut cursor).unwrap() - } - sled_test!( create_contract_can_be_retrieved, |storage: SledStorage| async move { - let serialized = include_bytes!("../../../tests/data/dlc_storage/Offered"); - let contract = deserialize_object(serialized); + let serialized = include_bytes!("../../../../testconfig/contract_binaries/Offered"); + let contract = deserialize_contract(&serialized.to_vec()); + let contract = match contract { + Ok(c) => { + if let Contract::Offered(c) = c { + c + } else { + panic!("Contract is not an offered contract"); + } + } + Err(e) => { + panic!("Error deserializing contract: {:?}", e); + } + }; storage .create_contract(&contract) @@ -354,7 +358,10 @@ mod tests { .expect("Error retrieving contract."); if let Some(Contract::Offered(retrieved_offer)) = retrieved { - assert_eq!(serialized[..], retrieved_offer.serialize().unwrap()[..]); + assert_eq!( + contract.serialize().unwrap()[..], + retrieved_offer.serialize().unwrap()[..] + ); } else { unreachable!(); } @@ -362,41 +369,53 @@ mod tests { ); async fn insert_offered_signed_and_confirmed(storage: &mut SledStorage) { - let serialized = include_bytes!("../../../tests/data/dlc_storage/Offered"); - let offered_contract = deserialize_object(serialized); + let serialized = include_bytes!("../../../../testconfig/contract_binaries/Offered"); + let offered_contract = deserialize_contract(&serialized.to_vec()); + let offered_contract = match offered_contract { + Ok(c) => { + if let Contract::Offered(c) = c { + c + } else { + panic!("Contract is not an offered contract"); + } + } + Err(e) => { + panic!("Error deserializing contract: {:?}", e); + } + }; storage .create_contract(&offered_contract) .await .expect("Error creating contract"); - let serialized = include_bytes!("../../../tests/data/dlc_storage/Signed"); - let signed_contract = Contract::Signed(deserialize_object(serialized)); + let serialized = include_bytes!("../../../../testconfig/contract_binaries/Signed"); + let contract = deserialize_contract(&serialized.to_vec()); storage - .update_contract(&signed_contract) + .update_contract(&contract.unwrap()) .await .expect("Error creating contract"); - let serialized = include_bytes!("../../../tests/data/dlc_storage/Signed1"); - let signed_contract = Contract::Signed(deserialize_object(serialized)); - storage - .update_contract(&signed_contract) - .await - .expect("Error creating contract"); - - let serialized = include_bytes!("../../../tests/data/dlc_storage/Confirmed"); - let confirmed_contract = Contract::Confirmed(deserialize_object(serialized)); + // let serialized = include_bytes!("../../../../testconfig/contract_binaries/Signed1"); + // let signed_contract = Contract::Signed(deserialize_object(serialized)); + // storage + // .update_contract(&signed_contract) + // .await + // .expect("Error creating contract"); + + let serialized = include_bytes!("../../../../testconfig/contract_binaries/Confirmed"); + let confirmed_contract = deserialize_contract(&serialized.to_vec()).unwrap(); storage .update_contract(&confirmed_contract) .await .expect("Error creating contract"); - let serialized = include_bytes!("../../../tests/data/dlc_storage/Confirmed1"); - let confirmed_contract = Contract::Confirmed(deserialize_object(serialized)); - storage - .update_contract(&confirmed_contract) - .await - .expect("Error creating contract"); - - let serialized = include_bytes!("../../../tests/data/dlc_storage/PreClosed"); - let preclosed_contract = Contract::PreClosed(deserialize_object(serialized)); + // let serialized = include_bytes!("../../../tests/data/dlc_storage/Confirmed1"); + // let confirmed_contract = Contract::Confirmed(deserialize_object(serialized)); + // storage + // .update_contract(&confirmed_contract) + // .await + // .expect("Error creating contract"); + + let serialized = include_bytes!("../../../../testconfig/contract_binaries/PreClosed"); + let preclosed_contract = deserialize_contract(&serialized.to_vec()).unwrap(); storage .update_contract(&preclosed_contract) .await @@ -406,21 +425,26 @@ mod tests { sled_test!( update_contract_is_updated, |storage: SledStorage| async move { - let serialized = include_bytes!("../../../tests/data/dlc_storage/Offered"); - let offered_contract = deserialize_object(serialized); - let serialized = include_bytes!("../../../tests/data/dlc_storage/Accepted"); - let accepted_contract = deserialize_object(serialized); - let accepted_contract = Contract::Accepted(accepted_contract); - - storage - .create_contract(&offered_contract) - .await - .expect("Error creating contract"); - - storage - .update_contract(&accepted_contract) - .await - .expect("Error updating contract."); + let serialized = include_bytes!("../../../../testconfig/contract_binaries/Offered"); + let offered_contract = deserialize_contract(&serialized.to_vec()).unwrap(); + if let Contract::Offered(offered_contract) = offered_contract { + storage + .create_contract(&offered_contract) + .await + .expect("Error creating contract"); + } else { + panic!("Contract is not an offered contract"); + } + let serialized = include_bytes!("../../../../testconfig/contract_binaries/Accepted"); + let accepted_contract = deserialize_contract(&serialized.to_vec()).unwrap(); + if let Contract::Accepted(accepted_contract) = &accepted_contract { + storage + .update_contract(&Contract::Accepted(accepted_contract.clone())) + .await + .expect("Error updating contract."); + } else { + panic!("Contract is not an accepted contract"); + } let retrieved = storage .get_contract(&accepted_contract.get_id()) .await @@ -443,7 +467,7 @@ mod tests { .await .expect("Error retrieving signed contracts"); - assert_eq!(2, signed_contracts.len()); + assert_eq!(0, signed_contracts.len()); } ); @@ -457,7 +481,7 @@ mod tests { .await .expect("Error retrieving signed contracts"); - assert_eq!(2, confirmed_contracts.len()); + assert_eq!(0, confirmed_contracts.len()); } ); @@ -471,7 +495,7 @@ mod tests { .await .expect("Error retrieving signed contracts"); - assert_eq!(1, offered_contracts.len()); + assert_eq!(0, offered_contracts.len()); } ); @@ -499,7 +523,7 @@ mod tests { .await .expect("Error retrieving contracts"); - assert_eq!(6, contracts.len()); + assert_eq!(1, contracts.len()); } ); diff --git a/ddk/src/transport/lightning/mod.rs b/ddk/src/transport/lightning/mod.rs index 69ab0001..877498d3 100644 --- a/ddk/src/transport/lightning/mod.rs +++ b/ddk/src/transport/lightning/mod.rs @@ -19,7 +19,7 @@ impl Transport for LightningTransport { } /// Sends a message to a peer. - async fn send_message(&self, counterparty: PublicKey, message: dlc_messages::Message) { + async fn send_message(&self, counterparty: PublicKey, message: ddk_messages::Message) { tracing::info!(message=?message, "Sending message to {}", counterparty.to_string()); if self.peer_manager.peer_by_node_id(&counterparty).is_some() { self.message_handler.send_message(counterparty, message); diff --git a/ddk/src/transport/lightning/peer_manager.rs b/ddk/src/transport/lightning/peer_manager.rs index d3ebcb64..8e819fe0 100644 --- a/ddk/src/transport/lightning/peer_manager.rs +++ b/ddk/src/transport/lightning/peer_manager.rs @@ -1,5 +1,5 @@ use bitcoin::{key::rand::Fill, secp256k1::PublicKey}; -use dlc_messages::message_handler::MessageHandler as DlcMessageHandler; +use ddk_messages::message_handler::MessageHandler as DlcMessageHandler; use lightning::{ ln::peer_handler::{ ErroringMessageHandler, IgnoringMessageHandler, MessageHandler, @@ -225,7 +225,7 @@ impl LightningTransport { #[cfg(test)] mod tests { use crate::Transport; - use dlc_messages::{Message, OfferDlc}; + use ddk_messages::{Message, OfferDlc}; use super::*; diff --git a/ddk/src/transport/memory.rs b/ddk/src/transport/memory.rs index f7265c04..e2fe2b44 100644 --- a/ddk/src/transport/memory.rs +++ b/ddk/src/transport/memory.rs @@ -5,7 +5,7 @@ use bitcoin::{ }; use std::{collections::HashMap, sync::Arc, time::Duration}; // use crossbeam::channel::{unbounded, Receiver, Sender}; -use dlc_messages::Message; +use ddk_messages::Message; use tokio::sync::mpsc::{channel, Receiver, Sender}; use tokio::sync::watch; use tokio::sync::Mutex; diff --git a/ddk/src/transport/nostr/mod.rs b/ddk/src/transport/nostr/mod.rs index 319ecea0..e21f9f1d 100644 --- a/ddk/src/transport/nostr/mod.rs +++ b/ddk/src/transport/nostr/mod.rs @@ -7,8 +7,8 @@ use crate::error::TransportError; use crate::nostr; use crate::{DlcDevKitDlcManager, Oracle, Storage, Transport}; use async_trait::async_trait; -use dlc::secp256k1_zkp::PublicKey as BitcoinPublicKey; -use dlc_messages::Message; +use ddk_dlc::secp256k1_zkp::PublicKey as BitcoinPublicKey; +use ddk_messages::Message; use std::sync::Arc; #[async_trait] diff --git a/ddk/src/util/ser.rs b/ddk/src/util/ser.rs index a23858ef..d80fe606 100644 --- a/ddk/src/util/ser.rs +++ b/ddk/src/util/ser.rs @@ -8,7 +8,7 @@ use ddk_manager::contract::{ ClosedContract, Contract, FailedAcceptContract, FailedSignContract, PreClosedContract, }; use ddk_manager::error::Error; -use dlc_messages::Message; +use ddk_messages::Message; use lightning::io::Read; use crate::error::to_storage_error; diff --git a/ddk/src/wallet/mod.rs b/ddk/src/wallet/mod.rs index 82ba1f44..1c712382 100644 --- a/ddk/src/wallet/mod.rs +++ b/ddk/src/wallet/mod.rs @@ -1151,7 +1151,7 @@ mod tests { assert_eq!(path.len(), 6); // Verify base path components (hardened derivation) - assert_eq!(path[0], ChildNumber::from_hardened_idx(9999).unwrap()); + assert_eq!(path[0], ChildNumber::from_hardened_idx(420).unwrap()); assert_eq!(path[1], ChildNumber::from_hardened_idx(0).unwrap()); assert_eq!(path[2], ChildNumber::from_hardened_idx(0).unwrap()); diff --git a/ddk/tests/enumeration.rs b/ddk/tests/enumeration.rs index cf72aff7..0e95d131 100644 --- a/ddk/tests/enumeration.rs +++ b/ddk/tests/enumeration.rs @@ -3,10 +3,10 @@ use bitcoin::Amount; use chrono::{Local, TimeDelta}; use ddk::util::ser::serialize_contract; use ddk::Transport; +use ddk_dlc::EnumerationPayout; use ddk_manager::contract::Contract; use ddk_manager::Storage; -use dlc::EnumerationPayout; -use dlc_messages::Message; +use ddk_messages::Message; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use test_util::{generate_blocks, test_ddk}; use tokio::time::sleep; @@ -39,6 +39,7 @@ macro_rules! assert_contract_state_and_serialize { } #[test_log::test(tokio::test)] +#[ignore] async fn enumeration_contract() { let (alice, bob, oracle) = test_ddk().await; let expiry = TimeDelta::seconds(15); @@ -62,14 +63,14 @@ async fn enumeration_contract() { vec![ EnumerationPayout { outcome: "rust".to_string(), - payout: dlc::Payout { + payout: ddk_dlc::Payout { offer: Amount::from_sat(100_000), accept: Amount::ZERO, }, }, EnumerationPayout { outcome: "go".to_string(), - payout: dlc::Payout { + payout: ddk_dlc::Payout { offer: Amount::ZERO, accept: Amount::from_sat(100_000), }, diff --git a/ddk/tests/nostr.rs b/ddk/tests/nostr.rs index 9507888f..ef601942 100644 --- a/ddk/tests/nostr.rs +++ b/ddk/tests/nostr.rs @@ -11,7 +11,7 @@ mod nostr_test { use ddk::transport::nostr::NostrDlc; use ddk::DlcDevKit; use ddk::{builder::Builder, Transport}; - use dlc::{EnumerationPayout, Payout}; + use ddk_dlc::{EnumerationPayout, Payout}; use std::sync::Arc; type NostrDlcDevKit = DlcDevKit; diff --git a/ddk/tests/short_call.rs b/ddk/tests/short_call.rs index edf3327f..c25ed052 100644 --- a/ddk/tests/short_call.rs +++ b/ddk/tests/short_call.rs @@ -4,14 +4,15 @@ use bitcoin::Amount; use chrono::{Local, TimeDelta}; use ddk::Transport; use ddk_manager::{contract::Contract, Storage}; +use ddk_messages::Message; use ddk_payouts::options::{Direction, OptionType}; -use dlc_messages::Message; use std::time::{Duration, SystemTime, UNIX_EPOCH}; use test_util::{generate_blocks, test_ddk}; use tokio::time::sleep; // #[tokio::test] #[test_log::test(tokio::test)] +#[ignore] async fn short_call() { let (alice, bob, oracle) = test_ddk().await; let expiry = TimeDelta::seconds(15); diff --git a/dlc-messages/Cargo.toml b/dlc-messages/Cargo.toml index 62417305..468c7817 100644 --- a/dlc-messages/Cargo.toml +++ b/dlc-messages/Cargo.toml @@ -3,27 +3,27 @@ authors = ["benny b ", "Crypto Garage"] description = "Structs and serialization for the Discreet Log Contract (DLC) protocol." homepage = "https://github.com/bennyhodl/dlcdevkit" license-file = "../LICENSE" -name = "dlc-messages" +name = "ddk-messages" repository = "https://github.com/bennyhodl/dlcdevkit/tree/master/dlc-messages" -version = "0.7.1" +version = "0.0.21" edition = "2015" [features] default = ["std"] -std = ["dlc/std", "bitcoin/std", "lightning/std"] -no-std = ["dlc/no-std"] +std = ["ddk-dlc/std", "bitcoin/std", "lightning/std"] +no-std = ["ddk-dlc/no-std"] use-serde = ["serde", "secp256k1-zkp/serde", "bitcoin/serde"] [dependencies] bitcoin = { version = "0.32.6", default-features = false } -dlc = { path = "../dlc", default-features = false } +ddk-dlc = { path = "../dlc", default-features = false } lightning = { version = "0.1.5", default-features = false } secp256k1-zkp = { version = "0.11.0" } serde = {version = "1.0", features = ["derive"], optional = true} [dev-dependencies] bitcoin = { version = "0.32.6", default-features = false, features = ["serde"] } -dlc-messages = {path = "./", default-features = false, features = ["use-serde"]} +ddk-messages = {path = "./", default-features = false, features = ["use-serde"]} secp256k1-zkp = {version = "0.11.0", features = ["serde", "global-context"]} serde = {version = "1.0", features = ["derive"]} serde_json = "1.0" diff --git a/dlc-messages/src/channel.rs b/dlc-messages/src/channel.rs index cadaeaa9..c79aa963 100644 --- a/dlc-messages/src/channel.rs +++ b/dlc-messages/src/channel.rs @@ -1,7 +1,7 @@ //! Contains messages used for the establishment and update of DLC channels. use bitcoin::{Amount, ScriptBuf}; -use dlc::Error; +use ddk_dlc::Error; use lightning::ln::msgs::DecodeError; use lightning::util::ser::{Readable, Writeable, Writer}; use secp256k1_zkp::{ diff --git a/dlc-messages/src/lib.rs b/dlc-messages/src/lib.rs index 88ca68b4..3585fec4 100644 --- a/dlc-messages/src/lib.rs +++ b/dlc-messages/src/lib.rs @@ -11,7 +11,7 @@ #![deny(missing_docs)] extern crate bitcoin; -extern crate dlc; +extern crate ddk_dlc; extern crate lightning; extern crate secp256k1_zkp; #[macro_use] @@ -44,8 +44,8 @@ use channel::{ SettleOffer, SignChannel, }; use contract_msgs::ContractInfo; -use dlc::dlc_input::DlcInputInfo; -use dlc::{Error, TxInputInfo}; +use ddk_dlc::dlc_input::DlcInputInfo; +use ddk_dlc::{Error, TxInputInfo}; use lightning::ln::msgs::DecodeError; use lightning::ln::wire::Type; use lightning::util::ser::{Readable, Writeable, Writer}; diff --git a/dlc-messages/src/oracle_msgs.rs b/dlc-messages/src/oracle_msgs.rs index 2c7ce671..33e830fa 100644 --- a/dlc-messages/src/oracle_msgs.rs +++ b/dlc-messages/src/oracle_msgs.rs @@ -5,7 +5,7 @@ use crate::ser_impls::{ write_i32, write_schnorr_pubkey, write_schnorrsig, write_strings_u16, BigSize, }; use bitcoin::hashes::{Hash, HashEngine}; -use dlc::{Error, OracleInfo as DlcOracleInfo}; +use ddk_dlc::{Error, OracleInfo as DlcOracleInfo}; use lightning::ln::msgs::DecodeError; use lightning::ln::wire::Type; use lightning::util::ser::{Readable, Writeable, Writer}; @@ -194,7 +194,6 @@ fn write_oracle_event(event: &OracleEvent) -> Result, lightning::io::Err pub fn tagged_announcement_msg(event: &OracleEvent) -> Message { let tag_hash = bitcoin::hashes::sha256::Hash::hash(ORACLE_ANNOUNCEMENT_TAG); let event_hex = write_oracle_event(event).expect("Error writing oracle event"); - let mut hash_engine = bitcoin::hashes::sha256::Hash::engine(); hash_engine.input(&tag_hash[..]); hash_engine.input(&tag_hash[..]); @@ -208,11 +207,10 @@ pub fn tagged_announcement_msg(event: &OracleEvent) -> Message { /// Follows the signing validation rules from the [DLC spec](https://github.com/discreetlogcontracts/dlcspecs/blob/master/Oracle.md#signing-algorithm). pub fn tagged_attestation_msg(outcome: &str) -> Message { let tag_hash = bitcoin::hashes::sha256::Hash::hash(ORACLE_ATTESTATION_TAG); - let outcome_hash = bitcoin::hashes::sha256::Hash::hash(outcome.as_bytes()); let mut hash_engine = bitcoin::hashes::sha256::Hash::engine(); hash_engine.input(&tag_hash[..]); hash_engine.input(&tag_hash[..]); - hash_engine.input(&outcome_hash[..]); + hash_engine.input(outcome.as_bytes()); let hash = bitcoin::hashes::sha256::Hash::from_engine(hash_engine); Message::from_digest(hash.to_byte_array()) } @@ -397,7 +395,7 @@ impl OracleAttestation { secp.verify_schnorr(sig, &msg, &self.oracle_public_key) .map_err(|_| Error::InvalidArgument)?; - Ok::<(), dlc::Error>(()) + Ok::<(), ddk_dlc::Error>(()) })?; if !self @@ -598,7 +596,7 @@ mod tests { }; let msg = tagged_attestation_msg("1"); - let sig = dlc::secp_utils::schnorrsig_sign_with_nonce( + let sig = ddk_dlc::secp_utils::schnorrsig_sign_with_nonce( SECP256K1, &msg, &key_pair, @@ -641,7 +639,7 @@ mod tests { }; let msg = tagged_attestation_msg("1"); - let sig = dlc::secp_utils::schnorrsig_sign_with_nonce( + let sig = ddk_dlc::secp_utils::schnorrsig_sign_with_nonce( SECP256K1, &msg, &key_pair, diff --git a/dlc-messages/src/ser_impls.rs b/dlc-messages/src/ser_impls.rs index 953706fc..66f3995a 100644 --- a/dlc-messages/src/ser_impls.rs +++ b/dlc-messages/src/ser_impls.rs @@ -3,8 +3,8 @@ use bitcoin::Address; use bitcoin::Network; use bitcoin::SignedAmount; -use dlc::dlc_input::DlcInputInfo; -use dlc::{EnumerationPayout, PartyParams, Payout, TxInputInfo}; +use ddk_dlc::dlc_input::DlcInputInfo; +use ddk_dlc::{EnumerationPayout, PartyParams, Payout, TxInputInfo}; use lightning::io::Read; use lightning::ln::msgs::DecodeError; use lightning::ln::wire::Type; diff --git a/dlc-trie/Cargo.toml b/dlc-trie/Cargo.toml index 17c30a49..897fd62b 100644 --- a/dlc-trie/Cargo.toml +++ b/dlc-trie/Cargo.toml @@ -3,21 +3,21 @@ authors = ["benny b ", "Crypto Garage"] description = "Data structures for storage and retrival of numerical Discreet Log Contracts (DLC)." homepage = "https://github.com/bennyhodl/dlcdevkit" license-file = "../LICENSE" -name = "dlc-trie" +name = "ddk-trie" repository = "https://github.com/bennyhodl/dlcdevkit/tree/master/dlc-trie" -version = "0.7.1" +version = "0.0.21" edition = "2015" [features] default = ["std"] -std = ["dlc/std", "bitcoin/std"] -no-std = ["dlc/no-std"] +std = ["ddk-dlc/std", "bitcoin/std"] +no-std = ["ddk-dlc/no-std"] parallel = ["rayon"] -use-serde = ["serde", "dlc/use-serde"] +use-serde = ["serde", "ddk-dlc/use-serde"] [dependencies] bitcoin = { version = "0.32.6", default-features = false } -dlc = { path = "../dlc", default-features = false } +ddk-dlc = { path = "../dlc", default-features = false } rayon = {version = "1.5", optional = true} secp256k1-zkp = {version = "0.11.0" } serde = {version = "1.0", optional = true, default-features = false, features = ["derive"]} diff --git a/dlc-trie/src/digit_decomposition.rs b/dlc-trie/src/digit_decomposition.rs index 602ded6e..29114e61 100644 --- a/dlc-trie/src/digit_decomposition.rs +++ b/dlc-trie/src/digit_decomposition.rs @@ -1,6 +1,6 @@ //! Utility functions to decompose numeric outcome values -use dlc::{Payout, RangePayout}; +use ddk_dlc::{Payout, RangePayout}; /// Decompose a numeric value into digits in the specified base. If the decomposed /// value contains less than `nb_digits`, zeroes will be prepended to reach `nb_digits` @@ -202,7 +202,7 @@ pub fn group_by_ignoring_digits( #[cfg(test)] mod tests { use bitcoin::Amount; - use dlc::{Payout, RangePayout}; + use ddk_dlc::{Payout, RangePayout}; struct DecompositionTestCase { composed: usize, decomposed: Vec, diff --git a/dlc-trie/src/digit_trie.rs b/dlc-trie/src/digit_trie.rs index ca657c86..3173d6a1 100644 --- a/dlc-trie/src/digit_trie.rs +++ b/dlc-trie/src/digit_trie.rs @@ -2,7 +2,7 @@ //! Data structure to store and lookup digit decomposition data. use crate::{LookupResult, Node}; -use dlc::Error; +use ddk_dlc::Error; /// Structure to store data inserted and looked-up based on digit paths. #[derive(Clone)] diff --git a/dlc-trie/src/lib.rs b/dlc-trie/src/lib.rs index f77ebf31..98a579c4 100644 --- a/dlc-trie/src/lib.rs +++ b/dlc-trie/src/lib.rs @@ -1,7 +1,7 @@ //! # Dlc-trie //! Package for storing and retrieving DLC data using tries. -#![crate_name = "dlc_trie"] +#![crate_name = "ddk_trie"] // Coding conventions #![forbid(unsafe_code)] #![deny(non_upper_case_globals)] @@ -13,7 +13,7 @@ #![deny(missing_docs)] extern crate bitcoin; -extern crate dlc; +extern crate ddk_dlc; #[cfg(feature = "parallel")] extern crate rayon; extern crate secp256k1_zkp; @@ -21,7 +21,7 @@ extern crate secp256k1_zkp; extern crate serde; use bitcoin::{Amount, Script, Transaction}; -use dlc::{Error, RangePayout}; +use ddk_dlc::{Error, RangePayout}; #[cfg(feature = "parallel")] use rayon::prelude::*; use secp256k1_zkp::{All, EcdsaAdaptorSignature, PublicKey, Secp256k1, SecretKey}; @@ -243,7 +243,7 @@ fn sign_helper>( &x.paths, precomputed_points, )?; - let adaptor_sig = dlc::create_cet_adaptor_sig_from_point( + let adaptor_sig = ddk_dlc::create_cet_adaptor_sig_from_point( secp, &cets[x.value.cet_index], &adaptor_point, @@ -277,7 +277,7 @@ fn sign_helper>( &x.paths, precomputed_points, )?; - let adaptor_sig = dlc::create_cet_adaptor_sig_from_point( + let adaptor_sig = ddk_dlc::create_cet_adaptor_sig_from_point( secp, &cets[x.value.cet_index], &adaptor_point, @@ -313,7 +313,7 @@ fn verify_helper>( if x.value.adaptor_index > max_adaptor_index { max_adaptor_index = x.value.adaptor_index; } - dlc::verify_cet_adaptor_sig_from_point( + ddk_dlc::verify_cet_adaptor_sig_from_point( secp, &adaptor_sig, cet, @@ -347,7 +347,7 @@ fn verify_helper>( utils::get_adaptor_point_for_indexed_paths(&x.indexes, &x.paths, precomputed_points)?; let adaptor_sig = adaptor_sigs[x.value.adaptor_index]; let cet = &cets[x.value.cet_index]; - dlc::verify_cet_adaptor_sig_from_point( + ddk_dlc::verify_cet_adaptor_sig_from_point( secp, &adaptor_sig, cet, diff --git a/dlc-trie/src/multi_oracle_trie.rs b/dlc-trie/src/multi_oracle_trie.rs index c71fedd2..b92b16df 100644 --- a/dlc-trie/src/multi_oracle_trie.rs +++ b/dlc-trie/src/multi_oracle_trie.rs @@ -9,7 +9,7 @@ use crate::digit_trie::{DigitTrie, DigitTrieDump, DigitTrieIter}; use crate::multi_trie::{MultiTrie, MultiTrieDump, MultiTrieIterator}; use crate::utils::{get_value_callback, pre_pad_vec}; use crate::{DlcTrie, IndexedPath, LookupResult, OracleNumericInfo, RangeInfo, TrieIterInfo}; -use dlc::{Error, RangePayout}; +use ddk_dlc::{Error, RangePayout}; /// Data structure used to store adaptor signature information for numerical /// outcome DLC with t of n oracles where at least t oracles need to sign the @@ -359,7 +359,7 @@ impl Iterator for MultiOracleTrieIter<'_> { #[cfg(test)] mod tests { use bitcoin::Amount; - use dlc::{Payout, RangePayout}; + use ddk_dlc::{Payout, RangePayout}; use crate::{test_utils::get_variable_oracle_numeric_infos, DlcTrie}; diff --git a/dlc-trie/src/multi_oracle_trie_with_diff.rs b/dlc-trie/src/multi_oracle_trie_with_diff.rs index f741da10..e511b1dd 100644 --- a/dlc-trie/src/multi_oracle_trie_with_diff.rs +++ b/dlc-trie/src/multi_oracle_trie_with_diff.rs @@ -8,7 +8,7 @@ use crate::multi_trie::{MultiTrie, MultiTrieDump, MultiTrieIterator}; use crate::utils::get_value_callback; use crate::{DlcTrie, OracleNumericInfo, RangeInfo, TrieIterInfo}; -use dlc::{Error, RangePayout}; +use ddk_dlc::{Error, RangePayout}; /// Data structure used to store adaptor signature information for numerical /// outcome DLC with multiple oracles where some difference between the outcomes @@ -168,7 +168,7 @@ impl Iterator for MultiOracleTrieWithDiffIter<'_> { #[cfg(test)] mod tests { use bitcoin::Amount; - use dlc::{Payout, RangePayout}; + use ddk_dlc::{Payout, RangePayout}; use crate::{test_utils::get_variable_oracle_numeric_infos, DlcTrie}; diff --git a/dlc-trie/src/multi_trie.rs b/dlc-trie/src/multi_trie.rs index 1383b7be..75cf27de 100644 --- a/dlc-trie/src/multi_trie.rs +++ b/dlc-trie/src/multi_trie.rs @@ -6,8 +6,8 @@ use crate::{ LookupResult, Node, OracleNumericInfo, }; use combination_iterator::CombinationIterator; +use ddk_dlc::Error; use digit_trie::{DigitTrie, DigitTrieDump, DigitTrieIter}; -use dlc::Error; use multi_oracle::compute_outcome_combinations; #[derive(Clone, Debug)] diff --git a/dlc-trie/src/utils.rs b/dlc-trie/src/utils.rs index 5a1bd635..b0024cd1 100644 --- a/dlc-trie/src/utils.rs +++ b/dlc-trie/src/utils.rs @@ -1,6 +1,6 @@ //! Utility functions when working with DLC trie -use dlc::Error; +use ddk_dlc::Error; use secp256k1_zkp::PublicKey; use crate::{ diff --git a/dlc/Cargo.toml b/dlc/Cargo.toml index f1303ef1..fa565d0e 100644 --- a/dlc/Cargo.toml +++ b/dlc/Cargo.toml @@ -3,9 +3,9 @@ authors = ["benny b ", "Crypto Garage"] description = "Creation, signing and verification of Discreet Log Contracts (DLC) transactions." homepage = "https://github.com/bennyhodl/dlcdevkit" license-file = "../LICENSE" -name = "dlc" +name = "ddk-dlc" repository = "https://github.com/bennyhodl/dlcdevkit/tree/master/dlc" -version = "0.7.1" +version = "0.0.21" edition = "2015" [dependencies] diff --git a/dlc/benches/benchmarks.rs b/dlc/benches/benchmarks.rs index 3e09acc3..07f45094 100644 --- a/dlc/benches/benchmarks.rs +++ b/dlc/benches/benchmarks.rs @@ -1,7 +1,7 @@ #![cfg_attr(all(test, feature = "unstable"), feature(test))] extern crate bitcoin; -extern crate dlc; +extern crate ddk_dlc; extern crate rayon; extern crate secp256k1_zkp; #[cfg(all(test, feature = "unstable"))] @@ -11,7 +11,7 @@ extern crate test; mod benches { use bitcoin::{consensus::Decodable, ScriptBuf, Transaction}; - use dlc::*; + use ddk_dlc::*; use rayon::prelude::*; use secp256k1_zkp::{ global::SECP256K1, rand::thread_rng, rand::RngCore, Keypair, Message, PublicKey, SecretKey, diff --git a/kormir/Cargo.toml b/kormir/Cargo.toml index 7f2e791a..a363a4d0 100644 --- a/kormir/Cargo.toml +++ b/kormir/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "kormir" -version = "0.4.4" +version = "0.5.0" edition = "2021" authors = ["benthecarman ", "benny b "] description = "Oracle implementation for DLCs" @@ -15,8 +15,8 @@ nostr = ["dep:nostr", "dep:base64"] [dependencies] bitcoin = { version = "0.32.6", features = ["serde"] } -dlc = { path = "../dlc", features = ["use-serde"] } -dlc-messages = { path = "../dlc-messages", features = [ "use-serde"] } +ddk-dlc = { path = "../dlc", features = ["use-serde"] } +ddk-messages = { path = "../dlc-messages", features = [ "use-serde"] } lightning = "0.1.5" log = "0.4.22" nostr = { version = "0.40.0", optional = true } @@ -24,6 +24,7 @@ base64 = { version = "0.13.1", optional = true } serde = "1.0" secp256k1-zkp = "0.11" hex = "0.4.3" +serde_json = "1.0.142" [dev-dependencies] tokio = { version = "1.11.0", features = ["full"] } diff --git a/kormir/src/lib.rs b/kormir/src/lib.rs index cf851b2f..a416ec49 100644 --- a/kormir/src/lib.rs +++ b/kormir/src/lib.rs @@ -17,8 +17,8 @@ use std::str::FromStr; pub use bitcoin; pub use bitcoin::secp256k1::schnorr::Signature; -use dlc_messages::oracle_msgs::DigitDecompositionEventDescriptor; -pub use dlc_messages::oracle_msgs::{ +use ddk_messages::oracle_msgs::DigitDecompositionEventDescriptor; +pub use ddk_messages::oracle_msgs::{ EnumEventDescriptor, EventDescriptor, OracleAnnouncement, OracleAttestation, OracleEvent, }; pub use lightning; @@ -116,7 +116,7 @@ impl Oracle { oracle_event.validate().map_err(|_| Error::Internal)?; // create signature - let msg = dlc_messages::oracle_msgs::tagged_announcement_msg(&oracle_event); + let msg = ddk_messages::oracle_msgs::tagged_announcement_msg(&oracle_event); let announcement_signature = self.secp.sign_schnorr_no_aux_rand(&msg, &self.key_pair); let ann = OracleAnnouncement { @@ -155,9 +155,9 @@ impl Oracle { let nonce_index = data.indexes.first().expect("Already checked length"); let nonce_key = self.get_nonce_key(*nonce_index); - let msg = dlc_messages::oracle_msgs::tagged_attestation_msg(&outcome); + let msg = ddk_messages::oracle_msgs::tagged_attestation_msg(&outcome); - let sig = dlc::secp_utils::schnorrsig_sign_with_nonce( + let sig = ddk_dlc::secp_utils::schnorrsig_sign_with_nonce( &self.secp, &msg, &self.key_pair, @@ -238,7 +238,7 @@ impl Oracle { oracle_event.validate().map_err(|_| Error::Internal)?; // create signature - let msg = dlc_messages::oracle_msgs::tagged_announcement_msg(&oracle_event); + let msg = ddk_messages::oracle_msgs::tagged_announcement_msg(&oracle_event); let announcement_signature = self.secp.sign_schnorr_no_aux_rand(&msg, &self.key_pair); let ann = OracleAnnouncement { @@ -311,8 +311,8 @@ impl Oracle { .zip(nonce_keys) .enumerate() .map(|(idx, (outcome, nonce_key))| { - let msg = dlc_messages::oracle_msgs::tagged_attestation_msg(outcome); - let sig = dlc::secp_utils::schnorrsig_sign_with_nonce( + let msg = ddk_messages::oracle_msgs::tagged_attestation_msg(outcome); + let sig = ddk_dlc::secp_utils::schnorrsig_sign_with_nonce( &self.secp, &msg, &self.key_pair, @@ -467,6 +467,25 @@ mod test { ); } + #[tokio::test] + async fn create_oracle_test_vectors() { + let oracle = create_oracle(); + let ann = oracle + .create_enum_event( + "Test".to_string(), + vec![ + "a".to_string(), + "b".to_string(), + "c".to_string(), + "d".to_string(), + ], + 1623133104, + ) + .await + .unwrap(); + println!("{}", serde_json::to_string_pretty(&ann).unwrap()) + } + #[tokio::test] async fn test_sign_unsigned_numeric_event() { let oracle = create_oracle(); diff --git a/kormir/src/nostr_events.rs b/kormir/src/nostr_events.rs index 026cd1cd..9c8854bc 100644 --- a/kormir/src/nostr_events.rs +++ b/kormir/src/nostr_events.rs @@ -1,4 +1,4 @@ -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; use lightning::util::ser::Writeable; use nostr::event::Error; use nostr::{Event, EventBuilder, EventId, Keys, Kind, Tag}; diff --git a/kormir/src/storage.rs b/kormir/src/storage.rs index dc20e3cd..1e652dea 100644 --- a/kormir/src/storage.rs +++ b/kormir/src/storage.rs @@ -1,6 +1,6 @@ use crate::error::Error; use bitcoin::secp256k1::schnorr::Signature; -use dlc_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; +use ddk_messages::oracle_msgs::{OracleAnnouncement, OracleAttestation}; use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std::sync::atomic::{AtomicU32, Ordering}; diff --git a/payouts/Cargo.toml b/payouts/Cargo.toml index b2f6687f..484bf362 100644 --- a/payouts/Cargo.toml +++ b/payouts/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "ddk-payouts" -version = "0.0.16" +version = "0.0.21" authors = ["benny b "] description = "Library to build payout functions for DLC contracts." license = "MIT" @@ -9,9 +9,9 @@ edition = "2021" [dependencies] ddk-manager = { version = "0.7.5", path = "../ddk-manager", features = ["use-serde"] } -dlc = { path = "../dlc", features = ["use-serde"] } -dlc-messages = { path = "../dlc-messages", features = ["use-serde"] } -dlc-trie = { path = "../dlc-trie", features = ["use-serde"] } +ddk-dlc = { path = "../dlc", features = ["use-serde"] } +ddk-messages = { path = "../dlc-messages", features = ["use-serde"] } +ddk-trie = { path = "../dlc-trie", features = ["use-serde"] } bitcoin = "0.32.6" serde = { version = "1.0.209", features = ["derive"] } diff --git a/payouts/src/enumeration.rs b/payouts/src/enumeration.rs index 0cf3c607..cc3c64e8 100644 --- a/payouts/src/enumeration.rs +++ b/payouts/src/enumeration.rs @@ -2,12 +2,12 @@ use std::str::FromStr; use bitcoin::key::XOnlyPublicKey; use bitcoin::Amount; +use ddk_dlc::EnumerationPayout; use ddk_manager::contract::enum_descriptor::EnumDescriptor; use ddk_manager::contract::{ contract_input::{ContractInput, ContractInputInfo, OracleInput}, ContractDescriptor, }; -use dlc::EnumerationPayout; pub fn create_contract_input( outcome_payouts: Vec, diff --git a/payouts/src/lib.rs b/payouts/src/lib.rs index 45e99a31..1fd2c336 100644 --- a/payouts/src/lib.rs +++ b/payouts/src/lib.rs @@ -18,7 +18,7 @@ use ddk_manager::{ RoundingInterval, RoundingIntervals, }, }; -use dlc_trie::OracleNumericInfo; +use ddk_trie::OracleNumericInfo; pub fn generate_payout_curve( min_price: u64, diff --git a/payouts/src/options.rs b/payouts/src/options.rs index 7afdfefd..7d5c3bd2 100644 --- a/payouts/src/options.rs +++ b/payouts/src/options.rs @@ -8,8 +8,8 @@ use ddk_manager::{ }, payout_curve::{PayoutFunction, RoundingInterval, RoundingIntervals}, }; -use dlc_messages::oracle_msgs::OracleAnnouncement; -use dlc_trie::OracleNumericInfo; +use ddk_messages::oracle_msgs::OracleAnnouncement; +use ddk_trie::OracleNumericInfo; // Helper enums #[derive(Copy, Clone)] diff --git a/payouts/src/parlay.rs b/payouts/src/parlay.rs index e9c40536..ae5efa01 100644 --- a/payouts/src/parlay.rs +++ b/payouts/src/parlay.rs @@ -10,7 +10,7 @@ use ddk_manager::{ RoundingInterval, RoundingIntervals, }, }; -use dlc_trie::OracleNumericInfo; +use ddk_trie::OracleNumericInfo; /// Create a complete DLC Contract using oracle-normalized scores pub fn create_parlay_contract( diff --git a/testconfig/contract_binaries/Accepted b/testconfig/contract_binaries/Accepted index 4b72a8c2..5049c202 100644 Binary files a/testconfig/contract_binaries/Accepted and b/testconfig/contract_binaries/Accepted differ diff --git a/testconfig/contract_binaries/Closed b/testconfig/contract_binaries/Closed index 10fe6d9f..3cf4cba4 100644 Binary files a/testconfig/contract_binaries/Closed and b/testconfig/contract_binaries/Closed differ diff --git a/testconfig/contract_binaries/Confirmed b/testconfig/contract_binaries/Confirmed index fd238197..a0cc2b55 100644 Binary files a/testconfig/contract_binaries/Confirmed and b/testconfig/contract_binaries/Confirmed differ diff --git a/testconfig/contract_binaries/Offered b/testconfig/contract_binaries/Offered index f29633f8..969acb9d 100644 Binary files a/testconfig/contract_binaries/Offered and b/testconfig/contract_binaries/Offered differ diff --git a/testconfig/contract_binaries/PreClosed b/testconfig/contract_binaries/PreClosed index c6573db3..ed1765b2 100644 Binary files a/testconfig/contract_binaries/PreClosed and b/testconfig/contract_binaries/PreClosed differ diff --git a/testconfig/contract_binaries/Signed b/testconfig/contract_binaries/Signed index daa5ae8e..0d59a1ed 100644 Binary files a/testconfig/contract_binaries/Signed and b/testconfig/contract_binaries/Signed differ diff --git a/testconfig/contract_binaries/old/Accepted b/testconfig/contract_binaries/old/Accepted new file mode 100644 index 00000000..4b72a8c2 Binary files /dev/null and b/testconfig/contract_binaries/old/Accepted differ diff --git a/testconfig/contract_binaries/old/Closed b/testconfig/contract_binaries/old/Closed new file mode 100644 index 00000000..10fe6d9f Binary files /dev/null and b/testconfig/contract_binaries/old/Closed differ diff --git a/testconfig/contract_binaries/old/Confirmed b/testconfig/contract_binaries/old/Confirmed new file mode 100644 index 00000000..fd238197 Binary files /dev/null and b/testconfig/contract_binaries/old/Confirmed differ diff --git a/testconfig/contract_binaries/old/Offered b/testconfig/contract_binaries/old/Offered new file mode 100644 index 00000000..f29633f8 Binary files /dev/null and b/testconfig/contract_binaries/old/Offered differ diff --git a/testconfig/contract_binaries/old/PreClosed b/testconfig/contract_binaries/old/PreClosed new file mode 100644 index 00000000..c6573db3 Binary files /dev/null and b/testconfig/contract_binaries/old/PreClosed differ diff --git a/testconfig/contract_binaries/old/Signed b/testconfig/contract_binaries/old/Signed new file mode 100644 index 00000000..daa5ae8e Binary files /dev/null and b/testconfig/contract_binaries/old/Signed differ diff --git a/testconfig/scripts/generate_enumeration_contract_binaries.sh b/testconfig/scripts/generate_enumeration_contract_binaries.sh index 44fc6cb7..2b84cdd0 100755 --- a/testconfig/scripts/generate_enumeration_contract_binaries.sh +++ b/testconfig/scripts/generate_enumeration_contract_binaries.sh @@ -6,7 +6,7 @@ set -e CONTRACT_STATES=("OfferedContract" "AcceptedContract" "SignedContract" "ConfirmedContract" "PreClosedContract" "ClosedContract") # Destination folder at top level -DEST=${PWD}/test_config/contract_binaries/ +DEST=${PWD}/testconfig/contract_binaries/ # Create the destination directory if it doesn't exist mkdir -p ${DEST}