Skip to content

Commit 7604607

Browse files
committed
fix: clippy
1 parent c82b74b commit 7604607

File tree

8 files changed

+50
-64
lines changed

8 files changed

+50
-64
lines changed

common/src/ouroboros/overlay_schedule.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
//!
66
//! https://github.com/IntersectMBO/cardano-ledger/blob/24ef1741c5e0109e4d73685a24d8e753e225656d/libs/cardano-protocol-tpraos/src/Cardano/Protocol/TPraos/Rules/Overlay.hs#L332
77
8-
use crate::{
9-
rational_number::RationalNumber, rest_helper::ToCheckedF64, GenesisDelegate, GenesisDelegates,
10-
GenesisKeyhash,
11-
};
8+
use crate::{rational_number::RationalNumber, GenesisDelegate, GenesisDelegates, GenesisKeyhash};
129
use anyhow::Result;
10+
use num_traits::ToPrimitive;
1311

1412
#[derive(Debug, Clone, PartialEq)]
1513
pub enum OBftSlot {
@@ -33,9 +31,9 @@ pub enum OBftSlot {
3331
/// since this block is produced by genesis key (without "lottery")
3432
/// https://github.com/IntersectMBO/ouroboros-consensus/blob/e3c52b7c583bdb6708fac4fdaa8bf0b9588f5a88/ouroboros-consensus-protocol/src/ouroboros-consensus-protocol/Ouroboros/Consensus/Protocol/TPraos.hs#L334
3533
pub fn is_overlay_slot(epoch_slot: u64, decentralisation_param: &RationalNumber) -> Result<bool> {
36-
let d = decentralisation_param.to_checked_f64("decentralisation_param").map_err(|e| {
37-
anyhow::anyhow!("Failed to convert decentralisation parameter to f64: {}", e)
38-
})?;
34+
let d = decentralisation_param
35+
.to_f64()
36+
.ok_or_else(|| anyhow::anyhow!("Failed to convert decentralisation parameter to f64"))?;
3937

4038
// step function: ceiling of (x * d)
4139
let step = |x: f64| (x * d).ceil() as i64;
@@ -60,16 +58,16 @@ pub fn classify_overlay_slot(
6058
decentralisation_param: &RationalNumber,
6159
active_slots_coeff: &RationalNumber,
6260
) -> Result<OBftSlot> {
63-
let d = decentralisation_param.to_checked_f64("decentralisation_param").map_err(|e| {
64-
anyhow::anyhow!("Failed to convert decentralisation parameter to f64: {}", e)
65-
})?;
61+
let d = decentralisation_param
62+
.to_f64()
63+
.ok_or_else(|| anyhow::anyhow!("Failed to convert decentralisation parameter to f64"))?;
6664
let position = (epoch_slot as f64 * d).ceil() as i64;
6765

6866
// Calculate active slot coefficient inverse
6967
let asc_inv = active_slots_coeff
7068
.recip()
71-
.to_checked_f64("active_slots_coeff")
72-
.map_err(|e| anyhow::anyhow!("Failed to convert active slots coefficient to f64: {}", e))?
69+
.to_f64()
70+
.ok_or_else(|| anyhow::anyhow!("Failed to convert active slots coefficient to f64"))?
7371
.floor() as i64;
7472

7573
let is_active = position % asc_inv == 0;
@@ -79,7 +77,7 @@ pub fn classify_overlay_slot(
7977

8078
// Get the element at index from the set
8179
let (key_hash, gen_deleg) = genesis_delegs.as_ref().iter().nth(genesis_idx).unwrap();
82-
Ok(OBftSlot::ActiveSlot(key_hash.clone(), gen_deleg.clone()))
80+
Ok(OBftSlot::ActiveSlot(*key_hash, gen_deleg.clone()))
8381
} else {
8482
Ok(OBftSlot::NonActiveSlot)
8583
}
@@ -149,8 +147,8 @@ mod tests {
149147
assert_eq!(
150148
obft_slot.unwrap(),
151149
OBftSlot::ActiveSlot(
152-
genesis_delegs.as_ref().keys().nth(0).unwrap().clone(),
153-
genesis_delegs.as_ref().values().nth(0).unwrap().clone()
150+
*genesis_delegs.as_ref().keys().next().unwrap(),
151+
genesis_delegs.as_ref().values().next().unwrap().clone()
154152
)
155153
);
156154
}

common/src/ouroboros/praos.rs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@ pub fn validate_vrf_praos<'a>(
3030
};
3131
let pool_id = PoolId::from(keyhash_224(issuer_vkey));
3232
let registered_vrf_key_hash =
33-
active_spos.get(&pool_id).ok_or(VrfValidationError::UnknownPool {
34-
pool_id: pool_id.clone(),
35-
})?;
33+
active_spos.get(&pool_id).ok_or(VrfValidationError::UnknownPool { pool_id })?;
3634

3735
let pool_stake = active_spdd.get(&pool_id).unwrap_or(&0);
3836
let relative_stake = RationalNumber::new(*pool_stake, total_active_stake);
@@ -128,10 +126,10 @@ mod tests {
128126
PoolId::from_bech32("pool195gdnmj6smzuakm4etxsxw3fgh8asqc4awtcskpyfnkpcvh2v8t")
129127
.unwrap();
130128
let active_spos = HashMap::from([(
131-
pool_id.clone(),
129+
pool_id,
132130
VrfKeyHash::from(keyhash_256(block_header.vrf_vkey().unwrap())),
133131
)]);
134-
let active_spdd = HashMap::from([(pool_id.clone(), 64590523391239)]);
132+
let active_spdd = HashMap::from([(pool_id, 64590523391239)]);
135133
let result = validate_vrf_praos(
136134
&block_info,
137135
&block_header,
@@ -142,7 +140,6 @@ mod tests {
142140
25069171797357766,
143141
)
144142
.and_then(|vrf_validations| vrf_validations.iter().try_for_each(|assert| assert()));
145-
println!("{:?}", result);
146143
assert!(result.is_ok());
147144
}
148145
}

common/src/ouroboros/tpraos.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use anyhow::Result;
1515
use pallas::ledger::primitives::VrfCert;
1616
use pallas::ledger::traverse::MultiEraHeader;
1717

18+
#[allow(clippy::too_many_arguments)]
1819
pub fn validate_vrf_tpraos<'a>(
1920
block_info: &'a BlockInfo,
2021
header: &'a MultiEraHeader,
@@ -44,9 +45,7 @@ pub fn validate_vrf_tpraos<'a>(
4445
};
4546
let pool_id = PoolId::from(keyhash_224(issuer_vkey));
4647
let registered_vrf_key_hash =
47-
active_spos.get(&pool_id).ok_or(VrfValidationError::UnknownPool {
48-
pool_id: pool_id.clone(),
49-
})?;
48+
active_spos.get(&pool_id).ok_or(VrfValidationError::UnknownPool { pool_id })?;
5049

5150
let pool_stake = active_spdd.get(&pool_id).unwrap_or(&0);
5251
let relative_stake = RationalNumber::new(*pool_stake, total_active_stake);
@@ -256,10 +255,10 @@ mod tests {
256255
PoolId::from_bech32("pool1pu5jlj4q9w9jlxeu370a3c9myx47md5j5m2str0naunn2q3lkdy")
257256
.unwrap();
258257
let active_spos: HashMap<PoolId, VrfKeyHash> = HashMap::from([(
259-
pool_id.clone(),
258+
pool_id,
260259
VrfKeyHash::from(keyhash_256(block_header.vrf_vkey().unwrap())),
261260
)]);
262-
let active_spdd = HashMap::from([(pool_id.clone(), 75284250207839)]);
261+
let active_spdd = HashMap::from([(pool_id, 75284250207839)]);
263262
let result = validate_vrf_tpraos(
264263
&block_info,
265264
&block_header,
@@ -312,10 +311,10 @@ mod tests {
312311
PoolId::from_bech32("pool1pu5jlj4q9w9jlxeu370a3c9myx47md5j5m2str0naunn2q3lkdy")
313312
.unwrap();
314313
let active_spos: HashMap<PoolId, VrfKeyHash> = HashMap::from([(
315-
pool_id.clone(),
314+
pool_id,
316315
VrfKeyHash::from(keyhash_256(block_header.vrf_vkey().unwrap())),
317316
)]);
318-
let active_spdd = HashMap::from([(pool_id.clone(), 75284250207839)]);
317+
let active_spdd = HashMap::from([(pool_id, 75284250207839)]);
319318
let result = validate_vrf_tpraos(
320319
&block_info,
321320
&block_header,
@@ -425,8 +424,8 @@ mod tests {
425424
PoolId::from_bech32("pool1pu5jlj4q9w9jlxeu370a3c9myx47md5j5m2str0naunn2q3lkdy")
426425
.unwrap();
427426
let active_spos: HashMap<PoolId, VrfKeyHash> =
428-
HashMap::from([(pool_id.clone(), VrfKeyHash::from(keyhash_256(&[0; 64])))]);
429-
let active_spdd = HashMap::from([(pool_id.clone(), 75284250207839)]);
427+
HashMap::from([(pool_id, VrfKeyHash::from(keyhash_256(&[0; 64])))]);
428+
let active_spdd = HashMap::from([(pool_id, 75284250207839)]);
430429
let result = validate_vrf_tpraos(
431430
&block_info,
432431
&block_header,
@@ -443,7 +442,7 @@ mod tests {
443442
assert_eq!(
444443
result.unwrap_err(),
445444
VrfValidationError::WrongLeaderVrfKey(WrongLeaderVrfKeyError {
446-
pool_id: pool_id.clone(),
445+
pool_id,
447446
registered_vrf_key_hash: VrfKeyHash::from(keyhash_256(&[0; 64])),
448447
header_vrf_key_hash: VrfKeyHash::from(keyhash_256(
449448
block_header.vrf_vkey().unwrap()
@@ -489,11 +488,11 @@ mod tests {
489488
PoolId::from_bech32("pool1pu5jlj4q9w9jlxeu370a3c9myx47md5j5m2str0naunn2q3lkdy")
490489
.unwrap();
491490
let active_spos: HashMap<PoolId, VrfKeyHash> = HashMap::from([(
492-
pool_id.clone(),
491+
pool_id,
493492
VrfKeyHash::from(keyhash_256(block_header.vrf_vkey().unwrap())),
494493
)]);
495494
// small active stake (correct one is 75284250207839)
496-
let active_spdd = HashMap::from([(pool_id.clone(), 75284250207)]);
495+
let active_spdd = HashMap::from([(pool_id, 75284250207)]);
497496
let result = validate_vrf_tpraos(
498497
&block_info,
499498
&block_header,

common/src/ouroboros/vrf.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ impl TryFrom<&[u8]> for PublicKey {
5151
}
5252

5353
/// A VRF input
54-
///
55-
5654
pub type VrfInputHash = [u8; 32];
5755
pub type VrfProofHash = [u8; 64];
5856

common/src/ouroboros/vrf_validation.rs

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ pub enum VrfValidationError {
3838
#[error("Praos Missing VRF Cert")]
3939
PraosMissingVrfCert,
4040
/// **Cause:** Block issuer's pool ID is not registered in current stake distribution
41-
#[error("Unknown Pool: {}", hex::encode(&pool_id))]
41+
#[error("Unknown Pool: {}", hex::encode(pool_id))]
4242
UnknownPool { pool_id: PoolId },
4343
/// **Cause:** The VRF key hash in the block header doesn't match the VRF key
4444
/// registered with this stake pool in the ledger state for Overlay slot
@@ -74,9 +74,9 @@ pub enum VrfValidationError {
7474
#[derive(Error, Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
7575
#[error(
7676
"Wrong Genesis Leader VRF Key: Genesis Key={}, Registered VRF Hash={}, Header VRF Hash={}",
77-
hex::encode(&genesis_key),
78-
hex::encode(&registered_vrf_hash),
79-
hex::encode(&header_vrf_hash),
77+
hex::encode(genesis_key),
78+
hex::encode(registered_vrf_hash),
79+
hex::encode(header_vrf_hash)
8080
)]
8181
pub struct WrongGenesisLeaderVrfKeyError {
8282
pub genesis_key: GenesisKeyhash,
@@ -94,8 +94,8 @@ impl WrongGenesisLeaderVrfKeyError {
9494
let registered_vrf_hash = &genesis_deleg.vrf;
9595
if !registered_vrf_hash.eq(&header_vrf_hash) {
9696
return Err(Self {
97-
genesis_key: genesis_key.clone(),
98-
registered_vrf_hash: registered_vrf_hash.clone(),
97+
genesis_key: *genesis_key,
98+
registered_vrf_hash: *registered_vrf_hash,
9999
header_vrf_hash,
100100
});
101101
}
@@ -108,9 +108,9 @@ impl WrongGenesisLeaderVrfKeyError {
108108
#[derive(Error, Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)]
109109
#[error(
110110
"Wrong Leader VRF Key: Pool ID={}, Registered VRF Key Hash={}, Header VRF Key Hash={}",
111-
hex::encode(&pool_id),
112-
hex::encode(&registered_vrf_key_hash),
113-
hex::encode(&header_vrf_key_hash),
111+
hex::encode(pool_id),
112+
hex::encode(registered_vrf_key_hash),
113+
hex::encode(header_vrf_key_hash)
114114
)]
115115
pub struct WrongLeaderVrfKeyError {
116116
pub pool_id: PoolId,
@@ -127,8 +127,8 @@ impl WrongLeaderVrfKeyError {
127127
let header_vrf_key_hash = VrfKeyHash::from(keyhash_256(vrf_vkey));
128128
if !registered_vrf_key_hash.eq(&header_vrf_key_hash) {
129129
return Err(Self {
130-
pool_id: pool_id.clone(),
131-
registered_vrf_key_hash: registered_vrf_key_hash.clone(),
130+
pool_id: *pool_id,
131+
registered_vrf_key_hash: *registered_vrf_key_hash,
132132
header_vrf_key_hash,
133133
});
134134
}
@@ -221,8 +221,8 @@ pub enum PraosBadVrfProofError {
221221

222222
#[error(
223223
"Mismatch between the declared VRF output in block ({}) and the computed one ({}).",
224-
hex::encode(&declared),
225-
hex::encode(&computed),
224+
hex::encode(declared),
225+
hex::encode(computed)
226226
)]
227227
OutputMismatch {
228228
declared: Vec<u8>,
@@ -302,7 +302,6 @@ impl PraosBadVrfProofError {
302302
/// `p` = `certNat` / `certNatMax`. (`certNat` is 64bytes for TPraos and 32bytes for Praos)
303303
/// `σ` (sigma) = pool's relative stake (pools active stake / total active stake)
304304
/// `f` = active slot coefficient (e.g., 0.05 = 5%)
305-
306305
/// let q = 1 - p and c = ln(1 - f)
307306
/// then p < 1 - (1 - f)^σ => 1 / (1 - p) < exp(-σ * c) => 1 / q < exp(-σ * c)
308307
/// Reference
@@ -343,7 +342,6 @@ impl VrfLeaderValueTooBigError {
343342
/// Check that the certified input natural is valid for being slot leader. This means we check that
344343
/// p < 1 - (1 - f)^σ
345344
/// where p = certNat / certNatMax. (certNat is 64bytes for TPraos and 32bytes for Praos)
346-
347345
/// let q = 1 - p and c = ln(1 - f)
348346
/// then p < 1 - (1 - f)^σ => 1 / (1 - p) < exp(-σ * c) => 1 / q < exp(-σ * c)
349347
/// Reference
@@ -369,8 +367,8 @@ pub enum BadVrfProofError {
369367

370368
#[error(
371369
"Mismatch between the declared VRF proof hash ({}) and the computed one ({}).",
372-
hex::encode(&declared),
373-
hex::encode(&computed),
370+
hex::encode(declared),
371+
hex::encode(computed)
374372
)]
375373
ProofMismatch {
376374
// this is Proof Hash (sha512 hash)

modules/block_vrf_validator/src/block_vrf_validator.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ const DEFAULT_SPDD_SUBSCRIBE_TOPIC: (&str, &str) =
5050
pub struct BlockVrfValidator;
5151

5252
impl BlockVrfValidator {
53+
#[allow(clippy::too_many_arguments)]
5354
async fn run(
5455
history: Arc<Mutex<StateHistory<State>>>,
5556
mut vrf_validation_publisher: VrfValidationPublisher,
@@ -73,7 +74,7 @@ impl BlockVrfValidator {
7374

7475
loop {
7576
// Get a mutable state
76-
let mut state = history.lock().await.get_or_init_with(|| State::new());
77+
let mut state = history.lock().await.get_or_init_with(State::new);
7778
let mut current_block: Option<BlockInfo> = None;
7879

7980
let (_, message) = blocks_subscription.read().await?;
@@ -138,7 +139,7 @@ impl BlockVrfValidator {
138139
) => {
139140
Self::check_sync(&current_block, block_info_1);
140141
Self::check_sync(&current_block, block_info_2);
141-
state.handle_new_snapshot(&spo_state_msg, &spdd_msg);
142+
state.handle_new_snapshot(spo_state_msg, spdd_msg);
142143
}
143144
_ => {
144145
error!("Unexpected message type: {spo_state_msg:?} or {spdd_msg:?}")

modules/block_vrf_validator/src/snapshot.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,11 @@ impl From<(&SPOStateMessage, &SPOStakeDistributionMessage)> for Snapshot {
2222
let active_spos: HashMap<PoolId, VrfKeyHash> = spo_state_msg
2323
.spos
2424
.iter()
25-
.map(|registration| {
26-
(
27-
registration.operator.clone(),
28-
registration.vrf_key_hash.clone(),
29-
)
30-
})
25+
.map(|registration| (registration.operator, registration.vrf_key_hash))
3126
.collect();
3227
let active_stakes: HashMap<PoolId, u64> =
33-
spdd_msg.spos.iter().map(|(pool_id, stake)| (pool_id.clone(), stake.live)).collect();
34-
let total_active_stakes = active_stakes.iter().map(|(_, stake)| stake).sum();
28+
spdd_msg.spos.iter().map(|(pool_id, stake)| (*pool_id, stake.live)).collect();
29+
let total_active_stakes = active_stakes.values().sum();
3530
Self {
3631
active_spos,
3732
active_stakes,

modules/block_vrf_validator/src/state.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ impl State {
112112
let result = ouroboros::tpraos::validate_vrf_tpraos(
113113
block_info,
114114
header,
115-
&epoch_nonce,
115+
epoch_nonce,
116116
&genesis.genesis_delegs,
117117
praos_params,
118118
&self.epoch_snapshots.set.active_spos,
@@ -126,7 +126,7 @@ impl State {
126126
let result = ouroboros::praos::validate_vrf_praos(
127127
block_info,
128128
header,
129-
&epoch_nonce,
129+
epoch_nonce,
130130
praos_params,
131131
&self.epoch_snapshots.set.active_spos,
132132
&self.epoch_snapshots.set.active_stakes,

0 commit comments

Comments
 (0)