chore(3704): Bump solidity version to 0.8.26 across the repository (#64)

* Bump solidity version to 0.8.26 across the repository

* Regenerated Verifiers

* bump solidity for other merged PRs

---------

Co-authored-by: thedarkjester <grant.southey@consensys.net>
Co-authored-by: The Dark Jester <thedarkjester@users.noreply.github.com>
This commit is contained in:
Victorien Gauch
2024-09-24 11:14:12 +02:00
committed by GitHub
parent a3e8dcea67
commit 65f7000f99
57 changed files with 211 additions and 183 deletions

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { LineaRollup } from "./LineaRollup.sol"; import { LineaRollup } from "./LineaRollup.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring generic errors. * @title Interface declaring generic errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring pre-existing cross-chain messaging functions, events and errors. * @title Interface declaring pre-existing cross-chain messaging functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring pre-existing pausing functions, events and errors. * @title Interface declaring pre-existing pausing functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring permissions manager related data types. * @title Interface declaring permissions manager related data types.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring rate limiting messaging functions, events and errors. * @title Interface declaring rate limiting messaging functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title L1 Message manager interface for current functions, events and errors. * @title L1 Message manager interface for current functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title L1 Message manager V1 interface for pre-existing functions, events and errors. * @title L1 Message manager V1 interface for pre-existing functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title L1 Message Service interface for pre-existing functions, events and errors. * @title L1 Message Service interface for pre-existing functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { IPauseManager } from "../../interfaces/IPauseManager.sol"; import { IPauseManager } from "../../interfaces/IPauseManager.sol";
import { IPermissionsManager } from "../../interfaces/IPermissionsManager.sol"; import { IPermissionsManager } from "../../interfaces/IPermissionsManager.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Interface declaring verifier functions. * @title Interface declaring verifier functions.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title ZkEvm rollup interface for pre-existing functions, events and errors. * @title ZkEvm rollup interface for pre-existing functions, events and errors.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Interface declaring IRecoverFunds errors and functions. * @title Interface declaring IRecoverFunds errors and functions.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
library Utils { library Utils {
/** /**

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { IMessageService } from "../interfaces/IMessageService.sol"; import { IMessageService } from "../interfaces/IMessageService.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol"; import { BitMaps } from "@openzeppelin/contracts/utils/structs/BitMaps.sol";
import { L1MessageManagerV1 } from "./v1/L1MessageManagerV1.sol"; import { L1MessageManagerV1 } from "./v1/L1MessageManagerV1.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import { L1MessageServiceV1 } from "./v1/L1MessageServiceV1.sol"; import { L1MessageServiceV1 } from "./v1/L1MessageServiceV1.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { TransientStorageHelpers } from "../lib/TransientStorageHelpers.sol"; import { TransientStorageHelpers } from "../lib/TransientStorageHelpers.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { IL1MessageManagerV1 } from "../../../interfaces/l1/IL1MessageManagerV1.sol"; import { IL1MessageManagerV1 } from "../../../interfaces/l1/IL1MessageManagerV1.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { PauseManager } from "../../../lib/PauseManager.sol"; import { PauseManager } from "../../../lib/PauseManager.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Library to hash messages. * @title Library to hash messages.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Library to verify sparse merkle proofs and to get the leaf hash value * @title Library to verify sparse merkle proofs and to get the leaf hash value

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { TimelockController } from "@openzeppelin/contracts/governance/TimelockController.sol"; import { TimelockController } from "@openzeppelin/contracts/governance/TimelockController.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Library that provides helper functions to interact with transient storage. * @title Library that provides helper functions to interact with transient storage.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { IPlonkVerifier } from "../interfaces/l1/IPlonkVerifier.sol"; import { IPlonkVerifier } from "../interfaces/l1/IPlonkVerifier.sol";

View File

@@ -1440,7 +1440,7 @@ abstract contract ReentrancyGuardUpgradeable is Initializable {
// File contracts/interfaces/l1/ILineaRollup.sol // File contracts/interfaces/l1/ILineaRollup.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title LineaRollup interface for current functions, events and errors. * @title LineaRollup interface for current functions, events and errors.
@@ -1745,7 +1745,7 @@ interface ILineaRollup {
// File contracts/interfaces/IGenericErrors.sol // File contracts/interfaces/IGenericErrors.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring generic errors. * @title Interface declaring generic errors.
@@ -1762,7 +1762,7 @@ interface IGenericErrors {
// File contracts/interfaces/l1/IL1MessageService.sol // File contracts/interfaces/l1/IL1MessageService.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title L1 Message Service interface for pre-existing functions, events and errors. * @title L1 Message Service interface for pre-existing functions, events and errors.
@@ -1873,7 +1873,7 @@ library BitMaps {
// File contracts/interfaces/l1/IL1MessageManager.sol // File contracts/interfaces/l1/IL1MessageManager.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title L1 Message manager interface for current functions, events and errors. * @title L1 Message manager interface for current functions, events and errors.
@@ -1929,7 +1929,7 @@ interface IL1MessageManager {
// File contracts/lib/Utils.sol // File contracts/lib/Utils.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
library Utils { library Utils {
/** /**
@@ -1950,7 +1950,7 @@ library Utils {
// File contracts/interfaces/l1/IL1MessageManagerV1.sol // File contracts/interfaces/l1/IL1MessageManagerV1.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title L1 Message manager V1 interface for pre-existing functions, events and errors. * @title L1 Message manager V1 interface for pre-existing functions, events and errors.
@@ -1991,7 +1991,7 @@ interface IL1MessageManagerV1 {
// File contracts/messageService/l1/v1/L1MessageManagerV1.sol // File contracts/messageService/l1/v1/L1MessageManagerV1.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Contract to manage cross-chain message hashes storage and status on L1. * @title Contract to manage cross-chain message hashes storage and status on L1.
@@ -2041,7 +2041,7 @@ abstract contract L1MessageManagerV1 is IL1MessageManagerV1 {
// File contracts/messageService/l1/L1MessageManager.sol // File contracts/messageService/l1/L1MessageManager.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Contract to manage cross-chain message rolling hash computation and storage on L1. * @title Contract to manage cross-chain message rolling hash computation and storage on L1.
@@ -2138,7 +2138,7 @@ abstract contract L1MessageManager is L1MessageManagerV1, IL1MessageManager {
// File contracts/interfaces/IMessageService.sol // File contracts/interfaces/IMessageService.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring pre-existing cross-chain messaging functions, events and errors. * @title Interface declaring pre-existing cross-chain messaging functions, events and errors.
@@ -2236,7 +2236,7 @@ interface IMessageService {
// File contracts/interfaces/IPauseManager.sol // File contracts/interfaces/IPauseManager.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring pre-existing pausing functions, events and errors. * @title Interface declaring pre-existing pausing functions, events and errors.
@@ -2272,7 +2272,7 @@ interface IPauseManager {
// File contracts/messageService/lib/PauseManager.sol // File contracts/messageService/lib/PauseManager.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Contract to manage cross-chain function pausing. * @title Contract to manage cross-chain function pausing.
@@ -2390,7 +2390,7 @@ abstract contract PauseManager is Initializable, IPauseManager, AccessControlUpg
// File contracts/interfaces/IRateLimiter.sol // File contracts/interfaces/IRateLimiter.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Interface declaring rate limiting messaging functions, events and errors. * @title Interface declaring rate limiting messaging functions, events and errors.
@@ -2458,7 +2458,7 @@ interface IRateLimiter {
// File contracts/messageService/lib/RateLimiter.sol // File contracts/messageService/lib/RateLimiter.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
/** /**
* @title Rate Limiter by period and amount using the block timestamp. * @title Rate Limiter by period and amount using the block timestamp.
@@ -2575,7 +2575,7 @@ contract RateLimiter is Initializable, IRateLimiter, AccessControlUpgradeable {
// File contracts/messageService/l1/v1/L1MessageServiceV1.sol // File contracts/messageService/l1/v1/L1MessageServiceV1.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Contract to manage cross-chain messaging on L1. * @title Contract to manage cross-chain messaging on L1.
@@ -2710,7 +2710,7 @@ abstract contract L1MessageServiceV1 is
// File contracts/messageService/lib/SparseMerkleTreeVerifier.sol // File contracts/messageService/lib/SparseMerkleTreeVerifier.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Library to verify sparse merkle proofs and to get the leaf hash value * @title Library to verify sparse merkle proofs and to get the leaf hash value
@@ -2760,7 +2760,7 @@ library SparseMerkleTreeVerifier {
// File contracts/messageService/l1/L1MessageService.sol // File contracts/messageService/l1/L1MessageService.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Contract to manage cross-chain messaging on L1. * @title Contract to manage cross-chain messaging on L1.
@@ -2919,7 +2919,7 @@ abstract contract L1MessageService is
// File contracts/interfaces/l1/IPlonkVerifier.sol // File contracts/interfaces/l1/IPlonkVerifier.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Interface declaring verifier functions. * @title Interface declaring verifier functions.
@@ -2938,7 +2938,7 @@ interface IPlonkVerifier {
// File contracts/interfaces/l1/IZkEvmV2.sol // File contracts/interfaces/l1/IZkEvmV2.sol
// Original license: SPDX_License_Identifier: Apache-2.0 // Original license: SPDX_License_Identifier: Apache-2.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title ZkEvm rollup interface for pre-existing functions, events and errors. * @title ZkEvm rollup interface for pre-existing functions, events and errors.
@@ -2987,7 +2987,7 @@ interface IZkEvmV2 {
// File contracts/ZkEvmV2.sol // File contracts/ZkEvmV2.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Contract to manage cross-chain messaging on L1 and rollup proving. * @title Contract to manage cross-chain messaging on L1 and rollup proving.
@@ -3049,7 +3049,7 @@ abstract contract ZkEvmV2 is Initializable, AccessControlUpgradeable, L1MessageS
// File contracts/LineaRollup.sol // File contracts/LineaRollup.sol
// Original license: SPDX_License_Identifier: AGPL-3.0 // Original license: SPDX_License_Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
/** /**
* @title Contract to manage cross-chain messaging on L1 and rollup proving. * @title Contract to manage cross-chain messaging on L1 and rollup proving.

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { IPlonkVerifier } from "../interfaces/l1/IPlonkVerifier.sol"; import { IPlonkVerifier } from "../interfaces/l1/IPlonkVerifier.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { IMessageService } from "../interfaces/IMessageService.sol"; import { IMessageService } from "../interfaces/IMessageService.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
contract TestEIP4844 { contract TestEIP4844 {
event BlobHashEvent(bytes32 blobHash); event BlobHashEvent(bytes32 blobHash);

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
interface ITestExternalCalls { interface ITestExternalCalls {
function revertWithError() external pure; function revertWithError() external pure;

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { L1MessageManager } from "../messageService/l1/L1MessageManager.sol"; import { L1MessageManager } from "../messageService/l1/L1MessageManager.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { L1MessageService } from "../messageService/l1/L1MessageService.sol"; import { L1MessageService } from "../messageService/l1/L1MessageService.sol";
import { TestSetPauseTypeRoles } from "./TestSetPauseTypeRoles.sol"; import { TestSetPauseTypeRoles } from "./TestSetPauseTypeRoles.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { L1MessageService } from "../messageService/l1/L1MessageService.sol"; import { L1MessageService } from "../messageService/l1/L1MessageService.sol";
import { IL1MessageService } from "../interfaces/l1/IL1MessageService.sol"; import { IL1MessageService } from "../interfaces/l1/IL1MessageService.sol";

View File

@@ -1,6 +1,6 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
contract TestL1RevertContract { contract TestL1RevertContract {
function errorWithMessage() external pure { function errorWithMessage() external pure {

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { LineaRollup } from "../LineaRollup.sol"; import { LineaRollup } from "../LineaRollup.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { MessageServiceBase } from "../messageService/MessageServiceBase.sol"; import { MessageServiceBase } from "../messageService/MessageServiceBase.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { PauseManager } from "../lib/PauseManager.sol"; import { PauseManager } from "../lib/PauseManager.sol";
import { TestSetPauseTypeRoles } from "./TestSetPauseTypeRoles.sol"; import { TestSetPauseTypeRoles } from "./TestSetPauseTypeRoles.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { IPlonkVerifier } from "../interfaces/l1/IPlonkVerifier.sol"; import { IPlonkVerifier } from "../interfaces/l1/IPlonkVerifier.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
import { RateLimiter } from "../messageService/lib/RateLimiter.sol"; import { RateLimiter } from "../messageService/lib/RateLimiter.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { PauseManager } from "../lib/PauseManager.sol"; import { PauseManager } from "../lib/PauseManager.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { SparseMerkleTreeVerifier } from "../messageService/lib/SparseMerkleTreeVerifier.sol"; import { SparseMerkleTreeVerifier } from "../messageService/lib/SparseMerkleTreeVerifier.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { Utils } from "../lib/Utils.sol"; import { Utils } from "../lib/Utils.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
pragma solidity >=0.8.19 <=0.8.24; pragma solidity >=0.8.19 <=0.8.26;
import { IMessageService } from "../../../interfaces/IMessageService.sol"; import { IMessageService } from "../../../interfaces/IMessageService.sol";
import { IGenericErrors } from "../../../interfaces/IGenericErrors.sol"; import { IGenericErrors } from "../../../interfaces/IGenericErrors.sol";

View File

@@ -1,5 +1,5 @@
// SPDX-License-Identifier: AGPL-3.0 // SPDX-License-Identifier: AGPL-3.0
pragma solidity 0.8.24; pragma solidity 0.8.26;
import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import { AccessControlUpgradeable } from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol";
import { IGenericErrors } from "../interfaces/IGenericErrors.sol"; import { IGenericErrors } from "../interfaces/IGenericErrors.sol";

View File

@@ -16,7 +16,7 @@
// Code generated by gnark DO NOT EDIT // Code generated by gnark DO NOT EDIT
pragma solidity 0.8.24; pragma solidity 0.8.26;
contract PlonkVerifierDev { contract PlonkVerifierDev {
uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;

View File

@@ -16,7 +16,7 @@
// Code generated by gnark DO NOT EDIT // Code generated by gnark DO NOT EDIT
pragma solidity 0.8.24; pragma solidity 0.8.26;
contract PlonkVerifierForDataAggregation { contract PlonkVerifierForDataAggregation {
uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
@@ -73,6 +73,9 @@ contract PlonkVerifierForDataAggregation {
// ------------------------------------------------ // ------------------------------------------------
// size of the proof without call custom gate
uint256 private constant FIXED_PROOF_SIZE = 0x300;
// offset proof // offset proof
uint256 private constant PROOF_L_COM_X = 0x0; uint256 private constant PROOF_L_COM_X = 0x0;
@@ -83,14 +86,14 @@ contract PlonkVerifierForDataAggregation {
uint256 private constant PROOF_O_COM_Y = 0xa0; uint256 private constant PROOF_O_COM_Y = 0xa0;
// h = h_0 + x^{n+2}h_1 + x^{2(n+2)}h_2 // h = h_0 + x^{n+2}h_1 + x^{2(n+2)}h_2
uint256 private constant PROOF_H_0_X = 0xc0; uint256 private constant PROOF_H_0_COM_X = 0xc0;
uint256 private constant PROOF_H_0_Y = 0xe0; uint256 private constant PROOF_H_0_COM_Y = 0xe0;
uint256 private constant PROOF_H_1_X = 0x100; uint256 private constant PROOF_H_1_COM_X = 0x100;
uint256 private constant PROOF_H_1_Y = 0x120; uint256 private constant PROOF_H_1_COM_Y = 0x120;
uint256 private constant PROOF_H_2_X = 0x140; uint256 private constant PROOF_H_2_COM_X = 0x140;
uint256 private constant PROOF_H_2_Y = 0x160; uint256 private constant PROOF_H_2_COM_Y = 0x160;
// wire values at zeta // "evaluations of wire polynomials at zeta
uint256 private constant PROOF_L_AT_ZETA = 0x180; uint256 private constant PROOF_L_AT_ZETA = 0x180;
uint256 private constant PROOF_R_AT_ZETA = 0x1a0; uint256 private constant PROOF_R_AT_ZETA = 0x1a0;
uint256 private constant PROOF_O_AT_ZETA = 0x1c0; uint256 private constant PROOF_O_AT_ZETA = 0x1c0;
@@ -115,9 +118,6 @@ contract PlonkVerifierForDataAggregation {
uint256 private constant PROOF_OPENING_QCP_AT_ZETA = 0x300; uint256 private constant PROOF_OPENING_QCP_AT_ZETA = 0x300;
uint256 private constant PROOF_BSB_COMMITMENTS = 0x320; uint256 private constant PROOF_BSB_COMMITMENTS = 0x320;
// -> next part of proof is
// [ openings_selector_commits || commitments_wires_commit_api]
// -------- offset state // -------- offset state
// challenges to check the claimed quotient // challenges to check the claimed quotient
@@ -133,7 +133,7 @@ contract PlonkVerifierForDataAggregation {
uint256 private constant STATE_LINEARISED_POLYNOMIAL_Y = 0x100; uint256 private constant STATE_LINEARISED_POLYNOMIAL_Y = 0x100;
uint256 private constant STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA = 0x120; uint256 private constant STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA = 0x120;
uint256 private constant STATE_FOLDED_CLAIMED_VALUES = 0x140; // Folded proof for the opening of H, linearised poly, l, r, o, s_1, s_2, qcp uint256 private constant STATE_FOLDED_CLAIMED_VALUES = 0x140; // Folded proof for the opening of H, linearised poly, l, r, o, s_1, s_2, qcp
uint256 private constant STATE_FOLDED_DIGESTS_X = 0x160; // folded digests of H, linearised poly, l, r, o, s_1, s_2, qcp uint256 private constant STATE_FOLDED_DIGESTS_X = 0x160; // linearised poly, l, r, o, s_1, s_2, qcp
uint256 private constant STATE_FOLDED_DIGESTS_Y = 0x180; uint256 private constant STATE_FOLDED_DIGESTS_Y = 0x180;
uint256 private constant STATE_PI = 0x1a0; uint256 private constant STATE_PI = 0x1a0;
uint256 private constant STATE_ZETA_POWER_N_MINUS_ONE = 0x1c0; uint256 private constant STATE_ZETA_POWER_N_MINUS_ONE = 0x1c0;
@@ -161,6 +161,7 @@ contract PlonkVerifierForDataAggregation {
uint8 private constant HASH_FR_TWO = 2; uint8 private constant HASH_FR_TWO = 2;
// -------- precompiles // -------- precompiles
uint8 private constant SHA2 = 0x2;
uint8 private constant MOD_EXP = 0x5; uint8 private constant MOD_EXP = 0x5;
uint8 private constant EC_ADD = 0x6; uint8 private constant EC_ADD = 0x6;
uint8 private constant EC_MUL = 0x7; uint8 private constant EC_MUL = 0x7;
@@ -201,7 +202,7 @@ contract PlonkVerifierForDataAggregation {
mstore(add(mem, STATE_PI), l_pi) mstore(add(mem, STATE_PI), l_pi)
compute_alpha_square_lagrange_0() compute_alpha_square_lagrange_0()
verify_opening_linearised_polynomial(proof.offset) compute_opening_linearised_polynomial(proof.offset)
fold_h(proof.offset) fold_h(proof.offset)
compute_commitment_linearised_polynomial(proof.offset) compute_commitment_linearised_polynomial(proof.offset)
compute_gamma_kzg(proof.offset) compute_gamma_kzg(proof.offset)
@@ -221,6 +222,16 @@ contract PlonkVerifierForDataAggregation {
revert(ptError, 0x64) revert(ptError, 0x64)
} }
/// Called when an exponentiation mod r fails
function error_mod_exp() {
let ptError := mload(0x40)
mstore(ptError, ERROR_STRING_ID) // selector for function Error(string)
mstore(add(ptError, 0x4), 0x20)
mstore(add(ptError, 0x24), 0xc)
mstore(add(ptError, 0x44), "error mod exp")
revert(ptError, 0x64)
}
/// Called when an operation on Bn254 fails /// Called when an operation on Bn254 fails
/// @dev for instance when calling EcMul on a point not on Bn254. /// @dev for instance when calling EcMul on a point not on Bn254.
function error_ec_op() { function error_ec_op() {
@@ -321,7 +332,7 @@ contract PlonkVerifierForDataAggregation {
/// Checks if the proof is of the correct size /// Checks if the proof is of the correct size
/// @param actual_proof_size size of the proof (not the expected size) /// @param actual_proof_size size of the proof (not the expected size)
function check_proof_size(actual_proof_size) { function check_proof_size(actual_proof_size) {
let expected_proof_size := add(0x300, mul(VK_NB_CUSTOM_GATES, 0x60)) let expected_proof_size := add(FIXED_PROOF_SIZE, mul(VK_NB_CUSTOM_GATES, 0x60))
if iszero(eq(actual_proof_size, expected_proof_size)) { if iszero(eq(actual_proof_size, expected_proof_size)) {
error_proof_size() error_proof_size()
} }
@@ -405,9 +416,6 @@ contract PlonkVerifierForDataAggregation {
let state := mload(0x40) let state := mload(0x40)
let mPtr := add(state, STATE_LAST_MEM) let mPtr := add(state, STATE_LAST_MEM)
// gamma
// gamma in ascii is [0x67,0x61,0x6d, 0x6d, 0x61]
// (same for alpha, beta, zeta)
mstore(mPtr, FS_GAMMA) // "gamma" mstore(mPtr, FS_GAMMA) // "gamma"
mstore(add(mPtr, 0x20), VK_S1_COM_X) mstore(add(mPtr, 0x20), VK_S1_COM_X)
@@ -448,7 +456,7 @@ contract PlonkVerifierForDataAggregation {
let size := add(0x2c5, size_pi_in_bytes) let size := add(0x2c5, size_pi_in_bytes)
size := add(size, mul(VK_NB_CUSTOM_GATES, 0x40)) size := add(size, mul(VK_NB_CUSTOM_GATES, 0x40))
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1b), size, mPtr, 0x20) //0x1b -> 000.."gamma" let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1b), size, mPtr, 0x20) //0x1b -> 000.."gamma"
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -468,7 +476,7 @@ contract PlonkVerifierForDataAggregation {
// beta // beta
mstore(mPtr, FS_BETA) // "beta" mstore(mPtr, FS_BETA) // "beta"
mstore(add(mPtr, 0x20), gamma_not_reduced) mstore(add(mPtr, 0x20), gamma_not_reduced)
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1c), 0x24, mPtr, 0x20) //0x1b -> 000.."gamma" let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1c), 0x24, mPtr, 0x20) //0x1b -> 000.."gamma"
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -503,7 +511,7 @@ contract PlonkVerifierForDataAggregation {
// [Z], the commitment to the grand product polynomial // [Z], the commitment to the grand product polynomial
calldatacopy(_mPtr, add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X), 0x40) calldatacopy(_mPtr, add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X), 0x40)
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1b), full_size, mPtr, 0x20) let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1b), full_size, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -524,8 +532,8 @@ contract PlonkVerifierForDataAggregation {
// zeta // zeta
mstore(mPtr, FS_ZETA) // "zeta" mstore(mPtr, FS_ZETA) // "zeta"
mstore(add(mPtr, 0x20), alpha_not_reduced) mstore(add(mPtr, 0x20), alpha_not_reduced)
calldatacopy(add(mPtr, 0x40), add(aproof, PROOF_H_0_X), 0xc0) calldatacopy(add(mPtr, 0x40), add(aproof, PROOF_H_0_COM_X), 0xc0)
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1c), 0xe4, mPtr, 0x20) let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1c), 0xe4, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -566,28 +574,28 @@ contract PlonkVerifierForDataAggregation {
/// batch_compute_lagranges_at_z computes [L_0(z), .., L_{n-1}(z)] /// batch_compute_lagranges_at_z computes [L_0(z), .., L_{n-1}(z)]
/// @param z point at which the Lagranges are evaluated /// @param z point at which the Lagranges are evaluated
/// @param zpnmo ζⁿ-1 /// @param zpnmo ζⁿ-1
/// @param n number of public inputs (number of Lagranges to compute) /// @param n_pub number of public inputs (number of Lagranges to compute)
/// @param mPtr pointer to which the results are stored /// @param mPtr pointer to which the results are stored
function batch_compute_lagranges_at_z(z, zpnmo, n, mPtr) { function batch_compute_lagranges_at_z(z, zpnmo, n_pub, mPtr) {
let zn := mulmod(zpnmo, VK_INV_DOMAIN_SIZE, R_MOD) // 1/n * (ζⁿ - 1) let zn := mulmod(zpnmo, VK_INV_DOMAIN_SIZE, R_MOD) // 1/n * (ζⁿ - 1)
let _w := 1 let _w := 1
let _mPtr := mPtr let _mPtr := mPtr
for { for {
let i := 0 let i := 0
} lt(i, n) { } lt(i, n_pub) {
i := add(i, 1) i := add(i, 1)
} { } {
mstore(_mPtr, addmod(z, sub(R_MOD, _w), R_MOD)) mstore(_mPtr, addmod(z, sub(R_MOD, _w), R_MOD))
_w := mulmod(_w, VK_OMEGA, R_MOD) _w := mulmod(_w, VK_OMEGA, R_MOD)
_mPtr := add(_mPtr, 0x20) _mPtr := add(_mPtr, 0x20)
} }
batch_invert(mPtr, n, _mPtr) batch_invert(mPtr, n_pub, _mPtr)
_mPtr := mPtr _mPtr := mPtr
_w := 1 _w := 1
for { for {
let i := 0 let i := 0
} lt(i, n) { } lt(i, n_pub) {
i := add(i, 1) i := add(i, 1)
} { } {
mstore(_mPtr, mulmod(mulmod(mload(_mPtr), zn, R_MOD), _w, R_MOD)) mstore(_mPtr, mulmod(mulmod(mload(_mPtr), zn, R_MOD), _w, R_MOD))
@@ -648,7 +656,6 @@ contract PlonkVerifierForDataAggregation {
h_fr := hash_fr(calldataload(p), calldataload(add(p, 0x20)), mPtr) h_fr := hash_fr(calldataload(p), calldataload(add(p, 0x20)), mPtr)
ith_lagrange := compute_ith_lagrange_at_z(z, zpnmo, add(nb_public_inputs, VK_INDEX_COMMIT_API_0), mPtr) ith_lagrange := compute_ith_lagrange_at_z(z, zpnmo, add(nb_public_inputs, VK_INDEX_COMMIT_API_0), mPtr)
pi_commit := addmod(pi_commit, mulmod(h_fr, ith_lagrange, R_MOD), R_MOD) pi_commit := addmod(pi_commit, mulmod(h_fr, ith_lagrange, R_MOD), R_MOD)
p := add(p, 0x40)
} }
/// Computes L_i(zeta) = ωⁱ/n * (ζⁿ-1)/(ζ-ωⁱ) where: /// Computes L_i(zeta) = ωⁱ/n * (ζⁿ-1)/(ζ-ωⁱ) where:
@@ -704,7 +711,7 @@ contract PlonkVerifierForDataAggregation {
// size domain // size domain
mstore8(add(mPtr, 0x8e), HASH_FR_SIZE_DOMAIN) mstore8(add(mPtr, 0x8e), HASH_FR_SIZE_DOMAIN)
let l_success := staticcall(gas(), 0x2, mPtr, 0x8f, mPtr, 0x20) let l_success := staticcall(gas(), SHA2, mPtr, 0x8f, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -728,7 +735,7 @@ contract PlonkVerifierForDataAggregation {
mstore8(add(mPtr, 0x2b), 0x6b) mstore8(add(mPtr, 0x2b), 0x6b)
mstore8(add(mPtr, 0x2c), HASH_FR_SIZE_DOMAIN) // size domain mstore8(add(mPtr, 0x2c), HASH_FR_SIZE_DOMAIN) // size domain
l_success := staticcall(gas(), 0x2, mPtr, 0x2d, mPtr, 0x20) l_success := staticcall(gas(), SHA2, mPtr, 0x2d, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -755,14 +762,14 @@ contract PlonkVerifierForDataAggregation {
mstore8(add(mPtr, 0x4c), HASH_FR_SIZE_DOMAIN) // size domain mstore8(add(mPtr, 0x4c), HASH_FR_SIZE_DOMAIN) // size domain
let offset := add(mPtr, 0x20) let offset := add(mPtr, 0x20)
l_success := staticcall(gas(), 0x2, offset, 0x2d, offset, 0x20) l_success := staticcall(gas(), SHA2, offset, 0x2d, offset, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
// at this point we have mPtr = [ b1 || b2] where b1 is on 32byes and b2 in 16bytes. // at this point we have mPtr = [ b1 || b2] where b1 is on 32byes and b2 in 16bytes.
// we interpret it as a big integer mod r in big endian (similar to regular decimal notation) // we interpret it as a big integer mod r in big endian (similar to regular decimal notation)
// the result is then 2**(8*16)*mPtr[32:] + mPtr[32:48] // the result is then 2**(8*16)*mPtr[:32] + mPtr[32:48]
res := mulmod(mload(mPtr), HASH_FR_BB, R_MOD) // <- res = 2**128 * mPtr[:32] res := mulmod(mload(mPtr), HASH_FR_BB, R_MOD) // <- res = 2**128 * mPtr[:32]
let b1 := shr(128, mload(add(mPtr, 0x20))) // b1 <- [0, 0, .., 0 || b2[:16] ] let b1 := shr(128, mload(add(mPtr, 0x20))) // b1 <- [0, 0, .., 0 || b2[:16] ]
res := addmod(res, b1, R_MOD) res := addmod(res, b1, R_MOD)
@@ -802,7 +809,7 @@ contract PlonkVerifierForDataAggregation {
// derive a random number. As there is no random generator, we // derive a random number. As there is no random generator, we
// do an FS like challenge derivation, depending on both digests and // do an FS like challenge derivation, depending on both digests and
// ζ to ensure that the prover cannot control the random numger. // ζ to ensure that the prover cannot control the random number.
// Note: adding the other point ζω is not needed, as ω is known beforehand. // Note: adding the other point ζω is not needed, as ω is known beforehand.
mstore(mPtr, mload(add(state, STATE_FOLDED_DIGESTS_X))) mstore(mPtr, mload(add(state, STATE_FOLDED_DIGESTS_X)))
mstore(add(mPtr, 0x20), mload(add(state, STATE_FOLDED_DIGESTS_Y))) mstore(add(mPtr, 0x20), mload(add(state, STATE_FOLDED_DIGESTS_Y)))
@@ -814,7 +821,7 @@ contract PlonkVerifierForDataAggregation {
mstore(add(mPtr, 0xe0), calldataload(add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_Y))) mstore(add(mPtr, 0xe0), calldataload(add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_Y)))
mstore(add(mPtr, 0x100), mload(add(state, STATE_ZETA))) mstore(add(mPtr, 0x100), mload(add(state, STATE_ZETA)))
mstore(add(mPtr, 0x120), mload(add(state, STATE_GAMMA_KZG))) mstore(add(mPtr, 0x120), mload(add(state, STATE_GAMMA_KZG)))
let random := staticcall(gas(), 0x2, mPtr, 0x140, mPtr, 0x20) let random := staticcall(gas(), SHA2, mPtr, 0x140, mPtr, 0x20)
if iszero(random) { if iszero(random) {
error_random_generation() error_random_generation()
} }
@@ -864,6 +871,7 @@ contract PlonkVerifierForDataAggregation {
mstore(folded_quotients_y, sub(P_MOD, mload(folded_quotients_y))) mstore(folded_quotients_y, sub(P_MOD, mload(folded_quotients_y)))
mstore(mPtr, mload(folded_digests)) mstore(mPtr, mload(folded_digests))
mstore(add(mPtr, 0x20), mload(add(folded_digests, 0x20))) mstore(add(mPtr, 0x20), mload(add(folded_digests, 0x20)))
mstore(add(mPtr, 0x40), G2_SRS_0_X_0) // the 4 lines are the canonical G2 point on BN254 mstore(add(mPtr, 0x40), G2_SRS_0_X_0) // the 4 lines are the canonical G2 point on BN254
mstore(add(mPtr, 0x60), G2_SRS_0_X_1) mstore(add(mPtr, 0x60), G2_SRS_0_X_1)
@@ -895,7 +903,7 @@ contract PlonkVerifierForDataAggregation {
/// @notice Fold the opening proofs at ζ: /// @notice Fold the opening proofs at ζ:
/// * at state+state_folded_digest we store: [Linearised_polynomial]+γ[L] + γ²[R] + γ³[O] + γ⁴[S₁] +γ⁵[S₂] + ∑ᵢγ⁵⁺ⁱ[Pi_{i}] /// * at state+state_folded_digest we store: [Linearised_polynomial]+γ[L] + γ²[R] + γ³[O] + γ⁴[S₁] +γ⁵[S₂] + ∑ᵢγ⁵⁺ⁱ[Pi_{i}]
/// * at state+state_folded_claimed_values we store: H(ζ) + γLinearised_polynomial(ζ)+γ²L(ζ) + γ³R(ζ)+ γO(ζ) + γS₁(ζ) +γS₂(ζ) + ∑ᵢγ⁺ⁱPi_{i}(ζ) /// * at state+state_folded_claimed_values we store: Linearised_polynomial(ζ)+γL(ζ) + γ²R(ζ)+ γ³O(ζ) + γS₁(ζ) +γS₂(ζ) + ∑ᵢγ⁺ⁱPi_{i}(ζ)
/// @param aproof pointer to the proof /// @param aproof pointer to the proof
/// acc_gamma stores the γⁱ /// acc_gamma stores the γⁱ
function fold_state(aproof) { function fold_state(aproof) {
@@ -908,11 +916,11 @@ contract PlonkVerifierForDataAggregation {
let acc_gamma := l_gamma_kzg let acc_gamma := l_gamma_kzg
let state_folded_digests := add(state, STATE_FOLDED_DIGESTS_X) let state_folded_digests := add(state, STATE_FOLDED_DIGESTS_X)
mstore(add(state, STATE_FOLDED_DIGESTS_X), mload(add(state, STATE_LINEARISED_POLYNOMIAL_X))) mstore(state_folded_digests, mload(add(state, STATE_LINEARISED_POLYNOMIAL_X)))
mstore(add(state, STATE_FOLDED_DIGESTS_Y), mload(add(state, STATE_LINEARISED_POLYNOMIAL_Y))) mstore(add(state, STATE_FOLDED_DIGESTS_Y), mload(add(state, STATE_LINEARISED_POLYNOMIAL_Y)))
mstore(add(state, STATE_FOLDED_CLAIMED_VALUES), mload(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA))) mstore(add(state, STATE_FOLDED_CLAIMED_VALUES), mload(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA)))
point_acc_mul_calldata(add(state, STATE_FOLDED_DIGESTS_X), add(aproof, PROOF_L_COM_X), acc_gamma, mPtr) point_acc_mul_calldata(state_folded_digests, add(aproof, PROOF_L_COM_X), acc_gamma, mPtr)
fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_L_AT_ZETA), acc_gamma) fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_L_AT_ZETA), acc_gamma)
acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD)
@@ -993,11 +1001,11 @@ contract PlonkVerifierForDataAggregation {
mstore(_mPtr, calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA))) mstore(_mPtr, calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA)))
let start_input := 0x1b // 00.."gamma" let start_input := 0x1b // 00.."gamma"
let size_input := add(0x14, mul(VK_NB_CUSTOM_GATES, 3)) // number of 32bytes elmts = 0x17 (zeta+3*6 for the digests+openings) + 3*VK_NB_CUSTOM_GATES (for the commitments of the selectors) + 1 (opening of Z at ζω) let size_input := add(0x14, mul(VK_NB_CUSTOM_GATES, 3)) // number of 32bytes elmts = 0x14 (zeta+3*6 for the digests+openings) + 3*VK_NB_CUSTOM_GATES (for the commitments of the selectors) + 1 (opening of Z at ζω)
size_input := add(0x5, mul(size_input, 0x20)) // size in bytes: 15*32 bytes + 5 bytes for gamma size_input := add(0x5, mul(size_input, 0x20)) // size in bytes: 15*32 bytes + 5 bytes for gamma
let check_staticcall := staticcall( let check_staticcall := staticcall(
gas(), gas(),
0x2, SHA2,
add(mPtr, start_input), add(mPtr, start_input),
size_input, size_input,
add(state, STATE_GAMMA_KZG), add(state, STATE_GAMMA_KZG),
@@ -1144,7 +1152,7 @@ contract PlonkVerifierForDataAggregation {
compute_commitment_linearised_polynomial_ec(aproof, s1, s2) compute_commitment_linearised_polynomial_ec(aproof, s1, s2)
} }
/// @notice compute -z_h(ζ)*([H₁] + ζ⁺²[H₂] + ζ²⁽⁺²⁾[H₃]) and store the result at /// @notice compute -z_h(ζ)*([H₁] + ζ⁺²[H₂] + ζ²⁽⁺²⁾[H₃]) and store the result at
/// state + state_folded_h /// state + state_folded_h
/// @param aproof pointer to the proof /// @param aproof pointer to the proof
function fold_h(aproof) { function fold_h(aproof) {
@@ -1152,10 +1160,20 @@ contract PlonkVerifierForDataAggregation {
let n_plus_two := add(VK_DOMAIN_SIZE, 2) let n_plus_two := add(VK_DOMAIN_SIZE, 2)
let mPtr := add(mload(0x40), STATE_LAST_MEM) let mPtr := add(mload(0x40), STATE_LAST_MEM)
let zeta_power_n_plus_two := pow(mload(add(state, STATE_ZETA)), n_plus_two, mPtr) let zeta_power_n_plus_two := pow(mload(add(state, STATE_ZETA)), n_plus_two, mPtr)
point_mul_calldata(add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_2_X), zeta_power_n_plus_two, mPtr) point_mul_calldata(add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_2_COM_X), zeta_power_n_plus_two, mPtr)
point_add_calldata(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_1_X), mPtr) point_add_calldata(
add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X),
add(aproof, PROOF_H_1_COM_X),
mPtr
)
point_mul(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), zeta_power_n_plus_two, mPtr) point_mul(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), zeta_power_n_plus_two, mPtr)
point_add_calldata(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_0_X), mPtr) point_add_calldata(
add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X),
add(aproof, PROOF_H_0_COM_X),
mPtr
)
point_mul( point_mul(
add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X),
@@ -1170,7 +1188,7 @@ contract PlonkVerifierForDataAggregation {
/// @notice check that the opening of the linearised polynomial at zeta is equal to /// @notice check that the opening of the linearised polynomial at zeta is equal to
/// - [ PI(ζ) - α²*L₁(ζ) + α(l(ζ)+β*s1(ζ)+γ)(r(ζ)+β*s2(ζ)+γ)(o(ζ)+γ)*z(ωζ) ] /// - [ PI(ζ) - α²*L₁(ζ) + α(l(ζ)+β*s1(ζ)+γ)(r(ζ)+β*s2(ζ)+γ)(o(ζ)+γ)*z(ωζ) ]
/// @param aproof pointer to the proof /// @param aproof pointer to the proof
function verify_opening_linearised_polynomial(aproof) { function compute_opening_linearised_polynomial(aproof) {
let state := mload(0x40) let state := mload(0x40)
// (l(ζ)+β*s1(ζ)+γ) // (l(ζ)+β*s1(ζ)+γ)
@@ -1289,7 +1307,6 @@ contract PlonkVerifierForDataAggregation {
/// @param s scalar /// @param s scalar
/// @mPtr free memory /// @mPtr free memory
function point_acc_mul_calldata(dst, src, s, mPtr) { function point_acc_mul_calldata(dst, src, s, mPtr) {
let state := mload(0x40)
mstore(mPtr, calldataload(src)) mstore(mPtr, calldataload(src))
mstore(add(mPtr, 0x20), calldataload(add(src, 0x20))) mstore(add(mPtr, 0x20), calldataload(add(src, 0x20)))
mstore(add(mPtr, 0x40), s) mstore(add(mPtr, 0x40), s)
@@ -1324,7 +1341,7 @@ contract PlonkVerifierForDataAggregation {
mstore(add(mPtr, 0xa0), R_MOD) mstore(add(mPtr, 0xa0), R_MOD)
let check_staticcall := staticcall(gas(), MOD_EXP, mPtr, 0xc0, mPtr, 0x20) let check_staticcall := staticcall(gas(), MOD_EXP, mPtr, 0xc0, mPtr, 0x20)
if eq(check_staticcall, 0) { if eq(check_staticcall, 0) {
error_mod_exp()
} }
res := mload(mPtr) res := mload(mPtr)
} }

View File

@@ -16,7 +16,7 @@
// Code generated by gnark DO NOT EDIT // Code generated by gnark DO NOT EDIT
pragma solidity 0.8.24; pragma solidity 0.8.26;
contract PlonkVerifierForMultiTypeDataAggregation { contract PlonkVerifierForMultiTypeDataAggregation {
uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;

View File

@@ -16,7 +16,7 @@
// Code generated by gnark DO NOT EDIT // Code generated by gnark DO NOT EDIT
pragma solidity 0.8.24; pragma solidity ^0.8.0;
contract TestPlonkVerifierForDataAggregation { contract TestPlonkVerifierForDataAggregation {
uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617; uint256 private constant R_MOD = 21888242871839275222246405745257275088548364400416034343698204186575808495617;
@@ -73,6 +73,9 @@ contract TestPlonkVerifierForDataAggregation {
// ------------------------------------------------ // ------------------------------------------------
// size of the proof without call custom gate
uint256 private constant FIXED_PROOF_SIZE = 0x300;
// offset proof // offset proof
uint256 private constant PROOF_L_COM_X = 0x0; uint256 private constant PROOF_L_COM_X = 0x0;
@@ -83,14 +86,14 @@ contract TestPlonkVerifierForDataAggregation {
uint256 private constant PROOF_O_COM_Y = 0xa0; uint256 private constant PROOF_O_COM_Y = 0xa0;
// h = h_0 + x^{n+2}h_1 + x^{2(n+2)}h_2 // h = h_0 + x^{n+2}h_1 + x^{2(n+2)}h_2
uint256 private constant PROOF_H_0_X = 0xc0; uint256 private constant PROOF_H_0_COM_X = 0xc0;
uint256 private constant PROOF_H_0_Y = 0xe0; uint256 private constant PROOF_H_0_COM_Y = 0xe0;
uint256 private constant PROOF_H_1_X = 0x100; uint256 private constant PROOF_H_1_COM_X = 0x100;
uint256 private constant PROOF_H_1_Y = 0x120; uint256 private constant PROOF_H_1_COM_Y = 0x120;
uint256 private constant PROOF_H_2_X = 0x140; uint256 private constant PROOF_H_2_COM_X = 0x140;
uint256 private constant PROOF_H_2_Y = 0x160; uint256 private constant PROOF_H_2_COM_Y = 0x160;
// wire values at zeta // "evaluations of wire polynomials at zeta
uint256 private constant PROOF_L_AT_ZETA = 0x180; uint256 private constant PROOF_L_AT_ZETA = 0x180;
uint256 private constant PROOF_R_AT_ZETA = 0x1a0; uint256 private constant PROOF_R_AT_ZETA = 0x1a0;
uint256 private constant PROOF_O_AT_ZETA = 0x1c0; uint256 private constant PROOF_O_AT_ZETA = 0x1c0;
@@ -115,9 +118,6 @@ contract TestPlonkVerifierForDataAggregation {
uint256 private constant PROOF_OPENING_QCP_AT_ZETA = 0x300; uint256 private constant PROOF_OPENING_QCP_AT_ZETA = 0x300;
uint256 private constant PROOF_BSB_COMMITMENTS = 0x320; uint256 private constant PROOF_BSB_COMMITMENTS = 0x320;
// -> next part of proof is
// [ openings_selector_commits || commitments_wires_commit_api]
// -------- offset state // -------- offset state
// challenges to check the claimed quotient // challenges to check the claimed quotient
@@ -133,7 +133,7 @@ contract TestPlonkVerifierForDataAggregation {
uint256 private constant STATE_LINEARISED_POLYNOMIAL_Y = 0x100; uint256 private constant STATE_LINEARISED_POLYNOMIAL_Y = 0x100;
uint256 private constant STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA = 0x120; uint256 private constant STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA = 0x120;
uint256 private constant STATE_FOLDED_CLAIMED_VALUES = 0x140; // Folded proof for the opening of H, linearised poly, l, r, o, s_1, s_2, qcp uint256 private constant STATE_FOLDED_CLAIMED_VALUES = 0x140; // Folded proof for the opening of H, linearised poly, l, r, o, s_1, s_2, qcp
uint256 private constant STATE_FOLDED_DIGESTS_X = 0x160; // folded digests of H, linearised poly, l, r, o, s_1, s_2, qcp uint256 private constant STATE_FOLDED_DIGESTS_X = 0x160; // linearised poly, l, r, o, s_1, s_2, qcp
uint256 private constant STATE_FOLDED_DIGESTS_Y = 0x180; uint256 private constant STATE_FOLDED_DIGESTS_Y = 0x180;
uint256 private constant STATE_PI = 0x1a0; uint256 private constant STATE_PI = 0x1a0;
uint256 private constant STATE_ZETA_POWER_N_MINUS_ONE = 0x1c0; uint256 private constant STATE_ZETA_POWER_N_MINUS_ONE = 0x1c0;
@@ -161,6 +161,7 @@ contract TestPlonkVerifierForDataAggregation {
uint8 private constant HASH_FR_TWO = 2; uint8 private constant HASH_FR_TWO = 2;
// -------- precompiles // -------- precompiles
uint8 private constant SHA2 = 0x2;
uint8 private constant MOD_EXP = 0x5; uint8 private constant MOD_EXP = 0x5;
uint8 private constant EC_ADD = 0x6; uint8 private constant EC_ADD = 0x6;
uint8 private constant EC_MUL = 0x7; uint8 private constant EC_MUL = 0x7;
@@ -201,7 +202,7 @@ contract TestPlonkVerifierForDataAggregation {
mstore(add(mem, STATE_PI), l_pi) mstore(add(mem, STATE_PI), l_pi)
compute_alpha_square_lagrange_0() compute_alpha_square_lagrange_0()
verify_opening_linearised_polynomial(proof.offset) compute_opening_linearised_polynomial(proof.offset)
fold_h(proof.offset) fold_h(proof.offset)
compute_commitment_linearised_polynomial(proof.offset) compute_commitment_linearised_polynomial(proof.offset)
compute_gamma_kzg(proof.offset) compute_gamma_kzg(proof.offset)
@@ -221,6 +222,16 @@ contract TestPlonkVerifierForDataAggregation {
revert(ptError, 0x64) revert(ptError, 0x64)
} }
/// Called when an exponentiation mod r fails
function error_mod_exp() {
let ptError := mload(0x40)
mstore(ptError, ERROR_STRING_ID) // selector for function Error(string)
mstore(add(ptError, 0x4), 0x20)
mstore(add(ptError, 0x24), 0xc)
mstore(add(ptError, 0x44), "error mod exp")
revert(ptError, 0x64)
}
/// Called when an operation on Bn254 fails /// Called when an operation on Bn254 fails
/// @dev for instance when calling EcMul on a point not on Bn254. /// @dev for instance when calling EcMul on a point not on Bn254.
function error_ec_op() { function error_ec_op() {
@@ -321,7 +332,7 @@ contract TestPlonkVerifierForDataAggregation {
/// Checks if the proof is of the correct size /// Checks if the proof is of the correct size
/// @param actual_proof_size size of the proof (not the expected size) /// @param actual_proof_size size of the proof (not the expected size)
function check_proof_size(actual_proof_size) { function check_proof_size(actual_proof_size) {
let expected_proof_size := add(0x300, mul(VK_NB_CUSTOM_GATES, 0x60)) let expected_proof_size := add(FIXED_PROOF_SIZE, mul(VK_NB_CUSTOM_GATES, 0x60))
if iszero(eq(actual_proof_size, expected_proof_size)) { if iszero(eq(actual_proof_size, expected_proof_size)) {
error_proof_size() error_proof_size()
} }
@@ -405,9 +416,6 @@ contract TestPlonkVerifierForDataAggregation {
let state := mload(0x40) let state := mload(0x40)
let mPtr := add(state, STATE_LAST_MEM) let mPtr := add(state, STATE_LAST_MEM)
// gamma
// gamma in ascii is [0x67,0x61,0x6d, 0x6d, 0x61]
// (same for alpha, beta, zeta)
mstore(mPtr, FS_GAMMA) // "gamma" mstore(mPtr, FS_GAMMA) // "gamma"
mstore(add(mPtr, 0x20), VK_S1_COM_X) mstore(add(mPtr, 0x20), VK_S1_COM_X)
@@ -448,7 +456,7 @@ contract TestPlonkVerifierForDataAggregation {
let size := add(0x2c5, size_pi_in_bytes) let size := add(0x2c5, size_pi_in_bytes)
size := add(size, mul(VK_NB_CUSTOM_GATES, 0x40)) size := add(size, mul(VK_NB_CUSTOM_GATES, 0x40))
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1b), size, mPtr, 0x20) //0x1b -> 000.."gamma" let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1b), size, mPtr, 0x20) //0x1b -> 000.."gamma"
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -468,7 +476,7 @@ contract TestPlonkVerifierForDataAggregation {
// beta // beta
mstore(mPtr, FS_BETA) // "beta" mstore(mPtr, FS_BETA) // "beta"
mstore(add(mPtr, 0x20), gamma_not_reduced) mstore(add(mPtr, 0x20), gamma_not_reduced)
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1c), 0x24, mPtr, 0x20) //0x1b -> 000.."gamma" let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1c), 0x24, mPtr, 0x20) //0x1b -> 000.."gamma"
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -503,7 +511,7 @@ contract TestPlonkVerifierForDataAggregation {
// [Z], the commitment to the grand product polynomial // [Z], the commitment to the grand product polynomial
calldatacopy(_mPtr, add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X), 0x40) calldatacopy(_mPtr, add(aproof, PROOF_GRAND_PRODUCT_COMMITMENT_X), 0x40)
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1b), full_size, mPtr, 0x20) let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1b), full_size, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -524,8 +532,8 @@ contract TestPlonkVerifierForDataAggregation {
// zeta // zeta
mstore(mPtr, FS_ZETA) // "zeta" mstore(mPtr, FS_ZETA) // "zeta"
mstore(add(mPtr, 0x20), alpha_not_reduced) mstore(add(mPtr, 0x20), alpha_not_reduced)
calldatacopy(add(mPtr, 0x40), add(aproof, PROOF_H_0_X), 0xc0) calldatacopy(add(mPtr, 0x40), add(aproof, PROOF_H_0_COM_X), 0xc0)
let l_success := staticcall(gas(), 0x2, add(mPtr, 0x1c), 0xe4, mPtr, 0x20) let l_success := staticcall(gas(), SHA2, add(mPtr, 0x1c), 0xe4, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -566,28 +574,28 @@ contract TestPlonkVerifierForDataAggregation {
/// batch_compute_lagranges_at_z computes [L_0(z), .., L_{n-1}(z)] /// batch_compute_lagranges_at_z computes [L_0(z), .., L_{n-1}(z)]
/// @param z point at which the Lagranges are evaluated /// @param z point at which the Lagranges are evaluated
/// @param zpnmo ζⁿ-1 /// @param zpnmo ζⁿ-1
/// @param n number of public inputs (number of Lagranges to compute) /// @param n_pub number of public inputs (number of Lagranges to compute)
/// @param mPtr pointer to which the results are stored /// @param mPtr pointer to which the results are stored
function batch_compute_lagranges_at_z(z, zpnmo, n, mPtr) { function batch_compute_lagranges_at_z(z, zpnmo, n_pub, mPtr) {
let zn := mulmod(zpnmo, VK_INV_DOMAIN_SIZE, R_MOD) // 1/n * (ζⁿ - 1) let zn := mulmod(zpnmo, VK_INV_DOMAIN_SIZE, R_MOD) // 1/n * (ζⁿ - 1)
let _w := 1 let _w := 1
let _mPtr := mPtr let _mPtr := mPtr
for { for {
let i := 0 let i := 0
} lt(i, n) { } lt(i, n_pub) {
i := add(i, 1) i := add(i, 1)
} { } {
mstore(_mPtr, addmod(z, sub(R_MOD, _w), R_MOD)) mstore(_mPtr, addmod(z, sub(R_MOD, _w), R_MOD))
_w := mulmod(_w, VK_OMEGA, R_MOD) _w := mulmod(_w, VK_OMEGA, R_MOD)
_mPtr := add(_mPtr, 0x20) _mPtr := add(_mPtr, 0x20)
} }
batch_invert(mPtr, n, _mPtr) batch_invert(mPtr, n_pub, _mPtr)
_mPtr := mPtr _mPtr := mPtr
_w := 1 _w := 1
for { for {
let i := 0 let i := 0
} lt(i, n) { } lt(i, n_pub) {
i := add(i, 1) i := add(i, 1)
} { } {
mstore(_mPtr, mulmod(mulmod(mload(_mPtr), zn, R_MOD), _w, R_MOD)) mstore(_mPtr, mulmod(mulmod(mload(_mPtr), zn, R_MOD), _w, R_MOD))
@@ -648,7 +656,6 @@ contract TestPlonkVerifierForDataAggregation {
h_fr := hash_fr(calldataload(p), calldataload(add(p, 0x20)), mPtr) h_fr := hash_fr(calldataload(p), calldataload(add(p, 0x20)), mPtr)
ith_lagrange := compute_ith_lagrange_at_z(z, zpnmo, add(nb_public_inputs, VK_INDEX_COMMIT_API_0), mPtr) ith_lagrange := compute_ith_lagrange_at_z(z, zpnmo, add(nb_public_inputs, VK_INDEX_COMMIT_API_0), mPtr)
pi_commit := addmod(pi_commit, mulmod(h_fr, ith_lagrange, R_MOD), R_MOD) pi_commit := addmod(pi_commit, mulmod(h_fr, ith_lagrange, R_MOD), R_MOD)
p := add(p, 0x40)
} }
/// Computes L_i(zeta) = ωⁱ/n * (ζⁿ-1)/(ζ-ωⁱ) where: /// Computes L_i(zeta) = ωⁱ/n * (ζⁿ-1)/(ζ-ωⁱ) where:
@@ -704,7 +711,7 @@ contract TestPlonkVerifierForDataAggregation {
// size domain // size domain
mstore8(add(mPtr, 0x8e), HASH_FR_SIZE_DOMAIN) mstore8(add(mPtr, 0x8e), HASH_FR_SIZE_DOMAIN)
let l_success := staticcall(gas(), 0x2, mPtr, 0x8f, mPtr, 0x20) let l_success := staticcall(gas(), SHA2, mPtr, 0x8f, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -728,7 +735,7 @@ contract TestPlonkVerifierForDataAggregation {
mstore8(add(mPtr, 0x2b), 0x6b) mstore8(add(mPtr, 0x2b), 0x6b)
mstore8(add(mPtr, 0x2c), HASH_FR_SIZE_DOMAIN) // size domain mstore8(add(mPtr, 0x2c), HASH_FR_SIZE_DOMAIN) // size domain
l_success := staticcall(gas(), 0x2, mPtr, 0x2d, mPtr, 0x20) l_success := staticcall(gas(), SHA2, mPtr, 0x2d, mPtr, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
@@ -755,14 +762,14 @@ contract TestPlonkVerifierForDataAggregation {
mstore8(add(mPtr, 0x4c), HASH_FR_SIZE_DOMAIN) // size domain mstore8(add(mPtr, 0x4c), HASH_FR_SIZE_DOMAIN) // size domain
let offset := add(mPtr, 0x20) let offset := add(mPtr, 0x20)
l_success := staticcall(gas(), 0x2, offset, 0x2d, offset, 0x20) l_success := staticcall(gas(), SHA2, offset, 0x2d, offset, 0x20)
if iszero(l_success) { if iszero(l_success) {
error_verify() error_verify()
} }
// at this point we have mPtr = [ b1 || b2] where b1 is on 32byes and b2 in 16bytes. // at this point we have mPtr = [ b1 || b2] where b1 is on 32byes and b2 in 16bytes.
// we interpret it as a big integer mod r in big endian (similar to regular decimal notation) // we interpret it as a big integer mod r in big endian (similar to regular decimal notation)
// the result is then 2**(8*16)*mPtr[32:] + mPtr[32:48] // the result is then 2**(8*16)*mPtr[:32] + mPtr[32:48]
res := mulmod(mload(mPtr), HASH_FR_BB, R_MOD) // <- res = 2**128 * mPtr[:32] res := mulmod(mload(mPtr), HASH_FR_BB, R_MOD) // <- res = 2**128 * mPtr[:32]
let b1 := shr(128, mload(add(mPtr, 0x20))) // b1 <- [0, 0, .., 0 || b2[:16] ] let b1 := shr(128, mload(add(mPtr, 0x20))) // b1 <- [0, 0, .., 0 || b2[:16] ]
res := addmod(res, b1, R_MOD) res := addmod(res, b1, R_MOD)
@@ -802,7 +809,7 @@ contract TestPlonkVerifierForDataAggregation {
// derive a random number. As there is no random generator, we // derive a random number. As there is no random generator, we
// do an FS like challenge derivation, depending on both digests and // do an FS like challenge derivation, depending on both digests and
// ζ to ensure that the prover cannot control the random numger. // ζ to ensure that the prover cannot control the random number.
// Note: adding the other point ζω is not needed, as ω is known beforehand. // Note: adding the other point ζω is not needed, as ω is known beforehand.
mstore(mPtr, mload(add(state, STATE_FOLDED_DIGESTS_X))) mstore(mPtr, mload(add(state, STATE_FOLDED_DIGESTS_X)))
mstore(add(mPtr, 0x20), mload(add(state, STATE_FOLDED_DIGESTS_Y))) mstore(add(mPtr, 0x20), mload(add(state, STATE_FOLDED_DIGESTS_Y)))
@@ -814,7 +821,7 @@ contract TestPlonkVerifierForDataAggregation {
mstore(add(mPtr, 0xe0), calldataload(add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_Y))) mstore(add(mPtr, 0xe0), calldataload(add(aproof, PROOF_OPENING_AT_ZETA_OMEGA_Y)))
mstore(add(mPtr, 0x100), mload(add(state, STATE_ZETA))) mstore(add(mPtr, 0x100), mload(add(state, STATE_ZETA)))
mstore(add(mPtr, 0x120), mload(add(state, STATE_GAMMA_KZG))) mstore(add(mPtr, 0x120), mload(add(state, STATE_GAMMA_KZG)))
let random := staticcall(gas(), 0x2, mPtr, 0x140, mPtr, 0x20) let random := staticcall(gas(), SHA2, mPtr, 0x140, mPtr, 0x20)
if iszero(random) { if iszero(random) {
error_random_generation() error_random_generation()
} }
@@ -864,6 +871,7 @@ contract TestPlonkVerifierForDataAggregation {
mstore(folded_quotients_y, sub(P_MOD, mload(folded_quotients_y))) mstore(folded_quotients_y, sub(P_MOD, mload(folded_quotients_y)))
mstore(mPtr, mload(folded_digests)) mstore(mPtr, mload(folded_digests))
mstore(add(mPtr, 0x20), mload(add(folded_digests, 0x20))) mstore(add(mPtr, 0x20), mload(add(folded_digests, 0x20)))
mstore(add(mPtr, 0x40), G2_SRS_0_X_0) // the 4 lines are the canonical G2 point on BN254 mstore(add(mPtr, 0x40), G2_SRS_0_X_0) // the 4 lines are the canonical G2 point on BN254
mstore(add(mPtr, 0x60), G2_SRS_0_X_1) mstore(add(mPtr, 0x60), G2_SRS_0_X_1)
@@ -895,7 +903,7 @@ contract TestPlonkVerifierForDataAggregation {
/// @notice Fold the opening proofs at ζ: /// @notice Fold the opening proofs at ζ:
/// * at state+state_folded_digest we store: [Linearised_polynomial]+γ[L] + γ²[R] + γ³[O] + γ⁴[S₁] +γ⁵[S₂] + ∑ᵢγ⁵⁺ⁱ[Pi_{i}] /// * at state+state_folded_digest we store: [Linearised_polynomial]+γ[L] + γ²[R] + γ³[O] + γ⁴[S₁] +γ⁵[S₂] + ∑ᵢγ⁵⁺ⁱ[Pi_{i}]
/// * at state+state_folded_claimed_values we store: H(ζ) + γLinearised_polynomial(ζ)+γ²L(ζ) + γ³R(ζ)+ γO(ζ) + γS₁(ζ) +γS₂(ζ) + ∑ᵢγ⁺ⁱPi_{i}(ζ) /// * at state+state_folded_claimed_values we store: Linearised_polynomial(ζ)+γL(ζ) + γ²R(ζ)+ γ³O(ζ) + γS₁(ζ) +γS₂(ζ) + ∑ᵢγ⁺ⁱPi_{i}(ζ)
/// @param aproof pointer to the proof /// @param aproof pointer to the proof
/// acc_gamma stores the γⁱ /// acc_gamma stores the γⁱ
function fold_state(aproof) { function fold_state(aproof) {
@@ -908,11 +916,11 @@ contract TestPlonkVerifierForDataAggregation {
let acc_gamma := l_gamma_kzg let acc_gamma := l_gamma_kzg
let state_folded_digests := add(state, STATE_FOLDED_DIGESTS_X) let state_folded_digests := add(state, STATE_FOLDED_DIGESTS_X)
mstore(add(state, STATE_FOLDED_DIGESTS_X), mload(add(state, STATE_LINEARISED_POLYNOMIAL_X))) mstore(state_folded_digests, mload(add(state, STATE_LINEARISED_POLYNOMIAL_X)))
mstore(add(state, STATE_FOLDED_DIGESTS_Y), mload(add(state, STATE_LINEARISED_POLYNOMIAL_Y))) mstore(add(state, STATE_FOLDED_DIGESTS_Y), mload(add(state, STATE_LINEARISED_POLYNOMIAL_Y)))
mstore(add(state, STATE_FOLDED_CLAIMED_VALUES), mload(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA))) mstore(add(state, STATE_FOLDED_CLAIMED_VALUES), mload(add(state, STATE_OPENING_LINEARISED_POLYNOMIAL_ZETA)))
point_acc_mul_calldata(add(state, STATE_FOLDED_DIGESTS_X), add(aproof, PROOF_L_COM_X), acc_gamma, mPtr) point_acc_mul_calldata(state_folded_digests, add(aproof, PROOF_L_COM_X), acc_gamma, mPtr)
fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_L_AT_ZETA), acc_gamma) fr_acc_mul_calldata(add(state, STATE_FOLDED_CLAIMED_VALUES), add(aproof, PROOF_L_AT_ZETA), acc_gamma)
acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD) acc_gamma := mulmod(acc_gamma, l_gamma_kzg, R_MOD)
@@ -993,11 +1001,11 @@ contract TestPlonkVerifierForDataAggregation {
mstore(_mPtr, calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA))) mstore(_mPtr, calldataload(add(aproof, PROOF_GRAND_PRODUCT_AT_ZETA_OMEGA)))
let start_input := 0x1b // 00.."gamma" let start_input := 0x1b // 00.."gamma"
let size_input := add(0x14, mul(VK_NB_CUSTOM_GATES, 3)) // number of 32bytes elmts = 0x17 (zeta+3*6 for the digests+openings) + 3*VK_NB_CUSTOM_GATES (for the commitments of the selectors) + 1 (opening of Z at ζω) let size_input := add(0x14, mul(VK_NB_CUSTOM_GATES, 3)) // number of 32bytes elmts = 0x14 (zeta+3*6 for the digests+openings) + 3*VK_NB_CUSTOM_GATES (for the commitments of the selectors) + 1 (opening of Z at ζω)
size_input := add(0x5, mul(size_input, 0x20)) // size in bytes: 15*32 bytes + 5 bytes for gamma size_input := add(0x5, mul(size_input, 0x20)) // size in bytes: 15*32 bytes + 5 bytes for gamma
let check_staticcall := staticcall( let check_staticcall := staticcall(
gas(), gas(),
0x2, SHA2,
add(mPtr, start_input), add(mPtr, start_input),
size_input, size_input,
add(state, STATE_GAMMA_KZG), add(state, STATE_GAMMA_KZG),
@@ -1144,7 +1152,7 @@ contract TestPlonkVerifierForDataAggregation {
compute_commitment_linearised_polynomial_ec(aproof, s1, s2) compute_commitment_linearised_polynomial_ec(aproof, s1, s2)
} }
/// @notice compute -z_h(ζ)*([H₁] + ζ⁺²[H₂] + ζ²⁽⁺²⁾[H₃]) and store the result at /// @notice compute -z_h(ζ)*([H₁] + ζ⁺²[H₂] + ζ²⁽⁺²⁾[H₃]) and store the result at
/// state + state_folded_h /// state + state_folded_h
/// @param aproof pointer to the proof /// @param aproof pointer to the proof
function fold_h(aproof) { function fold_h(aproof) {
@@ -1152,10 +1160,20 @@ contract TestPlonkVerifierForDataAggregation {
let n_plus_two := add(VK_DOMAIN_SIZE, 2) let n_plus_two := add(VK_DOMAIN_SIZE, 2)
let mPtr := add(mload(0x40), STATE_LAST_MEM) let mPtr := add(mload(0x40), STATE_LAST_MEM)
let zeta_power_n_plus_two := pow(mload(add(state, STATE_ZETA)), n_plus_two, mPtr) let zeta_power_n_plus_two := pow(mload(add(state, STATE_ZETA)), n_plus_two, mPtr)
point_mul_calldata(add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_2_X), zeta_power_n_plus_two, mPtr) point_mul_calldata(add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_2_COM_X), zeta_power_n_plus_two, mPtr)
point_add_calldata(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_1_X), mPtr) point_add_calldata(
add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X),
add(aproof, PROOF_H_1_COM_X),
mPtr
)
point_mul(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), zeta_power_n_plus_two, mPtr) point_mul(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), zeta_power_n_plus_two, mPtr)
point_add_calldata(add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X), add(aproof, PROOF_H_0_X), mPtr) point_add_calldata(
add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X),
add(aproof, PROOF_H_0_COM_X),
mPtr
)
point_mul( point_mul(
add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X),
add(state, STATE_FOLDED_H_X), add(state, STATE_FOLDED_H_X),
@@ -1170,7 +1188,7 @@ contract TestPlonkVerifierForDataAggregation {
/// @notice check that the opening of the linearised polynomial at zeta is equal to /// @notice check that the opening of the linearised polynomial at zeta is equal to
/// - [ PI(ζ) - α²*L₁(ζ) + α(l(ζ)+β*s1(ζ)+γ)(r(ζ)+β*s2(ζ)+γ)(o(ζ)+γ)*z(ωζ) ] /// - [ PI(ζ) - α²*L₁(ζ) + α(l(ζ)+β*s1(ζ)+γ)(r(ζ)+β*s2(ζ)+γ)(o(ζ)+γ)*z(ωζ) ]
/// @param aproof pointer to the proof /// @param aproof pointer to the proof
function verify_opening_linearised_polynomial(aproof) { function compute_opening_linearised_polynomial(aproof) {
let state := mload(0x40) let state := mload(0x40)
// (l(ζ)+β*s1(ζ)+γ) // (l(ζ)+β*s1(ζ)+γ)
@@ -1289,7 +1307,6 @@ contract TestPlonkVerifierForDataAggregation {
/// @param s scalar /// @param s scalar
/// @mPtr free memory /// @mPtr free memory
function point_acc_mul_calldata(dst, src, s, mPtr) { function point_acc_mul_calldata(dst, src, s, mPtr) {
let state := mload(0x40)
mstore(mPtr, calldataload(src)) mstore(mPtr, calldataload(src))
mstore(add(mPtr, 0x20), calldataload(add(src, 0x20))) mstore(add(mPtr, 0x20), calldataload(add(src, 0x20)))
mstore(add(mPtr, 0x40), s) mstore(add(mPtr, 0x40), s)
@@ -1324,7 +1341,7 @@ contract TestPlonkVerifierForDataAggregation {
mstore(add(mPtr, 0xa0), R_MOD) mstore(add(mPtr, 0xa0), R_MOD)
let check_staticcall := staticcall(gas(), MOD_EXP, mPtr, 0xc0, mPtr, 0x20) let check_staticcall := staticcall(gas(), MOD_EXP, mPtr, 0xc0, mPtr, 0x20)
if eq(check_staticcall, 0) { if eq(check_staticcall, 0) {
error_mod_exp()
} }
res := mload(mPtr) res := mload(mPtr)
} }

View File

@@ -28,7 +28,19 @@ const config: HardhatUserConfig = {
artifacts: "./build", artifacts: "./build",
}, },
solidity: { solidity: {
// NB: double check the autoupdate shell script version complies to the latest solidity version if you add a new one.
compilers: [ compilers: [
{
version: "0.8.26",
settings: {
viaIR: useViaIR,
optimizer: {
enabled: true,
runs: 50_000,
},
evmVersion: "cancun",
},
},
{ {
version: "0.8.25", version: "0.8.25",
settings: { settings: {
@@ -81,18 +93,10 @@ const config: HardhatUserConfig = {
accounts: [process.env.SEPOLIA_PRIVATE_KEY || EMPTY_HASH], accounts: [process.env.SEPOLIA_PRIVATE_KEY || EMPTY_HASH],
url: "https://sepolia.infura.io/v3/" + process.env.INFURA_API_KEY, url: "https://sepolia.infura.io/v3/" + process.env.INFURA_API_KEY,
}, },
goerli: {
accounts: [process.env.GOERLI_PRIVATE_KEY || EMPTY_HASH],
url: "https://goerli.infura.io/v3/" + process.env.INFURA_API_KEY,
},
linea_mainnet: { linea_mainnet: {
accounts: [process.env.LINEA_MAINNET_PRIVATE_KEY || EMPTY_HASH], accounts: [process.env.LINEA_MAINNET_PRIVATE_KEY || EMPTY_HASH],
url: "https://linea-mainnet.infura.io/v3/" + process.env.INFURA_API_KEY, url: "https://linea-mainnet.infura.io/v3/" + process.env.INFURA_API_KEY,
}, },
linea_goerli: {
accounts: [process.env.LINEA_GOERLI_PRIVATE_KEY || EMPTY_HASH],
url: "https://linea-goerli.infura.io/v3/" + process.env.INFURA_API_KEY,
},
linea_sepolia: { linea_sepolia: {
accounts: [process.env.LINEA_SEPOLIA_PRIVATE_KEY || EMPTY_HASH], accounts: [process.env.LINEA_SEPOLIA_PRIVATE_KEY || EMPTY_HASH],
url: "https://linea-sepolia.infura.io/v3/" + process.env.INFURA_API_KEY, url: "https://linea-sepolia.infura.io/v3/" + process.env.INFURA_API_KEY,
@@ -122,21 +126,11 @@ const config: HardhatUserConfig = {
etherscan: { etherscan: {
apiKey: { apiKey: {
mainnet: process.env.ETHERSCAN_API_KEY ?? "", mainnet: process.env.ETHERSCAN_API_KEY ?? "",
goerli: process.env.ETHERSCAN_API_KEY ?? "",
sepolia: process.env.ETHERSCAN_API_KEY ?? "", sepolia: process.env.ETHERSCAN_API_KEY ?? "",
linea_sepolia: process.env.LINEASCAN_API_KEY ?? "", linea_sepolia: process.env.LINEASCAN_API_KEY ?? "",
linea_goerli: process.env.LINEASCAN_API_KEY ?? "",
linea_mainnet: process.env.LINEASCAN_API_KEY ?? "", linea_mainnet: process.env.LINEASCAN_API_KEY ?? "",
}, },
customChains: [ customChains: [
{
network: "linea_goerli",
chainId: 59140,
urls: {
apiURL: "https://api-goerli.lineascan.build/api",
browserURL: "https://goerli.lineascan.build/",
},
},
{ {
network: "linea_sepolia", network: "linea_sepolia",
chainId: 59141, chainId: 59141,

View File

@@ -57,7 +57,7 @@ describe("Token Minting Rate Limiter", () => {
beforeEach(async () => { beforeEach(async () => {
xpToken = await loadFixture(deployLineaVoyageXPFixture); xpToken = await loadFixture(deployLineaVoyageXPFixture);
tokenMintingRateLimiter = await loadFixture(deployTokenMintingRateLimiterFixture); tokenMintingRateLimiter = await loadFixture(deployTokenMintingRateLimiterFixture);
xpToken.connect(minter).grantRole(MINTER_ROLE, await tokenMintingRateLimiter.getAddress()); await xpToken.connect(minter).grantRole(MINTER_ROLE, await tokenMintingRateLimiter.getAddress());
}); });
describe("Initialization and roles", () => { describe("Initialization and roles", () => {

View File

@@ -37,7 +37,7 @@ mv -f .samples-test-eip4844/* ${SOLTESTDIR_EIP4844}/test
rm -rf .samples-simple-calldata .samples-multiproof-calldata .samples-test-calldata rm -rf .samples-simple-calldata .samples-multiproof-calldata .samples-test-calldata
rm -rf .samples-simple-eip4844 .samples-multiproof-eip4844 .samples-test-eip4844 rm -rf .samples-simple-eip4844 .samples-multiproof-eip4844 .samples-test-eip4844
sed -i.bak 's/pragma solidity \^0.8.19;/pragma solidity 0.8.24;/g' ../contracts/test/testData/compressedData/Verifier1.sol sed -i.bak 's/pragma solidity \0.8.24;/pragma solidity 0.8.26;/g' ../contracts/test/testData/compressedData/Verifier1.sol
cp ../contracts/test/testData/compressedData/Verifier1.sol ../contracts/contracts/verifiers/PlonkVerifierForDataAggregation.sol cp ../contracts/test/testData/compressedData/Verifier1.sol ../contracts/contracts/verifiers/PlonkVerifierForDataAggregation.sol
sed -i.bak 's/contract PlonkVerifier /contract PlonkVerifierForDataAggregation /g' ../contracts/contracts/verifiers/PlonkVerifierForDataAggregation.sol sed -i.bak 's/contract PlonkVerifier /contract PlonkVerifierForDataAggregation /g' ../contracts/contracts/verifiers/PlonkVerifierForDataAggregation.sol

View File

@@ -16,7 +16,7 @@
// Code generated by gnark DO NOT EDIT // Code generated by gnark DO NOT EDIT
pragma solidity 0.8.24; pragma solidity 0.8.26;
contract PlonkVerifier { contract PlonkVerifier {