Skip to content

Commit a9894d9

Browse files
committed
Make initial unit collection more independent
1 parent 1439f5b commit a9894d9

File tree

10 files changed

+239
-222
lines changed

10 files changed

+239
-222
lines changed

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

consensus/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "aleph-bft"
3-
version = "0.43.0"
3+
version = "0.43.1"
44
edition = "2021"
55
authors = ["Cardinal Cryptography"]
66
categories = ["algorithms", "data-structures", "cryptography", "database"]
Lines changed: 134 additions & 81 deletions
Large diffs are not rendered by default.

consensus/src/dissemination/mod.rs

Lines changed: 12 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
2+
collection::{NewestUnitResponse, Salt},
23
dag::Request as ReconstructionRequest,
34
network::UnitMessage,
4-
runway::{NewestUnitResponse, Salt},
55
units::UncheckedSignedUnit,
66
Data, Hasher, NodeIndex, Recipient, Signature, UncheckedSigned,
77
};
@@ -57,21 +57,6 @@ impl<T> Addressed<T> {
5757
}
5858
}
5959

60-
/// Possible requests for information from other nodes.
61-
#[derive(Eq, PartialEq, Debug, Clone)]
62-
pub enum DisseminationRequest<H: Hasher> {
63-
/// A request for unit information in normal operation.
64-
Unit(ReconstructionRequest<H>),
65-
/// Request for what the specified node thinks about our newest unit.
66-
NewestUnit(NodeIndex, Salt),
67-
}
68-
69-
impl<H: Hasher> From<ReconstructionRequest<H>> for DisseminationRequest<H> {
70-
fn from(request: ReconstructionRequest<H>) -> Self {
71-
DisseminationRequest::Unit(request)
72-
}
73-
}
74-
7560
/// Responses to requests.
7661
#[derive(Eq, PartialEq, Debug, Clone)]
7762
pub enum DisseminationResponse<H: Hasher, D: Data, S: Signature> {
@@ -89,9 +74,11 @@ pub enum DisseminationMessage<H: Hasher, D: Data, S: Signature> {
8974
/// Unit, either broadcast or in response to a coord request.
9075
Unit(UncheckedSignedUnit<H, D, S>),
9176
/// Request coming from the specified node for something.
92-
Request(NodeIndex, DisseminationRequest<H>),
77+
Request(NodeIndex, ReconstructionRequest<H>),
9378
/// Response to a parent request.
9479
ParentsResponse(H::Hash, Vec<UncheckedSignedUnit<H, D, S>>),
80+
/// Initial unit collection request.
81+
NewestUnitRequest(NodeIndex, Salt),
9582
/// Response to initial unit collection.
9683
NewestUnitResponse(UncheckedSigned<NewestUnitResponse<H, D, S>, S>),
9784
}
@@ -104,15 +91,13 @@ impl<H: Hasher, D: Data, S: Signature> From<UnitMessage<H, D, S>>
10491
match message {
10592
UnitMessage::Unit(u) => Unit(u),
10693
UnitMessage::CoordRequest(node_id, coord) => {
107-
Request(node_id, ReconstructionRequest::Coord(coord).into())
94+
Request(node_id, ReconstructionRequest::Coord(coord))
10895
}
10996
UnitMessage::ParentsRequest(node_id, hash) => {
110-
Request(node_id, ReconstructionRequest::ParentsOf(hash).into())
97+
Request(node_id, ReconstructionRequest::ParentsOf(hash))
11198
}
11299
UnitMessage::ParentsResponse(h, units) => ParentsResponse(h, units),
113-
UnitMessage::NewestRequest(node_id, salt) => {
114-
Request(node_id, DisseminationRequest::NewestUnit(node_id, salt))
115-
}
100+
UnitMessage::NewestRequest(node_id, salt) => NewestUnitRequest(node_id, salt),
116101
UnitMessage::NewestResponse(response) => NewestUnitResponse(response),
117102
}
118103
}
@@ -125,17 +110,14 @@ impl<H: Hasher, D: Data, S: Signature> From<DisseminationMessage<H, D, S>>
125110
use DisseminationMessage::*;
126111
match message {
127112
Unit(u) => UnitMessage::Unit(u),
128-
Request(node_id, DisseminationRequest::Unit(ReconstructionRequest::Coord(coord))) => {
113+
Request(node_id, ReconstructionRequest::Coord(coord)) => {
129114
UnitMessage::CoordRequest(node_id, coord)
130115
}
131-
Request(
132-
node_id,
133-
DisseminationRequest::Unit(ReconstructionRequest::ParentsOf(hash)),
134-
) => UnitMessage::ParentsRequest(node_id, hash),
135-
ParentsResponse(h, units) => UnitMessage::ParentsResponse(h, units),
136-
Request(node_id, DisseminationRequest::NewestUnit(_, salt)) => {
137-
UnitMessage::NewestRequest(node_id, salt)
116+
Request(node_id, ReconstructionRequest::ParentsOf(hash)) => {
117+
UnitMessage::ParentsRequest(node_id, hash)
138118
}
119+
ParentsResponse(h, units) => UnitMessage::ParentsResponse(h, units),
120+
NewestUnitRequest(node_id, salt) => UnitMessage::NewestRequest(node_id, salt),
139121
NewestUnitResponse(response) => UnitMessage::NewestResponse(response),
140122
}
141123
}

consensus/src/dissemination/responder.rs

Lines changed: 25 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use crate::{
2+
collection::{NewestUnitResponse, Salt},
23
dag::{DagUnit, Request},
3-
dissemination::{DisseminationRequest, DisseminationResponse},
4-
runway::{NewestUnitResponse, Salt},
4+
dissemination::DisseminationResponse,
55
units::{UnitCoord, UnitStore, UnitWithParents, WrappedUnit},
66
Data, Hasher, MultiKeychain, NodeIndex, Signed,
77
};
@@ -91,18 +91,25 @@ impl<H: Hasher, D: Data, MK: MultiKeychain> Responder<H, D, MK> {
9191
/// aren't able to help.
9292
pub fn handle_request(
9393
&self,
94-
request: DisseminationRequest<H>,
94+
request: Request<H>,
9595
units: &UnitStore<DagUnit<H, D, MK>>,
9696
) -> Result<DisseminationResponse<H, D, MK::Signature>, Error<H>> {
97-
use DisseminationRequest::*;
97+
use Request::*;
9898
match request {
99-
Unit(unit_request) => match unit_request {
100-
Request::Coord(coord) => self.on_request_coord(coord, units),
101-
Request::ParentsOf(hash) => self.on_request_parents(hash, units),
102-
},
103-
NewestUnit(node_id, salt) => Ok(self.on_request_newest(node_id, salt, units)),
99+
Coord(coord) => self.on_request_coord(coord, units),
100+
ParentsOf(hash) => self.on_request_parents(hash, units),
104101
}
105102
}
103+
104+
/// Handle an incoming request for the newest unit of a given node we know of.
105+
pub fn handle_newest_unit_request(
106+
&self,
107+
requester: NodeIndex,
108+
salt: Salt,
109+
units: &UnitStore<DagUnit<H, D, MK>>,
110+
) -> DisseminationResponse<H, D, MK::Signature> {
111+
self.on_request_newest(requester, salt, units)
112+
}
106113
}
107114

108115
#[cfg(test)]
@@ -111,7 +118,7 @@ mod test {
111118
dag::Request,
112119
dissemination::{
113120
responder::{Error, Responder},
114-
DisseminationRequest, DisseminationResponse,
121+
DisseminationResponse,
115122
},
116123
units::{
117124
random_full_parent_reconstrusted_units_up_to, TestingDagUnit, Unit, UnitCoord,
@@ -142,7 +149,7 @@ mod test {
142149
fn empty_fails_to_respond_to_coords() {
143150
let (responder, store, _) = setup();
144151
let coord = UnitCoord::new(0, NodeIndex(1));
145-
let request = Request::Coord(coord).into();
152+
let request = Request::Coord(coord);
146153
match responder.handle_request(request, &store) {
147154
Ok(response) => panic!("Unexpected response: {:?}.", response),
148155
Err(err) => assert_eq!(err, Error::NoCanonicalAt(coord)),
@@ -160,7 +167,7 @@ mod test {
160167
.last()
161168
.expect("the round has at least one unit")
162169
.hash();
163-
let request = Request::ParentsOf(hash).into();
170+
let request = Request::ParentsOf(hash);
164171
match responder.handle_request(request, &store) {
165172
Ok(response) => panic!("Unexpected response: {:?}.", response),
166173
Err(err) => assert_eq!(err, Error::UnknownUnit(hash)),
@@ -171,10 +178,7 @@ mod test {
171178
fn empty_newest_responds_with_no_units() {
172179
let (responder, store, keychains) = setup();
173180
let requester = NodeIndex(1);
174-
let request = DisseminationRequest::NewestUnit(requester, rand::random());
175-
let response = responder
176-
.handle_request(request, &store)
177-
.expect("newest unit requests always get a response");
181+
let response = responder.handle_newest_unit_request(requester, rand::random(), &store);
178182
match response {
179183
DisseminationResponse::NewestUnit(newest_unit_response) => {
180184
let checked_newest_unit_response = newest_unit_response
@@ -205,7 +209,7 @@ mod test {
205209
store.insert(unit.clone());
206210
}
207211
}
208-
let request = Request::Coord(coord).into();
212+
let request = Request::Coord(coord);
209213
let response = responder
210214
.handle_request(request, &store)
211215
.expect("should successfully respond");
@@ -237,7 +241,7 @@ mod test {
237241
store.insert(unit.clone());
238242
}
239243
}
240-
let request = Request::Coord(coord).into();
244+
let request = Request::Coord(coord);
241245
match responder.handle_request(request, &store) {
242246
Ok(response) => panic!("Unexpected response: {:?}.", response),
243247
Err(err) => assert_eq!(err, Error::NoCanonicalAt(coord)),
@@ -261,7 +265,7 @@ mod test {
261265
.last()
262266
.expect("the round has at least one unit")
263267
.clone();
264-
let request = Request::ParentsOf(requested_unit.hash()).into();
268+
let request = Request::ParentsOf(requested_unit.hash());
265269
let response = responder
266270
.handle_request(request, &store)
267271
.expect("should successfully respond");
@@ -295,7 +299,7 @@ mod test {
295299
.last()
296300
.expect("the round has at least one unit")
297301
.hash();
298-
let request = Request::ParentsOf(hash).into();
302+
let request = Request::ParentsOf(hash);
299303
match responder.handle_request(request, &store) {
300304
Ok(response) => panic!("Unexpected response: {:?}.", response),
301305
Err(err) => assert_eq!(err, Error::UnknownUnit(hash)),
@@ -314,10 +318,7 @@ mod test {
314318
}
315319
}
316320
let requester = NodeIndex(1);
317-
let request = DisseminationRequest::NewestUnit(requester, rand::random());
318-
let response = responder
319-
.handle_request(request, &store)
320-
.expect("newest unit requests always get a response");
321+
let response = responder.handle_newest_unit_request(requester, rand::random(), &store);
321322
match response {
322323
DisseminationResponse::NewestUnit(newest_unit_response) => {
323324
newest_unit_response
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use crate::{dag::Request, runway::Salt, units::UncheckedSignedUnit, Data, Hasher, Signature};
1+
use crate::{dag::Request, units::UncheckedSignedUnit, Data, Hasher, Signature};
22

33
/// Task that needs to be performed to ensure successful unit dissemination, either requesting or broadcasting a unit.
44
#[derive(Eq, PartialEq, Debug, Clone)]
@@ -8,6 +8,4 @@ pub enum DisseminationTask<H: Hasher, D: Data, S: Signature> {
88
/// Broadcast a unit.
99
/// TODO(A0-4567): This should soon only contain the hash.
1010
Broadcast(UncheckedSignedUnit<H, D, S>),
11-
/// TODO(A0-4569): Only here temporarily, will soon be factored out.
12-
RequestNewest(Salt),
1311
}

consensus/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//! gives appropriate access to the set of available data that we need to make consensus on.
44
55
mod alerts;
6+
mod collection;
67
mod config;
78
mod creation;
89
mod dag;

0 commit comments

Comments
 (0)