summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.toml2
-rw-r--r--src/network.rs22
-rw-r--r--src/ui.rs4
3 files changed, 14 insertions, 14 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 6367695..4c6fd2b 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -5,7 +5,7 @@ edition = "2024"
[dependencies]
tokio = { version = "1.48.0", features = ["full"] }
-serde = { version = "1.0.228", features = ["derive"] }
+serde = { version = "1.0.228", features = ["derive", "rc"] }
serde_json = "1.0.145"
tokio-serde = { version = "0.9.0", features = ["json"] }
tokio-util = { version = "0.7.16", features = ["codec"] }
diff --git a/src/network.rs b/src/network.rs
index ba9fa59..16bbc91 100644
--- a/src/network.rs
+++ b/src/network.rs
@@ -25,8 +25,8 @@ use crate::{
#[derive(Deserialize, Serialize, Clone)]
// Make possible to take borrowed so we dont need to clone everything
pub enum Request {
- Block(Block),
- Ibd(Option<BlockChain>),
+ Block(Arc<Block>),
+ Ibd(Option<Arc<BlockChain>>),
}
#[derive(Default)]
@@ -250,7 +250,7 @@ impl Peer {
async fn handle(parent: Arc<Mutex<Network>>, req: Request) {
match req {
- Request::Block(mut block) => {
+ Request::Block(block) => {
if block
.pow
.is_some()
@@ -269,11 +269,11 @@ impl Peer {
};
bc.lock()
.await
- .store(block)
+ .store((*block).clone())
} else {
println!("Mining new block for transaction: {:#?}", block.trans);
- block
- .calc_set_pow()
+ let mut mine = (*block).clone();
+ mine.calc_set_pow()
.await;
{
let self_bc = {
@@ -286,9 +286,9 @@ impl Peer {
self_bc
.lock()
.await
- .store(block.clone());
+ .store(mine.clone());
}
- Network::broadcast(parent, Request::Block(block)).await;
+ Network::broadcast(parent, Request::Block(Arc::new(mine))).await;
}
}
Request::Ibd(bc) => match bc {
@@ -318,8 +318,8 @@ impl Peer {
}))
{
println!("Setting IBD to {:#?} from remote", bc);
- *self_bc = bc;
- } else if *self_bc != bc {
+ *self_bc = (*bc).clone();
+ } else if *self_bc != *bc {
eprintln!("Remote IBD broadcast did not match ours, {:#?} vs. {:#?}", bc, self_bc);
}
}
@@ -341,7 +341,7 @@ impl Peer {
return;
}
println!("Broadcasting as requested"); // TODO: log requester
- Network::broadcast(parent, Request::Ibd(Some(bc))).await;
+ Network::broadcast(parent, Request::Ibd(Some(Arc::new(bc)))).await;
}
},
}
diff --git a/src/ui.rs b/src/ui.rs
index f0dc72e..446fdb6 100644
--- a/src/ui.rs
+++ b/src/ui.rs
@@ -1,4 +1,4 @@
-use std::sync::Weak;
+use std::sync::{Arc, Weak};
use bitcoin::{
client::Client,
@@ -42,7 +42,7 @@ impl Ui {
.upgrade()
.unwrap();
let block = Network::new_block(net, trans).await;
- return Some(Request::Block(block));
+ return Some(Request::Block(Arc::new(block)));
}
if cmd[0] == "bc" {