Skip to content

Commit 746d35b

Browse files
update client
1 parent 1ac06d2 commit 746d35b

2 files changed

Lines changed: 45 additions & 22 deletions

File tree

client/src/consensus.rs

Lines changed: 42 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -242,35 +242,61 @@ impl Client {
242242
// Get kind
243243
let kind = data[0];
244244
let Some(kind) = Kind::from_u8(kind) else {
245-
let _ = sender.unbounded_send(Err(Error::InvalidData));
245+
let _ = sender.unbounded_send(Err(Error::UnexpectedResponse));
246246
return;
247247
};
248248
let data = &data[1..];
249249

250250
// Deserialize the message
251251
match kind {
252252
Kind::Seed => {
253-
if let Some(seed) = Seed::deserialize(Some(&public), data) {
254-
let _ = sender.unbounded_send(Ok(Message::Seed(seed)));
255-
} else {
256-
let _ = sender.unbounded_send(Err(Error::InvalidData));
253+
let result = Seed::decode(data);
254+
match result {
255+
Ok(seed) => {
256+
if !seed.verify(NAMESPACE, public.as_ref()) {
257+
let _ =
258+
sender.unbounded_send(Err(Error::InvalidSignature));
259+
return;
260+
}
261+
let _ = sender.unbounded_send(Ok(Message::Seed(seed)));
262+
}
263+
Err(e) => {
264+
let _ = sender.unbounded_send(Err(Error::InvalidData(e)));
265+
}
257266
}
258267
}
259268
Kind::Notarization => {
260-
if let Some(payload) = Notarized::deserialize(Some(&public), data) {
261-
let _ =
262-
sender.unbounded_send(Ok(Message::Notarization(payload)));
263-
} else {
264-
let _ = sender.unbounded_send(Err(Error::InvalidData));
269+
let result = Notarized::decode(data);
270+
match result {
271+
Ok(notarized) => {
272+
if !notarized.verify(public.as_ref()) {
273+
let _ =
274+
sender.unbounded_send(Err(Error::InvalidSignature));
275+
return;
276+
}
277+
let _ = sender
278+
.unbounded_send(Ok(Message::Notarization(notarized)));
279+
}
280+
Err(e) => {
281+
let _ = sender.unbounded_send(Err(Error::InvalidData(e)));
282+
}
265283
}
266284
}
267-
Kind::Nullification => {} // Ignore nullifications
268285
Kind::Finalization => {
269-
if let Some(payload) = Finalized::deserialize(Some(&public), data) {
270-
let _ =
271-
sender.unbounded_send(Ok(Message::Finalization(payload)));
272-
} else {
273-
let _ = sender.unbounded_send(Err(Error::InvalidData));
286+
let result = Finalized::decode(data);
287+
match result {
288+
Ok(finalized) => {
289+
if !finalized.verify(public.as_ref()) {
290+
let _ =
291+
sender.unbounded_send(Err(Error::InvalidSignature));
292+
return;
293+
}
294+
let _ = sender
295+
.unbounded_send(Ok(Message::Finalization(finalized)));
296+
}
297+
Err(e) => {
298+
let _ = sender.unbounded_send(Err(Error::InvalidData(e)));
299+
}
274300
}
275301
}
276302
}

types/src/lib.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,15 @@ pub const NAMESPACE: &[u8] = b"_ALTO";
1313
pub enum Kind {
1414
Seed = 0,
1515
Notarization = 1,
16-
Nullification = 2,
17-
Finalization = 3,
16+
Finalization = 2,
1817
}
1918

2019
impl Kind {
2120
pub fn from_u8(value: u8) -> Option<Self> {
2221
match value {
2322
0 => Some(Self::Seed),
2423
1 => Some(Self::Notarization),
25-
2 => Some(Self::Nullification),
26-
3 => Some(Self::Finalization),
24+
2 => Some(Self::Finalization),
2725
_ => None,
2826
}
2927
}
@@ -32,8 +30,7 @@ impl Kind {
3230
match self {
3331
Self::Seed => hex(&[0]),
3432
Self::Notarization => hex(&[1]),
35-
Self::Nullification => hex(&[2]),
36-
Self::Finalization => hex(&[3]),
33+
Self::Finalization => hex(&[2]),
3734
}
3835
}
3936
}

0 commit comments

Comments
 (0)