{ Some((outpoint, utxo_amount)) => (outpoint, utxo_amount), _ => return Err(Self::not_found()), }; let mut transaction = Transaction { version: 1, lock_time: LockTime::ZERO, input: vec![TxIn { previous_output: *outpoint, script_sig: ScriptBuf::new(), sequence: Sequence::ENABLE_RBF_NO_LOCKTIME, witness: Witness::new(), }], output: vec![ TxOut { value: value.to_sat(), script_pubkey: address.payload.script_pubkey(), }, TxOut { value: (*utxo_amount - value).to_sat(), script_pubkey: address.payload.script_pubkey(), }, ], }; #[allow(clippy::cast_possible_truncation)] #[allow(clippy::cast_sign_loss)] let fee = (fee_rate.unwrap_or(1.0) * transaction.vsize() as f64).round() as u64; transaction.output[1].value -= fee; state.mempool.push(transaction); state.sent.push(Sent { address: address.assume_checked(), amount,