Skip to content
This repository was archived by the owner on Nov 15, 2023. It is now read-only.
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
81bdbdf
upgrade libp2p to 0.50.0
melekes Nov 18, 2022
21cf90c
on_swarm_event and on_connection_handler_event
melekes Nov 21, 2022
8a227e4
replace `Swarm::new` with `Swarm::with_threadpool_executor`
melekes Nov 21, 2022
8a97a52
on_swarm_event and on_connection_handler_event part 2
melekes Nov 21, 2022
e9b731b
on_swarm_event and on_connection_handler_event part 3
melekes Nov 21, 2022
d27d73a
on_swarm_event and on_connection_handler_event part 4
melekes Nov 21, 2022
672cac2
update libp2p
melekes Nov 21, 2022
41ab633
Merge branch 'master' into anton/upgrade-libp2p-to-0.50.0
melekes Nov 28, 2022
2fa1b2b
libp2p 0.50.0
melekes Nov 28, 2022
b3c33b5
rename OutboundQueryCompleted to OutboundQueryProgressed
melekes Nov 28, 2022
20437d7
remove unused var
melekes Nov 28, 2022
dbb7bec
accumulate outbound_query_records until query is finished
melekes Nov 28, 2022
f793dad
client: add WebRTC transport
melekes Jun 30, 2022
1e6f631
put webrtc certificate within base, not network config directory
melekes Nov 22, 2022
27ef639
Merge branch 'master' into anton/webrtc-transport
melekes Jan 10, 2023
a955481
fixes after the merge
melekes Jan 10, 2023
82fd633
fix docs
melekes Jan 10, 2023
c6eb8c8
better vars names in tests
melekes Jan 11, 2023
f964453
Merge branch 'master' into anton/webrtc-transport
melekes Jan 11, 2023
0db37d0
always give preference to tcp transport
melekes Jan 11, 2023
b7070e0
Merge branch 'master' into anton/webrtc-transport
melekes Jan 17, 2023
05238ab
Merge branch 'master' into anton/webrtc-transport
melekes Jan 26, 2023
2f404a4
use udp protocol, not tcp for webrtc
melekes Jan 26, 2023
05fb813
copy warp-sync zombienet test
melekes Jan 26, 2023
ce05840
rename test files
melekes Jan 26, 2023
f929b72
update test name
melekes Jan 26, 2023
7781776
remove generate-warp-sync-database from webrtc test
melekes Jan 26, 2023
1e153d2
change listen addr in zombienet tests
melekes Jan 27, 2023
dcd00f4
Apply suggestions from code review
melekes Jan 30, 2023
1c7a375
bump zombienet version
melekes Jan 30, 2023
727b487
Merge branch 'master' into anton/webrtc-transport
melekes Feb 6, 2023
b549d2b
Update zombienet version.
pepoviola Feb 7, 2023
35b971a
Merge branch 'master' into anton/webrtc-transport
melekes Feb 8, 2023
6e9c7ea
Update zombienet/0004-webrtc/test-webrtc.toml
pepoviola Feb 10, 2023
4516910
Update zombienet/0004-webrtc/test-webrtc.toml
pepoviola Feb 10, 2023
41fc433
Update zombienet/0004-webrtc/test-webrtc.toml
pepoviola Feb 10, 2023
722ccad
Update .gitlab-ci.yml
pepoviola Feb 10, 2023
be72387
bump version of zombienet and update snaps links (#13359)
pepoviola Feb 10, 2023
22c1a15
Merge branch 'master' into anton/webrtc-transport
melekes Feb 12, 2023
c596bb4
Merge branch 'master' into anton/webrtc-transport
melekes Mar 8, 2023
2d35bec
bump zombienet version
melekes Mar 8, 2023
a63e5d6
remove unneeded lines from zombienet test
melekes Mar 8, 2023
407ce5a
add missing features
melekes Mar 8, 2023
a26fabb
Merge branch 'master' into anton/webrtc-transport
melekes Mar 17, 2023
f2ca191
enable logging for bob
melekes Mar 17, 2023
52be5fd
add `--webrtc-certificate-raw` flag for zombienet
melekes Mar 20, 2023
b10a5cb
Merge branch 'master' into anton/webrtc-transport
melekes Mar 24, 2023
b4b92bf
zombienet: set p2p_cert_hash
melekes Mar 24, 2023
a9f2bd7
set p2p_cert_hash for alice
melekes Mar 24, 2023
0764cc9
Merge branch 'master' into anton/webrtc-transport
melekes Mar 27, 2023
1282e57
try to fix unsupported address error
melekes Mar 27, 2023
45c3d64
Merge branch 'master' into anton/webrtc-transport
melekes May 30, 2023
e4003ef
remove leftovers from merge
melekes May 30, 2023
342be2a
add missing dev dep
melekes May 30, 2023
2b37e04
rename /webrtc to /webrtc-direct
melekes May 31, 2023
8347be8
Merge branch 'master' into anton/webrtc-transport
melekes May 31, 2023
62a4658
Revert "rename /webrtc to /webrtc-direct"
melekes Jun 5, 2023
a518c81
Revert "Revert "rename /webrtc to /webrtc-direct""
melekes Jun 5, 2023
35ef2e8
disable webrtc for non-validators
melekes Jun 5, 2023
ae89a63
add logging to all nodes
melekes Jun 7, 2023
ef632a1
Merge branch 'master' into anton/webrtc-transport
melekes Jun 19, 2023
656faf7
trace webrtc package
melekes Jun 20, 2023
baf5b8f
Merge branch 'master' into anton/webrtc-transport
melekes Jul 25, 2023
424e319
fixes after merge
melekes Jul 25, 2023
e24baa9
fix protocol name
melekes Jul 25, 2023
6025ea4
use libp2p-webrtc dep in CLI
melekes Jul 25, 2023
09efa75
Merge branch 'master' into anton/webrtc-transport
melekes Jul 25, 2023
f0f7075
remove webrtc_sctp trace from dave's log
melekes Jul 26, 2023
142b884
bump regex to resolve polkadot companion CI job
melekes Jul 26, 2023
01ba6d2
more logging
melekes Jul 26, 2023
7d4e8e2
set mode to server by default
melekes Jul 26, 2023
ff958f8
Revert "bump regex to resolve polkadot companion CI job"
melekes Jul 27, 2023
27ef6c9
Revert "set mode to server by default"
melekes Jul 27, 2023
634ed48
Merge branch 'master' into anton/webrtc-transport
melekes Jul 27, 2023
2647ae6
reduce logging
melekes Jul 27, 2023
fb2caf8
Merge branch 'master' into anton/webrtc-transport
melekes Jul 28, 2023
c650ae8
Merge branch 'master' into anton/webrtc-transport
melekes Jul 31, 2023
20d33ad
Merge branch 'master' into anton/webrtc-transport
melekes Aug 2, 2023
7d8623a
more logging for dave
melekes Aug 2, 2023
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
Prev Previous commit
Next Next commit
Merge branch 'master' into anton/webrtc-transport
  • Loading branch information
melekes committed Mar 8, 2023
commit c596bb4bfd43e9dab79730dbc364e402219031ed
245 changes: 111 additions & 134 deletions Cargo.lock

Large diffs are not rendered by default.

7 changes: 3 additions & 4 deletions client/cli/src/params/network_params.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,10 @@ use crate::{
params::{node_key_params::NodeKeyParams, webrtc_certificate_params::WebRTCCertificateParams},
};
use clap::Args;
use sc_network::{
config::{NetworkConfiguration, NodeKeyConfig, WebRTCConfig},
multiaddr::Protocol,
use sc_network::{config::NetworkConfiguration, multiaddr::Protocol};
use sc_network_common::config::{
NodeKeyConfig, NonReservedPeerMode, SetConfig, TransportConfig, WebRTCConfig,
};
use sc_network_common::config::{NonReservedPeerMode, SetConfig, TransportConfig};
use sc_service::{
config::{Multiaddr, MultiaddrWithPeerId},
ChainSpec, ChainType,
Expand Down
1 change: 1 addition & 0 deletions client/network/common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ futures-timer = "3.0.2"
libp2p = { version = "0.50.0", features = ["request-response", "kad"] }
linked_hash_set = "0.1.3"
prometheus-endpoint = { package = "substrate-prometheus-endpoint", version = "0.10.0-dev", path = "../../../utils/prometheus" }
rand = "0.8.5"
smallvec = "1.8.0"
sc-consensus = { version = "0.10.0-dev", path = "../../consensus/common" }
sc-peerset = { version = "4.0.0-dev", path = "../../peerset" }
Expand Down
96 changes: 91 additions & 5 deletions client/network/common/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ pub use libp2p::{build_multiaddr, core::PublicKey, identity};
use codec::Encode;
use libp2p::{
identity::{ed25519, Keypair},
multiaddr, Multiaddr, PeerId,
multiaddr,
webrtc::tokio::certificate::Certificate as WebRTCCertificate,
Multiaddr, PeerId,
};
use zeroize::Zeroize;

Expand Down Expand Up @@ -401,6 +403,8 @@ pub struct NetworkConfiguration {
pub boot_nodes: Vec<MultiaddrWithPeerId>,
/// The node key configuration, which determines the node's network identity keypair.
pub node_key: NodeKeyConfig,
/// The WebRTC configuration, which determines the node's WebRTC network identity.
pub webrtc: WebRTCConfig,
/// List of request-response protocols that the node supports.
pub request_response_protocols: Vec<RequestResponseConfig>,
/// Configuration for the default set of nodes used for block syncing and transactions.
Expand Down Expand Up @@ -465,6 +469,7 @@ impl NetworkConfiguration {
node_name: SN,
client_version: SV,
node_key: NodeKeyConfig,
webrtc: WebRTCConfig,
net_config_path: Option<PathBuf>,
) -> Self {
let default_peers_set = SetConfig::default();
Expand All @@ -474,6 +479,7 @@ impl NetworkConfiguration {
public_addresses: Vec::new(),
boot_nodes: Vec::new(),
node_key,
webrtc,
request_response_protocols: Vec::new(),
default_peers_set_num_full: default_peers_set.in_peers + default_peers_set.out_peers,
default_peers_set,
Expand All @@ -494,8 +500,13 @@ impl NetworkConfiguration {
/// Create new default configuration for localhost-only connection with random port (useful for
/// testing)
pub fn new_local() -> NetworkConfiguration {
let mut config =
NetworkConfiguration::new("test-node", "test-client", Default::default(), None);
let mut config = NetworkConfiguration::new(
"test-node",
"test-client",
Default::default(),
WebRTCConfig::Ephemeral,
None,
);

config.listen_addresses =
vec![iter::once(multiaddr::Protocol::Ip4(Ipv4Addr::new(127, 0, 0, 1)))
Expand All @@ -509,8 +520,13 @@ impl NetworkConfiguration {
/// Create new default configuration for localhost-only connection with random port (useful for
/// testing)
pub fn new_memory() -> NetworkConfiguration {
let mut config =
NetworkConfiguration::new("test-node", "test-client", Default::default(), None);
let mut config = NetworkConfiguration::new(
"test-node",
"test-client",
Default::default(),
WebRTCConfig::Ephemeral,
None,
);

config.listen_addresses =
vec![iter::once(multiaddr::Protocol::Ip4(Ipv4Addr::new(127, 0, 0, 1)))
Expand All @@ -537,6 +553,66 @@ impl Default for NodeKeyConfig {
}
}

/// The configuration of a node's WebRTC certificate, describing how it is obtained.
#[derive(Clone, Debug)]
pub enum WebRTCConfig {
/// Certificate stored on disk.
/// A new certificate is randomly generated and written there if the file doesn't exist.
File(PathBuf),

/// A new certifiticate is randomly generated each time you start the node.
Ephemeral,
}

impl WebRTCConfig {
/// Evaluate a `WebRTCConfig` to obtain a [`WebRTCCertificate`]:
///
/// * If the certificate is configured as a file, it is read from that file, if it exists.
/// Otherwise a new certificate is generated and stored.
/// * If the certificate is configured as ephemeral, it is generated.
pub fn into_certificate(self) -> io::Result<WebRTCCertificate> {
use rand::thread_rng;
use std::os::unix::fs::OpenOptionsExt;

fn generate() -> io::Result<WebRTCCertificate> {
WebRTCCertificate::generate(&mut thread_rng())
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))
}

use WebRTCConfig::*;
match self {
File(filepath) => {
let f = std::fs::read(&filepath).or_else(|e| {
if e.kind() == io::ErrorKind::NotFound {
<PathBuf as AsRef<Path>>::as_ref(&filepath)
.parent()
.map_or(Ok(()), fs::create_dir_all)?;

let cert = generate()?;
let bytes = cert.serialize_pem().into_bytes();

let mut new_file = fs::OpenOptions::new()
.write(true)
.create_new(true)
.mode(0o600)
.open(filepath)?;
new_file.write_all(&bytes)?;

Ok(bytes)
} else {
Err(e)
}
})?;
let pem = String::from_utf8(f)
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))?;
WebRTCCertificate::from_pem(&pem)
.map_err(|e| io::Error::new(io::ErrorKind::Other, e.to_string()))
},
Ephemeral => generate(),
}
}
}

/// The options for obtaining a Ed25519 secret key.
pub type Ed25519Secret = Secret<ed25519::SecretKey>;

Expand Down Expand Up @@ -699,4 +775,14 @@ mod tests {
let kp2 = NodeKeyConfig::Ed25519(Secret::New).into_keypair().unwrap();
assert!(secret_bytes(&kp1) != secret_bytes(&kp2));
}

#[test]
fn test_webrtc_certificate() {
let tmp = tempdir_with_prefix("x");
std::fs::remove_dir(tmp.path()).unwrap(); // should be recreated
let file = tmp.path().join("x").to_path_buf();
let kp1 = WebRTCConfig::File(file.clone()).into_certificate().unwrap();
let kp2 = WebRTCConfig::File(file.clone()).into_certificate().unwrap();
assert!(file.is_file() && kp1 == kp2)
}
}
Loading
You are viewing a condensed version of this merge commit. You can view the full changes here.