diff --git a/bitcoin-rpc-provider/src/lib.rs b/bitcoin-rpc-provider/src/lib.rs index 22432d7b..7a1b681d 100644 --- a/bitcoin-rpc-provider/src/lib.rs +++ b/bitcoin-rpc-provider/src/lib.rs @@ -195,13 +195,13 @@ impl ContractSignerProvider for BitcoinCoreProvider { // if not something has gone wrong assert_eq!(label_map.len(), 1); - let pk = self + let sk = self .client .lock() .unwrap() .dump_private_key(address) .map_err(rpc_err_to_manager_err)?; - Ok(SimpleSigner::new(pk.inner)) + Ok(SimpleSigner::new(sk.inner)) } else { let sk = SecretKey::new(&mut thread_rng()); let network = self.get_network()?; diff --git a/dlc-manager/src/channel_updater.rs b/dlc-manager/src/channel_updater.rs index 85b6e388..ecd2ff97 100644 --- a/dlc-manager/src/channel_updater.rs +++ b/dlc-manager/src/channel_updater.rs @@ -88,6 +88,7 @@ where let keys_id = signer_provider.derive_signer_key_id(true, id); let signer = signer_provider.derive_contract_signer(keys_id)?; let (offer_params, funding_inputs_info) = crate::utils::get_party_params( + secp, contract.offer_collateral, contract.fee_rate, wallet, @@ -157,6 +158,7 @@ where let signer = signer_provider.derive_contract_signer(offered_contract.keys_id)?; let (accept_params, funding_inputs) = crate::utils::get_party_params( + secp, total_collateral - offered_contract.offer_params.collateral, offered_contract.fee_rate_per_vb, wallet, diff --git a/dlc-manager/src/contract_updater.rs b/dlc-manager/src/contract_updater.rs index 94150d1a..f3920685 100644 --- a/dlc-manager/src/contract_updater.rs +++ b/dlc-manager/src/contract_updater.rs @@ -26,7 +26,8 @@ use crate::{ /// Creates an [`OfferedContract`] and [`OfferDlc`] message from the provided /// contract and oracle information. -pub fn offer_contract( +pub fn offer_contract( + secp: &Secp256k1, contract_input: &ContractInput, oracle_announcements: Vec>, refund_delay: u32, @@ -48,6 +49,7 @@ where let keys_id = signer_provider.derive_signer_key_id(true, id); let signer = signer_provider.derive_contract_signer(keys_id)?; let (party_params, funding_inputs_info) = crate::utils::get_party_params( + secp, contract_input.offer_collateral, contract_input.fee_rate, wallet, @@ -90,6 +92,7 @@ where let signer = signer_provider.derive_contract_signer(offered_contract.keys_id)?; let (accept_params, funding_inputs) = crate::utils::get_party_params( + secp, total_collateral - offered_contract.offer_params.collateral, offered_contract.fee_rate_per_vb, wallet, diff --git a/dlc-manager/src/lib.rs b/dlc-manager/src/lib.rs index 16849cb4..ac2a007d 100644 --- a/dlc-manager/src/lib.rs +++ b/dlc-manager/src/lib.rs @@ -37,7 +37,6 @@ pub mod payout_curve; mod utils; use bitcoin::psbt::PartiallySignedTransaction; -use bitcoin::secp256k1::SECP256K1; use bitcoin::{Address, Block, OutPoint, Script, Transaction, TxOut, Txid}; use chain_monitor::ChainMonitor; use channel::offered_channel::OfferedChannel; @@ -50,8 +49,8 @@ use dlc_messages::ser_impls::{read_address, write_address}; use error::Error; use lightning::ln::msgs::DecodeError; use lightning::util::ser::{Readable, Writeable, Writer}; -use secp256k1_zkp::XOnlyPublicKey; -use secp256k1_zkp::{PublicKey, SecretKey}; +use secp256k1_zkp::{PublicKey, SecretKey, Signing}; +use secp256k1_zkp::{Secp256k1, XOnlyPublicKey}; use std::collections::HashMap; use std::ops::Deref; use std::sync::RwLock; @@ -86,7 +85,7 @@ impl Time for SystemTimeProvider { /// Provides signing related functionalities. pub trait ContractSigner: Clone { /// Get the public key associated with the [`ContractSigner`]. - fn get_public_key(&self) -> Result; + fn get_public_key(&self, secp: &Secp256k1) -> Result; /// Returns the secret key associated with the [`ContractSigner`]. // todo: remove this method and add create_adaptor_signature to the trait fn get_secret_key(&self) -> Result; @@ -106,8 +105,8 @@ impl SimpleSigner { } impl ContractSigner for SimpleSigner { - fn get_public_key(&self) -> Result { - Ok(self.secret_key.public_key(SECP256K1)) + fn get_public_key(&self, secp: &Secp256k1) -> Result { + Ok(self.secret_key.public_key(secp)) } fn get_secret_key(&self) -> Result { @@ -116,8 +115,8 @@ impl ContractSigner for SimpleSigner { } impl ContractSigner for SecretKey { - fn get_public_key(&self) -> Result { - Ok(self.public_key(SECP256K1)) + fn get_public_key(&self, secp: &Secp256k1) -> Result { + Ok(self.public_key(secp)) } fn get_secret_key(&self) -> Result { diff --git a/dlc-manager/src/manager.rs b/dlc-manager/src/manager.rs index 6b6dba86..1755b8e3 100644 --- a/dlc-manager/src/manager.rs +++ b/dlc-manager/src/manager.rs @@ -318,6 +318,7 @@ where oracle_announcements: Vec>, ) -> Result { let (offered_contract, offer_msg) = crate::contract_updater::offer_contract( + &self.secp, contract_input, oracle_announcements, REFUND_DELAY, diff --git a/dlc-manager/src/utils.rs b/dlc-manager/src/utils.rs index 244e2edb..322c960d 100644 --- a/dlc-manager/src/utils.rs +++ b/dlc-manager/src/utils.rs @@ -59,7 +59,8 @@ pub(crate) fn compute_id( res } -pub(crate) fn get_party_params( +pub(crate) fn get_party_params( + secp: &Secp256k1, own_collateral: u64, fee_rate: u64, wallet: &W, @@ -70,7 +71,7 @@ where W::Target: Wallet, B::Target: Blockchain, { - let funding_pubkey = signer.get_public_key()?; + let funding_pubkey = signer.get_public_key(secp)?; let payout_addr = wallet.get_new_address()?; let payout_spk = payout_addr.script_pubkey();