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 storage::{DataTypes, ValidationType},
17 NetworkAddress, PrettyPrintRecordKey,
18};
19use libp2p::{
20 core::Multiaddr,
21 kad::{KBucketDistance as Distance, Record, RecordKey},
22 PeerId,
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>>, usize)>,
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 RemoveOutOfSyncEntry {
112 key: RecordKey,
113 },
114 AddLocalRecordAsStored {
117 key: RecordKey,
118 record_type: ValidationType,
119 data_type: DataTypes,
120 },
121 AddPeerToBlockList {
123 peer_id: PeerId,
124 },
125 RecordNodeIssue {
127 peer_id: PeerId,
128 issue: NodeIssue,
129 },
130 IsPeerShunned {
132 target: NetworkAddress,
133 sender: oneshot::Sender<bool>,
134 },
135 QuoteVerification {
137 quotes: Vec<(PeerId, PaymentQuote)>,
138 },
139 FetchCompleted((RecordKey, ValidationType)),
141 TriggerIntervalReplication,
144 TriggerIrrelevantRecordCleanup,
146 NotifyPeerScores {
148 peer_scores: Vec<(PeerId, bool)>,
149 },
150 AddFreshReplicateRecords {
152 holder: NetworkAddress,
153 keys: Vec<(NetworkAddress, ValidationType)>,
154 },
155 NotifyPeerVersion {
157 peer: PeerId,
158 version: String,
159 },
160 GetNetworkDensity {
162 sender: oneshot::Sender<Option<Distance>>,
163 },
164 RemovePeer {
166 peer: PeerId,
167 },
168 RecordNotAtTargetLocation,
170}
171
172impl Debug for LocalSwarmCmd {
175 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
176 match self {
177 LocalSwarmCmd::PutLocalRecord {
178 record,
179 is_client_put,
180 } => {
181 write!(
182 f,
183 "LocalSwarmCmd::PutLocalRecord {{ key: {:?}, is_client_put: {is_client_put:?} }}",
184 PrettyPrintRecordKey::from(&record.key)
185 )
186 }
187 LocalSwarmCmd::RemoveFailedLocalRecord { key } => {
188 write!(
189 f,
190 "LocalSwarmCmd::RemoveFailedLocalRecord {{ key: {:?} }}",
191 PrettyPrintRecordKey::from(key)
192 )
193 }
194 LocalSwarmCmd::RemoveOutOfSyncEntry { key } => {
195 write!(
196 f,
197 "LocalSwarmCmd::RemoveOutOfSyncEntry {{ key: {:?} }}",
198 PrettyPrintRecordKey::from(key)
199 )
200 }
201 LocalSwarmCmd::AddLocalRecordAsStored {
202 key,
203 record_type,
204 data_type,
205 } => {
206 write!(
207 f,
208 "LocalSwarmCmd::AddLocalRecordAsStored {{ key: {:?}, record_type: {record_type:?}, data_type: {data_type:?} }}",
209 PrettyPrintRecordKey::from(key)
210 )
211 }
212 LocalSwarmCmd::GetKCloseLocalPeersToTarget { key, .. } => {
213 write!(
214 f,
215 "LocalSwarmCmd::GetKCloseLocalPeersToTarget {{ key: {key:?} }}"
216 )
217 }
218 LocalSwarmCmd::GetLocalQuotingMetrics { .. } => {
219 write!(f, "LocalSwarmCmd::GetLocalQuotingMetrics")
220 }
221 LocalSwarmCmd::PaymentReceived => {
222 write!(f, "LocalSwarmCmd::PaymentReceived")
223 }
224 LocalSwarmCmd::GetLocalRecord { key, .. } => {
225 write!(
226 f,
227 "LocalSwarmCmd::GetLocalRecord {{ key: {:?} }}",
228 PrettyPrintRecordKey::from(key)
229 )
230 }
231 LocalSwarmCmd::GetAllLocalRecordAddresses { .. } => {
232 write!(f, "LocalSwarmCmd::GetAllLocalRecordAddresses")
233 }
234 LocalSwarmCmd::GetPeersWithMultiaddr { .. } => {
235 write!(f, "LocalSwarmCmd::GetPeersWithMultiaddr")
236 }
237 LocalSwarmCmd::GetKBuckets { .. } => {
238 write!(f, "LocalSwarmCmd::GetKBuckets")
239 }
240 LocalSwarmCmd::GetSwarmLocalState { .. } => {
241 write!(f, "LocalSwarmCmd::GetSwarmLocalState")
242 }
243 LocalSwarmCmd::RecordStoreHasKey { key, .. } => {
244 write!(
245 f,
246 "LocalSwarmCmd::RecordStoreHasKey {:?}",
247 PrettyPrintRecordKey::from(key)
248 )
249 }
250 LocalSwarmCmd::AddPeerToBlockList { peer_id } => {
251 write!(f, "LocalSwarmCmd::AddPeerToBlockList {peer_id:?}")
252 }
253 LocalSwarmCmd::RecordNodeIssue { peer_id, issue } => {
254 write!(
255 f,
256 "LocalSwarmCmd::SendNodeStatus peer {peer_id:?}, issue: {issue:?}"
257 )
258 }
259 LocalSwarmCmd::IsPeerShunned { target, .. } => {
260 write!(f, "LocalSwarmCmd::IsPeerInTrouble target: {target:?}")
261 }
262 LocalSwarmCmd::QuoteVerification { quotes } => {
263 write!(
264 f,
265 "LocalSwarmCmd::QuoteVerification of {} quotes",
266 quotes.len()
267 )
268 }
269 LocalSwarmCmd::FetchCompleted((key, record_type)) => {
270 write!(
271 f,
272 "LocalSwarmCmd::FetchCompleted({record_type:?} : {:?})",
273 PrettyPrintRecordKey::from(key)
274 )
275 }
276 LocalSwarmCmd::TriggerIntervalReplication => {
277 write!(f, "LocalSwarmCmd::TriggerIntervalReplication")
278 }
279 LocalSwarmCmd::TriggerIrrelevantRecordCleanup => {
280 write!(f, "LocalSwarmCmd::TriggerUnrelevantRecordCleanup")
281 }
282 LocalSwarmCmd::NotifyPeerScores { peer_scores } => {
283 write!(f, "LocalSwarmCmd::NotifyPeerScores({peer_scores:?})")
284 }
285 LocalSwarmCmd::AddFreshReplicateRecords { holder, keys } => {
286 write!(
287 f,
288 "LocalSwarmCmd::AddFreshReplicateRecords({holder:?}, {keys:?})"
289 )
290 }
291 LocalSwarmCmd::NotifyPeerVersion { peer, version } => {
292 write!(f, "LocalSwarmCmd::NotifyPeerVersion({peer:?}, {version:?})")
293 }
294 LocalSwarmCmd::GetNetworkDensity { .. } => {
295 write!(f, "LocalSwarmCmd::GetNetworkDensity")
296 }
297 LocalSwarmCmd::RemovePeer { peer } => {
298 write!(f, "LocalSwarmCmd::RemovePeer({peer:?})")
299 }
300 LocalSwarmCmd::RecordNotAtTargetLocation => {
301 write!(f, "LocalSwarmCmd::RecordNotAtTargetLocation")
302 }
303 }
304 }
305}
306
307#[derive(Debug, Clone)]
309pub struct SwarmLocalState {
310 pub connected_peers: Vec<PeerId>,
312 pub peers_in_routing_table: usize,
314 pub listeners: Vec<Multiaddr>,
316}