mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2025-03-08 06:25:57 -05:00

We achieve our optimizations in three ways: 1. Batching calls instead of making them individually. To get access to the batch calls, we replace all our calls to the HTTP interface with RPC calls. 2. Never directly make network calls based on function calls on the wallet. Instead, inquiring about the status of a script always just returns information based on local data. With every call, we check when we last refreshed the local data and do so if the data is considered to be too old. This interval is configurable. 3. Use electrum's notification feature to get updated with the latest blockheight. Co-authored-by: Thomas Eizinger <thomas@eizinger.io> Co-authored-by: Rishab Sharma <rishflab@hotmail.com>
58 lines
1.4 KiB
Rust
58 lines
1.4 KiB
Rust
use anyhow::Context;
|
|
use bdk::electrum_client::HeaderNotification;
|
|
use serde::{Deserialize, Serialize};
|
|
use std::convert::{TryFrom, TryInto};
|
|
use std::ops::Add;
|
|
|
|
/// Represent a block height, or block number, expressed in absolute block
|
|
/// count. E.g. The transaction was included in block #655123, 655123 block
|
|
/// after the genesis block.
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Ord, PartialOrd, Serialize, Deserialize)]
|
|
#[serde(transparent)]
|
|
pub struct BlockHeight(u32);
|
|
|
|
impl From<BlockHeight> for u32 {
|
|
fn from(height: BlockHeight) -> Self {
|
|
height.0
|
|
}
|
|
}
|
|
|
|
impl BlockHeight {
|
|
pub const fn new(block_height: u32) -> Self {
|
|
Self(block_height)
|
|
}
|
|
pub const fn checked_sub(self, rhs: Self) -> Option<Self> {
|
|
match self.0.checked_sub(rhs.0) {
|
|
Some(result) => Some(BlockHeight(result)),
|
|
None => None,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl TryFrom<HeaderNotification> for BlockHeight {
|
|
type Error = anyhow::Error;
|
|
|
|
fn try_from(value: HeaderNotification) -> Result<Self, Self::Error> {
|
|
Ok(Self(
|
|
value
|
|
.height
|
|
.try_into()
|
|
.context("Failed to fit usize into u32")?,
|
|
))
|
|
}
|
|
}
|
|
|
|
impl Add<u32> for BlockHeight {
|
|
type Output = BlockHeight;
|
|
fn add(self, rhs: u32) -> Self::Output {
|
|
BlockHeight(self.0 + rhs)
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Clone, Copy, PartialEq)]
|
|
pub enum ExpiredTimelocks {
|
|
None,
|
|
Cancel,
|
|
Punish,
|
|
}
|