ant_node/networking/interface/
local_cmd.rs1use std::{
10 collections::{BTreeMap, HashMap},
11 fmt::Debug,
12};
13
14use ant_evm::{PaymentQuote, QuotingMetrics};
15use ant_protocol::{
16 NetworkAddress, PrettyPrintRecordKey,
17 storage::{DataTypes, ValidationType},
18};
19use libp2p::{
20 PeerId,
21 core::Multiaddr,
22 kad::{KBucketDistance as Distance, Record, RecordKey},
23};
24use tokio::sync::oneshot;
25
26use crate::networking::Addresses;
27
28#[derive(Debug, Eq, PartialEq, Clone)]
29pub(crate) enum NodeIssue {
30 ConnectionIssue,
32 WrongPeerId,
34 ReplicationFailure,
36 #[allow(dead_code)]
38 CloseNodesShunning,
39 BadQuoting,
41 FailedChunkProofCheck,
43}
44
45impl std::fmt::Display for NodeIssue {
46 fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
47 match self {
48 NodeIssue::ConnectionIssue => write!(f, "CriticalConnectionIssue"),
49 NodeIssue::WrongPeerId => write!(f, "WrongPeerId"),
50 NodeIssue::ReplicationFailure => write!(f, "ReplicationFailure"),
51 NodeIssue::CloseNodesShunning => write!(f, "CloseNodesShunning"),
52 NodeIssue::BadQuoting => write!(f, "BadQuoting"),
53 NodeIssue::FailedChunkProofCheck => write!(f, "FailedChunkProofCheck"),
54 }
55 }
56}
57
58pub(crate) enum LocalSwarmCmd {
60 GetPeersWithMultiaddr {
62 sender: oneshot::Sender<Vec<(PeerId, Vec<Multiaddr>)>>,
63 },
64 GetKBuckets {
67 sender: oneshot::Sender<BTreeMap<u32, Vec<PeerId>>>,
68 },
69 GetKCloseLocalPeersToTarget {
71 key: NetworkAddress,
72 sender: oneshot::Sender<Vec<(PeerId, Addresses)>>,
73 },
74 GetSwarmLocalState(oneshot::Sender<SwarmLocalState>),
75 RecordStoreHasKey {
77 key: RecordKey,
78 sender: oneshot::Sender<bool>,
79 },
80 GetAllLocalRecordAddresses {
82 sender: oneshot::Sender<HashMap<NetworkAddress, ValidationType>>,
83 },
84 GetLocalRecord {
86 key: RecordKey,
87 sender: oneshot::Sender<Option<Record>>,
88 },
89 GetLocalQuotingMetrics {
92 key: RecordKey,
93 data_type: u32,
94 data_size: usize,
95 sender: oneshot::Sender<(QuotingMetrics, bool)>,
96 },
97 PaymentReceived,
99 PutLocalRecord {
101 record: Record,
102 is_client_put: bool,
103 },
104 RemoveFailedLocalRecord {
107 key: RecordKey,
108 },
109 AddLocalRecordAsStored {
112 key: RecordKey,
113 record_type: ValidationType,
114 data_type: DataTypes,
115 },
116 AddPeerToBlockList {
118 peer_id: PeerId,
119 },
120 RecordNodeIssue {
122 peer_id: PeerId,
123 issue: NodeIssue,
124 },
125 IsPeerShunned {
127 target: NetworkAddress,
128 sender: oneshot::Sender<bool>,
129 },
130 QuoteVerification {
132 quotes: Vec<(PeerId, PaymentQuote)>,
133 },
134 FetchCompleted((RecordKey, ValidationType)),
136 TriggerIntervalReplication,
139 TriggerIrrelevantRecordCleanup,
141 NotifyPeerScores {
143 peer_scores: Vec<(PeerId, bool)>,
144 },
145 AddFreshReplicateRecords {
147 holder: NetworkAddress,
148 keys: Vec<(NetworkAddress, ValidationType)>,
149 },
150 NotifyPeerVersion {
152 peer: PeerId,
153 version: String,
154 },
155 GetNetworkDensity {
157 sender: oneshot::Sender<Option<Distance>>,
158 },
159 RemovePeer {
161 peer: PeerId,
162 },
163}
164
165impl Debug for LocalSwarmCmd {
168 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
169 match self {
170 LocalSwarmCmd::PutLocalRecord {
171 record,
172 is_client_put,
173 } => {
174 write!(
175 f,
176 "LocalSwarmCmd::PutLocalRecord {{ key: {:?}, is_client_put: {is_client_put:?} }}",
177 PrettyPrintRecordKey::from(&record.key)
178 )
179 }
180 LocalSwarmCmd::RemoveFailedLocalRecord { key } => {
181 write!(
182 f,
183 "LocalSwarmCmd::RemoveFailedLocalRecord {{ key: {:?} }}",
184 PrettyPrintRecordKey::from(key)
185 )
186 }
187 LocalSwarmCmd::AddLocalRecordAsStored {
188 key,
189 record_type,
190 data_type,
191 } => {
192 write!(
193 f,
194 "LocalSwarmCmd::AddLocalRecordAsStored {{ key: {:?}, record_type: {record_type:?}, data_type: {data_type:?} }}",
195 PrettyPrintRecordKey::from(key)
196 )
197 }
198 LocalSwarmCmd::GetKCloseLocalPeersToTarget { key, .. } => {
199 write!(
200 f,
201 "LocalSwarmCmd::GetKCloseLocalPeersToTarget {{ key: {key:?} }}"
202 )
203 }
204 LocalSwarmCmd::GetLocalQuotingMetrics { .. } => {
205 write!(f, "LocalSwarmCmd::GetLocalQuotingMetrics")
206 }
207 LocalSwarmCmd::PaymentReceived => {
208 write!(f, "LocalSwarmCmd::PaymentReceived")
209 }
210 LocalSwarmCmd::GetLocalRecord { key, .. } => {
211 write!(
212 f,
213 "LocalSwarmCmd::GetLocalRecord {{ key: {:?} }}",
214 PrettyPrintRecordKey::from(key)
215 )
216 }
217 LocalSwarmCmd::GetAllLocalRecordAddresses { .. } => {
218 write!(f, "LocalSwarmCmd::GetAllLocalRecordAddresses")
219 }
220 LocalSwarmCmd::GetPeersWithMultiaddr { .. } => {
221 write!(f, "LocalSwarmCmd::GetPeersWithMultiaddr")
222 }
223 LocalSwarmCmd::GetKBuckets { .. } => {
224 write!(f, "LocalSwarmCmd::GetKBuckets")
225 }
226 LocalSwarmCmd::GetSwarmLocalState { .. } => {
227 write!(f, "LocalSwarmCmd::GetSwarmLocalState")
228 }
229 LocalSwarmCmd::RecordStoreHasKey { key, .. } => {
230 write!(
231 f,
232 "LocalSwarmCmd::RecordStoreHasKey {:?}",
233 PrettyPrintRecordKey::from(key)
234 )
235 }
236 LocalSwarmCmd::AddPeerToBlockList { peer_id } => {
237 write!(f, "LocalSwarmCmd::AddPeerToBlockList {peer_id:?}")
238 }
239 LocalSwarmCmd::RecordNodeIssue { peer_id, issue } => {
240 write!(
241 f,
242 "LocalSwarmCmd::SendNodeStatus peer {peer_id:?}, issue: {issue:?}"
243 )
244 }
245 LocalSwarmCmd::IsPeerShunned { target, .. } => {
246 write!(f, "LocalSwarmCmd::IsPeerInTrouble target: {target:?}")
247 }
248 LocalSwarmCmd::QuoteVerification { quotes } => {
249 write!(
250 f,
251 "LocalSwarmCmd::QuoteVerification of {} quotes",
252 quotes.len()
253 )
254 }
255 LocalSwarmCmd::FetchCompleted((key, record_type)) => {
256 write!(
257 f,
258 "LocalSwarmCmd::FetchCompleted({record_type:?} : {:?})",
259 PrettyPrintRecordKey::from(key)
260 )
261 }
262 LocalSwarmCmd::TriggerIntervalReplication => {
263 write!(f, "LocalSwarmCmd::TriggerIntervalReplication")
264 }
265 LocalSwarmCmd::TriggerIrrelevantRecordCleanup => {
266 write!(f, "LocalSwarmCmd::TriggerUnrelevantRecordCleanup")
267 }
268 LocalSwarmCmd::NotifyPeerScores { peer_scores } => {
269 write!(f, "LocalSwarmCmd::NotifyPeerScores({peer_scores:?})")
270 }
271 LocalSwarmCmd::AddFreshReplicateRecords { holder, keys } => {
272 write!(
273 f,
274 "LocalSwarmCmd::AddFreshReplicateRecords({holder:?}, {keys:?})"
275 )
276 }
277 LocalSwarmCmd::NotifyPeerVersion { peer, version } => {
278 write!(f, "LocalSwarmCmd::NotifyPeerVersion({peer:?}, {version:?})")
279 }
280 LocalSwarmCmd::GetNetworkDensity { .. } => {
281 write!(f, "LocalSwarmCmd::GetNetworkDensity")
282 }
283 LocalSwarmCmd::RemovePeer { peer } => {
284 write!(f, "LocalSwarmCmd::RemovePeer({peer:?})")
285 }
286 }
287 }
288}
289
290#[derive(Debug, Clone)]
292pub struct SwarmLocalState {
293 pub connected_peers: Vec<PeerId>,
295 pub peers_in_routing_table: usize,
297 pub listeners: Vec<Multiaddr>,
299}