Revert "Reimplement tx_punish check without breaking database changes"

This reverts commit ab33bcde8fccb6b2af97cbb9d45ec82a0500b3a1.
This commit is contained in:
patrini32 2024-06-08 21:32:41 +03:00 committed by patrini32
parent a25decfadb
commit 783bae0f85
2 changed files with 26 additions and 34 deletions

View File

@ -1,6 +1,6 @@
use crate::bitcoin::{parse_rpc_error_code, RpcErrorCode, Wallet};
use crate::protocol::bob::BobState;
use crate::protocol::{Database, State};
use crate::protocol::Database;
use anyhow::{bail, Result};
use bitcoin::Txid;
use std::sync::Arc;
@ -123,19 +123,7 @@ pub async fn refund(
Ok(state)
}
Err(error) => {
let state3 = db
.get_states(swap_id)
.await?
.iter()
.find_map(|state| {
if let State::Bob(BobState::BtcLocked { state3, .. }) = state {
Some(state3.clone())
} else {
None
}
});
if state3
.expect("Error: weren't able to extract State3 from database.")
if state6
.check_for_tx_punish(bitcoin_wallet.as_ref())
.await
.is_ok()

View File

@ -436,6 +436,7 @@ impl State3 {
cancel_timelock: self.cancel_timelock,
punish_timelock: self.punish_timelock,
refund_address: self.refund_address.clone(),
punish_address: self.punish_address.clone(),
tx_lock: self.tx_lock.clone(),
tx_cancel_sig_a: self.tx_cancel_sig_a.clone(),
tx_refund_encsig: self.tx_refund_encsig.clone(),
@ -471,26 +472,6 @@ impl State3 {
tx_cancel_status,
))
}
pub async fn check_for_tx_punish(
&self,
bitcoin_wallet: &bitcoin::Wallet,
) -> Result<Transaction> {
let tx_cancel = bitcoin::TxCancel::new(
&self.tx_lock,
self.cancel_timelock,
self.A,
self.b.public(),
self.tx_cancel_fee,
)?;
let tx_punish = bitcoin::TxPunish::new(
&tx_cancel,
&self.punish_address,
self.punish_timelock,
self.tx_punish_fee,
);
let tx = bitcoin_wallet.get_raw_transaction(tx_punish.txid()).await?;
Ok(tx)
}
}
#[derive(Debug, Clone, Deserialize, Serialize, PartialEq)]
@ -605,6 +586,7 @@ impl State4 {
cancel_timelock: self.cancel_timelock,
punish_timelock: self.punish_timelock,
refund_address: self.refund_address,
punish_address: self.punish_address,
tx_lock: self.tx_lock,
tx_cancel_sig_a: self.tx_cancel_sig_a,
tx_refund_encsig: self.tx_refund_encsig,
@ -646,6 +628,7 @@ pub struct State6 {
cancel_timelock: CancelTimelock,
punish_timelock: PunishTimelock,
refund_address: bitcoin::Address,
punish_address: bitcoin::Address,
tx_lock: bitcoin::TxLock,
tx_cancel_sig_a: Signature,
tx_refund_encsig: bitcoin::EncryptedSignature,
@ -698,6 +681,27 @@ impl State6 {
Ok(tx)
}
pub async fn check_for_tx_punish(
&self,
bitcoin_wallet: &bitcoin::Wallet,
) -> Result<Transaction> {
let tx_cancel = bitcoin::TxCancel::new(
&self.tx_lock,
self.cancel_timelock,
self.A,
self.b.public(),
self.tx_cancel_fee,
)?;
let tx_punish = bitcoin::TxPunish::new(
&tx_cancel,
&self.punish_address,
self.punish_timelock,
self.tx_punish_fee,
);
let tx = bitcoin_wallet.get_raw_transaction(tx_punish.txid()).await?;
Ok(tx)
}
pub async fn submit_tx_cancel(
&self,
bitcoin_wallet: &bitcoin::Wallet,