Expand description
Simulate networking between peers with configurable link behavior (i.e. drops, latency, corruption, etc.).
Both peer and link modification can be performed dynamically over the lifetime of the simulated network. This can be used to mimic transient network partitions, offline nodes (that later connect), and/or degrading link quality.
§Determinism
commonware-p2p::simulated can be run deterministically when paired with commonware-runtime::deterministic.
This makes it possible to reproduce an arbitrary order of delivered/dropped messages with a given seed.
§Example
use commonware_p2p::simulated::{Config, Link, Network};
use commonware_cryptography::{Ed25519, Signer, Verifier};
use commonware_runtime::{deterministic, Spawner, Runner, Metrics};
// Generate peers
let peers = vec![
Ed25519::from_seed(0).public_key(),
Ed25519::from_seed(1).public_key(),
Ed25519::from_seed(2).public_key(),
Ed25519::from_seed(3).public_key(),
];
// Configure network
let p2p_cfg = Config {
max_size: 1024 * 1024, // 1MB
};
// Start context
let executor = deterministic::Runner::seeded(0);
executor.start(|context| async move {
// Initialize network
let (network, mut oracle) = Network::new(context.with_label("network"), p2p_cfg);
// Start network
let network_handler = network.start();
// Register some peers
let (sender, receiver) = oracle.register(peers[0].clone(), 0).await.unwrap();
let (sender, receiver) = oracle.register(peers[1].clone(), 0).await.unwrap();
// Link 2 peers
oracle.add_link(
peers[0].clone(),
peers[1].clone(),
Link {
latency: 5.0,
jitter: 2.5,
success_rate: 0.75,
},
).await.unwrap();
// ... Use sender and receiver ...
// Update link
oracle.remove_link(
peers[0].clone(),
peers[1].clone(),
).await.unwrap();
oracle.add_link(
peers[0].clone(),
peers[1].clone(),
Link {
latency: 100.0,
jitter: 25.0,
success_rate: 0.8,
},
).await.unwrap();
// ... Use sender and receiver ...
// Shutdown network
network_handler.abort();
});Structs§
- Config
- Configuration for the simulated network.
- Link
- Describes a connection between two peers.
- Network
- Implementation of a simulated network.
- Oracle
- Interface for modifying the simulated network.
- Receiver
- Implementation of a
crate::Receiverfor the simulated network. - Sender
- Implementation of a
crate::Senderfor the simulated network.
Enums§
- Error
- Errors that can occur when interacting with the network.