refactor(network): split bearer into read/write (#364)

This commit is contained in:
Santiago Carmuega 2023-12-21 18:08:29 -03:00 committed by GitHub
parent 2e1b0e5cf2
commit 8c6d5e5e58
8 changed files with 666 additions and 492 deletions

View file

@ -1,6 +1,6 @@
use std::collections::HashMap;
use pallas_codec::minicbor::{decode, Decode, Decoder, encode, Encode, Encoder};
use pallas_codec::minicbor::{decode, encode, Decode, Decoder, Encode, Encoder};
pub type VersionTable = super::protocol::VersionTable<VersionData>;
@ -15,24 +15,38 @@ const PROTOCOL_V13: u64 = 13;
const PEER_SHARING_DISABLED: u8 = 0;
impl VersionTable {
#[deprecated(note = "no longer supported by spec")]
pub fn v4_and_above(network_magic: u64) -> VersionTable {
// Older versions are not supported anymore (removed from network-spec.pdf).
// Try not to break compatibility with older pallas users.
return Self::v7_and_above(network_magic);
Self::v7_and_above(network_magic)
}
#[deprecated(note = "no longer supported by spec")]
pub fn v6_and_above(network_magic: u64) -> VersionTable {
// Older versions are not supported anymore (removed from network-spec.pdf).
// Try not to break compatibility with older pallas users.
return Self::v7_and_above(network_magic);
Self::v7_and_above(network_magic)
}
pub fn v7_to_v10(network_magic: u64) -> VersionTable {
let values = vec![
(PROTOCOL_V7, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V8, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V9, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V10, VersionData::new(network_magic, false, None, None)),
(
PROTOCOL_V7,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V8,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V9,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V10,
VersionData::new(network_magic, false, None, None),
),
]
.into_iter()
.collect::<HashMap<u64, VersionData>>();
@ -42,13 +56,49 @@ impl VersionTable {
pub fn v7_and_above(network_magic: u64) -> VersionTable {
let values = vec![
(PROTOCOL_V7, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V8, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V9, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V10, VersionData::new(network_magic, false, None, None)),
(PROTOCOL_V11, VersionData::new(network_magic, false, Some(PEER_SHARING_DISABLED), Some(false))),
(PROTOCOL_V12, VersionData::new(network_magic, false, Some(PEER_SHARING_DISABLED), Some(false))),
(PROTOCOL_V13, VersionData::new(network_magic, false, Some(PEER_SHARING_DISABLED), Some(false))),
(
PROTOCOL_V7,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V8,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V9,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V10,
VersionData::new(network_magic, false, None, None),
),
(
PROTOCOL_V11,
VersionData::new(
network_magic,
false,
Some(PEER_SHARING_DISABLED),
Some(false),
),
),
(
PROTOCOL_V12,
VersionData::new(
network_magic,
false,
Some(PEER_SHARING_DISABLED),
Some(false),
),
),
(
PROTOCOL_V13,
VersionData::new(
network_magic,
false,
Some(PEER_SHARING_DISABLED),
Some(false),
),
),
]
.into_iter()
.collect::<HashMap<u64, VersionData>>();
@ -58,9 +108,33 @@ impl VersionTable {
pub fn v11_and_above(network_magic: u64) -> VersionTable {
let values = vec![
(PROTOCOL_V11, VersionData::new(network_magic, false, Some(PEER_SHARING_DISABLED), Some(false))),
(PROTOCOL_V12, VersionData::new(network_magic, false, Some(PEER_SHARING_DISABLED), Some(false))),
(PROTOCOL_V13, VersionData::new(network_magic, false, Some(PEER_SHARING_DISABLED), Some(false))),
(
PROTOCOL_V11,
VersionData::new(
network_magic,
false,
Some(PEER_SHARING_DISABLED),
Some(false),
),
),
(
PROTOCOL_V12,
VersionData::new(
network_magic,
false,
Some(PEER_SHARING_DISABLED),
Some(false),
),
),
(
PROTOCOL_V13,
VersionData::new(
network_magic,
false,
Some(PEER_SHARING_DISABLED),
Some(false),
),
),
]
.into_iter()
.collect::<HashMap<u64, VersionData>>();
@ -78,7 +152,12 @@ pub struct VersionData {
}
impl VersionData {
pub fn new(network_magic: u64, initiator_and_responder_diffusion_mode: bool, peer_sharing: Option<u8>, query: Option<bool>) -> Self {
pub fn new(
network_magic: u64,
initiator_and_responder_diffusion_mode: bool,
peer_sharing: Option<u8>,
query: Option<bool>,
) -> Self {
VersionData {
network_magic,
initiator_and_responder_diffusion_mode,
@ -101,12 +180,12 @@ impl Encode<()> for VersionData {
.bool(self.initiator_and_responder_diffusion_mode)?
.u8(peer_sharing)?
.bool(query)?;
},
}
_ => {
e.array(2)?
.u64(self.network_magic)?
.bool(self.initiator_and_responder_diffusion_mode)?;
},
}
};
Ok(())