mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-09-28 20:35:51 +00:00
Merge e81c6dca09
into 2b850924b1
This commit is contained in:
commit
b3363654d7
@ -493,6 +493,30 @@ impl State4 {
|
|||||||
self.b.encsign(self.S_a_bitcoin, tx_redeem.digest())
|
self.b.encsign(self.S_a_bitcoin, tx_redeem.digest())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn check_for_tx_redeem(
|
||||||
|
&self,
|
||||||
|
bitcoin_wallet: &bitcoin::Wallet,
|
||||||
|
) -> Result<State5> {
|
||||||
|
let tx_redeem =
|
||||||
|
bitcoin::TxRedeem::new(&self.tx_lock, &self.redeem_address, self.tx_redeem_fee);
|
||||||
|
let tx_redeem_encsig = self.b.encsign(self.S_a_bitcoin, tx_redeem.digest());
|
||||||
|
|
||||||
|
let tx_redeem_candidate = bitcoin_wallet.get_raw_transaction(tx_redeem.txid()).await?;
|
||||||
|
|
||||||
|
let tx_redeem_sig =
|
||||||
|
tx_redeem.extract_signature_by_key(tx_redeem_candidate, self.b.public())?;
|
||||||
|
let s_a = bitcoin::recover(self.S_a_bitcoin, tx_redeem_sig, tx_redeem_encsig)?;
|
||||||
|
let s_a = monero::private_key_from_secp256k1_scalar(s_a.into());
|
||||||
|
|
||||||
|
Ok(State5 {
|
||||||
|
s_a,
|
||||||
|
s_b: self.s_b,
|
||||||
|
v: self.v,
|
||||||
|
tx_lock: self.tx_lock.clone(),
|
||||||
|
monero_wallet_restore_blockheight: self.monero_wallet_restore_blockheight,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn watch_for_redeem_btc(&self, bitcoin_wallet: &bitcoin::Wallet) -> Result<State5> {
|
pub async fn watch_for_redeem_btc(&self, bitcoin_wallet: &bitcoin::Wallet) -> Result<State5> {
|
||||||
let tx_redeem =
|
let tx_redeem =
|
||||||
bitcoin::TxRedeem::new(&self.tx_lock, &self.redeem_address, self.tx_redeem_fee);
|
bitcoin::TxRedeem::new(&self.tx_lock, &self.redeem_address, self.tx_redeem_fee);
|
||||||
|
@ -185,7 +185,10 @@ async fn next_state(
|
|||||||
BobState::XmrLocked(state) => {
|
BobState::XmrLocked(state) => {
|
||||||
let tx_lock_status = bitcoin_wallet.subscribe_to(state.tx_lock.clone()).await;
|
let tx_lock_status = bitcoin_wallet.subscribe_to(state.tx_lock.clone()).await;
|
||||||
|
|
||||||
if let ExpiredTimelocks::None = state.expired_timelock(bitcoin_wallet).await? {
|
if let Ok(state5) = state.check_for_tx_redeem(bitcoin_wallet).await {
|
||||||
|
// this is in case we send the encrypted signature to alice, but we don't get confirmation that she received it. alice would be able to redeem the btc, but we would be stuck in xmrlocked, never being able to redeem the xmr.
|
||||||
|
BobState::BtcRedeemed(state5)
|
||||||
|
} else if let ExpiredTimelocks::None = state.expired_timelock(bitcoin_wallet).await? {
|
||||||
// Alice has locked Xmr
|
// Alice has locked Xmr
|
||||||
// Bob sends Alice his key
|
// Bob sends Alice his key
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user