1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#![deny(unused_crate_dependencies)]
#![warn(missing_docs)]
use futures::prelude::*;
use parity_scale_codec::{Decode, Encode};
use parking_lot::Mutex;
use sp_consensus::SyncOracle;
use polkadot_node_network_protocol::{
peer_set::{PeerSet, ProtocolVersion},
PeerId, UnifiedReputationChange as Rep, View,
};
pub use polkadot_node_network_protocol::peer_set::{peer_sets_info, IsAuthority};
use std::{collections::HashMap, sync::Arc};
mod validator_discovery;
mod network;
use self::network::Network;
mod metrics;
pub use self::metrics::Metrics;
mod errors;
pub(crate) use self::errors::Error;
mod tx;
pub use self::tx::*;
mod rx;
pub use self::rx::*;
pub(crate) const MAX_VIEW_HEADS: usize = 5;
pub(crate) const MALFORMED_MESSAGE_COST: Rep = Rep::CostMajor("Malformed Network-bridge message");
pub(crate) const UNCONNECTED_PEERSET_COST: Rep =
Rep::CostMinor("Message sent to un-connected peer-set");
pub(crate) const MALFORMED_VIEW_COST: Rep = Rep::CostMajor("Malformed view");
pub(crate) const EMPTY_VIEW_COST: Rep = Rep::CostMajor("Peer sent us an empty view");
#[derive(Debug, Encode, Decode, Clone)]
pub(crate) enum WireMessage<M> {
#[codec(index = 1)]
ProtocolMessage(M),
#[codec(index = 2)]
ViewUpdate(View),
}
pub(crate) struct PeerData {
view: View,
version: ProtocolVersion,
}
#[derive(Default, Clone)]
pub(crate) struct Shared(Arc<Mutex<SharedInner>>);
#[derive(Default)]
struct SharedInner {
local_view: Option<View>,
validation_peers: HashMap<PeerId, PeerData>,
collation_peers: HashMap<PeerId, PeerData>,
}
pub(crate) enum Mode {
Syncing(Box<dyn SyncOracle + Send>),
Active,
}