Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 4 additions & 37 deletions crates/common/src/signer/schemes/bls.rs
Original file line number Diff line number Diff line change
@@ -1,48 +1,15 @@
use alloy::rpc::types::beacon::constants::BLS_DST_SIG;
pub use alloy::rpc::types::beacon::BlsSignature;
use alloy::rpc::types::beacon::{constants::BLS_DST_SIG, BlsPublicKey as BlsPublicKeyInner};
use blst::BLST_ERROR;
use derive_more::derive::{Deref, Display, From, Into};
use serde::{Deserialize, Serialize};
use tree_hash::TreeHash;
use tree_hash_derive::TreeHash;

use crate::{
error::BlstErrorWrapper, signature::sign_commit_boost_root, types::Chain,
utils::blst_pubkey_to_alloy,
};

pub type BlsSecretKey = blst::min_pk::SecretKey;

// TODO(David):
// This wrapper type is potentially a temporary solution, merely to implement
// `TreeHash`. Remove when progress is made on this issue (https://github.com/sigp/tree_hash/issues/22)
// or refine the boundaries between our wrapper `BlsPublicKey` type
// and alloy's `BlsPublicKey` if we stick with it

// std traits
#[derive(Debug, Clone, Copy, Display, PartialEq, Eq, Hash, Default)]
// serde, ssz, tree_hash
#[derive(Serialize, Deserialize, TreeHash)]
#[serde(transparent)]
// derive_more
#[derive(Deref, From, Into)]
pub struct BlsPublicKey {
inner: BlsPublicKeyInner,
}

impl AsRef<[u8]> for BlsPublicKey {
fn as_ref(&self) -> &[u8] {
self.as_slice()
}
}

impl TryFrom<&[u8]> for BlsPublicKey {
type Error = core::array::TryFromSliceError;

fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
Ok(Self { inner: value.try_into()? })
}
}
pub type BlsPublicKey = alloy::rpc::types::beacon::BlsPublicKey;

