diff --git a/.github/actions/detect-solidity-readonly-file-changes/action.yml b/.github/actions/detect-solidity-readonly-file-changes/action.yml index d0890a9f604..12b764cf29f 100644 --- a/.github/actions/detect-solidity-readonly-file-changes/action.yml +++ b/.github/actions/detect-solidity-readonly-file-changes/action.yml @@ -23,6 +23,8 @@ runs: - 'contracts/src/v0.8/automation/v2_0/**/*' - 'contracts/src/v0.8/automation/v2_1/**/*' - 'contracts/src/v0.8/automation/v2_2/**/*' + exclude: + - 'contracts/src/v0.8/automation/interfaces/zksync/*' - name: Fail if read-only files have changed if: ${{ steps.changed_files.outputs.read_only_sol == 'true' }} diff --git a/contracts/src/v0.8/automation/ZKSyncAutomationForwarder.sol b/contracts/src/v0.8/automation/ZKSyncAutomationForwarder.sol index 3db50151898..3cdb27bef03 100644 --- a/contracts/src/v0.8/automation/ZKSyncAutomationForwarder.sol +++ b/contracts/src/v0.8/automation/ZKSyncAutomationForwarder.sol @@ -8,7 +8,7 @@ uint256 constant PERFORM_GAS_CUSHION = 50_000; // We limit return data to a selector plus 4 words. This is to avoid // malicious contracts from returning large amounts of data and causing // repeated out-of-gas scenarios. -uint16 constant MAX_CALLBACK_RETURN_BYTES = 132; +//uint16 constant MAX_CALLBACK_RETURN_BYTES = 132; /** * @title ZKSyncAutomationForwarder is a relayer that sits between the registry and the customer's target contract @@ -69,7 +69,7 @@ contract ZKSyncAutomationForwarder { target, gasAmount, data, - MAX_CALLBACK_RETURN_BYTES + 0 ); return (success, g1 - gasleft() + pubdataGasSpent); } diff --git a/contracts/src/v0.8/automation/mocks/MockZKSyncSystemContext.sol b/contracts/src/v0.8/automation/mocks/MockZKSyncSystemContext.sol deleted file mode 100644 index 265d4b678a5..00000000000 --- a/contracts/src/v0.8/automation/mocks/MockZKSyncSystemContext.sol +++ /dev/null @@ -1,16 +0,0 @@ -// SPDX-License-Identifier: BUSL-1.1 -pragma solidity 0.8.19; - -contract MockZKSyncSystemContext { - function gasPrice() external pure returns (uint256) { - return 250000000; // 0.25 gwei - } - - function gasPerPubdataByte() external pure returns (uint256) { - return 500; - } - - function getCurrentPubdataSpent() external pure returns (uint256 currentPubdataSpent) { - return 1000; - } -} diff --git a/contracts/src/v0.8/automation/test/v2_3_zksync/BaseTest.t.sol b/contracts/src/v0.8/automation/test/v2_3_zksync/BaseTest.t.sol index 0b534ef3575..d7ba61e521b 100644 --- a/contracts/src/v0.8/automation/test/v2_3_zksync/BaseTest.t.sol +++ b/contracts/src/v0.8/automation/test/v2_3_zksync/BaseTest.t.sol @@ -18,8 +18,8 @@ import {AutomationRegistrar2_3} from "../../v2_3/AutomationRegistrar2_3.sol"; import {ChainModuleBase} from "../../chains/ChainModuleBase.sol"; import {MockUpkeep} from "../../mocks/MockUpkeep.sol"; import {IWrappedNative} from "../../interfaces/v2_3/IWrappedNative.sol"; -import {MockGasBoundCaller} from "../../mocks/MockGasBoundCaller.sol"; -import {MockZKSyncSystemContext} from "../../mocks/MockZKSyncSystemContext.sol"; +//import {MockGasBoundCaller} from "../../mocks/MockGasBoundCaller.sol"; +import {MockSystemContext} from "../../../shared/test/mocks/MockSystemContext.sol"; import {ERC20Mock} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/mocks/ERC20Mock.sol"; import {IERC20Metadata as IERC20} from "../../../vendor/openzeppelin-solidity/v4.8.3/contracts/token/ERC20/extensions/IERC20Metadata.sol"; @@ -55,8 +55,8 @@ contract BaseTest is Test { MockUpkeep internal TARGET1; MockUpkeep internal TARGET2; Transcoder internal TRANSCODER; - MockGasBoundCaller internal GAS_BOUND_CALLER; - MockZKSyncSystemContext internal SYSTEM_CONTEXT; +// MockGasBoundCaller internal GAS_BOUND_CALLER; + MockSystemContext internal SYSTEM_CONTEXT; // roles address internal constant OWNER = address(uint160(uint256(keccak256("OWNER")))); @@ -95,14 +95,13 @@ contract BaseTest is Test { TARGET2 = new MockUpkeep(); TRANSCODER = new Transcoder(); - GAS_BOUND_CALLER = new MockGasBoundCaller(); - SYSTEM_CONTEXT = new MockZKSyncSystemContext(); +// GAS_BOUND_CALLER = new MockGasBoundCaller(); + SYSTEM_CONTEXT = new MockSystemContext(); - bytes memory callerCode = address(GAS_BOUND_CALLER).code; - vm.etch(0xc706EC7dfA5D4Dc87f29f859094165E8290530f5, callerCode); +// bytes memory callerCode = address(GAS_BOUND_CALLER).code; +// vm.etch(0xc706EC7dfA5D4Dc87f29f859094165E8290530f5, callerCode); - bytes memory contextCode = address(SYSTEM_CONTEXT).code; - vm.etch(0x000000000000000000000000000000000000800B, contextCode); + vm.etch(address(0x800b), address(SYSTEM_CONTEXT).code); SIGNERS[0] = vm.addr(SIGNING_KEY0); //0xc110458BE52CaA6bB68E66969C3218A4D9Db0211 SIGNERS[1] = vm.addr(SIGNING_KEY1); //0xc110a19c08f1da7F5FfB281dc93630923F8E3719 diff --git a/contracts/test/v0.8/automation/ZKSyncAutomationRegistry2_3.test.ts b/contracts/test/v0.8/automation/ZKSyncAutomationRegistry2_3.test.ts index 21af6fcbf0a..fe488375398 100644 --- a/contracts/test/v0.8/automation/ZKSyncAutomationRegistry2_3.test.ts +++ b/contracts/test/v0.8/automation/ZKSyncAutomationRegistry2_3.test.ts @@ -19,18 +19,18 @@ import { StreamsLookupUpkeep__factory as StreamsLookupUpkeepFactory } from '../. import { MockV3Aggregator__factory as MockV3AggregatorFactory } from '../../../typechain/factories/MockV3Aggregator__factory' import { UpkeepMock__factory as UpkeepMockFactory } from '../../../typechain/factories/UpkeepMock__factory' import { UpkeepAutoFunder__factory as UpkeepAutoFunderFactory } from '../../../typechain/factories/UpkeepAutoFunder__factory' -import { MockZKSyncSystemContext__factory as MockZKSyncSystemContextFactory } from '../../../typechain/factories/MockZKSyncSystemContext__factory' +import { MockSystemContext__factory as MockSystemContextFactory } from '../../../typechain/factories/MockSystemContext__factory' import { ChainModuleBase__factory as ChainModuleBaseFactory } from '../../../typechain/factories/ChainModuleBase__factory' -import { MockGasBoundCaller__factory as MockGasBoundCallerFactory } from '../../../typechain/factories/MockGasBoundCaller__factory' +// import { MockGasBoundCaller__factory as MockGasBoundCallerFactory } from '../../../typechain/factories/MockGasBoundCaller__factory' import { ILogAutomation__factory as ILogAutomationactory } from '../../../typechain/factories/ILogAutomation__factory' import { AutomationCompatibleUtils } from '../../../typechain/AutomationCompatibleUtils' import { StreamsLookupUpkeep } from '../../../typechain/StreamsLookupUpkeep' import { MockV3Aggregator } from '../../../typechain/MockV3Aggregator' -import { MockGasBoundCaller } from '../../../typechain/MockGasBoundCaller' +// import { MockGasBoundCaller } from '../../../typechain/MockGasBoundCaller' import { UpkeepMock } from '../../../typechain/UpkeepMock' import { ChainModuleBase } from '../../../typechain/ChainModuleBase' import { UpkeepTranscoder } from '../../../typechain/UpkeepTranscoder' -import { MockZKSyncSystemContext } from '../../../typechain/MockZKSyncSystemContext' +import { MockSystemContext } from '../../../typechain/MockSystemContext' import { IChainModule, UpkeepAutoFunder } from '../../../typechain' import { CancelledUpkeepReportEvent, @@ -139,11 +139,11 @@ let logTriggerConfig: string // Smart contract factories let linkTokenFactory: ContractFactory let mockV3AggregatorFactory: MockV3AggregatorFactory -let mockGasBoundCallerFactory: MockGasBoundCallerFactory +// let mockGasBoundCallerFactory: MockGasBoundCallerFactory let upkeepMockFactory: UpkeepMockFactory let upkeepAutoFunderFactory: UpkeepAutoFunderFactory let moduleBaseFactory: ChainModuleBaseFactory -let mockZKSyncSystemContextFactory: MockZKSyncSystemContextFactory +let mockSystemContextFactory: MockSystemContextFactory let streamsLookupUpkeepFactory: StreamsLookupUpkeepFactory let personas: Personas @@ -159,8 +159,8 @@ let autoFunderUpkeep: UpkeepAutoFunder let ltUpkeep: MockContract let transcoder: UpkeepTranscoder let moduleBase: ChainModuleBase -let mockGasBoundCaller: MockGasBoundCaller -let mockZKSyncSystemContext: MockZKSyncSystemContext +// let mockGasBoundCaller: MockGasBoundCaller +let mockSystemContext: MockSystemContext let streamsLookupUpkeep: StreamsLookupUpkeep let automationUtils: AutomationCompatibleUtils let automationUtils2_3: AutomationUtils2_3 @@ -363,7 +363,7 @@ const parseCancelledUpkeepReportLogs = (receipt: ContractReceipt) => { return parsedLogs } -describe('ZKSyncAutomationRegistry2_3', () => { +describe.only('ZKSyncAutomationRegistry2_3', () => { let owner: Signer let keeper1: Signer let keeper2: Signer @@ -415,11 +415,10 @@ describe('ZKSyncAutomationRegistry2_3', () => { mockV3AggregatorFactory = (await ethers.getContractFactory( 'src/v0.8/shared/mocks/MockV3Aggregator.sol:MockV3Aggregator', )) as unknown as MockV3AggregatorFactory - mockZKSyncSystemContextFactory = await ethers.getContractFactory( - 'MockZKSyncSystemContext', - ) - mockGasBoundCallerFactory = - await ethers.getContractFactory('MockGasBoundCaller') + mockSystemContextFactory = + await ethers.getContractFactory('MockSystemContext') + // mockGasBoundCallerFactory = + // await ethers.getContractFactory('MockGasBoundCaller') upkeepMockFactory = await ethers.getContractFactory('UpkeepMock') upkeepAutoFunderFactory = await ethers.getContractFactory('UpkeepAutoFunder') @@ -825,10 +824,8 @@ describe('ZKSyncAutomationRegistry2_3', () => { 'UpkeepTranscoder5_0', ) transcoder = await upkeepTranscoderFactory.connect(owner).deploy() - mockZKSyncSystemContext = await mockZKSyncSystemContextFactory - .connect(owner) - .deploy() - mockGasBoundCaller = await mockGasBoundCallerFactory.connect(owner).deploy() + mockSystemContext = await mockSystemContextFactory.connect(owner).deploy() + // mockGasBoundCaller = await mockGasBoundCallerFactory.connect(owner).deploy() moduleBase = await moduleBaseFactory.connect(owner).deploy() streamsLookupUpkeep = await streamsLookupUpkeepFactory .connect(owner) @@ -840,21 +837,21 @@ describe('ZKSyncAutomationRegistry2_3', () => { false /* verify mercury response */, ) - const zksyncSystemContextCode = await ethers.provider.send('eth_getCode', [ - mockZKSyncSystemContext.address, + const systemContextCode = await ethers.provider.send('eth_getCode', [ + mockSystemContext.address, ]) await ethers.provider.send('hardhat_setCode', [ '0x000000000000000000000000000000000000800B', - zksyncSystemContextCode, + systemContextCode, ]) - const gasBoundCallerCode = await ethers.provider.send('eth_getCode', [ - mockGasBoundCaller.address, - ]) - await ethers.provider.send('hardhat_setCode', [ - '0xc706EC7dfA5D4Dc87f29f859094165E8290530f5', - gasBoundCallerCode, - ]) + // const gasBoundCallerCode = await ethers.provider.send('eth_getCode', [ + // mockGasBoundCaller.address, + // ]) + // await ethers.provider.send('hardhat_setCode', [ + // '0xc706EC7dfA5D4Dc87f29f859094165E8290530f5', + // gasBoundCallerCode, + // ]) const financeAdminAddress = await financeAdmin.getAddress() @@ -914,12 +911,6 @@ describe('ZKSyncAutomationRegistry2_3', () => { registryConditionalOverhead = await registry.getConditionalGasOverhead() registryLogOverhead = await registry.getLogGasOverhead() registryPerSignerGasOverhead = await registry.getPerSignerGasOverhead() - // registryPerPerformByteGasOverhead = - // await registry.getPerPerformByteGasOverhead() - // registryTransmitCalldataFixedBytesOverhead = - // await registry.getTransmitCalldataFixedBytesOverhead() - // registryTransmitCalldataPerSignerBytesOverhead = - // await registry.getTransmitCalldataPerSignerBytesOverhead() cancellationDelay = (await registry.getCancellationDelay()).toNumber() await registry.connect(owner).setConfigTypeSafe(...baseConfig)