From f43193bf0e409d06b585f5640ef770870dd5421d Mon Sep 17 00:00:00 2001 From: raphjaph Date: Fri, 1 Dec 2023 15:47:54 -0300 Subject: [PATCH 1/6] progress --- src/subcommand/preview.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/subcommand/preview.rs b/src/subcommand/preview.rs index eea71af653..861ebd7a56 100644 --- a/src/subcommand/preview.rs +++ b/src/subcommand/preview.rs @@ -155,12 +155,19 @@ impl Preview { } } - rpc_client.generate_to_address(1, &address)?; + let handle = std::thread::spawn(move || loop { + rpc_client.generate_to_address(1, &address).unwrap(); + thread::sleep(Duration::from_secs(5)) + }); Arguments { options, subcommand: Subcommand::Server(self.server), } - .run() + .run()?; + + handle.join().unwrap(); + + Ok(todo!()) } } From 2e85354fcdac4004ebeea6791c386c604f8fdfd3 Mon Sep 17 00:00:00 2001 From: raphjaph Date: Sun, 3 Dec 2023 20:56:23 -0300 Subject: [PATCH 2/6] Add ability to automatically mine block in preview --- src/subcommand/preview.rs | 46 +++++++++++++++++++++++++++++---------- 1 file changed, 35 insertions(+), 11 deletions(-) diff --git a/src/subcommand/preview.rs b/src/subcommand/preview.rs index 9fc615262a..13a71f193a 100644 --- a/src/subcommand/preview.rs +++ b/src/subcommand/preview.rs @@ -12,6 +12,8 @@ pub(crate) struct Preview { batches: Option>, #[arg(num_args = 0.., long, help = "Inscribe contents of .")] files: Option>, + #[arg(long, help = "Automatically mine blocks every seconds.")] + blocktime: Option, } #[derive(Debug, Parser)] @@ -160,19 +162,41 @@ impl Preview { } } - let handle = std::thread::spawn(move || loop { - rpc_client.generate_to_address(1, &address).unwrap(); - thread::sleep(Duration::from_secs(5)) - }); + if let Some(blocktime) = self.blocktime { + let server_running = Arc::new(AtomicBool::new(true)); + let clone = server_running.clone(); - Arguments { - options, - subcommand: Subcommand::Server(self.server), - } - .run()?; + eprintln!( + "Automatically mining a block every {}", + "second".tally(blocktime) + ); + + let handle = std::thread::spawn(move || { + while clone.load(std::sync::atomic::Ordering::SeqCst) { + rpc_client.generate_to_address(1, &address).unwrap(); + thread::sleep(Duration::from_secs(blocktime.try_into().unwrap())); + } + }); + + Arguments { + options, + subcommand: Subcommand::Server(self.server), + } + .run()?; - handle.join().unwrap(); + server_running.store(false, std::sync::atomic::Ordering::SeqCst); - Ok(todo!()) + handle.join().unwrap(); + + Ok(Box::new(Empty {})) + } else { + Ok( + Arguments { + options, + subcommand: Subcommand::Server(self.server), + } + .run()?, + ) + } } } From 2dd64d932802f2885393b4184dc432df4271e54a Mon Sep 17 00:00:00 2001 From: raphjaph Date: Sun, 3 Dec 2023 20:58:32 -0300 Subject: [PATCH 3/6] quick fix --- src/subcommand/preview.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/subcommand/preview.rs b/src/subcommand/preview.rs index 13a71f193a..364f8a5a0e 100644 --- a/src/subcommand/preview.rs +++ b/src/subcommand/preview.rs @@ -167,7 +167,7 @@ impl Preview { let clone = server_running.clone(); eprintln!( - "Automatically mining a block every {}", + "Automatically mining a block every {}...", "second".tally(blocktime) ); From c7624704429f0fdbb5c0798e383d466d70b8b674 Mon Sep 17 00:00:00 2001 From: raphjaph Date: Mon, 4 Dec 2023 14:16:23 -0500 Subject: [PATCH 4/6] Address review --- src/subcommand/preview.rs | 49 ++++++++++++++++++++------------------- tests/core.rs | 12 +++++++++- 2 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/subcommand/preview.rs b/src/subcommand/preview.rs index 364f8a5a0e..f0dc76d69c 100644 --- a/src/subcommand/preview.rs +++ b/src/subcommand/preview.rs @@ -1,4 +1,4 @@ -use {super::*, fee_rate::FeeRate}; +use {super::*, fee_rate::FeeRate, std::sync::atomic}; #[derive(Debug, Parser)] pub(crate) struct Preview { @@ -10,10 +10,10 @@ pub(crate) struct Preview { help = "Inscribe inscriptions defined in ." )] batches: Option>, + #[arg(long, help = "Automatically mine a block every seconds.")] + blocktime: Option, #[arg(num_args = 0.., long, help = "Inscribe contents of .")] files: Option>, - #[arg(long, help = "Automatically mine blocks every seconds.")] - blocktime: Option, } #[derive(Debug, Parser)] @@ -163,20 +163,23 @@ impl Preview { } if let Some(blocktime) = self.blocktime { - let server_running = Arc::new(AtomicBool::new(true)); - let clone = server_running.clone(); - eprintln!( - "Automatically mining a block every {}...", - "second".tally(blocktime) + "Mining blocks every {}...", + "second".tally(blocktime.try_into().unwrap()) ); - let handle = std::thread::spawn(move || { - while clone.load(std::sync::atomic::Ordering::SeqCst) { - rpc_client.generate_to_address(1, &address).unwrap(); - thread::sleep(Duration::from_secs(blocktime.try_into().unwrap())); - } - }); + let running = Arc::new(AtomicBool::new(true)); + + let handle = { + let running = running.clone(); + + std::thread::spawn(move || { + while running.load(atomic::Ordering::SeqCst) { + rpc_client.generate_to_address(1, &address).unwrap(); + thread::sleep(Duration::from_secs(blocktime)); + } + }) + }; Arguments { options, @@ -184,19 +187,17 @@ impl Preview { } .run()?; - server_running.store(false, std::sync::atomic::Ordering::SeqCst); + running.store(false, atomic::Ordering::SeqCst); handle.join().unwrap(); - - Ok(Box::new(Empty {})) } else { - Ok( - Arguments { - options, - subcommand: Subcommand::Server(self.server), - } - .run()?, - ) + Arguments { + options, + subcommand: Subcommand::Server(self.server), + } + .run()?; } + + Ok(Box::new(Empty {})) } } diff --git a/tests/core.rs b/tests/core.rs index 827da9f14e..3489cb50e7 100644 --- a/tests/core.rs +++ b/tests/core.rs @@ -22,7 +22,7 @@ fn preview() { .port(); let builder = CommandBuilder::new(format!( - "preview --http-port {port} --files alert.html inscription.txt --batches batch_1.yaml batch_2.yaml" + "preview --http-port {port} --files alert.html inscription.txt --batches batch_1.yaml batch_2.yaml --blocktime 1" )) .write("inscription.txt", "Hello World") .write("alert.html", "") @@ -62,4 +62,14 @@ fn preview() { .unwrap(), format!(".*(() + .unwrap() + > 105 + ); } From 53077f14c4db4dfe6fe68361a9a82510374dd879 Mon Sep 17 00:00:00 2001 From: raphjaph Date: Mon, 4 Dec 2023 14:22:19 -0500 Subject: [PATCH 5/6] quick fix --- tests/core.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/tests/core.rs b/tests/core.rs index 3489cb50e7..a4b77274f2 100644 --- a/tests/core.rs +++ b/tests/core.rs @@ -63,13 +63,28 @@ fn preview() { format!(".*(() + .unwrap(); + + for attempt in 0.. { + if attempt == 10 { + panic!("Bitcoin Core did not mine blocks",); + } + + thread::sleep(Duration::from_millis(500)); + if reqwest::blocking::get(format!("http://127.0.0.1:{port}/blockheight")) .unwrap() .text() .unwrap() .parse::() .unwrap() - > 105 - ); + > blockheight + { + break; + } + } } From aaf06988a1de81b6a70964b4350c473837fa2141 Mon Sep 17 00:00:00 2001 From: raphjaph Date: Mon, 4 Dec 2023 14:23:35 -0500 Subject: [PATCH 6/6] quick fix --- tests/core.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/core.rs b/tests/core.rs index a4b77274f2..80a60da8dd 100644 --- a/tests/core.rs +++ b/tests/core.rs @@ -71,11 +71,10 @@ fn preview() { .unwrap(); for attempt in 0.. { - if attempt == 10 { + if attempt == 20 { panic!("Bitcoin Core did not mine blocks",); } - thread::sleep(Duration::from_millis(500)); if reqwest::blocking::get(format!("http://127.0.0.1:{port}/blockheight")) .unwrap() .text() @@ -86,5 +85,7 @@ fn preview() { { break; } + + thread::sleep(Duration::from_millis(250)); } }