Răsfoiți Sursa

SIMD-0344: fix alt_bn128 pairing length check (#8747)

* SIMD-0344: fix alt_bn128 pairing length check

* fix a bad merge
samkim-crypto 3 săptămâni în urmă
părinte
comite
74ee02a474
3 a modificat fișierele cu 20 adăugiri și 1 ștergeri
  1. 10 0
      feature-set/src/lib.rs
  2. 2 0
      svm-feature-set/src/lib.rs
  3. 8 1
      syscalls/src/lib.rs

+ 10 - 0
feature-set/src/lib.rs

@@ -171,6 +171,8 @@ impl FeatureSet {
             increase_cpi_account_info_limit: self.is_active(&increase_cpi_account_info_limit::id()),
             vote_state_v4: self.is_active(&vote_state_v4::id()),
             poseidon_enforce_padding: self.is_active(&poseidon_enforce_padding::id()),
+            fix_alt_bn128_pairing_length_check: self
+                .is_active(&fix_alt_bn128_pairing_length_check::id()),
         }
     }
 }
@@ -1181,6 +1183,10 @@ pub mod poseidon_enforce_padding {
     solana_pubkey::declare_id!("poUdAqRXXsNmfqAZ6UqpjbeYgwBygbfQLEvWSqVhSnb");
 }
 
+pub mod fix_alt_bn128_pairing_length_check {
+    solana_pubkey::declare_id!("bnYzodLwmybj7e1HAe98yZrdJTd7we69eMMLgCXqKZm");
+}
+
 pub static FEATURE_NAMES: LazyLock<AHashMap<Pubkey, &'static str>> = LazyLock::new(|| {
     [
         (secp256k1_program_enabled::id(), "secp256k1 program"),
@@ -2124,6 +2130,10 @@ pub static FEATURE_NAMES: LazyLock<AHashMap<Pubkey, &'static str>> = LazyLock::n
             poseidon_enforce_padding::id(),
             "SIMD-0359: Enforce padding in Poseidon hash inputs",
         ),
+        (
+            fix_alt_bn128_pairing_length_check::id(),
+            "SIMD-0334: Fix alt_bn128_pairing length check",
+        ),
         /*************** ADD NEW FEATURES HERE ***************/
     ]
     .iter()

+ 2 - 0
svm-feature-set/src/lib.rs

@@ -50,6 +50,7 @@ pub struct SVMFeatureSet {
     pub increase_cpi_account_info_limit: bool,
     pub vote_state_v4: bool,
     pub poseidon_enforce_padding: bool,
+    pub fix_alt_bn128_pairing_length_check: bool,
 }
 
 impl SVMFeatureSet {
@@ -96,6 +97,7 @@ impl SVMFeatureSet {
             increase_cpi_account_info_limit: true,
             vote_state_v4: true,
             poseidon_enforce_padding: true,
+            fix_alt_bn128_pairing_length_check: true,
         }
     }
 }

+ 8 - 1
syscalls/src/lib.rs

@@ -1633,7 +1633,14 @@ declare_builtin_function!(
                 )
             }
             ALT_BN128_PAIRING_BE => {
-                alt_bn128_versioned_pairing(VersionedPairing::V0, input, Endianness::BE)
+                let version = if invoke_context
+                    .get_feature_set()
+                    .fix_alt_bn128_pairing_length_check {
+                    VersionedPairing::V1
+                } else {
+                    VersionedPairing::V0
+                };
+                alt_bn128_versioned_pairing(version, input, Endianness::BE)
             }
             _ => {
                 return Err(SyscallError::InvalidAttribute.into());