mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-11-30 20:46:33 -05:00
Add get_swap_expired_timelock timelock, other small refactoring
- Add get_swap_expired_timelock endpoint to return expired timelock if one exists. Fails if bitcoin lock tx has not yet published or if swap is already finished. - Rename current_epoch to expired_timelock to enforce consistent method names - Add blocks left until current expired timelock expires (next timelock expires) to ExpiredTimelock struct - Change .expect() to .unwrap() in rpc server method register because those will only fail if we register the same method twice which will never happen
This commit is contained in:
parent
433bf824f9
commit
1b13608d96
9 changed files with 155 additions and 32 deletions
|
|
@ -1,5 +1,5 @@
|
|||
use crate::api::Context;
|
||||
use crate::bitcoin::{Amount, TxLock};
|
||||
use crate::bitcoin::{Amount, ExpiredTimelocks, TxLock};
|
||||
use crate::cli::{list_sellers, EventLoop, SellerStatus};
|
||||
use crate::libp2p_ext::MultiAddrExt;
|
||||
use crate::network::quote::{BidQuote, ZeroQuoteReceived};
|
||||
|
|
@ -115,6 +115,9 @@ pub enum Method {
|
|||
server_address: Option<SocketAddr>,
|
||||
},
|
||||
GetCurrentSwap,
|
||||
GetSwapExpiredTimelock {
|
||||
swap_id: Uuid,
|
||||
},
|
||||
}
|
||||
|
||||
impl Request {
|
||||
|
|
@ -563,6 +566,38 @@ impl Request {
|
|||
"swap_id": SWAP_LOCK.read().await.clone()
|
||||
}))
|
||||
},
|
||||
Method::GetSwapExpiredTimelock { swap_id } => {
|
||||
let swap_state: BobState = context
|
||||
.db
|
||||
.get_state(
|
||||
swap_id,
|
||||
)
|
||||
.await?
|
||||
.try_into()?;
|
||||
|
||||
let bitcoin_wallet = context.bitcoin_wallet.as_ref().context("Could not get Bitcoin wallet")?;
|
||||
|
||||
let timelock = match swap_state {
|
||||
BobState::Started { .. }
|
||||
| BobState::SafelyAborted
|
||||
| BobState::SwapSetupCompleted(_) => bail!("Bitcoin lock transaction has not been published yet"),
|
||||
BobState::BtcLocked { state3: state, .. }
|
||||
| BobState::XmrLockProofReceived { state, .. } => state.expired_timelock(bitcoin_wallet).await,
|
||||
BobState::XmrLocked(state)
|
||||
| BobState::EncSigSent(state) => state.expired_timelock(bitcoin_wallet).await,
|
||||
BobState::CancelTimelockExpired(state)
|
||||
| BobState::BtcCancelled(state) => state.expired_timelock(bitcoin_wallet).await,
|
||||
BobState::BtcPunished { .. } => Ok(ExpiredTimelocks::Punish),
|
||||
// swap is already finished
|
||||
BobState::BtcRefunded(_)
|
||||
| BobState::BtcRedeemed(_)
|
||||
| BobState::XmrRedeemed { .. } => bail!("Bitcoin have already been redeemed or refunded")
|
||||
}?;
|
||||
|
||||
Ok(json!({
|
||||
"timelock": timelock,
|
||||
}))
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue