Improve single-node testnet support and Arc NetworkConfig/ChainSpec (#6396)

* Arc ChainSpec and NetworkConfig

* Fix release tests

* Fix lint

* Merge remote-tracking branch 'origin/unstable' into single-node-testnet
This commit is contained in:
Michael Sproul
2024-09-24 10:16:18 +10:00
committed by GitHub
parent d84df5799c
commit 1447eeb40b
66 changed files with 340 additions and 250 deletions

View File

@@ -76,7 +76,7 @@ pub fn build_log(level: slog::Level, enabled: bool) -> slog::Logger {
}
}
pub fn build_config(mut boot_nodes: Vec<Enr>) -> NetworkConfig {
pub fn build_config(mut boot_nodes: Vec<Enr>) -> Arc<NetworkConfig> {
let mut config = NetworkConfig::default();
// Find unused ports by using the 0 port.
@@ -92,7 +92,7 @@ pub fn build_config(mut boot_nodes: Vec<Enr>) -> NetworkConfig {
config.enr_address = (Some(std::net::Ipv4Addr::LOCALHOST), None);
config.boot_nodes_enr.append(&mut boot_nodes);
config.network_dir = path.into_path();
config
Arc::new(config)
}
pub async fn build_libp2p_instance(
@@ -100,7 +100,7 @@ pub async fn build_libp2p_instance(
boot_nodes: Vec<Enr>,
log: slog::Logger,
fork_name: ForkName,
spec: &ChainSpec,
chain_spec: Arc<ChainSpec>,
) -> Libp2pInstance {
let config = build_config(boot_nodes);
// launch libp2p service
@@ -109,10 +109,10 @@ pub async fn build_libp2p_instance(
let (shutdown_tx, _) = futures::channel::mpsc::channel(1);
let executor = task_executor::TaskExecutor::new(rt, exit, log.clone(), shutdown_tx);
let libp2p_context = lighthouse_network::Context {
config: &config,
config,
enr_fork_id: EnrForkId::default(),
fork_context: Arc::new(fork_context(fork_name)),
chain_spec: spec,
chain_spec,
libp2p_registry: None,
};
Libp2pInstance(
@@ -142,14 +142,16 @@ pub async fn build_node_pair(
rt: Weak<Runtime>,
log: &slog::Logger,
fork_name: ForkName,
spec: &ChainSpec,
spec: Arc<ChainSpec>,
protocol: Protocol,
) -> (Libp2pInstance, Libp2pInstance) {
let sender_log = log.new(o!("who" => "sender"));
let receiver_log = log.new(o!("who" => "receiver"));
let mut sender = build_libp2p_instance(rt.clone(), vec![], sender_log, fork_name, spec).await;
let mut receiver = build_libp2p_instance(rt, vec![], receiver_log, fork_name, spec).await;
let mut sender =
build_libp2p_instance(rt.clone(), vec![], sender_log, fork_name, spec.clone()).await;
let mut receiver =
build_libp2p_instance(rt, vec![], receiver_log, fork_name, spec.clone()).await;
// let the two nodes set up listeners
let sender_fut = async {
@@ -218,11 +220,13 @@ pub async fn build_linear(
log: slog::Logger,
n: usize,
fork_name: ForkName,
spec: &ChainSpec,
spec: Arc<ChainSpec>,
) -> Vec<Libp2pInstance> {
let mut nodes = Vec::with_capacity(n);
for _ in 0..n {
nodes.push(build_libp2p_instance(rt.clone(), vec![], log.clone(), fork_name, spec).await);
nodes.push(
build_libp2p_instance(rt.clone(), vec![], log.clone(), fork_name, spec.clone()).await,
);
}
let multiaddrs: Vec<Multiaddr> = nodes

View File

@@ -61,7 +61,7 @@ fn test_tcp_status_rpc() {
let log = common::build_log(log_level, enable_logging);
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
rt.block_on(async {
// get sender/receiver
@@ -69,7 +69,7 @@ fn test_tcp_status_rpc() {
Arc::downgrade(&rt),
&log,
ForkName::Base,
&spec,
spec,
Protocol::Tcp,
)
.await;
@@ -163,7 +163,7 @@ fn test_tcp_blocks_by_range_chunked_rpc() {
let rt = Arc::new(Runtime::new().unwrap());
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
rt.block_on(async {
// get sender/receiver
@@ -171,7 +171,7 @@ fn test_tcp_blocks_by_range_chunked_rpc() {
Arc::downgrade(&rt),
&log,
ForkName::Bellatrix,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -179,8 +179,6 @@ fn test_tcp_blocks_by_range_chunked_rpc() {
// BlocksByRange Request
let rpc_request = Request::BlocksByRange(BlocksByRangeRequest::new(0, messages_to_send));
let spec = E::default_spec();
// BlocksByRange Response
let full_block = BeaconBlock::Base(BeaconBlockBase::<E>::full(&spec));
let signed_full_block = SignedBeaconBlock::from_block(full_block, Signature::empty());
@@ -300,12 +298,12 @@ fn test_blobs_by_range_chunked_rpc() {
rt.block_on(async {
// get sender/receiver
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
let (mut sender, mut receiver) = common::build_node_pair(
Arc::downgrade(&rt),
&log,
ForkName::Deneb,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -410,7 +408,7 @@ fn test_tcp_blocks_by_range_over_limit() {
let rt = Arc::new(Runtime::new().unwrap());
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
rt.block_on(async {
// get sender/receiver
@@ -418,7 +416,7 @@ fn test_tcp_blocks_by_range_over_limit() {
Arc::downgrade(&rt),
&log,
ForkName::Bellatrix,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -502,7 +500,7 @@ fn test_tcp_blocks_by_range_chunked_rpc_terminates_correctly() {
let rt = Arc::new(Runtime::new().unwrap());
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
rt.block_on(async {
// get sender/receiver
@@ -510,7 +508,7 @@ fn test_tcp_blocks_by_range_chunked_rpc_terminates_correctly() {
Arc::downgrade(&rt),
&log,
ForkName::Base,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -519,7 +517,6 @@ fn test_tcp_blocks_by_range_chunked_rpc_terminates_correctly() {
let rpc_request = Request::BlocksByRange(BlocksByRangeRequest::new(0, messages_to_send));
// BlocksByRange Response
let spec = E::default_spec();
let empty_block = BeaconBlock::empty(&spec);
let empty_signed = SignedBeaconBlock::from_block(empty_block, Signature::empty());
let rpc_response = Response::BlocksByRange(Some(Arc::new(empty_signed)));
@@ -631,7 +628,7 @@ fn test_tcp_blocks_by_range_single_empty_rpc() {
let log = common::build_log(log_level, enable_logging);
let rt = Arc::new(Runtime::new().unwrap());
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
rt.block_on(async {
// get sender/receiver
@@ -639,7 +636,7 @@ fn test_tcp_blocks_by_range_single_empty_rpc() {
Arc::downgrade(&rt),
&log,
ForkName::Base,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -648,7 +645,6 @@ fn test_tcp_blocks_by_range_single_empty_rpc() {
let rpc_request = Request::BlocksByRange(BlocksByRangeRequest::new(0, 10));
// BlocksByRange Response
let spec = E::default_spec();
let empty_block = BeaconBlock::empty(&spec);
let empty_signed = SignedBeaconBlock::from_block(empty_block, Signature::empty());
let rpc_response = Response::BlocksByRange(Some(Arc::new(empty_signed)));
@@ -739,7 +735,7 @@ fn test_tcp_blocks_by_root_chunked_rpc() {
let messages_to_send = 6;
let log = common::build_log(log_level, enable_logging);
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
let rt = Arc::new(Runtime::new().unwrap());
// get sender/receiver
@@ -748,7 +744,7 @@ fn test_tcp_blocks_by_root_chunked_rpc() {
Arc::downgrade(&rt),
&log,
ForkName::Bellatrix,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -877,7 +873,7 @@ fn test_tcp_blocks_by_root_chunked_rpc_terminates_correctly() {
let extra_messages_to_send: u64 = 10;
let log = common::build_log(log_level, enable_logging);
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
let rt = Arc::new(Runtime::new().unwrap());
// get sender/receiver
@@ -886,7 +882,7 @@ fn test_tcp_blocks_by_root_chunked_rpc_terminates_correctly() {
Arc::downgrade(&rt),
&log,
ForkName::Base,
&spec,
spec.clone(),
Protocol::Tcp,
)
.await;
@@ -1016,12 +1012,12 @@ fn goodbye_test(log_level: Level, enable_logging: bool, protocol: Protocol) {
let rt = Arc::new(Runtime::new().unwrap());
let spec = E::default_spec();
let spec = Arc::new(E::default_spec());
// get sender/receiver
rt.block_on(async {
let (mut sender, mut receiver) =
common::build_node_pair(Arc::downgrade(&rt), &log, ForkName::Base, &spec, protocol)
common::build_node_pair(Arc::downgrade(&rt), &log, ForkName::Base, spec, protocol)
.await;
// build the sender future