Skip to content

Commit 031a09e

Browse files
authored
Store progress at DRB checkpoints (#3229)
1 parent 622c4b0 commit 031a09e

File tree

26 files changed

+1270
-1262
lines changed

26 files changed

+1270
-1262
lines changed

Cargo.lock

Lines changed: 524 additions & 590 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

builder/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ hotshot = { workspace = true }
2424
hotshot-builder-api = { workspace = true }
2525
hotshot-builder-core = { workspace = true }
2626
hotshot-events-service = { workspace = true }
27+
hotshot-example-types = { workspace = true }
2728
hotshot-state-prover = { workspace = true }
2829
hotshot-types = { workspace = true }
2930
marketplace-builder-shared = { workspace = true }

builder/src/non_permissioned.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,15 @@ pub fn build_instance_state<V: Versions>(
6060
l1_client.clone(),
6161
chain_config,
6262
);
63+
6364
let coordinator = EpochMembershipCoordinator::new(
6465
Arc::new(RwLock::new(EpochCommittees::new_stake(
6566
vec![],
6667
vec![],
6768
fetcher,
6869
))),
69-
None,
7070
100,
71+
&Arc::new(sequencer::persistence::no_storage::NoStorage),
7172
);
7273

7374
NodeState::new(

crates/hotshot/examples/infra/mod.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ use hotshot_types::{
6363
network::ConnectedNetwork,
6464
node_implementation::{ConsensusTime, NodeType, Versions},
6565
states::TestableState,
66-
storage::storage_add_drb_result,
6766
},
6867
utils::genesis_epoch_from_version,
6968
HotShotConfig, PeerConfig, ValidatorConfig,
@@ -388,7 +387,6 @@ pub trait RunDa<
388387
fallback_builder_url: config.config.builder_urls.first().clone(),
389388
};
390389
let epoch_height = config.config.epoch_height;
391-
392390
let storage = TestStorage::<TYPES>::default();
393391

394392
SystemContext::init(
@@ -397,11 +395,7 @@ pub trait RunDa<
397395
state_sk,
398396
config.node_index,
399397
config.config,
400-
EpochMembershipCoordinator::new(
401-
membership,
402-
Some(storage_add_drb_result(storage.clone())),
403-
epoch_height,
404-
),
398+
EpochMembershipCoordinator::new(membership, epoch_height, &storage.clone()),
405399
Arc::from(network),
406400
initializer,
407401
ConsensusMetricsValue::default(),

crates/hotshot/task-impls/src/helpers.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use hotshot_task::dependency::{Dependency, EventDependency};
1818
use hotshot_types::{
1919
consensus::OuterConsensus,
2020
data::{Leaf2, QuorumProposalWrapper, VidDisperseShare, ViewChangeEvidence2},
21-
drb::{DrbResult, DrbSeedInput},
21+
drb::{DrbInput, DrbResult, DrbSeedInput},
2222
epoch_membership::EpochMembershipCoordinator,
2323
event::{Event, EventType, LeafInfo},
2424
message::{Proposal, UpgradeLock},
@@ -34,7 +34,7 @@ use hotshot_types::{
3434
election::Membership,
3535
node_implementation::{ConsensusTime, NodeImplementation, NodeType, Versions},
3636
signature_key::{SignatureKey, StakeTableEntryType, StateSignatureKey},
37-
storage::Storage,
37+
storage::{store_drb_progress_fn, Storage},
3838
BlockPayload, ValidatedState,
3939
},
4040
utils::{
@@ -177,10 +177,16 @@ fn start_drb_task<TYPES: NodeType, I: NodeImplementation<TYPES>>(
177177
) {
178178
let membership = membership.clone();
179179
let storage = storage.clone();
180+
let store_drb_progress_fn = store_drb_progress_fn(storage.clone());
180181
let consensus = consensus.clone();
182+
let drb_input = DrbInput {
183+
epoch: *epoch,
184+
iteration: 0,
185+
value: seed,
186+
};
181187
tokio::spawn(async move {
182188
let drb_result = tokio::task::spawn_blocking(move || {
183-
hotshot_types::drb::compute_drb_result::<TYPES>(seed)
189+
hotshot_types::drb::compute_drb_result(drb_input, store_drb_progress_fn)
184190
})
185191
.await
186192
.unwrap();

crates/hotshot/testing/src/helpers.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ use hotshot_types::{
3636
traits::{
3737
election::Membership,
3838
node_implementation::{NodeType, Versions},
39-
storage::storage_add_drb_result,
4039
EncodeBytes,
4140
},
4241
utils::{option_epoch_from_block_number, View, ViewInner},
@@ -129,11 +128,8 @@ pub async fn build_system_handle_from_launcher<
129128
hotshot_config.known_da_nodes.clone(),
130129
)));
131130

132-
let coordinator = EpochMembershipCoordinator::new(
133-
memberships,
134-
Some(storage_add_drb_result(storage.clone())),
135-
hotshot_config.epoch_height,
136-
);
131+
let coordinator =
132+
EpochMembershipCoordinator::new(memberships, hotshot_config.epoch_height, &storage);
137133
let node_key_map = launcher.metadata.build_node_key_map();
138134

139135
let (c, s, r) = SystemContext::init(

crates/hotshot/testing/src/test_builder.rs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,7 @@ use hotshot_example_types::{
2121
use hotshot_types::{
2222
consensus::ConsensusMetricsValue,
2323
epoch_membership::EpochMembershipCoordinator,
24-
traits::{
25-
node_implementation::{NodeType, Versions},
26-
storage::storage_add_drb_result,
27-
},
24+
traits::node_implementation::{NodeType, Versions},
2825
HotShotConfig, PeerConfig, ValidatorConfig,
2926
};
3027
use hotshot_utils::anytrace::*;
@@ -262,11 +259,8 @@ pub async fn create_test_handle<
262259
let private_key = validator_config.private_key.clone();
263260
let public_key = validator_config.public_key.clone();
264261
let state_private_key = validator_config.state_private_key.clone();
265-
let membership_coordinator = EpochMembershipCoordinator::new(
266-
memberships,
267-
Some(storage_add_drb_result(storage.clone())),
268-
config.epoch_height,
269-
);
262+
let membership_coordinator =
263+
EpochMembershipCoordinator::new(memberships, config.epoch_height, &storage.clone());
270264

271265
let behaviour = (metadata.behaviour)(node_id);
272266
match behaviour {

crates/hotshot/testing/src/test_runner.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ use hotshot_types::{
3939
election::Membership,
4040
network::ConnectedNetwork,
4141
node_implementation::{ConsensusTime, NodeImplementation, NodeType, Versions},
42-
storage::storage_add_drb_result,
4342
},
4443
HotShotConfig, ValidatorConfig,
4544
};
@@ -615,8 +614,8 @@ where
615614
config,
616615
EpochMembershipCoordinator::new(
617616
Arc::new(RwLock::new(memberships)),
618-
Some(storage_add_drb_result(storage.clone())),
619617
epoch_height,
618+
&storage.clone(),
620619
),
621620
network,
622621
initializer,
@@ -658,11 +657,7 @@ where
658657
state_private_key,
659658
node_id,
660659
config,
661-
EpochMembershipCoordinator::new(
662-
memberships,
663-
Some(storage_add_drb_result(storage.clone())),
664-
epoch_height,
665-
),
660+
EpochMembershipCoordinator::new(memberships, epoch_height, &storage.clone()),
666661
network,
667662
initializer,
668663
ConsensusMetricsValue::default(),

crates/hotshot/testing/tests/tests_1/network_task.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ use hotshot_types::{
2222
message::UpgradeLock,
2323
traits::{
2424
election::Membership,
25-
node_implementation::{ConsensusTime, NodeType},storage::storage_add_drb_result
25+
node_implementation::{ConsensusTime, NodeType}
2626
},
2727
};
2828
use tokio::time::timeout;
@@ -62,7 +62,7 @@ async fn test_network_task() {
6262
all_nodes.clone(),
6363
all_nodes,
6464
)));
65-
let coordinator = EpochMembershipCoordinator::new(membership, Some(storage_add_drb_result(storage.clone())),config.epoch_height);
65+
let coordinator = EpochMembershipCoordinator::new(membership, config.epoch_height, &storage.clone());
6666
let network_state: NetworkEventTaskState<TestTypes, TestVersions, MemoryNetwork<_>, _> =
6767
NetworkEventTaskState {
6868
id: node_id,
@@ -238,7 +238,7 @@ async fn test_network_storage_fail() {
238238
all_nodes.clone(),
239239
all_nodes,
240240
)));
241-
let coordinator = EpochMembershipCoordinator::new(membership, Some(storage_add_drb_result(storage.clone())),config.epoch_height);
241+
let coordinator = EpochMembershipCoordinator::new(membership, config.epoch_height, &storage.clone());
242242
let network_state: NetworkEventTaskState<TestTypes, TestVersions, MemoryNetwork<_>, _> =
243243
NetworkEventTaskState {
244244
id: node_id,
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
use sha2::{Sha256, Digest};
2+
use hotshot_types::traits::storage::null_store_drb_progress_fn;
3+
use hotshot_types::drb::compute_drb_result;
4+
use hotshot_types::drb::DIFFICULTY_LEVEL;
5+
use hotshot_types::drb::DrbInput;
6+
7+
#[cfg(test)]
8+
#[tokio::test(flavor = "multi_thread")]
9+
async fn test_compute_drb_result() {
10+
let drb_input = DrbInput {
11+
epoch: 0,
12+
iteration: 0,
13+
value: [0u8; 32],
14+
};
15+
16+
let mut expected_result = [0u8; 32];
17+
{
18+
let mut hash = drb_input.value.to_vec().clone();
19+
for _ in 0..DIFFICULTY_LEVEL {
20+
hash = Sha256::digest(hash).to_vec();
21+
}
22+
expected_result.copy_from_slice(&hash);
23+
}
24+
25+
let actual_result = compute_drb_result(drb_input, null_store_drb_progress_fn());
26+
27+
assert_eq!(expected_result, actual_result);
28+
}
29+
30+
#[cfg(test)]
31+
#[tokio::test(flavor = "multi_thread")]
32+
async fn test_compute_drb_result_2() {
33+
let drb_input = DrbInput {
34+
epoch: 0,
35+
iteration: 2,
36+
value: [0u8; 32],
37+
};
38+
39+
let mut expected_result = [0u8; 32];
40+
{
41+
let mut hash = drb_input.value.to_vec().clone();
42+
for _ in 2..DIFFICULTY_LEVEL {
43+
hash = Sha256::digest(hash).to_vec();
44+
}
45+
expected_result.copy_from_slice(&hash);
46+
}
47+
48+
let actual_result = compute_drb_result(drb_input, null_store_drb_progress_fn());
49+
50+
assert_eq!(expected_result, actual_result);
51+
}

0 commit comments

Comments
 (0)