Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
c55f599
function to set da validator pair
StanislavBreadless Apr 30, 2025
7c82a75
fmt
StanislavBreadless Apr 30, 2025
4b54140
fix func
StanislavBreadless Apr 30, 2025
6d5d8fe
fix script
StanislavBreadless Apr 30, 2025
c8eeffb
Merge remote-tracking branch 'origin/draft-v28' into sb-set-da-valida…
StanislavBreadless May 5, 2025
4b65d4d
feat(consensus): Add leader flag to Validator in ConsensusRegistry
brunoffranca May 26, 2025
2fbc49c
basic v28_1 script
kelemeno Jul 30, 2025
d8d4e92
pull release-v28
kelemeno Jul 31, 2025
449ad57
Updated verification keys and verifiers.
mm-zk Jul 31, 2025
a4bc4eb
add v27->v28 patched upgrade
kelemeno Jul 31, 2025
47e6bdb
copy patched v28
kelemeno Jul 31, 2025
d2278d4
Merge branch 'mmzk_v28_keys_updated' of ssh://github.com/matter-labs/…
kelemeno Jul 31, 2025
e417fc4
push changes
kelemeno Jul 31, 2025
fbcdc96
further script fixes
kelemeno Jul 31, 2025
33b5cf9
verification logs and small cleanup
kelemeno Jul 31, 2025
3d42d6d
more empty calls
kelemeno Jul 31, 2025
77d8361
redo verifiers
kelemeno Jul 31, 2025
a8eedd6
for stage only do l1 upgrade
kelemeno Jul 31, 2025
556419f
more fixes and cleanup
kelemeno Jul 31, 2025
052fd6c
more fixes
kelemeno Jul 31, 2025
154fed2
hashes
kelemeno Jul 31, 2025
89a0a1c
updated readme
mm-zk Jul 31, 2025
c9c2101
Added mainnet and testnet inputs
mm-zk Jul 31, 2025
b75c6a6
dry run on testnet
mm-zk Jul 31, 2025
6754d81
fix dualVerifier input issue
kelemeno Jul 31, 2025
79efc08
add example of how to do upgrade in mainnet
mm-zk Jul 31, 2025
a62f5b0
pushed testnet and mainnet verifiers on gateways
mm-zk Jul 31, 2025
865f4b4
default upgrade for testnet
kelemeno Jul 31, 2025
7a95976
Merge branch 'kl/v28-1' of ssh://github.com/matter-labs/era-contracts…
kelemeno Jul 31, 2025
4186d72
more fixes, logs, tomls
kelemeno Jul 31, 2025
7a982c7
Mainnet, more fixes logs, and toml
kelemeno Aug 1, 2025
4b1c52b
small manual deployments
kelemeno Sep 5, 2025
96db3dd
add v28.2
kelemeno Sep 22, 2025
487db29
small renamings
kelemeno Sep 23, 2025
4485745
v28.2
zkzoomer Sep 23, 2025
2e721ed
hashes
kelemeno Sep 23, 2025
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
42 changes: 21 additions & 21 deletions AllContractsHashes.json
Original file line number Diff line number Diff line change
Expand Up @@ -937,11 +937,11 @@
},
{
"contractName": "l1-contracts/DualVerifier",
"zkBytecodeHash": "0x010000d30ce4136267fe968979e2e98f302610cdb363f85f63a1fc9816f8c52a",
"zkBytecodeHash": "0x010000d3c06e63598507ffd2a2de4332d97d164ce069933b68099238db95e2a8",
"zkBytecodePath": "/l1-contracts/zkout/DualVerifier.sol/DualVerifier.json",
"evmBytecodeHash": "0x17fd693bea7c174575a0960c8b783e41c70b18dc408f848d9d333d1ae891f514",
"evmBytecodeHash": "0xd7e8a606d481e9f61dca3612cded3d234b9c3b80e012979ee0108081cfc22499",
"evmBytecodePath": "/l1-contracts/out/DualVerifier.sol/DualVerifier.json",
"evmDeployedBytecodeHash": "0xb3307c3c7badcaf429798fccb6dcabbb74f741f0ff635e1348d07f4ce8478e0e"
"evmDeployedBytecodeHash": "0x52ffe5d3bace1ee3e41e85cd6118799f74584d31bf1412666eb63ac4e876c7d1"
},
{
"contractName": "l1-contracts/DynamicIncrementalMerkle",
Expand Down Expand Up @@ -1025,11 +1025,11 @@
},
{
"contractName": "l1-contracts/GatewayCTMDeployer",
"zkBytecodeHash": "0x010003ed0bcb43ad14629b36c9446b5965b1869a113fd2bd5caabc223ee97332",
"zkBytecodeHash": "0x010003eda9b5525f832414b91902a9e6fa9830fa1bb8a272a0fcf1b8d19dff2a",
"zkBytecodePath": "/l1-contracts/zkout/GatewayCTMDeployer.sol/GatewayCTMDeployer.json",
"evmBytecodeHash": "0xb0e0df4ab5ea66ae746e03e91f3b947729688149e3f585c7ded97bc0b5615411",
"evmBytecodeHash": "0xc8fd83af834eef8049b4e43d9eeb0c262d7c258e47c5fa31eeca84c4b9ba1786",
"evmBytecodePath": "/l1-contracts/out/GatewayCTMDeployer.sol/GatewayCTMDeployer.json",
"evmDeployedBytecodeHash": "0x4292c805152ba6a92e40d47a5e03e0171b9358771925782711eb4e1aadc1d184"
"evmDeployedBytecodeHash": "0x9b3e3cdd8aba13d3774c974dbcb1de7e8a41995fad4262021f50032a2f55203b"
},
{
"contractName": "l1-contracts/GatewayTransactionFilterer",
Expand Down Expand Up @@ -1121,19 +1121,19 @@
},
{
"contractName": "l1-contracts/L1VerifierFflonk",
"zkBytecodeHash": "0x010009bfd544c0fafedf518944bc814a06b28bbb88224aed8d74d19cec3d982b",
"zkBytecodeHash": "0x010009bb13ee447bf201adcedfd3edefe26be40c1534ce0537f8250d9f608cce",
"zkBytecodePath": "/l1-contracts/zkout/L1VerifierFflonk.sol/L1VerifierFflonk.json",
"evmBytecodeHash": "0xc8472dbb6768bdd2ff66db95af75471c879cdf266866491f1261fb038eea4f65",
"evmBytecodeHash": "0xd8b17b3dcbf475610667cb52b7cb42d62c9245db50432111f489d91d143a72dd",
"evmBytecodePath": "/l1-contracts/out/L1VerifierFflonk.sol/L1VerifierFflonk.json",
"evmDeployedBytecodeHash": "0x7a90ab51401789d938cba9746a9ce346eb83f07c28d73a6a64ae8170879045e0"
"evmDeployedBytecodeHash": "0x3b33ba5cabec12cacf982138d9efa4f719c4a95dc357f352963a91964eab1872"
},
{
"contractName": "l1-contracts/L1VerifierPlonk",
"zkBytecodeHash": "0x01000dbbcf7703d7db99c4007645f2761f7a9d65bff63fedc98ab48ebf49ec68",
"zkBytecodeHash": "0x01000dbbfd0d0bd6676b2602f7d788f1e25059a237ae1d12b17cde0d30106e01",
"zkBytecodePath": "/l1-contracts/zkout/L1VerifierPlonk.sol/L1VerifierPlonk.json",
"evmBytecodeHash": "0xe5bc313c647e4e09df97fc65ab976c8269978ee3006b490ea4e17c88fee4053a",
"evmBytecodeHash": "0xdb69906628a7438f698fac4d6f69fe2260028a7bb3aa2a989a4970e13a880152",
"evmBytecodePath": "/l1-contracts/out/L1VerifierPlonk.sol/L1VerifierPlonk.json",
"evmDeployedBytecodeHash": "0x9e2d982d812614e9315c854d9bf7b13a28d71f43609ac5af9cb79c8485ee5b43"
"evmDeployedBytecodeHash": "0x4c27e5b06f0e2b6563d2a3331d4bb27bbc3da8f479ff1d3b887e22367bd9a049"
},
{
"contractName": "l1-contracts/L2AdminFactory",
Expand Down Expand Up @@ -1193,19 +1193,19 @@
},
{
"contractName": "l1-contracts/L2VerifierFflonk",
"zkBytecodeHash": "0x010009ed63bf50172f3e96e673d22a571f642f1fb4d03d46d6393deabe770eb6",
"zkBytecodeHash": "0x010009e7688c00245bb7fea217f21c715fc12524f8cd6ee772b9fce351e7c724",
"zkBytecodePath": "/l1-contracts/zkout/L2VerifierFflonk.sol/L2VerifierFflonk.json",
"evmBytecodeHash": "0x0889848661601a2535c5ba7e10e722d5276d65c75016a503cbca51db04e6d14c",
"evmBytecodeHash": "0xc1543b744cbd5127ed458d53c488f8adc1cfb6fa29594e44cdab546d2c41e7a9",
"evmBytecodePath": "/l1-contracts/out/L2VerifierFflonk.sol/L2VerifierFflonk.json",
"evmDeployedBytecodeHash": "0xda91cabde56063fe5faf06667ba1d070be6a39e5677a9fa015eafc137113ba27"
"evmDeployedBytecodeHash": "0x40f32a5545d895a8bffcdf1357118d53d990a388e5f99379df2c0610f8325de0"
},
{
"contractName": "l1-contracts/L2VerifierPlonk",
"zkBytecodeHash": "0x01000e176f9efebfe1b3a193ba398eb2b09e2290768e2bea53201177f2cc45b4",
"zkBytecodeHash": "0x01000e17a6180a6030aa9bc104dba94746553b97262b0f6be5c1edb16751443e",
"zkBytecodePath": "/l1-contracts/zkout/L2VerifierPlonk.sol/L2VerifierPlonk.json",
"evmBytecodeHash": "0x17c988ee73be6b005565c350724354a42cec2e398a5eae022d9e92a9712d4409",
"evmBytecodeHash": "0x5295e4d866fb816151251d3049950d53e794f576e1254f4c0da85b36dd6eea38",
"evmBytecodePath": "/l1-contracts/out/L2VerifierPlonk.sol/L2VerifierPlonk.json",
"evmDeployedBytecodeHash": "0x5e7c84743330846d1d3142aea3bfea483a186e7df20c4c192f4b2035499da965"
"evmDeployedBytecodeHash": "0xa6baea6e676548e94c1c62f91e93bdf1f4575602d1ebc4acbdac8301bffb3267"
},
{
"contractName": "l1-contracts/L2WrappedBaseToken",
Expand Down Expand Up @@ -1441,11 +1441,11 @@
},
{
"contractName": "l1-contracts/TestnetVerifier",
"zkBytecodeHash": "0x010000dddae4c0af9488e987126f63d930c1410bd910f2d77c028915da9f1d60",
"zkBytecodeHash": "0x010000dde061674df29d1165da637c9cf67f2ff64ba458eb48065e5039407ecf",
"zkBytecodePath": "/l1-contracts/zkout/TestnetVerifier.sol/TestnetVerifier.json",
"evmBytecodeHash": "0x32f36a7c8224ea7551605d5bb16733f583f87ef842088c80f6a736e3a1fea16d",
"evmBytecodeHash": "0x9df2c03808896b88c527eb3747ee0f28217af3ff82730b6abc3fbfaf4889fa29",
"evmBytecodePath": "/l1-contracts/out/TestnetVerifier.sol/TestnetVerifier.json",
"evmDeployedBytecodeHash": "0x6b0ca478943c7fb5e86ea20a9188eabf4e1c5df578b512fe02c45a9f54d46a29"
"evmDeployedBytecodeHash": "0x7cab229ca89ec7a06c02676bd33e4bbb5f7fc066a8094ad0b3741993aee1c344"
},
{
"contractName": "l1-contracts/TransactionValidator",
Expand Down
Binary file added audits/v28/ZKsync Crypto Precompile Audit.pdf
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file added audits/v28/pr-review.pdf
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ pragma solidity 0.8.28;

import {IVerifierV2} from "../chain-interfaces/IVerifierV2.sol";
import {IVerifier} from "../chain-interfaces/IVerifier.sol";
import {EmptyProofLength, UnknownVerifierType} from "../../common/L1ContractErrors.sol";
import {UnknownVerifierType, EmptyProofLength} from "../../common/L1ContractErrors.sol";

/// @title Dual Verifier
/// @author Matter Labs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {IVerifierV2} from "../chain-interfaces/IVerifierV2.sol";
/// @notice FFT inspired version of PlonK to optimize on-chain gas cost
/// @dev For better understanding of the protocol follow the below papers:
/// * Fflonk Paper: https://eprint.iacr.org/2021/1167
/// @dev Contract was generated from a verification key with a hash of 0x17e8d7931f1314431359233e65c22657a32c335205e3c24ce292c5819becfaa7
/// @dev Contract was generated from a verification key with a hash of 0x49eae0bf5c7ea580f4979b366e52b386adc5f42e2ce50fc1d3c4de9a86052bff
/// @custom:security-contact [email protected]
contract L1VerifierFflonk is IVerifierV2 {
// ================Constants================
Expand All @@ -24,8 +24,8 @@ contract L1VerifierFflonk is IVerifierV2 {
// ================Verification Key================
uint256 internal constant VK_NUM_INPUTS = 1;
// [C0]1 = qL(X^8)+ X*qR(X^8)+ X^2*qO(X^8)+ X^3*qM(X^8)+ X^4*qC(X^8)+ X^5*Sσ1(X^8)+ X^6*Sσ2(X^8)+ X^7*Sσ3(X^8)
uint256 internal constant VK_C0_G1_X = 0x19bd7a8cb4cb56772e1a67453c37c9657164a60b05a2d5dbe48de94b80a8563e;
uint256 internal constant VK_C0_G1_Y = 0x1891e1b2512fd626bdd1e82d967ef7f327610799c6548e71283c5b932eaf5370;
uint256 internal constant VK_C0_G1_X = 0x196013309322dc5ce901c20b2d8079da2a3d68cd8b98c943785298ead0b2ba4d;
uint256 internal constant VK_C0_G1_Y = 0x1d08f60c613bfe68af690cecb6f2232c28b7eaa8fc582f76cd7112a164211890;

// k1 = 5, k2 = 7
uint256 internal constant VK_NON_RESIDUES_0 = 0x05;
Expand Down Expand Up @@ -115,7 +115,7 @@ contract L1VerifierFflonk is IVerifierV2 {
uint256 internal constant TOTAL_LAGRANGE_BASIS_INVERSES_LENGTH = 18;

/// @inheritdoc IVerifierV2
function verificationKeyHash() external pure returns (bytes32) {
function verificationKeyHash() external pure returns (bytes32 vkHash) {
return
keccak256(
// solhint-disable-next-line func-named-parameters
Expand All @@ -125,28 +125,18 @@ contract L1VerifierFflonk is IVerifierV2 {
VK_C0_G1_Y,
VK_NON_RESIDUES_0,
VK_NON_RESIDUES_1,
_getG2Elements()
VK_G2_ELEMENT_0_X1,
VK_G2_ELEMENT_0_X2,
VK_G2_ELEMENT_0_Y1,
VK_G2_ELEMENT_0_Y2,
VK_G2_ELEMENT_1_X1,
VK_G2_ELEMENT_1_X2,
VK_G2_ELEMENT_1_Y1,
VK_G2_ELEMENT_1_Y2
)
);
}

/// @dev This breakdown is done to avoid stack-too-deep error
/// @return bytes memory The G2 elements
function _getG2Elements() internal pure returns (bytes memory) {
return
// solhint-disable-next-line func-named-parameters
abi.encodePacked(
VK_G2_ELEMENT_0_X1,
VK_G2_ELEMENT_0_X2,
VK_G2_ELEMENT_0_Y1,
VK_G2_ELEMENT_0_Y2,
VK_G2_ELEMENT_1_X1,
VK_G2_ELEMENT_1_X2,
VK_G2_ELEMENT_1_Y1,
VK_G2_ELEMENT_1_Y2
);
}

/// @inheritdoc IVerifierV2
function verify(
uint256[] calldata, // _publicInputs
Expand Down Expand Up @@ -535,9 +525,33 @@ contract L1VerifierFflonk is IVerifierV2 {
}

/**
* sma: TODO add description
* @dev Computes partial lagrange basis evaluations Li(y)_numerator = {i = [start..(start+num_polys))} & Li(y)_numerator {i = [(start+num_polys)..(start+(2*num_polys)))} using montgomery lagrange basis inverses sent with proof.
* For Li(y)_numerator{i = [start..(start+num_polys))}:
* Li(y)_numerator = w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys})))
* Li(y)_denominator = (num_polys * (h^{(2*num_polys)-1}-(h^{num_polys-1} * h_s^{num_polys})) * (y-(h*w_i)))
* Li(y) = Li(y)_numerator / Li(y)_denominator = (w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys})))) / (num_polys * (h^{(2*num_polys)-1}-(h^{num_polys-1} * h_s^{num_polys})) * (y-(h*w_i)))
*
* For Li(y)_numerator{i = [(start+num_polys)..(start+(2*num_polys)))}
* Li(y)_numerator = w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys})))
* Li(y)_denominator = (num_polys * (h_s^{(2*num_polys)-1}-(h_s^{num_polys-1} * h^{num_polys})) * (y-(h_s*w_i)))
* Li(y) = Li(y)_numerator / Li(y)_denominator = (w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys}))) ) / (num_polys * (h_s^{(2*num_polys)-1}-(h_s^{num_polys-1} * h^{num_polys})) * (y-(h_s*w_i)))
*
* Also calculates the products of the denominators of the lagrange basis evaluations:
* Li(y)_denominators_product = Li(y)_previous_denominators_product * (∏(Li(y)_denominator {i = [start..(start+num_polys))})) * (∏(Li(y)_denominator {i = [(start+num_polys)..(start+(2*num_polys)))}))
*/
function temp_name_inner_function(num_polys, h, h_shifted) -> constant_parts_0, constant_parts_1, t_0, t_1 {

function precompute_partial_lagrange_basis_evaluations_for_union_set(
start,
num_polys,
y,
omega,
h,
h_shifted,
product
) -> final_product {
if gt(add(start, mul(2, num_polys)), TOTAL_LAGRANGE_BASIS_INVERSES_LENGTH) {
revertWithMessage(32, "Precompute Eval. Error [PLBEIU1]")
}
let h_pows_0 := h
let h_pows_1 := h_shifted
let loop_length := sub(num_polys, 2)
Expand All @@ -550,8 +564,8 @@ contract L1VerifierFflonk is IVerifierV2 {
h_pows_0 := mulmod(h_pows_0, h, R_MOD)
h_pows_1 := mulmod(h_pows_1, h_shifted, R_MOD)
}
constant_parts_0 := h_pows_0
constant_parts_1 := h_pows_1
let constant_parts_0 := h_pows_0
let constant_parts_1 := h_pows_1
// h^{num_polys}
h_pows_0 := mulmod(h_pows_0, h, R_MOD)
// h_s^{num_polys}
Expand All @@ -569,9 +583,9 @@ contract L1VerifierFflonk is IVerifierV2 {
// y^{num_polys}
let t_2 := mload(add(OPS_Y_POWS, mul(num_polys, 0x20)))
// h^{num_polys} * h_s^{num_polys}
t_1 := mulmod(h_pows_0, h_pows_1, R_MOD)
let t_1 := mulmod(h_pows_0, h_pows_1, R_MOD)
// h^{num_polys} + h_s^{num_polys}
t_0 := addmod(h_pows_0, h_pows_1, R_MOD)
let t_0 := addmod(h_pows_0, h_pows_1, R_MOD)
// y^{num_polys} * (h^{num_polys} + h_s^{num_polys})
t_0 := mulmod(t_0, t_2, R_MOD)
// - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys}))
Expand Down Expand Up @@ -600,40 +614,9 @@ contract L1VerifierFflonk is IVerifierV2 {
constant_parts_1 := addmod(constant_parts_1, h_pows_1, R_MOD)
// num_polys * (h_s^{(2*num_polys)-1}-(h_s^{num_polys-1} * h^{num_polys}))
constant_parts_1 := mulmod(constant_parts_1, num_polys, R_MOD)
}

/**
* @dev Computes partial lagrange basis evaluations Li(y)_numerator = {i = [start..(start+num_polys))} & Li(y)_numerator {i = [(start+num_polys)..(start+(2*num_polys)))} using montgomery lagrange basis inverses sent with proof.
* For Li(y)_numerator{i = [start..(start+num_polys))}:
* Li(y)_numerator = w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys})))
* Li(y)_denominator = (num_polys * (h^{(2*num_polys)-1}-(h^{num_polys-1} * h_s^{num_polys})) * (y-(h*w_i)))
* Li(y) = Li(y)_numerator / Li(y)_denominator = (w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys})))) / (num_polys * (h^{(2*num_polys)-1}-(h^{num_polys-1} * h_s^{num_polys})) * (y-(h*w_i)))
*
* For Li(y)_numerator{i = [(start+num_polys)..(start+(2*num_polys)))}
* Li(y)_numerator = w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys})))
* Li(y)_denominator = (num_polys * (h_s^{(2*num_polys)-1}-(h_s^{num_polys-1} * h^{num_polys})) * (y-(h_s*w_i)))
* Li(y) = Li(y)_numerator / Li(y)_denominator = (w_i * (y^{2*num_polys} + (h^{num_polys} * h_s^{num_polys}) - (y^{num_polys} * (h^{num_polys} + h_s^{num_polys}))) ) / (num_polys * (h_s^{(2*num_polys)-1}-(h_s^{num_polys-1} * h^{num_polys})) * (y-(h_s*w_i)))
*
* Also calculates the products of the denominators of the lagrange basis evaluations:
* Li(y)_denominators_product = Li(y)_previous_denominators_product * (∏(Li(y)_denominator {i = [start..(start+num_polys))})) * (∏(Li(y)_denominator {i = [(start+num_polys)..(start+(2*num_polys)))}))
*/

function precompute_partial_lagrange_basis_evaluations_for_union_set(
start,
num_polys,
y,
omega,
h,
h_shifted,
interim_product
) -> final_product {
if gt(add(start, mul(2, num_polys)), TOTAL_LAGRANGE_BASIS_INVERSES_LENGTH) {
revertWithMessage(32, "Precompute Eval. Error [PLBEIU1]")
}

let constant_parts_0, constant_parts_1, t_0, t_1 := temp_name_inner_function(num_polys, h, h_shifted)

let current_omega := 1
let interim_product := product
for {
let i := 0
} lt(i, num_polys) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {IVerifier} from "../chain-interfaces/IVerifier.sol";
/// @notice Modified version of the Permutations over Lagrange-bases for Oecumenical Noninteractive arguments of
/// Knowledge (PLONK) verifier.
/// Modifications have been made to optimize the proof system for ZK chain circuits.
/// @dev Contract was generated from a verification key with a hash of 0xd90459c5b727b9ceeb2b6192d2953dbf05970edf090333b3ad3bcac1a1442b78
/// @dev Contract was generated from a verification key with a hash of 0x1ffc56111a5cfaf5db387f6a31408ad20217e9bc1f31f2f5c1bd38b0d6d7968b
/// @dev It uses a custom memory layout inside the inline assembly block. Each reserved memory cell is declared in the
/// constants below.
/// @dev For a better understanding of the verifier algorithm please refer to the following papers:
Expand Down Expand Up @@ -284,8 +284,8 @@ contract L1VerifierPlonk is IVerifier {
function _loadVerificationKey() internal pure virtual {
assembly {
// gate setup commitments
mstore(VK_GATE_SETUP_0_X_SLOT, 0x24e3eb5ec8decc0a0cc9d7652eb0e88d4ef64f59ffc6be78d7279e83d67713c1)
mstore(VK_GATE_SETUP_0_Y_SLOT, 0x0ecf4eb9866a9bd12e080dca7aaac2735fa016b40d055a8417294e1ffab49383)
mstore(VK_GATE_SETUP_0_X_SLOT, 0x0a04da14b87f44a2b1e8c3b4f4e39a14c0dd2e8bdb38d05b068800fca24be3ed)
mstore(VK_GATE_SETUP_0_Y_SLOT, 0x0bc51e8894d9270da4079ae6c6acd0502bd5c173a8b3f8ac76fe528560862f2b)
mstore(VK_GATE_SETUP_1_X_SLOT, 0x04659caf7b05471ba5ba85b1ab62267aa6c456836e625f169f7119d55b9462d2)
mstore(VK_GATE_SETUP_1_Y_SLOT, 0x0ea63403692148d2ad22189a1e5420076312f4d46e62036a043a6b0b84d5b410)
mstore(VK_GATE_SETUP_2_X_SLOT, 0x0e6696d09d65fce1e42805be03fca1f14aea247281f688981f925e77d4ce2291)
Expand All @@ -296,8 +296,8 @@ contract L1VerifierPlonk is IVerifier {
mstore(VK_GATE_SETUP_4_Y_SLOT, 0x22e404bc91350f3bc7daad1d1025113742436983c85eac5ab7b42221a181b81e)
mstore(VK_GATE_SETUP_5_X_SLOT, 0x0d9b29613037a5025655c82b143d2b7449c98f3aea358307c8529249cc54f3b9)
mstore(VK_GATE_SETUP_5_Y_SLOT, 0x15b3c4c946ad1babfc4c03ff7c2423fd354af3a9305c499b7fb3aaebe2fee746)
mstore(VK_GATE_SETUP_6_X_SLOT, 0x1b695865b5bb8e5bf2456d3cc4ef085ba8f85e588a50bcdc98dd04efc8f09e59)
mstore(VK_GATE_SETUP_6_Y_SLOT, 0x2c31aa6561f35253c2adf8bf3eb1d0a1e74bd6eaeef3db6be78651c74bb1b127)
mstore(VK_GATE_SETUP_6_X_SLOT, 0x08532fa83bfdb26399b55fddeec4b35aa83ab1bd79b095d8732613712daae577)
mstore(VK_GATE_SETUP_6_Y_SLOT, 0x1b92521d7adf52f1f808927ae7a18648cd33d0abb85c2fa0282c25df76595688)
mstore(VK_GATE_SETUP_7_X_SLOT, 0x283344a1ab3e55ecfd904d0b8e9f4faea338df5a4ead2fa9a42f0e103da40abc)
mstore(VK_GATE_SETUP_7_Y_SLOT, 0x223b37b83b9687512d322993edd70e508dd80adb10bcf7321a3cc8a44c269521)

Expand Down
Loading