From 6647823177920c5e028c59c6e9a44e3394e77105 Mon Sep 17 00:00:00 2001
From: Antioch Peverell <30642645+antiochp@users.noreply.github.com>
Date: Tue, 30 Jan 2018 09:42:04 -0500
Subject: [PATCH] header first propagation (#654)
* [wip] header first propagation
successfully propagating headers (unless we mined the block itself)
not yet asking for the block if we receive a header
* call request_block after successful processing header
* cleanup and skip asking for block if header is an orphan
* comments around error handling in receive_header
---
chain/src/chain.rs | 19 ++++--
chain/src/lib.rs | 2 +-
chain/src/pipe.rs | 57 ++++++++++++++----
chain/src/types.rs | 14 +++--
chain/tests/mine_simple_chain.rs | 2 +-
chain/tests/test_coinbase_maturity.rs | 6 +-
grin/src/adapters.rs | 83 +++++++++++++++++++++++++--
grin/src/miner.rs | 8 +--
grin/src/server.rs | 1 +
grin/src/sync.rs | 2 +-
p2p/src/msg.rs | 2 +
p2p/src/peer.rs | 37 +++++++++---
p2p/src/peers.rs | 47 +++++++++++++--
p2p/src/protocol.rs | 35 +++++++++--
p2p/src/server.rs | 9 +--
p2p/src/types.rs | 7 ++-
16 files changed, 273 insertions(+), 58 deletions(-)
diff --git a/chain/src/chain.rs b/chain/src/chain.rs
index 242dd3b9d..3636694dd 100644
--- a/chain/src/chain.rs
+++ b/chain/src/chain.rs
@@ -237,10 +237,10 @@ pub fn process_block(&self, b: Block, opts: Options)
}
// notifying other parts of the system of the update
- if !opts.intersects(SYNC) {
+ if !opts.contains(SYNC) {
// broadcast the block
let adapter = self.adapter.clone();
- adapter.block_accepted(&b);
+ adapter.block_accepted(&b, opts);
}
Ok((Some(tip.clone()), Some(b.clone())))
},
@@ -254,10 +254,10 @@ pub fn process_block(&self, b: Block, opts: Options)
// or less relevant blocks somehow.
// We should also probably consider banning nodes that send us really old blocks.
//
- if !opts.intersects(SYNC) {
+ if !opts.contains(SYNC) {
// broadcast the block
let adapter = self.adapter.clone();
- adapter.block_accepted(&b);
+ adapter.block_accepted(&b, opts);
}
Ok((None, Some(b.clone())))
},
@@ -306,6 +306,17 @@ pub fn process_block(&self, b: Block, opts: Options)
}
}
+ /// Process a block header received during "header first" propagation.
+ pub fn process_block_header(
+ &self,
+ bh: &BlockHeader,
+ opts: Options,
+ ) -> Result