Skip to content

Commit b43fff4

Browse files
apollo_propeller: replace local Stake type alias with StakingWeight from starknet_api (#13037)
1 parent ea85357 commit b43fff4

9 files changed

Lines changed: 32 additions & 20 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/apollo_propeller/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ prost.workspace = true
2020
rand.workspace = true
2121
reed-solomon-simd.workspace = true
2222
sha2.workspace = true
23+
starknet_api.workspace = true
2324
thiserror.workspace = true
2425
tokio.workspace = true
2526
tracing.workspace = true

crates/apollo_propeller/src/behaviour.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ use libp2p::swarm::{
2323
THandlerOutEvent,
2424
ToSwarm,
2525
};
26+
use starknet_api::staking::StakingWeight;
2627
use tokio::sync::{mpsc, oneshot};
2728

2829
use crate::config::Config;
2930
use crate::engine::{Engine, EngineCommand, EngineOutput};
3031
use crate::handler::Handler;
3132
use crate::metrics::PropellerMetrics;
32-
use crate::tree::Stake;
3333
use crate::types::{CommitteeId, CommitteeSetupError, Event, ShardPublishError};
3434

3535
/// The Propeller network behaviour.
@@ -76,7 +76,7 @@ impl Behaviour {
7676
pub fn register_committee_peers(
7777
&self,
7878
committee_id: CommitteeId,
79-
peers: Vec<(PeerId, Stake)>,
79+
peers: Vec<(PeerId, StakingWeight)>,
8080
) -> oneshot::Receiver<Result<(), CommitteeSetupError>> {
8181
self.register_committee_peers_and_optional_keys(
8282
committee_id,
@@ -91,7 +91,7 @@ impl Behaviour {
9191
pub fn register_committee_peers_and_optional_keys(
9292
&self,
9393
committee_id: CommitteeId,
94-
peers: Vec<(PeerId, Stake, Option<PublicKey>)>,
94+
peers: Vec<(PeerId, StakingWeight, Option<PublicKey>)>,
9595
) -> oneshot::Receiver<Result<(), CommitteeSetupError>> {
9696
let (response_tx, response_rx) = oneshot::channel();
9797
let command =

crates/apollo_propeller/src/engine.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use std::collections::{HashMap, HashSet};
88
use std::sync::Arc;
99

1010
use libp2p::identity::{Keypair, PeerId, PublicKey};
11+
use starknet_api::staking::StakingWeight;
1112
use tokio::sync::{mpsc, oneshot};
1213
use tracing::{debug, error, trace, warn};
1314

@@ -18,7 +19,7 @@ use crate::metrics::PropellerMetrics;
1819
use crate::sharding::create_units_to_publish;
1920
use crate::signature;
2021
use crate::time_cache::TimeCache;
21-
use crate::tree::{PropellerScheduleManager, Stake};
22+
use crate::tree::PropellerScheduleManager;
2223
use crate::types::{CommitteeId, CommitteeSetupError, Event, MessageRoot, ShardPublishError};
2324
use crate::unit::PropellerUnit;
2425

@@ -36,7 +37,7 @@ struct MessageKey {
3637
pub enum EngineCommand {
3738
RegisterCommitteePeers {
3839
committee_id: CommitteeId,
39-
peers: Vec<(PeerId, Stake, Option<PublicKey>)>,
40+
peers: Vec<(PeerId, StakingWeight, Option<PublicKey>)>,
4041
response: oneshot::Sender<Result<(), CommitteeSetupError>>,
4142
},
4243
// TODO(AndrewL): remove this variant once unregister is no longer needed.
@@ -135,7 +136,7 @@ impl Engine {
135136
pub fn register_committee(
136137
&mut self,
137138
committee_id: CommitteeId,
138-
peers: Vec<(PeerId, Stake, Option<PublicKey>)>,
139+
peers: Vec<(PeerId, StakingWeight, Option<PublicKey>)>,
139140
) -> Result<(), CommitteeSetupError> {
140141
if self.committees.contains_key(&committee_id) {
141142
warn!(?committee_id, "Committee already registered, ignoring re-registration");

crates/apollo_propeller/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ pub use config::Config;
4040
pub use handler::{Handler, HandlerIn, HandlerOut};
4141
pub use merkle::{MerkleHash, MerkleProof, MerkleTree};
4242
pub use metrics::PropellerMetrics;
43-
pub use tree::{PropellerScheduleManager, Stake};
43+
pub use tree::PropellerScheduleManager;
4444
pub use types::{
4545
CommitteeId,
4646
CommitteeSetupError,

crates/apollo_propeller/src/tree.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@
55
//! based on the publisher and shard ID, making the network resilient to targeted attacks.
66
77
use libp2p::identity::PeerId;
8+
use starknet_api::staking::StakingWeight;
89

910
use crate::types::{CommitteeSetupError, ScheduleError, ShardIndex};
1011
use crate::ShardValidationError;
1112

12-
pub type Stake = u64;
13-
1413
// TODO(AndrewL): add the concept of shard_owner when naming
1514

1615
/// Propeller tree manager that computes tree topology on-demand for each publisher.
@@ -25,7 +24,7 @@ pub type Stake = u64;
2524
#[derive(Debug, Clone)]
2625
pub struct PropellerScheduleManager {
2726
/// All nodes in the committee with their stake, sorted by peer_id
28-
committee_nodes: Vec<(PeerId, Stake)>,
27+
committee_nodes: Vec<(PeerId, StakingWeight)>,
2928
/// This node's peer ID.
3029
local_peer_id: PeerId,
3130
/// This node's index in the nodes vector.
@@ -40,7 +39,7 @@ impl PropellerScheduleManager {
4039
// TODO(AndrewL): What should I name the error type?
4140
pub fn new(
4241
local_peer_id: PeerId,
43-
mut nodes: Vec<(PeerId, Stake)>,
42+
mut nodes: Vec<(PeerId, StakingWeight)>,
4443
) -> Result<Self, CommitteeSetupError> {
4544
// Check that local peer is in the list before sorting
4645
if !nodes.iter().any(|(peer_id, _)| *peer_id == local_peer_id) {
@@ -81,7 +80,7 @@ impl PropellerScheduleManager {
8180
self.committee_nodes.len()
8281
}
8382

84-
pub fn get_nodes(&self) -> &[(PeerId, Stake)] {
83+
pub fn get_nodes(&self) -> &[(PeerId, StakingWeight)] {
8584
&self.committee_nodes
8685
}
8786

crates/apollo_propeller/src/tree_test.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use libp2p::PeerId;
22
use rstest::rstest;
3+
use starknet_api::staking::StakingWeight;
34

45
use crate::tree::PropellerScheduleManager;
56
use crate::types::{CommitteeSetupError, ScheduleError, ShardIndex, ShardValidationError};
@@ -18,7 +19,7 @@ fn make_schedule_manager(index: u8, num_nodes: u8) -> PropellerScheduleManager {
1819
let local_peer = peers[usize::from(index)];
1920
let scheduler = PropellerScheduleManager::new(
2021
local_peer,
21-
peers.into_iter().map(|peer| (peer, 1)).collect(),
22+
peers.into_iter().map(|peer| (peer, StakingWeight(1))).collect(),
2223
)
2324
.unwrap();
2425
assert_eq!(scheduler.get_nodes()[usize::from(index)].0, local_peer);
@@ -34,7 +35,7 @@ fn test_create_empty_schedule_manager() {
3435
#[test]
3536
fn test_create_schedule_manager() {
3637
let peer = PeerId::random();
37-
let manager = PropellerScheduleManager::new(peer, vec![(peer, 100)]).unwrap();
38+
let manager = PropellerScheduleManager::new(peer, vec![(peer, StakingWeight(100))]).unwrap();
3839
assert_eq!(manager.get_local_peer_id(), peer);
3940
assert_eq!(manager.get_node_count(), 1);
4041
}
@@ -73,7 +74,7 @@ fn test_should_build_and_receive(
7374
fn test_new_schedule_manager_without_local_peer() {
7475
let peer1 = PeerId::random();
7576
let peer2 = PeerId::random();
76-
let result = PropellerScheduleManager::new(peer1, vec![(peer2, 100)]);
77+
let result = PropellerScheduleManager::new(peer1, vec![(peer2, StakingWeight(100))]);
7778
assert_eq!(result.unwrap_err(), CommitteeSetupError::LocalPeerNotInCommittee);
7879
}
7980

@@ -206,7 +207,12 @@ fn test_get_my_shard_index_given_publisher() {
206207
let (peer0, peer1, peer2, peer3) = (peers[0], peers[1], peers[2], peers[3]);
207208
let manager = PropellerScheduleManager::new(
208209
peer2,
209-
vec![(peer0, 100), (peer1, 75), (peer2, 50), (peer3, 25)],
210+
vec![
211+
(peer0, StakingWeight(100)),
212+
(peer1, StakingWeight(75)),
213+
(peer2, StakingWeight(50)),
214+
(peer3, StakingWeight(25)),
215+
],
210216
)
211217
.unwrap();
212218
// When peer0 is publisher, peer2 is at sorted position 2, so shard index is 1

crates/apollo_propeller/src/unit_validator_test.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use std::sync::Arc;
44
use libp2p::identity::Keypair;
55
use libp2p::PeerId;
66
use rstest::rstest;
7+
use starknet_api::staking::StakingWeight;
78

89
use crate::types::ShardSignatureVerificationError;
910
use crate::{
@@ -46,8 +47,8 @@ fn build_env(num_shards_per_peer: usize) -> TestEnv {
4647
let local_peer = PeerId::random();
4748
let other_peers = (0..(NUM_PEERS - 2)).map(|_| PeerId::random()).collect::<Vec<_>>();
4849

49-
let mut peers = vec![(local_peer, 10), (publisher, 10)];
50-
peers.extend(other_peers.iter().copied().map(|peer| (peer, 10)));
50+
let mut peers = vec![(local_peer, StakingWeight(10)), (publisher, StakingWeight(10))];
51+
peers.extend(other_peers.iter().copied().map(|peer| (peer, StakingWeight(10))));
5152

5253
let schedule_manager = Arc::new(PropellerScheduleManager::new(local_peer, peers).unwrap());
5354

crates/apollo_propeller/tests/e2e_test.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use libp2p::swarm::SwarmEvent;
88
use libp2p::{PeerId, Swarm};
99
use libp2p_swarm_test::SwarmExt;
1010
use rstest::rstest;
11+
use starknet_api::staking::StakingWeight;
1112
use tokio::sync::mpsc;
1213
use tracing_test::traced_test;
1314

@@ -45,8 +46,10 @@ impl TestSetup {
4546
}
4647

4748
async fn register_committee(&mut self, committee_id: CommitteeId, node_indices: &[NodeIndex]) {
48-
let peers: Vec<(PeerId, u64)> =
49-
node_indices.iter().map(|&i| (*self.swarms[i].local_peer_id(), 1)).collect();
49+
let peers: Vec<(PeerId, StakingWeight)> = node_indices
50+
.iter()
51+
.map(|&i| (*self.swarms[i].local_peer_id(), StakingWeight(1)))
52+
.collect();
5053
for &i in node_indices {
5154
self.swarms[i]
5255
.behaviour_mut()

0 commit comments

Comments
 (0)