Skip to content

Commit 9deec5c

Browse files
committed
chore: adjust to the sequential processing changes in snarkVM
Signed-off-by: ljedrz <[email protected]>
1 parent c6093fa commit 9deec5c

File tree

8 files changed

+206
-126
lines changed

8 files changed

+206
-126
lines changed

cli/src/commands/start.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ use std::{
5555
path::PathBuf,
5656
sync::{Arc, atomic::AtomicBool},
5757
};
58-
use tokio::runtime::{self, Runtime};
58+
use tokio::{
59+
runtime::{self, Runtime},
60+
task,
61+
};
5962
use tracing::warn;
6063
use ureq::http;
6164

@@ -617,7 +620,8 @@ impl Start {
617620
let cdn = self.parse_cdn::<N>().with_context(|| "Failed to parse given CDN URL")?;
618621

619622
// Parse the genesis block.
620-
let genesis = self.parse_genesis::<N>()?;
623+
let start = self.clone();
624+
let genesis = task::spawn_blocking(move || start.parse_genesis::<N>()).await??;
621625
// Parse the private key of the node.
622626
let account = self.parse_private_key::<N>()?;
623627
// Parse the node type.

node/bft/src/sync/mod.rs

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,8 +1054,9 @@ mod tests {
10541054

10551055
// Create a genesis block with a seeded RNG to reproduce the same genesis private keys.
10561056
let seed: u64 = rng.r#gen();
1057-
let genesis_rng = &mut TestRng::from_seed(seed);
1058-
let genesis = VM::from(store).unwrap().genesis_beacon(account.private_key(), genesis_rng).unwrap();
1057+
let vm = VM::from(store).unwrap();
1058+
let genesis_pk = *account.private_key();
1059+
let genesis = spawn_blocking!(vm.genesis_beacon(&genesis_pk, &mut TestRng::from_seed(seed))).unwrap();
10591060

10601061
// Extract the private keys from the genesis committee by using the same RNG to sample private keys.
10611062
let genesis_rng = &mut TestRng::from_seed(seed);
@@ -1067,7 +1068,8 @@ mod tests {
10671068
];
10681069

10691070
// Initialize the ledger with the genesis block.
1070-
let ledger = CurrentLedger::load(genesis.clone(), StorageMode::new_test(None)).unwrap();
1071+
let genesis_clone = genesis.clone();
1072+
let ledger = spawn_blocking!(CurrentLedger::load(genesis_clone, StorageMode::new_test(None))).unwrap();
10711073
// Initialize the ledger.
10721074
let core_ledger = Arc::new(CoreLedgerService::new(ledger.clone(), Default::default()));
10731075

@@ -1180,10 +1182,13 @@ mod tests {
11801182
subdag_map.insert(commit_round, leader_cert_map.clone());
11811183
subdag_map.insert(commit_round - 1, previous_cert_map.clone());
11821184
let subdag = Subdag::from(subdag_map.clone())?;
1183-
core_ledger.prepare_advance_to_next_quorum_block(subdag, Default::default())?
1185+
let ledger = core_ledger.clone();
1186+
spawn_blocking!(ledger.prepare_advance_to_next_quorum_block(subdag, Default::default()))?
11841187
};
11851188
// Insert block 1.
1186-
core_ledger.advance_to_next_block(&block_1)?;
1189+
let ledger = core_ledger.clone();
1190+
let block = block_1.clone();
1191+
spawn_blocking!(ledger.advance_to_next_block(&block))?;
11871192

11881193
// Create block 2.
11891194
let leader_round_2 = commit_round + 2;
@@ -1207,10 +1212,13 @@ mod tests {
12071212
subdag_map_2.insert(leader_round_2 - 1, previous_cert_map_2.clone());
12081213
subdag_map_2.insert(leader_round_2 - 2, prev_commit_cert_map_2.clone());
12091214
let subdag_2 = Subdag::from(subdag_map_2.clone())?;
1210-
core_ledger.prepare_advance_to_next_quorum_block(subdag_2, Default::default())?
1215+
let ledger = core_ledger.clone();
1216+
spawn_blocking!(ledger.prepare_advance_to_next_quorum_block(subdag_2, Default::default()))?
12111217
};
12121218
// Insert block 2.
1213-
core_ledger.advance_to_next_block(&block_2)?;
1219+
let ledger = core_ledger.clone();
1220+
let block = block_2.clone();
1221+
spawn_blocking!(ledger.advance_to_next_block(&block))?;
12141222

12151223
// Create block 3
12161224
let leader_round_3 = commit_round + 4;
@@ -1234,24 +1242,25 @@ mod tests {
12341242
subdag_map_3.insert(leader_round_3 - 1, previous_cert_map_3.clone());
12351243
subdag_map_3.insert(leader_round_3 - 2, prev_commit_cert_map_3.clone());
12361244
let subdag_3 = Subdag::from(subdag_map_3.clone())?;
1237-
core_ledger.prepare_advance_to_next_quorum_block(subdag_3, Default::default())?
1245+
let ledger = core_ledger.clone();
1246+
spawn_blocking!(ledger.prepare_advance_to_next_quorum_block(subdag_3, Default::default()))?
12381247
};
12391248
// Insert block 3.
1240-
core_ledger.advance_to_next_block(&block_3)?;
1249+
let ledger = core_ledger.clone();
1250+
let block = block_3.clone();
1251+
spawn_blocking!(ledger.advance_to_next_block(&block))?;
12411252

12421253
// Initialize the syncing ledger.
1243-
let storage_mode = StorageMode::new_test(None);
1244-
let syncing_ledger = Arc::new(CoreLedgerService::new(
1245-
CurrentLedger::load(genesis, storage_mode.clone()).unwrap(),
1246-
Default::default(),
1247-
));
1254+
let syncing_ledger = spawn_blocking!(CurrentLedger::load(genesis, StorageMode::new_test(None))).unwrap();
1255+
let syncing_ledger = Arc::new(CoreLedgerService::new(syncing_ledger, Default::default()));
12481256
// Initialize the gateway.
1257+
let storage_mode = StorageMode::new_test(None);
12491258
let gateway =
12501259
Gateway::new(account.clone(), storage.clone(), syncing_ledger.clone(), None, &[], storage_mode, None)?;
12511260
// Initialize the block synchronization logic.
12521261
let block_sync = Arc::new(BlockSync::new(syncing_ledger.clone()));
12531262
// Initialize the sync module.
1254-
let sync = Sync::new(gateway.clone(), storage.clone(), syncing_ledger.clone(), block_sync);
1263+
let sync = Sync::new(gateway, storage, syncing_ledger.clone(), block_sync);
12551264
// Try to sync block 1.
12561265
sync.sync_storage_with_block(block_1).await?;
12571266
assert_eq!(syncing_ledger.latest_block_height(), 1);
@@ -1282,8 +1291,9 @@ mod tests {
12821291

12831292
// Create a genesis block with a seeded RNG to reproduce the same genesis private keys.
12841293
let seed: u64 = rng.r#gen();
1285-
let genesis_rng = &mut TestRng::from_seed(seed);
1286-
let genesis = VM::from(store).unwrap().genesis_beacon(account.private_key(), genesis_rng).unwrap();
1294+
let vm = VM::from(store).unwrap();
1295+
let genesis_pk = *account.private_key();
1296+
let genesis = spawn_blocking!(vm.genesis_beacon(&genesis_pk, &mut TestRng::from_seed(seed))).unwrap();
12871297

12881298
// Extract the private keys from the genesis committee by using the same RNG to sample private keys.
12891299
let genesis_rng = &mut TestRng::from_seed(seed);
@@ -1294,13 +1304,13 @@ mod tests {
12941304
PrivateKey::new(genesis_rng)?,
12951305
];
12961306
// Initialize the ledger with the genesis block.
1297-
let ledger = CurrentLedger::load(genesis.clone(), StorageMode::new_test(None)).unwrap();
1307+
let ledger = spawn_blocking!(CurrentLedger::load(genesis, StorageMode::new_test(None))).unwrap();
12981308
// Initialize the ledger.
1299-
let core_ledger = Arc::new(CoreLedgerService::new(ledger.clone(), Default::default()));
1309+
let core_ledger = Arc::new(CoreLedgerService::new(ledger, Default::default()));
13001310
// Sample rounds of batch certificates starting at the genesis round from a static set of 4 authors.
13011311
let (round_to_certificates_map, committee) = {
13021312
// Initialize the committee.
1303-
let committee = ledger.latest_committee().unwrap();
1313+
let committee = core_ledger.current_committee().unwrap();
13041314
// Initialize a mapping from the round number to the set of batch certificates in the round.
13051315
let mut round_to_certificates_map: HashMap<u64, IndexSet<BatchCertificate<CurrentNetwork>>> =
13061316
HashMap::new();
@@ -1369,10 +1379,13 @@ mod tests {
13691379
subdag_map.insert(commit_round, leader_cert_map.clone());
13701380
subdag_map.insert(commit_round - 1, previous_cert_map.clone());
13711381
let subdag = Subdag::from(subdag_map.clone())?;
1372-
core_ledger.prepare_advance_to_next_quorum_block(subdag, Default::default())?
1382+
let ledger = core_ledger.clone();
1383+
spawn_blocking!(ledger.prepare_advance_to_next_quorum_block(subdag, Default::default()))?
13731384
};
13741385
// Insert block 1.
1375-
core_ledger.advance_to_next_block(&block_1)?;
1386+
let ledger = core_ledger.clone();
1387+
let block = block_1.clone();
1388+
spawn_blocking!(ledger.advance_to_next_block(&block))?;
13761389

13771390
// Create block 2.
13781391
let leader_round_2 = commit_round + 2;
@@ -1389,10 +1402,13 @@ mod tests {
13891402
subdag_map_2.insert(leader_round_2, leader_cert_map_2.clone());
13901403
subdag_map_2.insert(leader_round_2 - 1, previous_cert_map_2.clone());
13911404
let subdag_2 = Subdag::from(subdag_map_2.clone())?;
1392-
core_ledger.prepare_advance_to_next_quorum_block(subdag_2, Default::default())?
1405+
let ledger = core_ledger.clone();
1406+
spawn_blocking!(ledger.prepare_advance_to_next_quorum_block(subdag_2, Default::default()))?
13931407
};
13941408
// Insert block 2.
1395-
core_ledger.advance_to_next_block(&block_2)?;
1409+
let ledger = core_ledger.clone();
1410+
let block = block_2.clone();
1411+
spawn_blocking!(ledger.advance_to_next_block(&block))?;
13961412

13971413
// Create block 3
13981414
let leader_round_3 = commit_round + 4;
@@ -1409,10 +1425,13 @@ mod tests {
14091425
subdag_map_3.insert(leader_round_3, leader_cert_map_3.clone());
14101426
subdag_map_3.insert(leader_round_3 - 1, previous_cert_map_3.clone());
14111427
let subdag_3 = Subdag::from(subdag_map_3.clone())?;
1412-
core_ledger.prepare_advance_to_next_quorum_block(subdag_3, Default::default())?
1428+
let ledger = core_ledger.clone();
1429+
spawn_blocking!(ledger.prepare_advance_to_next_quorum_block(subdag_3, Default::default()))?
14131430
};
14141431
// Insert block 3.
1415-
core_ledger.advance_to_next_block(&block_3)?;
1432+
let ledger = core_ledger.clone();
1433+
let block = block_3.clone();
1434+
spawn_blocking!(ledger.advance_to_next_block(&block))?;
14161435

14171436
/*
14181437
Check that the pending certificates are computed correctly.
@@ -1443,6 +1462,7 @@ mod tests {
14431462
}
14441463
// Check that the set of pending certificates is equal to the set of candidate pending certificates.
14451464
assert_eq!(pending_certificates, candidate_pending_certificates);
1465+
14461466
Ok(())
14471467
}
14481468
}

node/bft/tests/bft_e2e.rs

Lines changed: 80 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,19 @@ async fn test_state_coherence() {
3131
const N: u16 = 4;
3232
const TRANSMISSION_INTERVAL_MS: u64 = 10;
3333

34-
let mut network = TestNetwork::new(TestNetworkConfig {
35-
num_nodes: N,
36-
bft: true,
37-
connect_all: true,
38-
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
39-
// Set this to Some(0..=4) to see the logs.
40-
log_level: Some(0),
41-
log_connections: true,
42-
});
34+
let mut network = tokio::task::spawn_blocking(|| {
35+
TestNetwork::new(TestNetworkConfig {
36+
num_nodes: N,
37+
bft: true,
38+
connect_all: true,
39+
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
40+
// Set this to Some(0..=4) to see the logs.
41+
log_level: Some(0),
42+
log_connections: true,
43+
})
44+
})
45+
.await
46+
.unwrap();
4347

4448
network.start().await;
4549

@@ -52,15 +56,19 @@ async fn test_resync() {
5256
// Start N nodes, connect them and start the cannons for each.
5357
const N: u16 = 4;
5458
const TRANSMISSION_INTERVAL_MS: u64 = 10;
55-
let mut network = TestNetwork::new(TestNetworkConfig {
56-
num_nodes: N,
57-
bft: true,
58-
connect_all: true,
59-
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
60-
// Set this to Some(0..=4) to see the logs.
61-
log_level: Some(0),
62-
log_connections: false,
63-
});
59+
let mut network = tokio::task::spawn_blocking(|| {
60+
TestNetwork::new(TestNetworkConfig {
61+
num_nodes: N,
62+
bft: true,
63+
connect_all: true,
64+
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
65+
// Set this to Some(0..=4) to see the logs.
66+
log_level: Some(0),
67+
log_connections: false,
68+
})
69+
})
70+
.await
71+
.unwrap();
6472
network.start().await;
6573

6674
// Let the nodes advance through the rounds.
@@ -98,15 +106,19 @@ async fn test_quorum_threshold() {
98106
const N: u16 = 4;
99107
const TRANSMISSION_INTERVAL_MS: u64 = 10;
100108

101-
let mut network = TestNetwork::new(TestNetworkConfig {
102-
num_nodes: N,
103-
bft: true,
104-
connect_all: false,
105-
fire_transmissions: None,
106-
// Set this to Some(0..=4) to see the logs.
107-
log_level: None,
108-
log_connections: true,
109-
});
109+
let mut network = tokio::task::spawn_blocking(|| {
110+
TestNetwork::new(TestNetworkConfig {
111+
num_nodes: N,
112+
bft: true,
113+
connect_all: false,
114+
fire_transmissions: None,
115+
// Set this to Some(0..=4) to see the logs.
116+
log_level: None,
117+
log_connections: true,
118+
})
119+
})
120+
.await
121+
.unwrap();
110122
network.start().await;
111123

112124
// Check each node is at round 1 (0 is genesis).
@@ -142,23 +154,28 @@ async fn test_quorum_threshold() {
142154

143155
// Check the nodes reach quorum and advance through the rounds.
144156
const TARGET_ROUND: u64 = 4;
145-
deadline!(Duration::from_secs(20), move || { network.is_round_reached(TARGET_ROUND) });
157+
let net = network.clone();
158+
deadline!(Duration::from_secs(20), move || { net.is_round_reached(TARGET_ROUND) });
146159
}
147160

148161
#[tokio::test(flavor = "multi_thread")]
149162
async fn test_quorum_break() {
150163
// Start N nodes, connect them and start the cannons for each.
151164
const N: u16 = 4;
152165
const TRANSMISSION_INTERVAL_MS: u64 = 10;
153-
let mut network = TestNetwork::new(TestNetworkConfig {
154-
num_nodes: N,
155-
bft: true,
156-
connect_all: true,
157-
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
158-
// Set this to Some(0..=4) to see the logs.
159-
log_level: None,
160-
log_connections: true,
161-
});
166+
let mut network = tokio::task::spawn_blocking(|| {
167+
TestNetwork::new(TestNetworkConfig {
168+
num_nodes: N,
169+
bft: true,
170+
connect_all: true,
171+
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
172+
// Set this to Some(0..=4) to see the logs.
173+
log_level: None,
174+
log_connections: true,
175+
})
176+
})
177+
.await
178+
.unwrap();
162179
network.start().await;
163180

164181
// Check the nodes have started advancing through the rounds.
@@ -186,15 +203,19 @@ async fn test_leader_election_consistency() {
186203
// Start N nodes, connect them and start the cannons for each.
187204
const N: u16 = 4;
188205
const CANNON_INTERVAL_MS: u64 = 10;
189-
let mut network = TestNetwork::new(TestNetworkConfig {
190-
num_nodes: N,
191-
bft: true,
192-
connect_all: true,
193-
fire_transmissions: Some(CANNON_INTERVAL_MS),
194-
// Set this to Some(0..=4) to see the logs.
195-
log_level: None,
196-
log_connections: true,
197-
});
206+
let mut network = tokio::task::spawn_blocking(|| {
207+
TestNetwork::new(TestNetworkConfig {
208+
num_nodes: N,
209+
bft: true,
210+
connect_all: true,
211+
fire_transmissions: Some(CANNON_INTERVAL_MS),
212+
// Set this to Some(0..=4) to see the logs.
213+
log_level: None,
214+
log_connections: true,
215+
})
216+
})
217+
.await
218+
.unwrap();
198219
network.start().await;
199220

200221
// Wait for starting round to be reached
@@ -238,15 +259,19 @@ async fn test_transient_break() {
238259
// Start N nodes, connect them and start the cannons for each.
239260
const N: u16 = 4;
240261
const TRANSMISSION_INTERVAL_MS: u64 = 10;
241-
let mut network = TestNetwork::new(TestNetworkConfig {
242-
num_nodes: N,
243-
bft: true,
244-
connect_all: true,
245-
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
246-
// Set this to Some(0..=4) to see the logs.
247-
log_level: Some(6),
248-
log_connections: false,
249-
});
262+
let mut network = tokio::task::spawn_blocking(|| {
263+
TestNetwork::new(TestNetworkConfig {
264+
num_nodes: N,
265+
bft: true,
266+
connect_all: true,
267+
fire_transmissions: Some(TRANSMISSION_INTERVAL_MS),
268+
// Set this to Some(0..=4) to see the logs.
269+
log_level: Some(6),
270+
log_connections: false,
271+
})
272+
})
273+
.await
274+
.unwrap();
250275
network.start().await;
251276

252277
// Check the nodes have started advancing through the rounds.

0 commit comments

Comments
 (0)