From cf09a4c239753588bba2cecfedb896dff3d9def2 Mon Sep 17 00:00:00 2001 From: thesimplekid Date: Thu, 5 Sep 2024 17:36:57 +0100 Subject: [PATCH] feat: add unbalanced check --- crates/cdk/src/mint/error.rs | 3 +++ crates/cdk/src/mint/mod.rs | 18 +++++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/crates/cdk/src/mint/error.rs b/crates/cdk/src/mint/error.rs index cfb884c4..6c9c3009 100644 --- a/crates/cdk/src/mint/error.rs +++ b/crates/cdk/src/mint/error.rs @@ -26,6 +26,9 @@ pub enum Error { /// Not engough inputs provided #[error("Inputs: `{0}`, Outputs: `{0}`, Fee: `{0}`")] InsufficientInputs(u64, u64, u64), + /// Transaction unbalanced + #[error("Inputs: `{0}`, Outputs: `{0}`, Fee: `{0}`")] + TransactionUnbalanced(u64, u64, u64), /// Duplicate proofs provided #[error("Duplicate proofs")] DuplicateProofs, diff --git a/crates/cdk/src/mint/mod.rs b/crates/cdk/src/mint/mod.rs index 26a24510..cfbd1a69 100644 --- a/crates/cdk/src/mint/mod.rs +++ b/crates/cdk/src/mint/mod.rs @@ -711,7 +711,9 @@ impl Mint { let fee = self.get_proofs_fee(&swap_request.inputs).await?; - if proofs_total < output_total.checked_add(fee).ok_or(Error::AmountOverflow)? { + let total_with_fee = output_total.checked_add(fee).ok_or(Error::AmountOverflow)?; + + if proofs_total < total_with_fee { tracing::info!( "Swap request without enough inputs: {}, outputs {}, fee {}", proofs_total, @@ -725,6 +727,20 @@ impl Mint { )); } + if proofs_total != total_with_fee { + tracing::info!( + "Swap request unbalanced: {}, outputs {}, fee {}", + proofs_total, + output_total, + fee + ); + return Err(Error::InsufficientInputs( + proofs_total.into(), + output_total.into(), + fee.into(), + )); + } + let proof_count = swap_request.inputs.len(); let input_ys = swap_request