Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
882 changes: 460 additions & 422 deletions ant-bootstrap/src/bootstrap.rs

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions ant-bootstrap/src/cache_store/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ impl BootstrapCacheStore {
if addr.iter().any(|p| matches!(p, Protocol::P2pCircuit)) {
return;
}
let Some(addr) = craft_valid_multiaddr(&addr, false) else {
let Some(addr) = craft_valid_multiaddr(&addr) else {
return;
};
let peer_id = match addr.iter().find(|p| matches!(p, Protocol::P2p(_))) {
Expand Down Expand Up @@ -149,7 +149,7 @@ impl BootstrapCacheStore {
}

if self.data.read().await.peers.is_empty() {
info!("Cache is empty, skipping sync and flush to disk");
info!("No peers to write to disk, skipping sync to disk");
return Ok(());
}

Expand Down
52 changes: 16 additions & 36 deletions ant-bootstrap/src/contacts_fetcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,6 @@
endpoints: Vec<Url>,
/// Reqwest Client
request_client: Client,
/// Ignore PeerId in the multiaddr if not present. This is only useful for fetching nat detection contacts
ignore_peer_id: bool,
}

impl ContactsFetcher {
Expand All @@ -68,7 +66,6 @@
max_addrs: usize::MAX,
endpoints,
request_client,
ignore_peer_id: false,
})
}

Expand Down Expand Up @@ -105,10 +102,6 @@
self.endpoints.push(endpoint);
}

pub fn ignore_peer_id(&mut self, ignore_peer_id: bool) {
self.ignore_peer_id = ignore_peer_id;
}

/// Fetch the list of bootstrap multiaddrs from all configured endpoints
pub async fn fetch_bootstrap_addresses(&self) -> Result<Vec<Multiaddr>> {
info!(
Expand All @@ -125,12 +118,7 @@
endpoint
);
(
Self::fetch_from_endpoint(
self.request_client.clone(),
&endpoint,
self.ignore_peer_id,
)
.await,
Self::fetch_from_endpoint(self.request_client.clone(), &endpoint).await,
endpoint,
)
})
Expand Down Expand Up @@ -175,11 +163,7 @@
}

