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 830cbc8
Show file tree
Hide file tree
Showing 15 changed files with 33 additions and 15 deletions.
2 changes: 1 addition & 1 deletion ferveo-python/examples/exception.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def gen_eth_addr(i: int) -> str:

validator_keypairs = [Keypair.random() for _ in range(0, shares_num)]
validators = [
Validator(gen_eth_addr(i), keypair.public_key())
Validator(gen_eth_addr(i), keypair.public_key(), i)
for i, keypair in enumerate(validator_keypairs)
]

Expand Down
2 changes: 1 addition & 1 deletion ferveo-python/examples/server_api_precomputed.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ def gen_eth_addr(i: int) -> str:

validator_keypairs = [Keypair.random() for _ in range(0, shares_num)]
validators = [
Validator(gen_eth_addr(i), keypair.public_key())
Validator(gen_eth_addr(i), keypair.public_key(), i)
for i, keypair in enumerate(validator_keypairs)
]

Expand Down
2 changes: 1 addition & 1 deletion ferveo-python/examples/server_api_simple.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def gen_eth_addr(i: int) -> str:
shares_num = 4
validator_keypairs = [Keypair.random() for _ in range(0, shares_num)]
validators = [
Validator(gen_eth_addr(i), keypair.public_key())
Validator(gen_eth_addr(i), keypair.public_key(), i)
for i, keypair in enumerate(validator_keypairs)
]

Expand Down
2 changes: 1 addition & 1 deletion ferveo-python/test/test_ferveo.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ def scenario_for_variant(variant: FerveoVariant, shares_num, threshold, shares_t
tau = 1
validator_keypairs = [Keypair.random() for _ in range(0, shares_num)]
validators = [
Validator(gen_eth_addr(i), keypair.public_key())
Validator(gen_eth_addr(i), keypair.public_key(), i)
for i, keypair in enumerate(validator_keypairs)
]
validators.sort(key=lambda v: v.address)
Expand Down
2 changes: 1 addition & 1 deletion ferveo-python/test/test_serialization.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def gen_eth_addr(i: int) -> str:
shares_num = 4
validator_keypairs = [Keypair.random() for _ in range(shares_num)]
validators = [
Validator(gen_eth_addr(i), keypair.public_key())
Validator(gen_eth_addr(i), keypair.public_key(), i)
for i, keypair in enumerate(validator_keypairs)
]
validators.sort(key=lambda v: v.address)
Expand Down
2 changes: 1 addition & 1 deletion ferveo-wasm/examples/node/src/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ function setupTest(sharesNum :number, threshold: number) {
for (let i = 0; i < sharesNum; i++) {
const keypair = Keypair.random();
validatorKeypairs.push(keypair);
const validator = new Validator(genEthAddr(i), keypair.publicKey);
const validator = new Validator(genEthAddr(i), keypair.publicKey, i);
validators.push(validator);
}

Expand Down
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 830cbc8

Please sign in to comment.