Skip to content

Commit 49d4dca

Browse files
authored
chore: Remove redundant bls12-381 constants and cleanup naming (#2235)
* remove G1_OUTPUT_LENGTH * remove G1_INPUT_ITEM_LENGTH * remove G2_OUTPUT_LENGTH and G2_INPUT_ITEM_LENGTH * PADDING_LENGTH -> FP_PADDING_LENGTH * PAIRING_PAIRING -> PAIRING * comment -> doc comment * cargo fmt
1 parent 5a2ff70 commit 49d4dca

File tree

9 files changed

+40
-62
lines changed

9 files changed

+40
-62
lines changed

crates/precompile/src/bls12_381/g1.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use super::utils::{fp_from_bendian, fp_to_bytes, remove_padding};
2-
use crate::bls12_381_const::{G1_INPUT_ITEM_LENGTH, G1_OUTPUT_LENGTH, PADDED_FP_LENGTH};
2+
use crate::bls12_381_const::{PADDED_FP_LENGTH, PADDED_G1_LENGTH};
33
use crate::PrecompileError;
44
use blst::{blst_p1_affine, blst_p1_affine_in_g1, blst_p1_affine_on_curve};
55
use primitives::Bytes;
66

77
/// Encodes a G1 point in affine format into byte slice with padded elements.
88
pub(super) fn encode_g1_point(input: *const blst_p1_affine) -> Bytes {
9-
let mut out = vec![0u8; G1_OUTPUT_LENGTH];
9+
let mut out = vec![0u8; PADDED_G1_LENGTH];
1010
// SAFETY: Out comes from fixed length array, input is a blst value.
1111
unsafe {
1212
fp_to_bytes(&mut out[..PADDED_FP_LENGTH], &(*input).x);
@@ -40,15 +40,15 @@ pub(super) fn extract_g1_input(
4040
input: &[u8],
4141
subgroup_check: bool,
4242
) -> Result<blst_p1_affine, PrecompileError> {
43-
if input.len() != G1_INPUT_ITEM_LENGTH {
43+
if input.len() != PADDED_G1_LENGTH {
4444
return Err(PrecompileError::Other(format!(
45-
"Input should be {G1_INPUT_ITEM_LENGTH} bytes, was {}",
45+
"Input should be {PADDED_G1_LENGTH} bytes, was {}",
4646
input.len()
4747
)));
4848
}
4949

5050
let input_p0_x = remove_padding(&input[..PADDED_FP_LENGTH])?;
51-
let input_p0_y = remove_padding(&input[PADDED_FP_LENGTH..G1_INPUT_ITEM_LENGTH])?;
51+
let input_p0_y = remove_padding(&input[PADDED_FP_LENGTH..PADDED_G1_LENGTH])?;
5252
let out = decode_and_check_g1(input_p0_x, input_p0_y)?;
5353

5454
// From EIP-2537:

crates/precompile/src/bls12_381/g1_add.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::g1::{encode_g1_point, extract_g1_input};
22
use crate::bls12_381_const::{
3-
G1_ADD_ADDRESS, G1_ADD_BASE_GAS_FEE, G1_ADD_INPUT_LENGTH, G1_INPUT_ITEM_LENGTH,
3+
G1_ADD_ADDRESS, G1_ADD_BASE_GAS_FEE, G1_ADD_INPUT_LENGTH, PADDED_G1_LENGTH,
44
};
55
use crate::{u64_to_address, PrecompileWithAddress};
66
use crate::{PrecompileError, PrecompileOutput, PrecompileResult};
@@ -33,8 +33,8 @@ pub(super) fn g1_add(input: &Bytes, gas_limit: u64) -> PrecompileResult {
3333
// NB: There is no subgroup check for the G1 addition precompile.
3434
//
3535
// So we set the subgroup checks here to `false`
36-
let a_aff = &extract_g1_input(&input[..G1_INPUT_ITEM_LENGTH], false)?;
37-
let b_aff = &extract_g1_input(&input[G1_INPUT_ITEM_LENGTH..], false)?;
36+
let a_aff = &extract_g1_input(&input[..PADDED_G1_LENGTH], false)?;
37+
let b_aff = &extract_g1_input(&input[PADDED_G1_LENGTH..], false)?;
3838

3939
let mut b = blst_p1::default();
4040
// SAFETY: `b` and `b_aff` are blst values.

crates/precompile/src/bls12_381/g1_msm.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use super::{
33
utils::extract_scalar_input,
44
};
55
use crate::bls12_381_const::{
6-
DISCOUNT_TABLE_G1_MSM, G1_INPUT_ITEM_LENGTH, G1_MSM_ADDRESS, G1_MSM_BASE_GAS_FEE,
7-
G1_MSM_INPUT_LENGTH, NBITS, SCALAR_LENGTH,
6+
DISCOUNT_TABLE_G1_MSM, G1_MSM_ADDRESS, G1_MSM_BASE_GAS_FEE, G1_MSM_INPUT_LENGTH, NBITS,
7+
PADDED_G1_LENGTH, SCALAR_LENGTH,
88
};
99
use crate::bls12_381_utils::msm_required_gas;
1010
use crate::{u64_to_address, PrecompileWithAddress};
@@ -42,7 +42,7 @@ pub(super) fn g1_msm(input: &Bytes, gas_limit: u64) -> PrecompileResult {
4242
let mut g1_points: Vec<blst_p1> = Vec::with_capacity(k);
4343
let mut scalars: Vec<u8> = Vec::with_capacity(k * SCALAR_LENGTH);
4444
for i in 0..k {
45-
let slice = &input[i * G1_MSM_INPUT_LENGTH..i * G1_MSM_INPUT_LENGTH + G1_INPUT_ITEM_LENGTH];
45+
let slice = &input[i * G1_MSM_INPUT_LENGTH..i * G1_MSM_INPUT_LENGTH + PADDED_G1_LENGTH];
4646

4747
// BLST batch API for p1_affines blows up when you pass it a point at infinity, so we must
4848
// filter points at infinity (and their corresponding scalars) from the input.
@@ -62,8 +62,8 @@ pub(super) fn g1_msm(input: &Bytes, gas_limit: u64) -> PrecompileResult {
6262

6363
scalars.extend_from_slice(
6464
&extract_scalar_input(
65-
&input[i * G1_MSM_INPUT_LENGTH + G1_INPUT_ITEM_LENGTH
66-
..i * G1_MSM_INPUT_LENGTH + G1_INPUT_ITEM_LENGTH + SCALAR_LENGTH],
65+
&input[i * G1_MSM_INPUT_LENGTH + PADDED_G1_LENGTH
66+
..i * G1_MSM_INPUT_LENGTH + PADDED_G1_LENGTH + SCALAR_LENGTH],
6767
)?
6868
.b,
6969
);

crates/precompile/src/bls12_381/g2.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
use super::utils::{fp_from_bendian, fp_to_bytes, remove_padding};
2-
use crate::bls12_381_const::{FP_LENGTH, G2_INPUT_ITEM_LENGTH, G2_OUTPUT_LENGTH, PADDED_FP_LENGTH};
2+
use crate::bls12_381_const::{FP_LENGTH, PADDED_FP_LENGTH, PADDED_G2_LENGTH};
33
use crate::PrecompileError;
44
use blst::{blst_fp2, blst_p2_affine, blst_p2_affine_in_g2, blst_p2_affine_on_curve};
55
use primitives::Bytes;
66

77
/// Encodes a G2 point in affine format into byte slice with padded elements.
88
pub(super) fn encode_g2_point(input: &blst_p2_affine) -> Bytes {
9-
let mut out = vec![0u8; G2_OUTPUT_LENGTH];
9+
let mut out = vec![0u8; PADDED_G2_LENGTH];
1010
fp_to_bytes(&mut out[..PADDED_FP_LENGTH], &input.x.fp[0]);
1111
fp_to_bytes(
1212
&mut out[PADDED_FP_LENGTH..2 * PADDED_FP_LENGTH],
@@ -57,9 +57,9 @@ pub(super) fn extract_g2_input(
5757
input: &[u8],
5858
subgroup_check: bool,
5959
) -> Result<blst_p2_affine, PrecompileError> {
60-
if input.len() != G2_INPUT_ITEM_LENGTH {
60+
if input.len() != PADDED_G2_LENGTH {
6161
return Err(PrecompileError::Other(format!(
62-
"Input should be {G2_INPUT_ITEM_LENGTH} bytes, was {}",
62+
"Input should be {PADDED_G2_LENGTH} bytes, was {}",
6363
input.len()
6464
)));
6565
}

crates/precompile/src/bls12_381/g2_add.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::g2::{encode_g2_point, extract_g2_input};
22
use crate::bls12_381_const::{
3-
G2_ADD_ADDRESS, G2_ADD_BASE_GAS_FEE, G2_ADD_INPUT_LENGTH, G2_INPUT_ITEM_LENGTH,
3+
G2_ADD_ADDRESS, G2_ADD_BASE_GAS_FEE, G2_ADD_INPUT_LENGTH, PADDED_G2_LENGTH,
44
};
55
use crate::{u64_to_address, PrecompileWithAddress};
66
use crate::{PrecompileError, PrecompileOutput, PrecompileResult};
@@ -34,8 +34,8 @@ pub(super) fn g2_add(input: &Bytes, gas_limit: u64) -> PrecompileResult {
3434
// NB: There is no subgroup check for the G2 addition precompile.
3535
//
3636
// So we set the subgroup checks here to `false`
37-
let a_aff = &extract_g2_input(&input[..G2_INPUT_ITEM_LENGTH], false)?;
38-
let b_aff = &extract_g2_input(&input[G2_INPUT_ITEM_LENGTH..], false)?;
37+
let a_aff = &extract_g2_input(&input[..PADDED_G2_LENGTH], false)?;
38+
let b_aff = &extract_g2_input(&input[PADDED_G2_LENGTH..], false)?;
3939

4040
let mut b = blst_p2::default();
4141
// SAFETY: `b` and `b_aff` are blst values.

crates/precompile/src/bls12_381/g2_msm.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ use super::{
33
utils::extract_scalar_input,
44
};
55
use crate::bls12_381_const::{
6-
DISCOUNT_TABLE_G2_MSM, G2_INPUT_ITEM_LENGTH, G2_MSM_ADDRESS, G2_MSM_BASE_GAS_FEE,
7-
G2_MSM_INPUT_LENGTH, NBITS, SCALAR_LENGTH,
6+
DISCOUNT_TABLE_G2_MSM, G2_MSM_ADDRESS, G2_MSM_BASE_GAS_FEE, G2_MSM_INPUT_LENGTH, NBITS,
7+
PADDED_G2_LENGTH, SCALAR_LENGTH,
88
};
99
use crate::bls12_381_utils::msm_required_gas;
1010
use crate::{u64_to_address, PrecompileWithAddress};
@@ -42,7 +42,7 @@ pub(super) fn g2_msm(input: &Bytes, gas_limit: u64) -> PrecompileResult {
4242
let mut g2_points: Vec<blst_p2> = Vec::with_capacity(k);
4343
let mut scalars: Vec<u8> = Vec::with_capacity(k * SCALAR_LENGTH);
4444
for i in 0..k {
45-
let slice = &input[i * G2_MSM_INPUT_LENGTH..i * G2_MSM_INPUT_LENGTH + G2_INPUT_ITEM_LENGTH];
45+
let slice = &input[i * G2_MSM_INPUT_LENGTH..i * G2_MSM_INPUT_LENGTH + PADDED_G2_LENGTH];
4646
// BLST batch API for p2_affines blows up when you pass it a point at infinity, so we must
4747
// filter points at infinity (and their corresponding scalars) from the input.
4848
if slice.iter().all(|i| *i == 0) {
@@ -62,8 +62,8 @@ pub(super) fn g2_msm(input: &Bytes, gas_limit: u64) -> PrecompileResult {
6262

6363
scalars.extend_from_slice(
6464
&extract_scalar_input(
65-
&input[i * G2_MSM_INPUT_LENGTH + G2_INPUT_ITEM_LENGTH
66-
..i * G2_MSM_INPUT_LENGTH + G2_INPUT_ITEM_LENGTH + SCALAR_LENGTH],
65+
&input[i * G2_MSM_INPUT_LENGTH + PADDED_G2_LENGTH
66+
..i * G2_MSM_INPUT_LENGTH + PADDED_G2_LENGTH + SCALAR_LENGTH],
6767
)?
6868
.b,
6969
);

crates/precompile/src/bls12_381/pairing.rs

+6-7
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use super::{g1::extract_g1_input, g2::extract_g2_input};
22
use crate::bls12_381_const::{
3-
G1_INPUT_ITEM_LENGTH, G2_INPUT_ITEM_LENGTH, PAIRING_ADDRESS, PAIRING_INPUT_LENGTH,
4-
PAIRING_PAIRING_MULTIPLIER_BASE, PAIRING_PAIRING_OFFSET_BASE,
3+
PADDED_G1_LENGTH, PADDED_G2_LENGTH, PAIRING_ADDRESS, PAIRING_INPUT_LENGTH,
4+
PAIRING_MULTIPLIER_BASE, PAIRING_OFFSET_BASE,
55
};
66
use crate::{
77
u64_to_address, PrecompileError, PrecompileOutput, PrecompileResult, PrecompileWithAddress,
@@ -34,8 +34,7 @@ pub(super) fn pairing(input: &Bytes, gas_limit: u64) -> PrecompileResult {
3434
}
3535

3636
let k = input_len / PAIRING_INPUT_LENGTH;
37-
let required_gas: u64 =
38-
PAIRING_PAIRING_MULTIPLIER_BASE * k as u64 + PAIRING_PAIRING_OFFSET_BASE;
37+
let required_gas: u64 = PAIRING_MULTIPLIER_BASE * k as u64 + PAIRING_OFFSET_BASE;
3938
if required_gas > gas_limit {
4039
return Err(PrecompileError::OutOfGas);
4140
}
@@ -47,16 +46,16 @@ pub(super) fn pairing(input: &Bytes, gas_limit: u64) -> PrecompileResult {
4746
//
4847
// So we set the subgroup_check flag to `true`
4948
let p1_aff = &extract_g1_input(
50-
&input[i * PAIRING_INPUT_LENGTH..i * PAIRING_INPUT_LENGTH + G1_INPUT_ITEM_LENGTH],
49+
&input[i * PAIRING_INPUT_LENGTH..i * PAIRING_INPUT_LENGTH + PADDED_G1_LENGTH],
5150
true,
5251
)?;
5352

5453
// NB: Scalar multiplications, MSMs and pairings MUST perform a subgroup check.
5554
//
5655
// So we set the subgroup_check flag to `true`
5756
let p2_aff = &extract_g2_input(
58-
&input[i * PAIRING_INPUT_LENGTH + G1_INPUT_ITEM_LENGTH
59-
..i * PAIRING_INPUT_LENGTH + G1_INPUT_ITEM_LENGTH + G2_INPUT_ITEM_LENGTH],
57+
&input[i * PAIRING_INPUT_LENGTH + PADDED_G1_LENGTH
58+
..i * PAIRING_INPUT_LENGTH + PADDED_G1_LENGTH + PADDED_G2_LENGTH],
6059
true,
6160
)?;
6261

crates/precompile/src/bls12_381/utils.rs

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
use crate::bls12_381_const::{
2-
FP_LENGTH, MODULUS_REPR, PADDED_FP_LENGTH, PADDING_LENGTH, SCALAR_LENGTH,
3-
};
1+
use crate::bls12_381_const::{FP_LENGTH, FP_PAD_BY, MODULUS_REPR, PADDED_FP_LENGTH, SCALAR_LENGTH};
42
use crate::PrecompileError;
53
use blst::{
64
blst_bendian_from_fp, blst_fp, blst_fp_from_bendian, blst_scalar, blst_scalar_from_bendian,
@@ -12,7 +10,7 @@ pub(super) fn fp_to_bytes(out: &mut [u8], input: *const blst_fp) {
1210
if out.len() != PADDED_FP_LENGTH {
1311
return;
1412
}
15-
let (padding, rest) = out.split_at_mut(PADDING_LENGTH);
13+
let (padding, rest) = out.split_at_mut(FP_PAD_BY);
1614
padding.fill(0);
1715
// SAFETY: Out length is checked previously, `input` is a blst value.
1816
unsafe { blst_bendian_from_fp(rest.as_mut_ptr(), input) };
@@ -26,10 +24,10 @@ pub(super) fn remove_padding(input: &[u8]) -> Result<&[u8; FP_LENGTH], Precompil
2624
input.len()
2725
)));
2826
}
29-
let (padding, unpadded) = input.split_at(PADDING_LENGTH);
27+
let (padding, unpadded) = input.split_at(FP_PAD_BY);
3028
if !padding.iter().all(|&x| x == 0) {
3129
return Err(PrecompileError::Other(format!(
32-
"{PADDING_LENGTH} top bytes of input are not zero",
30+
"{FP_PAD_BY} top bytes of input are not zero",
3331
)));
3432
}
3533
Ok(unpadded.try_into().unwrap())

crates/precompile/src/bls12_381_const.rs

+5-24
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,9 @@ pub const G2_ADD_BASE_GAS_FEE: u64 = 600;
1212
pub const G2_MSM_ADDRESS: u64 = 0x0e;
1313
pub const G2_MSM_BASE_GAS_FEE: u64 = 22500;
1414
pub const PAIRING_ADDRESS: u64 = 0x0f;
15-
// TODO: Why does this have PAIRING twice?
16-
pub const PAIRING_PAIRING_OFFSET_BASE: u64 = 37700;
15+
pub const PAIRING_OFFSET_BASE: u64 = 37700;
1716
pub const MSM_MULTIPLIER: u64 = 1000;
18-
// TODO: Why does this have PAIRING twice?
19-
pub const PAIRING_PAIRING_MULTIPLIER_BASE: u64 = 32600;
17+
pub const PAIRING_MULTIPLIER_BASE: u64 = 32600;
2018

2119
/// Discounts table for G1 MSM as a vector of pairs `[k, discount]`.
2220
pub static DISCOUNT_TABLE_G1_MSM: [u16; 128] = [
@@ -28,7 +26,7 @@ pub static DISCOUNT_TABLE_G1_MSM: [u16; 128] = [
2826
544, 543, 542, 541, 540, 540, 539, 538, 537, 536, 536, 535, 534, 533, 532, 532, 531, 530, 529,
2927
528, 528, 527, 526, 525, 525, 524, 523, 522, 522, 521, 520, 520, 519,
3028
];
31-
// Discounts table for G2 MSM as a vector of pairs `[k, discount]`:
29+
/// Discounts table for G2 MSM as a vector of pairs `[k, discount]`:
3230
pub static DISCOUNT_TABLE_G2_MSM: [u16; 128] = [
3331
1000, 1000, 923, 884, 855, 832, 812, 796, 782, 770, 759, 749, 740, 732, 724, 717, 711, 704,
3432
699, 693, 688, 683, 679, 674, 670, 666, 663, 659, 655, 652, 649, 646, 643, 640, 637, 634, 632,
@@ -83,19 +81,11 @@ pub const NBITS: usize = 256;
8381
///
8482
/// Note: The input to the G1 addition precompile is 2 G1 elements.
8583
pub const G1_ADD_INPUT_LENGTH: usize = 2 * PADDED_G1_LENGTH;
86-
/// G1_OUTPUT_LENGTH specifies the number of bytes that the EVM will use
87-
/// to represent a G1 element.
88-
// TODO: can we remove this since it is just `PADDED_G1_LENGTH`?
89-
pub const G1_OUTPUT_LENGTH: usize = PADDED_G1_LENGTH;
9084
/// G1_MSM_INPUT_LENGTH specifies the number of bytes that each MSM input pair should have.
9185
///
9286
/// Note: An MSM pair is a G1 element and a scalar. The input to the MSM precompile will have `n`
9387
/// of these pairs.
9488
pub const G1_MSM_INPUT_LENGTH: usize = PADDED_G1_LENGTH + SCALAR_LENGTH;
95-
/// G1_INPUT_ITEM_LENGTH specifies the number of bytes that the EVM will use to represent
96-
/// a G1 element.
97-
// TODO: can we remove this since it is just `PADDED_G1_LENGTH`?
98-
pub const G1_INPUT_ITEM_LENGTH: usize = PADDED_G1_LENGTH;
9989

10090
/// PADDED_G2_LENGTH specifies the number of bytes that the EVM will use to represent
10191
/// a G2 element.
@@ -113,26 +103,17 @@ pub const G2_ADD_INPUT_LENGTH: usize = 2 * PADDED_G2_LENGTH;
113103
/// Note: An MSM pair is a G2 element and a scalar. The input to the MSM will have `n`
114104
/// of these pairs.
115105
pub const G2_MSM_INPUT_LENGTH: usize = PADDED_G2_LENGTH + SCALAR_LENGTH;
116-
/// G2_OUTPUT_LENGTH specifies the number of bytes that the EVM will use
117-
/// to represent a G2 element.
118-
// TODO: can we remove this since it is just `PADDED_G2_LENGTH`
119-
pub const G2_OUTPUT_LENGTH: usize = PADDED_G2_LENGTH;
120-
/// G2_INPUT_ITEM_LENGTH specifies the number of bytes that the EVM will use to represent
121-
/// a G2 element.
122-
// TODO: can we remove this since it is just `PADDED_G2_LENGTH`
123-
pub const G2_INPUT_ITEM_LENGTH: usize = 256;
124106

125107
/// PAIRING_INPUT_LENGTH specifies the number of bytes that each Pairing input pair should have.
126108
///
127109
/// Note: An Pairing input-pair is a G2 element and a G1 element. The input to the Pairing will have `n`
128110
/// of these pairs.
129111
pub const PAIRING_INPUT_LENGTH: usize = PADDED_G1_LENGTH + PADDED_G2_LENGTH;
130112

131-
/// PADDING_LENGTH specifies the number of bytes that an FP_ELEMENT is padded by.
113+
/// FP_PAD_BY specifies the number of bytes that an FP_ELEMENT is padded by to make it 32 byte aligned.
132114
///
133115
/// Note: This should be equal to PADDED_FP_LENGTH - FP_LENGTH.
134-
/// TODO: Should likely rename this to FP_PADDING_LENGTH, since other objects are also padded
135-
pub const PADDING_LENGTH: usize = 16;
116+
pub const FP_PAD_BY: usize = 16;
136117

137118
// Big-endian non-Montgomery form.
138119
pub const MODULUS_REPR: [u8; 48] = [

0 commit comments

Comments
 (0)