Skip to content

Commit

Permalink
feat(validator): add share_index field to validator
Browse files Browse the repository at this point in the history
  • Loading branch information
piotr-roslaniec committed Jan 25, 2024
1 parent de9cf36 commit ddd5746
Show file tree
Hide file tree
Showing 9 changed files with 27 additions and 9 deletions.
1 change: 1 addition & 0 deletions ferveo/benches/benchmarks/validity_checks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ fn gen_validators(
.map(|i| Validator {
address: gen_address(i),
public_key: keypairs[i].public_key(),
share_index: i as u32,
})
.collect()
}
Expand Down
1 change: 1 addition & 0 deletions ferveo/examples/bench_primitives_size.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ fn gen_validators(
.map(|i| Validator {
address: gen_address(i),
public_key: keypairs[i].public_key(),
share_index: i as u32,
})
.collect()
}
Expand Down
1 change: 1 addition & 0 deletions ferveo/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,7 @@ mod test_ferveo_api {
.map(|(i, keypair)| Validator {
address: gen_address(i),
public_key: keypair.public_key(),
share_index: i as u32,
})
.collect::<Vec<_>>();

Expand Down
11 changes: 8 additions & 3 deletions ferveo/src/bindings_python.rs
Original file line number Diff line number Diff line change
Expand Up @@ -396,8 +396,9 @@ impl Validator {
pub fn new(
address: String,
public_key: &FerveoPublicKey,
share_index: u32,
) -> PyResult<Self> {
let validator = api::Validator::new(address, public_key.0)
let validator = api::Validator::new(address, public_key.0, share_index)
.map_err(|err| FerveoPythonError::Other(err.to_string()))?;
Ok(Self(validator))
}
Expand Down Expand Up @@ -756,8 +757,12 @@ mod test_ferveo_python {
.iter()
.enumerate()
.map(|(i, keypair)| {
Validator::new(format!("0x{i:040}"), &keypair.public_key())
.unwrap()
Validator::new(
format!("0x{i:040}"),
&keypair.public_key(),
i as u32,
)
.unwrap()
})
.collect();

Expand Down
5 changes: 5 additions & 0 deletions ferveo/src/bindings_wasm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,7 @@ impl EthereumAddress {
pub struct Validator {
address: EthereumAddress,
public_key: FerveoPublicKey,
share_index: u32,
}

#[wasm_bindgen]
Expand All @@ -429,11 +430,13 @@ impl Validator {
pub fn new(
address: &EthereumAddress,
public_key: &FerveoPublicKey,
share_index: u32,
) -> JsResult<Validator> {
set_panic_hook();
Ok(Self {
address: address.clone(),
public_key: public_key.clone(),
share_index,
})
}

Expand All @@ -442,6 +445,7 @@ impl Validator {
Ok(api::Validator {
address: self.address.0.clone(),
public_key: self.public_key.0,
share_index: self.share_index,
})
}

Expand Down Expand Up @@ -610,6 +614,7 @@ pub mod test_common {
Validator {
address: gen_address(i),
public_key: keypair.public_key(),
share_index: i as u32,
}
}
}
7 changes: 4 additions & 3 deletions ferveo/src/dkg.rs
Original file line number Diff line number Diff line change
Expand Up @@ -375,12 +375,12 @@ mod test_dkg_init {
#[test]
fn test_dkg_fail_unknown_validator() {
let rng = &mut ark_std::test_rng();
let shares_num = 4;
let known_keypairs = gen_keypairs(shares_num);
let known_keypairs = gen_keypairs(SHARES_NUM);
let unknown_keypair = ferveo_common::Keypair::<E>::new(rng);
let unknown_validator = Validator::<E> {
address: gen_address((shares_num + 1) as usize),
address: gen_address((SHARES_NUM + 1) as usize),
public_key: unknown_keypair.public_key(),
share_index: SHARES_NUM + 5, // Not in the validator set
};
let err = PubliclyVerifiableDkg::<E>::new(
&gen_validators(&known_keypairs),
Expand Down Expand Up @@ -464,6 +464,7 @@ mod test_dealing {
let sender = Validator::<E> {
address: gen_address(unknown_validator_i as usize),
public_key: ferveo_common::Keypair::<E>::new(rng).public_key(),
share_index: dkg.dkg_params.shares_num + 5, // Not in the validator set
};
// check that verification fails
assert!(dkg.verify_message(&sender, &pvss).is_err());
Expand Down
2 changes: 1 addition & 1 deletion ferveo/src/pvss.rs
Original file line number Diff line number Diff line change
Expand Up @@ -459,7 +459,7 @@ mod test_pvss {
use ark_bls12_381::Bls12_381 as EllipticCurve;
use ark_ec::AffineRepr;
use ark_ff::UniformRand;
use rand::seq::SliceRandom;
use rand::prelude::SliceRandom;

use super::*;
use crate::{test_common::*, utils::is_sorted, DkgParams};
Expand Down
4 changes: 2 additions & 2 deletions ferveo/src/test_common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ pub fn gen_validators(keypairs: &[Keypair<E>]) -> Vec<Validator<E>> {
.map(|(i, keypair)| Validator {
address: gen_address(i),
public_key: keypair.public_key(),
share_index: i as u32,
})
.collect()
}
Expand All @@ -47,8 +48,7 @@ pub fn setup_dkg_for_n_validators(
my_validator_index: usize,
) -> TestSetup {
let keypairs = gen_keypairs(shares_num);
let mut validators = gen_validators(keypairs.as_slice());
validators.sort();
let validators = gen_validators(keypairs.as_slice());
let me = validators[my_validator_index].clone();
let dkg = PubliclyVerifiableDkg::new(
&validators,
Expand Down
4 changes: 4 additions & 0 deletions ferveo/src/validator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,8 @@ pub struct Validator<E: Pairing> {
pub address: EthereumAddress,
/// The Public key
pub public_key: PublicKey<E>,
/// The index of the validator in the given ritual
pub share_index: u32,
}

impl<E: Pairing> PartialOrd for Validator<E> {
Expand All @@ -64,10 +66,12 @@ impl<E: Pairing> Validator<E> {
pub fn new(
address: String,
public_key: PublicKey<E>,
share_index: u32,
) -> Result<Self, EthereumAddressParseError> {
Ok(Self {
address: EthereumAddress::from_str(&address)?,
public_key,
share_index,
})
}
}

0 comments on commit ddd5746

Please sign in to comment.