/// Fetch the list of multiaddrs from a single endpoint
async fn fetch_from_endpoint(
request_client: Client,
endpoint: &Url,
ignore_peer_id: bool,
) -> Result<Vec<Multiaddr>> {
async fn fetch_from_endpoint(request_client: Client, endpoint: &Url) -> Result<Vec<Multiaddr>> {
let mut retries = 0;

let bootstrap_addresses = loop {
Expand All @@ -194,7 +178,7 @@
if response.status().is_success() {
let text = response.text().await?;

match Self::try_parse_response(&text, ignore_peer_id) {
match Self::try_parse_response(&text) {
Ok(addrs) => break addrs,
Err(err) => {
warn!("Failed to parse response with err: {err:?}");
Expand Down Expand Up @@ -239,7 +223,7 @@
}

/// Try to parse a response from an endpoint
fn try_parse_response(response: &str, ignore_peer_id: bool) -> Result<Vec<Multiaddr>> {
fn try_parse_response(response: &str) -> Result<Vec<Multiaddr>> {
let cache_data = if let Ok(data) =
serde_json::from_str::<super::cache_store::cache_data_v1::CacheData>(response)
{
Expand Down Expand Up @@ -282,7 +266,7 @@

let bootstrap_addresses = response
.split('\n')
.filter_map(|str| craft_valid_multiaddr_from_str(str, ignore_peer_id))
.filter_map(craft_valid_multiaddr_from_str)
.collect::<Vec<_>>();

if bootstrap_addresses.is_empty() {
Expand Down Expand Up @@ -418,7 +402,7 @@
.and(path("/"))
.respond_with(
ResponseTemplate::new(200)
.set_body_string("/ip4/127.0.0.1/tcp/8080/p2p/12D3KooWRBhwfeP2Y4TCx1SM6s9rUoHhR5STiGwxBhgFRcw3UERE\n/ip4/127.0.0.2/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"),
.set_body_string("/ip4/127.0.0.1/udp/8080/quic-v1/p2p/12D3KooWRBhwfeP2Y4TCx1SM6s9rUoHhR5STiGwxBhgFRcw3UERE\n/ip4/127.0.0.2/udp/8080/quic-v1/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"),

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
)
.mount(&mock_server)
.await;
Expand All @@ -430,11 +414,11 @@
assert_eq!(addrs.len(), 2);

let addr1: Multiaddr =
"/ip4/127.0.0.1/tcp/8080/p2p/12D3KooWRBhwfeP2Y4TCx1SM6s9rUoHhR5STiGwxBhgFRcw3UERE"
"/ip4/127.0.0.1/udp/8080/quic-v1/p2p/12D3KooWRBhwfeP2Y4TCx1SM6s9rUoHhR5STiGwxBhgFRcw3UERE"

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
.parse()
.unwrap();
let addr2: Multiaddr =
"/ip4/127.0.0.2/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"
"/ip4/127.0.0.2/udp/8080/quic-v1/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"
.parse()
.unwrap();
assert!(addrs.iter().any(|p| p == &addr1));
Expand All @@ -457,7 +441,7 @@
Mock::given(method("GET"))
.and(path("/"))
.respond_with(ResponseTemplate::new(200).set_body_string(
"/ip4/127.0.0.1/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5",
"/ip4/127.0.0.1/udp/8080/quic-v1/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5",

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
))
.mount(&mock_server2)
.await;
Expand All @@ -472,7 +456,7 @@
assert_eq!(addrs.len(), 1);

let addr: Multiaddr =
"/ip4/127.0.0.1/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"
"/ip4/127.0.0.1/udp/8080/quic-v1/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
.parse()
.unwrap();
assert_eq!(addrs[0], addr);
Expand Down Expand Up @@ -508,15 +492,13 @@
}

#[tokio::test]
async fn test_invalid_multiaddr() {
async fn test_mutliaddr_without_peerid() {
let mock_server = MockServer::start().await;

Mock::given(method("GET"))
.and(path("/"))
.respond_with(
ResponseTemplate::new(200).set_body_string(
"/ip4/127.0.0.1/tcp/8080\n/ip4/127.0.0.2/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5",
),
ResponseTemplate::new(200).set_body_string("/ip4/127.0.0.1/udp/8080/quic-v1"),

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
)
.mount(&mock_server)
.await;
Expand All @@ -525,10 +507,8 @@
fetcher.endpoints = vec![mock_server.uri().parse().unwrap()];

let addrs = fetcher.fetch_bootstrap_addresses().await.unwrap();
let valid_addr: Multiaddr =
"/ip4/127.0.0.2/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"
.parse()
.unwrap();

let valid_addr: Multiaddr = "/ip4/127.0.0.1/udp/8080/quic-v1".parse().unwrap();

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
assert_eq!(addrs[0], valid_addr);
}

Expand Down Expand Up @@ -557,7 +537,7 @@
Mock::given(method("GET"))
.and(path("/"))
.respond_with(
ResponseTemplate::new(200).set_body_string("\n \n/ip4/127.0.0.1/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5\n \n"),
ResponseTemplate::new(200).set_body_string("\n \n/ip4/127.0.0.1/udp/8080/quic-v1/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5\n \n"),

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
)
.mount(&mock_server)
.await;
Expand All @@ -569,7 +549,7 @@
assert_eq!(addrs.len(), 1);

let addr: Multiaddr =
"/ip4/127.0.0.1/tcp/8080/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"
"/ip4/127.0.0.1/udp/8080/quic-v1/p2p/12D3KooWD2aV1f3qkhggzEFaJ24CEFYkSdZF5RKoMLpU6CwExYV5"

Check notice

Code scanning / devskim

Accessing localhost could indicate debug code, or could hinder scaling. Note

Do not leave debug code in production
.parse()
.unwrap();
assert_eq!(addrs[0], addr);
Expand Down
Loading
Loading