Skip to content

Commit ce29c3a

Browse files
authored
Move from [u8; 32] to B256 everywhere (#347)
1 parent db08d77 commit ce29c3a

File tree

20 files changed

+204
-226
lines changed

20 files changed

+204
-226
lines changed

crates/common/src/commit/request.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use std::{
66

77
use alloy::{
88
hex,
9-
primitives::{Address, B256},
9+
primitives::{aliases::B32, Address, B256},
1010
rpc::types::beacon::BlsSignature,
1111
};
1212
use derive_more::derive::From;
@@ -63,7 +63,7 @@ impl<T: ProxyId> SignedProxyDelegation<T> {
6363
&self.message,
6464
&self.signature,
6565
None,
66-
COMMIT_BOOST_DOMAIN,
66+
&B32::from(COMMIT_BOOST_DOMAIN),
6767
)
6868
}
6969
}

crates/common/src/pbs/types/beacon_block.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ mod tests {
9999
// this is from mev-boost test data
100100
fn test_signed_blinded_block_fb_electra() {
101101
let data = include_str!("testdata/signed-blinded-beacon-block-electra.json");
102-
let block = test_encode_decode::<SignedBlindedBeaconBlock>(&data);
102+
let block = test_encode_decode::<SignedBlindedBeaconBlock>(data);
103103
assert!(matches!(block.message, BlindedBeaconBlock::Electra(_)));
104104
}
105105

@@ -166,7 +166,7 @@ mod tests {
166166
// this is dummy data generated with https://github.com/attestantio/go-eth2-client
167167
fn test_signed_blinded_block_ssz() {
168168
let data_json = include_str!("testdata/signed-blinded-beacon-block-electra-2.json");
169-
let block_json = test_encode_decode::<SignedBlindedBeaconBlock>(&data_json);
169+
let block_json = test_encode_decode::<SignedBlindedBeaconBlock>(data_json);
170170
assert!(matches!(block_json.message, BlindedBeaconBlock::Electra(_)));
171171

172172
let data_ssz = include_bytes!("testdata/signed-blinded-beacon-block-electra-2.ssz");
@@ -181,7 +181,7 @@ mod tests {
181181
// this is dummy data generated with https://github.com/attestantio/go-builder-client
182182
fn test_execution_payload_block_ssz() {
183183
let data_json = include_str!("testdata/execution-payload-electra.json");
184-
let block_json = test_encode_decode::<PayloadAndBlobsElectra>(&data_json);
184+
let block_json = test_encode_decode::<PayloadAndBlobsElectra>(data_json);
185185

186186
let data_ssz = include_bytes!("testdata/execution-payload-electra.ssz");
187187
let data_ssz = alloy::primitives::hex::decode(data_ssz).unwrap();

crates/common/src/pbs/types/execution_payload.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ mod tests {
129129
"excess_blob_gas": "95158272"
130130
}"#;
131131

132-
let parsed = test_encode_decode::<ExecutionPayloadHeader<ElectraSpec>>(&data);
132+
let parsed = test_encode_decode::<ExecutionPayloadHeader<ElectraSpec>>(data);
133133

134134
assert_eq!(
135135
parsed.parent_hash,

crates/common/src/pbs/types/get_header.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ pub struct ExecutionPayloadHeaderMessageElectra {
9494

9595
#[cfg(test)]
9696
mod tests {
97-
use alloy::primitives::U256;
97+
use alloy::primitives::{aliases::B32, U256};
9898

9999
use super::*;
100100
use crate::{
@@ -177,7 +177,7 @@ mod tests {
177177
&parsed.message,
178178
&parsed.signature,
179179
None,
180-
APPLICATION_BUILDER_DOMAIN
180+
&B32::from(APPLICATION_BUILDER_DOMAIN)
181181
)
182182
.is_ok())
183183
}

crates/common/src/signature.rs

Lines changed: 50 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use alloy::{
2-
primitives::{Address, B256},
2+
primitives::{aliases::B32, Address, B256},
33
rpc::types::beacon::{constants::BLS_DST_SIG, BlsPublicKey, BlsSignature},
44
};
55
use tree_hash::TreeHash;
@@ -17,49 +17,52 @@ pub fn sign_message(secret_key: &BlsSecretKey, msg: &[u8]) -> BlsSignature {
1717
BlsSignature::from_slice(&signature)
1818
}
1919

20-
pub fn compute_signing_root<T: TreeHash>(signing_data: &T) -> [u8; 32] {
21-
signing_data.tree_hash_root().0
20+
pub fn compute_tree_hash_root<T: TreeHash>(signing_data: &T) -> B256 {
21+
signing_data.tree_hash_root()
2222
}
2323

2424
pub fn compute_prop_commit_signing_root(
2525
chain: Chain,
26-
object_root: [u8; 32],
27-
module_signing_id: Option<[u8; 32]>,
28-
domain_mask: [u8; 4],
29-
) -> [u8; 32] {
26+
object_root: &B256,
27+
module_signing_id: Option<&B256>,
28+
domain_mask: &B32,
29+
) -> B256 {
3030
let domain = compute_domain(chain, domain_mask);
3131
match module_signing_id {
32-
Some(id) => compute_signing_root(&types::SigningData {
33-
object_root: compute_signing_root(&types::PropCommitSigningInfo {
34-
data: object_root,
35-
module_signing_id: id,
32+
Some(id) => compute_tree_hash_root(&types::SigningData {
33+
object_root: compute_tree_hash_root(&types::PropCommitSigningInfo {
34+
data: *object_root,
35+
module_signing_id: *id,
3636
}),
3737
signing_domain: domain,
3838
}),
39-
None => compute_signing_root(&types::SigningData { object_root, signing_domain: domain }),
39+
None => compute_tree_hash_root(&types::SigningData {
40+
object_root: *object_root,
41+
signing_domain: domain,
42+
}),
4043
}
4144
}
4245

4346
// NOTE: this currently works only for builder domain signatures and
4447
// verifications
4548
// ref: https://github.com/ralexstokes/ethereum-consensus/blob/cf3c404043230559660810bc0c9d6d5a8498d819/ethereum-consensus/src/builder/mod.rs#L26-L29
46-
pub fn compute_domain(chain: Chain, domain_mask: [u8; 4]) -> [u8; 32] {
49+
pub fn compute_domain(chain: Chain, domain_mask: &B32) -> B256 {
4750
#[derive(Debug, TreeHash)]
4851
struct ForkData {
4952
fork_version: [u8; 4],
5053
genesis_validators_root: [u8; 32],
5154
}
5255

5356
let mut domain = [0u8; 32];
54-
domain[..4].copy_from_slice(&domain_mask);
57+
domain[..4].copy_from_slice(&domain_mask.0);
5558

5659
let fork_version = chain.genesis_fork_version();
5760
let fd = ForkData { fork_version, genesis_validators_root: GENESIS_VALIDATORS_ROOT };
5861
let fork_data_root = fd.tree_hash_root();
5962

6063
domain[4..].copy_from_slice(&fork_data_root[..28]);
6164

62-
domain
65+
B256::from(domain)
6366
}
6467

6568
pub fn verify_signed_message<T: TreeHash>(
@@ -68,15 +71,15 @@ pub fn verify_signed_message<T: TreeHash>(
6871
msg: &T,
6972
signature: &BlsSignature,
7073
module_signing_id: Option<&B256>,
71-
domain_mask: [u8; 4],
74+
domain_mask: &B32,
7275
) -> Result<(), BlstErrorWrapper> {
7376
let signing_root = compute_prop_commit_signing_root(
7477
chain,
75-
compute_signing_root(msg),
76-
module_signing_id.map(|id| id.0),
78+
&compute_tree_hash_root(msg),
79+
module_signing_id,
7780
domain_mask,
7881
);
79-
verify_bls_signature(pubkey, &signing_root, signature)
82+
verify_bls_signature(pubkey, signing_root.as_slice(), signature)
8083
}
8184

8285
/// Signs a message with the Beacon builder domain.
@@ -85,36 +88,36 @@ pub fn sign_builder_message(
8588
secret_key: &BlsSecretKey,
8689
msg: &impl TreeHash,
8790
) -> BlsSignature {
88-
sign_builder_root(chain, secret_key, msg.tree_hash_root().0)
91+
sign_builder_root(chain, secret_key, &msg.tree_hash_root())
8992
}
9093

9194
pub fn sign_builder_root(
9295
chain: Chain,
9396
secret_key: &BlsSecretKey,
94-
object_root: [u8; 32],
97+
object_root: &B256,
9598
) -> BlsSignature {
9699
let domain = chain.builder_domain();
97100
let signing_data = types::SigningData {
98-
object_root: compute_signing_root(&object_root),
101+
object_root: compute_tree_hash_root(object_root),
99102
signing_domain: domain,
100103
};
101-
let signing_root = compute_signing_root(&signing_data);
102-
sign_message(secret_key, &signing_root)
104+
let signing_root = compute_tree_hash_root(&signing_data);
105+
sign_message(secret_key, signing_root.as_slice())
103106
}
104107

105108
pub fn sign_commit_boost_root(
106109
chain: Chain,
107110
secret_key: &BlsSecretKey,
108-
object_root: [u8; 32],
109-
module_signing_id: Option<[u8; 32]>,
111+
object_root: &B256,
112+
module_signing_id: Option<&B256>,
110113
) -> BlsSignature {
111114
let signing_root = compute_prop_commit_signing_root(
112115
chain,
113116
object_root,
114117
module_signing_id,
115-
COMMIT_BOOST_DOMAIN,
118+
&B32::from(COMMIT_BOOST_DOMAIN),
116119
);
117-
sign_message(secret_key, &signing_root)
120+
sign_message(secret_key, signing_root.as_slice())
118121
}
119122

120123
// ==============================
@@ -128,18 +131,18 @@ pub fn verify_proposer_commitment_signature_bls(
128131
pubkey: &BlsPublicKey,
129132
msg: &impl TreeHash,
130133
signature: &BlsSignature,
131-
module_signing_id: B256,
134+
module_signing_id: &B256,
132135
) -> Result<(), BlstErrorWrapper> {
133-
let object_root = msg.tree_hash_root().0;
134-
let domain = compute_domain(chain, COMMIT_BOOST_DOMAIN);
135-
let signing_root = compute_signing_root(&types::SigningData {
136-
object_root: compute_signing_root(&types::PropCommitSigningInfo {
136+
let object_root = msg.tree_hash_root();
137+
let domain = compute_domain(chain, &B32::from(COMMIT_BOOST_DOMAIN));
138+
let signing_root = compute_tree_hash_root(&types::SigningData {
139+
object_root: compute_tree_hash_root(&types::PropCommitSigningInfo {
137140
data: object_root,
138141
module_signing_id: *module_signing_id,
139142
}),
140143
signing_domain: domain,
141144
});
142-
verify_bls_signature(pubkey, &signing_root, signature)
145+
verify_bls_signature(pubkey, signing_root.as_slice(), signature)
143146
}
144147

145148
/// Verifies that a proposer commitment signature was generated by the given
@@ -149,12 +152,12 @@ pub fn verify_proposer_commitment_signature_ecdsa(
149152
address: &Address,
150153
msg: &impl TreeHash,
151154
signature: &EcdsaSignature,
152-
module_signing_id: B256,
155+
module_signing_id: &B256,
153156
) -> Result<(), eyre::Report> {
154-
let object_root = msg.tree_hash_root().0;
155-
let domain = compute_domain(chain, COMMIT_BOOST_DOMAIN);
156-
let signing_root = compute_signing_root(&types::SigningData {
157-
object_root: compute_signing_root(&types::PropCommitSigningInfo {
157+
let object_root = msg.tree_hash_root();
158+
let domain = compute_domain(chain, &B32::from(COMMIT_BOOST_DOMAIN));
159+
let signing_root = compute_tree_hash_root(&types::SigningData {
160+
object_root: compute_tree_hash_root(&types::PropCommitSigningInfo {
158161
data: object_root,
159162
module_signing_id: *module_signing_id,
160163
}),
@@ -170,30 +173,18 @@ pub fn verify_proposer_commitment_signature_ecdsa(
170173
#[cfg(test)]
171174
mod tests {
172175

176+
use alloy::primitives::aliases::B32;
177+
173178
use super::compute_domain;
174179
use crate::{constants::APPLICATION_BUILDER_DOMAIN, types::Chain};
175180

176181
#[test]
177182
fn test_builder_domains() {
178-
assert_eq!(
179-
compute_domain(Chain::Mainnet, APPLICATION_BUILDER_DOMAIN),
180-
Chain::Mainnet.builder_domain()
181-
);
182-
assert_eq!(
183-
compute_domain(Chain::Holesky, APPLICATION_BUILDER_DOMAIN),
184-
Chain::Holesky.builder_domain()
185-
);
186-
assert_eq!(
187-
compute_domain(Chain::Sepolia, APPLICATION_BUILDER_DOMAIN),
188-
Chain::Sepolia.builder_domain()
189-
);
190-
assert_eq!(
191-
compute_domain(Chain::Helder, APPLICATION_BUILDER_DOMAIN),
192-
Chain::Helder.builder_domain()
193-
);
194-
assert_eq!(
195-
compute_domain(Chain::Hoodi, APPLICATION_BUILDER_DOMAIN),
196-
Chain::Hoodi.builder_domain()
197-
);
183+
let domain = &B32::from(APPLICATION_BUILDER_DOMAIN);
184+
assert_eq!(compute_domain(Chain::Mainnet, domain), Chain::Mainnet.builder_domain());
185+
assert_eq!(compute_domain(Chain::Holesky, domain), Chain::Holesky.builder_domain());
186+
assert_eq!(compute_domain(Chain::Sepolia, domain), Chain::Sepolia.builder_domain());
187+
assert_eq!(compute_domain(Chain::Helder, domain), Chain::Helder.builder_domain());
188+
assert_eq!(compute_domain(Chain::Hoodi, domain), Chain::Hoodi.builder_domain());
198189
}
199190
}

crates/common/src/signer/schemes/bls.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use alloy::rpc::types::beacon::constants::BLS_DST_SIG;
21
pub use alloy::rpc::types::beacon::BlsSignature;
2+
use alloy::{primitives::B256, rpc::types::beacon::constants::BLS_DST_SIG};
33
use blst::BLST_ERROR;
44
use tree_hash::TreeHash;
55

@@ -32,17 +32,17 @@ impl BlsSigner {
3232
}
3333
}
3434

35-
pub fn secret(&self) -> [u8; 32] {
35+
pub fn secret(&self) -> B256 {
3636
match self {
37-
BlsSigner::Local(secret) => secret.clone().to_bytes(),
37+
BlsSigner::Local(secret) => B256::from(secret.clone().to_bytes()),
3838
}
3939
}
4040

4141
pub async fn sign(
4242
&self,
4343
chain: Chain,
44-
object_root: [u8; 32],
45-
module_signing_id: Option<[u8; 32]>,
44+
object_root: &B256,
45+
module_signing_id: Option<&B256>,
4646
) -> BlsSignature {
4747
match self {
4848
BlsSigner::Local(sk) => {
@@ -55,9 +55,9 @@ impl BlsSigner {
5555
&self,
5656
chain: Chain,
5757
msg: &impl TreeHash,
58-
module_signing_id: Option<[u8; 32]>,
58+
module_signing_id: Option<&B256>,
5959
) -> BlsSignature {
60-
self.sign(chain, msg.tree_hash_root().0, module_signing_id).await
60+
self.sign(chain, &msg.tree_hash_root(), module_signing_id).await
6161
}
6262
}
6363

0 commit comments

Comments
 (0)