mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-12-23 22:49:41 -05:00
Add safety checks
(cherry picked from commit 1bd9b6abdca6bb1fbb60835cae58c5c5caad2683)
This commit is contained in:
parent
65a9c1680e
commit
9f09bd759c
@ -495,6 +495,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,9 @@ 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 {
|
||||||
|
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