summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-10-21 12:16:29 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-10-21 21:14:12 +0800
commitf4172ac1fb8f910792b3010865e970c9b54d7492 (patch)
tree0aa66eac4acc841f6b5da9c0b21aca1e315468f9
parent03709597ead7197b95c19d942020656f6b4eafd4 (diff)
fix(bc): IBD
-rw-r--r--src/blocks.rs2
-rw-r--r--src/network.rs20
2 files changed, 20 insertions, 2 deletions
diff --git a/src/blocks.rs b/src/blocks.rs
index 84f6c92..1fa8486 100644
--- a/src/blocks.rs
+++ b/src/blocks.rs
@@ -74,7 +74,7 @@ impl Hash for Block {
#[derive(Default, Deserialize, Serialize, Clone, PartialEq)]
pub struct BlockChain {
- blocks: Vec<Block>,
+ pub blocks: Vec<Block>,
}
impl BlockChain {
diff --git a/src/network.rs b/src/network.rs
index 0a49ded..f9b6355 100644
--- a/src/network.rs
+++ b/src/network.rs
@@ -231,7 +231,25 @@ impl Peer {
let parent = parent
.lock()
.await;
- if *parent
+ let mut self_bc = parent
+ .blockchain
+ .lock()
+ .await;
+ if self_bc.is_empty()
+ || (self_bc
+ .blocks
+ .iter()
+ .fold(true, |i, b| {
+ if i {
+ b.pow
+ .is_none()
+ } else {
+ false
+ }
+ }))
+ {
+ *self_bc = bc;
+ } else if *parent
.blockchain
.lock()
.await