use bitcoin::{Amount, FeeRate, Transaction, Txid};
use ark::VtxoId;
use crate::exit::models::states::ExitTxOrigin;
#[derive(Clone, Debug)]
pub struct ExitCpfpRequest {
pub vtxo_id: VtxoId,
pub exit_tx: Transaction,
pub rbf_requirement: Option<RbfRequirement>,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct RbfRequirement {
pub min_fee_rate: FeeRate,
pub current_package_fee: Amount,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ExitTransactionPackage {
pub exit: TransactionInfo,
pub child: Option<ChildTransactionInfo>,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct TransactionInfo {
pub txid: Txid,
pub tx: Transaction,
}
#[derive(Clone, Debug, Eq, PartialEq)]
pub struct ChildTransactionInfo {
pub info: TransactionInfo,
pub fee_info: Option<FeeInfo>,
pub origin: ExitTxOrigin,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq, Deserialize, Serialize)]
pub struct FeeInfo {
#[serde(rename = "fee_rate_kwu")]
pub fee_rate: FeeRate,
#[serde(rename = "total_fee_sat", with = "bitcoin::amount::serde::as_sat")]
pub total_fee: Amount,
}