Skip to content

Commit

Permalink
bitcoin-serai changes from next
Browse files Browse the repository at this point in the history
Expands the NotEnoughFunds error and enables fetching the entire unsigned
transaction, not just the outputs it'll have.
  • Loading branch information
kayabaNerve committed Sep 20, 2024
1 parent e630084 commit 9eee1d9
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 9 deletions.
14 changes: 9 additions & 5 deletions networks/bitcoin/src/wallet/send.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ pub enum TransactionError {
#[error("fee was too low to pass the default minimum fee rate")]
TooLowFee,
#[error("not enough funds for these payments")]
NotEnoughFunds,
NotEnoughFunds { inputs: u64, payments: u64, fee: u64 },
#[error("transaction was too large")]
TooLargeTransaction,
}
Expand Down Expand Up @@ -213,7 +213,11 @@ impl SignableTransaction {
}

if input_sat < (payment_sat + needed_fee) {
Err(TransactionError::NotEnoughFunds)?;
Err(TransactionError::NotEnoughFunds {
inputs: input_sat,
payments: payment_sat,
fee: needed_fee,
})?;
}

// If there's a change address, check if there's change to give it
Expand Down Expand Up @@ -258,9 +262,9 @@ impl SignableTransaction {
res
}

/// Returns the outputs this transaction will create.
pub fn outputs(&self) -> &[TxOut] {
&self.tx.output
/// Returns the transaction, sans witness, this will create if signed.
pub fn transaction(&self) -> &Transaction {
&self.tx
}

/// Create a multisig machine for this transaction.
Expand Down
6 changes: 3 additions & 3 deletions networks/bitcoin/tests/wallet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,10 +195,10 @@ async_sequential! {
Err(TransactionError::TooLowFee),
);

assert_eq!(
assert!(matches!(
SignableTransaction::new(inputs.clone(), &[(addr(), inputs[0].value() * 2)], None, None, FEE),
Err(TransactionError::NotEnoughFunds),
);
Err(TransactionError::NotEnoughFunds { .. }),
));

assert_eq!(
SignableTransaction::new(inputs, &vec![(addr(), 1000); 10000], None, None, FEE),
Expand Down
2 changes: 1 addition & 1 deletion processor/src/networks/bitcoin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ impl Bitcoin {
panic!("trying to create a bitcoin transaction without inputs")
}
// No outputs left and the change isn't worth enough/not even enough funds to pay the fee
Err(TransactionError::NoOutputs | TransactionError::NotEnoughFunds) => Ok(None),
Err(TransactionError::NoOutputs | TransactionError::NotEnoughFunds { .. }) => Ok(None),
// amortize_fee removes payments which fall below the dust threshold
Err(TransactionError::DustPayment) => panic!("dust payment despite removing dust"),
Err(TransactionError::TooMuchData) => {
Expand Down

0 comments on commit 9eee1d9

Please sign in to comment.