Skip to content

Commit

Permalink
Skip fee reads in full_stack_target when connecting many blocks
Browse files Browse the repository at this point in the history
When we connect 100 blocks in a row, requiring the fuzz input to
contain 100 fee estimator results is uneccessary, so add a bool
that lets us skip those reads.
  • Loading branch information
TheBlueMatt committed May 31, 2024
1 parent 9f4d907 commit 3c7bfd7
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion fuzz/src/full_stack.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ use std::cell::RefCell;
use std::convert::TryInto;
use std::cmp;
use std::sync::{Arc, Mutex};
use std::sync::atomic::{AtomicU64,AtomicUsize,Ordering};
use std::sync::atomic::{AtomicU64,AtomicUsize,AtomicBool,Ordering};
use bitcoin::bech32::u5;

#[inline]
Expand All @@ -95,6 +95,7 @@ pub fn slice_to_be24(v: &[u8]) -> u32 {
struct InputData {
data: Vec<u8>,
read_pos: AtomicUsize,
halt_fee_est_reads: AtomicBool,
}
impl InputData {
fn get_slice(&self, len: usize) -> Option<&[u8]> {
Expand All @@ -121,6 +122,9 @@ struct FuzzEstimator {
}
impl FeeEstimator for FuzzEstimator {
fn get_est_sat_per_1000_weight(&self, _: ConfirmationTarget) -> u32 {
if self.input.halt_fee_est_reads.load(Ordering::Acquire) {
return 253;
}
//TODO: We should actually be testing at least much more than 64k...
match self.input.get_slice(2) {
Some(slice) => cmp::max(slice_to_be16(slice) as u32, 253),
Expand Down Expand Up @@ -441,6 +445,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
let input = Arc::new(InputData {
data: data.to_vec(),
read_pos: AtomicUsize::new(0),
halt_fee_est_reads: AtomicBool::new(false),
});
let fee_est = Arc::new(FuzzEstimator {
input: input.clone(),
Expand Down Expand Up @@ -698,10 +703,12 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
11 => {
let mut txn = broadcast.txn_broadcasted.lock().unwrap().split_off(0);
if !txn.is_empty() {
input.halt_fee_est_reads.store(true, Ordering::Release);
loss_detector.connect_block(&txn[..]);
for _ in 2..100 {
loss_detector.connect_block(&[]);
}
input.halt_fee_est_reads.store(false, Ordering::Release);
}
for tx in txn.drain(..) {
loss_detector.funding_txn.push(tx);
Expand Down

0 comments on commit 3c7bfd7

Please sign in to comment.