#[derive(Clone)]
pub enum BlsSigner {
Expand All @@ -61,7 +28,7 @@ impl BlsSigner {

pub fn pubkey(&self) -> BlsPublicKey {
match self {
BlsSigner::Local(secret) => blst_pubkey_to_alloy(&secret.sk_to_pk()).into(),
BlsSigner::Local(secret) => blst_pubkey_to_alloy(&secret.sk_to_pk()),
}
}

Expand Down Expand Up @@ -97,7 +64,7 @@ pub fn random_secret() -> BlsSecretKey {
}

pub fn verify_bls_signature(
pubkey: &BlsPublicKeyInner,
pubkey: &BlsPublicKey,
msg: &[u8],
signature: &BlsSignature,
) -> Result<(), BlstErrorWrapper> {
Expand Down
2 changes: 1 addition & 1 deletion crates/signer/src/manager/local.rs
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ impl LocalSigningManager {
.bls_signers
.get(pubkey)
.map(|x| x.delegation)
.ok_or(SignerModuleError::UnknownProxySigner(pubkey.as_ref().to_vec()))
.ok_or(SignerModuleError::UnknownProxySigner(pubkey.to_vec()))
}

pub fn get_delegation_ecdsa(
Expand Down
10 changes: 5 additions & 5 deletions tests/tests/pbs_get_header.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ async fn test_get_header() -> Result<()> {

// Run a mock relay
let mock_state = Arc::new(MockRelayState::new(chain, signer));
let mock_relay = generate_mock_relay(relay_port, *pubkey)?;
let mock_relay = generate_mock_relay(relay_port, pubkey)?;
tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port));

// Run the PBS service
Expand Down Expand Up @@ -81,7 +81,7 @@ async fn test_get_header_returns_204_if_relay_down() -> Result<()> {

// Create a mock relay client
let mock_state = Arc::new(MockRelayState::new(chain, signer));
let mock_relay = generate_mock_relay(relay_port, *pubkey)?;
let mock_relay = generate_mock_relay(relay_port, pubkey)?;

// Don't start the relay
// tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port));
Expand Down Expand Up @@ -115,7 +115,7 @@ async fn test_get_header_returns_400_if_request_is_invalid() -> Result<()> {

// Run a mock relay
let mock_state = Arc::new(MockRelayState::new(chain, signer));
let mock_relay = generate_mock_relay(relay_port, *pubkey)?;
let mock_relay = generate_mock_relay(relay_port, pubkey)?;
tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_port));

// Run the PBS service
Expand All @@ -127,7 +127,7 @@ async fn test_get_header_returns_400_if_request_is_invalid() -> Result<()> {
tokio::time::sleep(Duration::from_millis(100)).await;

// Create an invalid URL by truncating the pubkey
let mut bad_url = mock_relay.get_header_url(0, B256::ZERO, *pubkey).unwrap();
let mut bad_url = mock_relay.get_header_url(0, B256::ZERO, pubkey).unwrap();
bad_url.set_path(&bad_url.path().replace(&pubkey.to_string(), &pubkey.to_string()[..10]));

let mock_validator = MockValidator::new(pbs_port)?;
Expand All @@ -137,7 +137,7 @@ async fn test_get_header_returns_400_if_request_is_invalid() -> Result<()> {
assert_eq!(res.status(), StatusCode::BAD_REQUEST);

// Attempt again by truncating the parent hash
let mut bad_url = mock_relay.get_header_url(0, B256::ZERO, *pubkey).unwrap();
let mut bad_url = mock_relay.get_header_url(0, B256::ZERO, pubkey).unwrap();
bad_url
.set_path(&bad_url.path().replace(&B256::ZERO.to_string(), &B256::ZERO.to_string()[..10]));
let res = mock_validator.comm_boost.client.get(bad_url).send().await?;
Expand Down
6 changes: 3 additions & 3 deletions tests/tests/pbs_get_status.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ async fn test_get_status() -> Result<()> {
let relay_1_port = pbs_port + 2;

let relays = vec![
generate_mock_relay(relay_0_port, *pubkey)?,
generate_mock_relay(relay_1_port, *pubkey)?,
generate_mock_relay(relay_0_port, pubkey)?,
generate_mock_relay(relay_1_port, pubkey)?,
];
let mock_state = Arc::new(MockRelayState::new(chain, signer));
tokio::spawn(start_mock_relay_service(mock_state.clone(), relay_0_port));
Expand Down Expand Up @@ -61,7 +61,7 @@ async fn test_get_status_returns_502_if_relay_down() -> Result<()> {
let pbs_port = 3600;
let relay_port = pbs_port + 1;

let relays = vec![generate_mock_relay(relay_port, *pubkey)?];
let relays = vec![generate_mock_relay(relay_port, pubkey)?];
let mock_state = Arc::new(MockRelayState::new(chain, signer));

// Don't start the relay
Expand Down
6 changes: 3 additions & 3 deletions tests/tests/pbs_mux.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@ async fn test_mux() -> Result<()> {
let chain = Chain::Holesky;
let pbs_port = 3700;

let mux_relay_1 = generate_mock_relay(pbs_port + 1, *pubkey)?;
let mux_relay_2 = generate_mock_relay(pbs_port + 2, *pubkey)?;
let default_relay = generate_mock_relay(pbs_port + 3, *pubkey)?;
let mux_relay_1 = generate_mock_relay(pbs_port + 1, pubkey)?;
let mux_relay_2 = generate_mock_relay(pbs_port + 2, pubkey)?;
let default_relay = generate_mock_relay(pbs_port + 3, pubkey)?;

// Run 3 mock relays
let mock_state = Arc::new(MockRelayState::new(chain, signer));
Expand Down
4 changes: 2 additions & 2 deletions tests/tests/pbs_post_blinded_blocks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ async fn test_submit_block() -> Result<()> {
let pbs_port = 3800;

// Run a mock relay
let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?];
let relays = vec![generate_mock_relay(pbs_port + 1, pubkey)?];
let mock_state = Arc::new(MockRelayState::new(chain, signer));
tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1));

Expand Down Expand Up @@ -59,7 +59,7 @@ async fn test_submit_block_too_large() -> Result<()> {
let chain = Chain::Holesky;
let pbs_port = 3900;

let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?];
let relays = vec![generate_mock_relay(pbs_port + 1, pubkey)?];
let mock_state = Arc::new(MockRelayState::new(chain, signer).with_large_body());
tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1));

Expand Down
4 changes: 2 additions & 2 deletions tests/tests/pbs_post_validators.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ async fn test_register_validators() -> Result<()> {
let pbs_port = 4000;

// Run a mock relay
let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?];
let relays = vec![generate_mock_relay(pbs_port + 1, pubkey)?];
let mock_state = Arc::new(MockRelayState::new(chain, signer));
tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1));

Expand Down Expand Up @@ -72,7 +72,7 @@ async fn test_register_validators_returns_422_if_request_is_malformed() -> Resul
let pbs_port = 4100;

// Run a mock relay
let relays = vec![generate_mock_relay(pbs_port + 1, *pubkey)?];
let relays = vec![generate_mock_relay(pbs_port + 1, pubkey)?];
let mock_state = Arc::new(MockRelayState::new(chain, signer));
tokio::spawn(start_mock_relay_service(mock_state.clone(), pbs_port + 1));

Expand Down
Loading