From c89866d87b383d5aeb97713967a680510a787cf0 Mon Sep 17 00:00:00 2001 From: Rens Rooimans Date: Tue, 17 Oct 2023 16:41:37 +0200 Subject: [PATCH] fix /dev solhint issues (#10977) * fix /dev solhint issues * move flags -> l2ep * fix transmission warnings * rm dup _configDigestFromConfigData * gen wrapper * fix document string * fix test ref to flags --- contracts/.solhintignore | 2 - contracts/package.json | 2 +- contracts/src/v0.8/dev/ocr2/OCR2Abstract.sol | 134 ------------------ .../dev/transmission/ERC-4337/Paymaster.sol | 42 +++--- .../v0.8/dev/transmission/ERC-4337/SCA.sol | 13 +- .../dev/transmission/ERC-4337/SCALibrary.sol | 4 +- .../SmartContractAccountHelper.sol | 21 +-- contracts/src/v0.8/{ => l2ep}/dev/Flags.sol | 27 ++-- .../arbitrum/ArbitrumSequencerUptimeFeed.sol | 2 +- .../dev/interfaces/FlagsInterface.sol | 0 .../v0.8/{dev => shared}/ocr2/OCR2Base.sol | 44 +----- .../src/v0.8/{dev => shared}/ocr2/README.md | 0 .../dev/ArbitrumSequencerUptimeFeed.test.ts | 2 +- .../transmission/EIP_712_1014_4337.t.sol | 8 +- .../smart_contract_account_helper.go | 2 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 16 files changed, 70 insertions(+), 235 deletions(-) delete mode 100644 contracts/src/v0.8/dev/ocr2/OCR2Abstract.sol rename contracts/src/v0.8/{ => l2ep}/dev/Flags.sol (88%) rename contracts/src/v0.8/{ => l2ep}/dev/interfaces/FlagsInterface.sol (100%) rename contracts/src/v0.8/{dev => shared}/ocr2/OCR2Base.sol (91%) rename contracts/src/v0.8/{dev => shared}/ocr2/README.md (100%) diff --git a/contracts/.solhintignore b/contracts/.solhintignore index d36b4a27261..2eace8a37eb 100644 --- a/contracts/.solhintignore +++ b/contracts/.solhintignore @@ -1,7 +1,5 @@ # 351 warnings #./src/v0.8/automation -# 60 warnings -#./src/v0.8/dev # 91 warnings #./src/v0.8/functions diff --git a/contracts/package.json b/contracts/package.json index f4a646f11b7..f062be3d8b4 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -18,7 +18,7 @@ "prepublishOnly": "pnpm compile && ./scripts/prepublish_generate_abi_folder", "publish-beta": "pnpm publish --tag beta", "publish-prod": "npm dist-tag add @chainlink/contracts@0.8.0 latest", - "solhint": "solhint --max-warnings 493 \"./src/v0.8/**/*.sol\"" + "solhint": "solhint --max-warnings 442 \"./src/v0.8/**/*.sol\"" }, "files": [ "src/v0.8", diff --git a/contracts/src/v0.8/dev/ocr2/OCR2Abstract.sol b/contracts/src/v0.8/dev/ocr2/OCR2Abstract.sol deleted file mode 100644 index a1066ffcf5e..00000000000 --- a/contracts/src/v0.8/dev/ocr2/OCR2Abstract.sol +++ /dev/null @@ -1,134 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../../interfaces/TypeAndVersionInterface.sol"; - -abstract contract OCR2Abstract is TypeAndVersionInterface { - // Maximum number of oracles the offchain reporting protocol is designed for - uint256 internal constant maxNumOracles = 31; - - /** - * @notice triggers a new run of the offchain reporting protocol - * @param previousConfigBlockNumber block in which the previous config was set, to simplify historic analysis - * @param configDigest configDigest of this configuration - * @param configCount ordinal number of this config setting among all config settings over the life of this contract - * @param signers ith element is address ith oracle uses to sign a report - * @param transmitters ith element is address ith oracle uses to transmit a report via the transmit method - * @param f maximum number of faulty/dishonest oracles the protocol can tolerate while still working correctly - * @param onchainConfig serialized configuration used by the contract (and possibly oracles) - * @param offchainConfigVersion version of the serialization format used for "offchainConfig" parameter - * @param offchainConfig serialized configuration used by the oracles exclusively and only passed through the contract - */ - event ConfigSet( - uint32 previousConfigBlockNumber, - bytes32 configDigest, - uint64 configCount, - address[] signers, - address[] transmitters, - uint8 f, - bytes onchainConfig, - uint64 offchainConfigVersion, - bytes offchainConfig - ); - - /** - * @notice sets offchain reporting protocol configuration incl. participating oracles - * @param signers addresses with which oracles sign the reports - * @param transmitters addresses oracles use to transmit the reports - * @param f number of faulty oracles the system can tolerate - * @param onchainConfig serialized configuration used by the contract (and possibly oracles) - * @param offchainConfigVersion version number for offchainEncoding schema - * @param offchainConfig serialized configuration used by the oracles exclusively and only passed through the contract - */ - function setConfig( - address[] memory signers, - address[] memory transmitters, - uint8 f, - bytes memory onchainConfig, - uint64 offchainConfigVersion, - bytes memory offchainConfig - ) external virtual; - - /** - * @notice information about current offchain reporting protocol configuration - * @return configCount ordinal number of current config, out of all configs applied to this contract so far - * @return blockNumber block at which this config was set - * @return configDigest domain-separation tag for current config (see _configDigestFromConfigData) - */ - function latestConfigDetails() - external - view - virtual - returns (uint32 configCount, uint32 blockNumber, bytes32 configDigest); - - function _configDigestFromConfigData( - uint256 chainId, - address contractAddress, - uint64 configCount, - address[] memory signers, - address[] memory transmitters, - uint8 f, - bytes memory onchainConfig, - uint64 offchainConfigVersion, - bytes memory offchainConfig - ) internal pure returns (bytes32) { - uint256 h = uint256( - keccak256( - abi.encode( - chainId, - contractAddress, - configCount, - signers, - transmitters, - f, - onchainConfig, - offchainConfigVersion, - offchainConfig - ) - ) - ); - uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00 - uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00 - return bytes32((prefix & prefixMask) | (h & ~prefixMask)); - } - - /** - * @notice optionally emited to indicate the latest configDigest and epoch for - which a report was successfully transmited. Alternatively, the contract may - use latestConfigDigestAndEpoch with scanLogs set to false. - */ - event Transmitted(bytes32 configDigest, uint32 epoch); - - /** - * @notice optionally returns the latest configDigest and epoch for which a - report was successfully transmitted. Alternatively, the contract may return - scanLogs set to true and use Transmitted events to provide this information - to offchain watchers. - * @return scanLogs indicates whether to rely on the configDigest and epoch - returned or whether to scan logs for the Transmitted event instead. - * @return configDigest - * @return epoch - */ - function latestConfigDigestAndEpoch() - external - view - virtual - returns (bool scanLogs, bytes32 configDigest, uint32 epoch); - - /** - * @notice transmit is called to post a new report to the contract - * @param report serialized report, which the signatures are signing. - * @param rs ith element is the R components of the ith signature on report. Must have at most maxNumOracles entries - * @param ss ith element is the S components of the ith signature on report. Must have at most maxNumOracles entries - * @param rawVs ith element is the the V component of the ith signature - */ - function transmit( - // NOTE: If these parameters are changed, expectedMsgDataLength and/or - // TRANSMIT_MSGDATA_CONSTANT_LENGTH_COMPONENT need to be changed accordingly - bytes32[3] calldata reportContext, - bytes calldata report, - bytes32[] calldata rs, - bytes32[] calldata ss, - bytes32 rawVs // signatures - ) external virtual; -} diff --git a/contracts/src/v0.8/dev/transmission/ERC-4337/Paymaster.sol b/contracts/src/v0.8/dev/transmission/ERC-4337/Paymaster.sol index 52d50d2e2c7..cd84bb6a0e0 100644 --- a/contracts/src/v0.8/dev/transmission/ERC-4337/Paymaster.sol +++ b/contracts/src/v0.8/dev/transmission/ERC-4337/Paymaster.sol @@ -1,13 +1,13 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.15; -import "../../../vendor/entrypoint/interfaces/IPaymaster.sol"; -import "./SCALibrary.sol"; -import "../../../vendor/entrypoint/core/Helpers.sol"; -import "../../../shared/interfaces/LinkTokenInterface.sol"; -import "../../../interfaces/AggregatorV3Interface.sol"; -import "./SCALibrary.sol"; -import "../../../shared/access/ConfirmedOwner.sol"; +import {IPaymaster} from "../../../vendor/entrypoint/interfaces/IPaymaster.sol"; +import {SCALibrary} from "./SCALibrary.sol"; +import {LinkTokenInterface} from "../../../shared/interfaces/LinkTokenInterface.sol"; +import {AggregatorV3Interface} from "../../../interfaces/AggregatorV3Interface.sol"; +import {ConfirmedOwner} from "../../../shared/access/ConfirmedOwner.sol"; +import {UserOperation} from "../../../vendor/entrypoint/interfaces/UserOperation.sol"; +import {_packValidationData} from "../../../vendor/entrypoint/core/Helpers.sol"; /// @dev LINK token paymaster implementation. /// TODO: more documentation. @@ -28,8 +28,8 @@ contract Paymaster is IPaymaster, ConfirmedOwner { } Config public s_config; - mapping(bytes32 => bool) userOpHashMapping; - mapping(address => uint256) subscriptions; + mapping(bytes32 => bool) internal s_userOpHashMapping; + mapping(address => uint256) internal s_subscriptions; constructor( LinkTokenInterface linkToken, @@ -54,7 +54,7 @@ contract Paymaster is IPaymaster, ConfirmedOwner { } address subscription = abi.decode(_data, (address)); - subscriptions[subscription] += _amount; + s_subscriptions[subscription] += _amount; } function validatePaymasterUserOp( @@ -65,24 +65,24 @@ contract Paymaster is IPaymaster, ConfirmedOwner { if (msg.sender != i_entryPoint) { revert Unauthorized(msg.sender, i_entryPoint); } - if (userOpHashMapping[userOpHash]) { + if (s_userOpHashMapping[userOpHash]) { revert UserOperationAlreadyTried(userOpHash); } - uint256 extraCostJuels = handleExtraCostJuels(userOp); - uint256 costJuels = getCostJuels(maxCost) + extraCostJuels; - if (subscriptions[userOp.sender] < costJuels) { - revert InsufficientFunds(costJuels, subscriptions[userOp.sender]); + uint256 extraCostJuels = _handleExtraCostJuels(userOp); + uint256 costJuels = _getCostJuels(maxCost) + extraCostJuels; + if (s_subscriptions[userOp.sender] < costJuels) { + revert InsufficientFunds(costJuels, s_subscriptions[userOp.sender]); } - userOpHashMapping[userOpHash] = true; + s_userOpHashMapping[userOpHash] = true; return (abi.encode(userOp.sender, extraCostJuels), _packValidationData(false, 0, 0)); // success } /// @dev Calculates any extra LINK cost for the user operation, based on the funding type passed to the /// @dev paymaster. Handles funding the LINK token funding described in the user operation. /// TODO: add logic for subscription top-up. - function handleExtraCostJuels(UserOperation calldata userOp) internal returns (uint256 extraCost) { + function _handleExtraCostJuels(UserOperation calldata userOp) internal returns (uint256 extraCost) { if (userOp.paymasterAndData.length == 20) { return 0; // no extra data, stop here } @@ -111,14 +111,14 @@ contract Paymaster is IPaymaster, ConfirmedOwner { revert Unauthorized(msg.sender, i_entryPoint); } (address sender, uint256 extraCostJuels) = abi.decode(context, (address, uint256)); - subscriptions[sender] -= (getCostJuels(actualGasCost) + extraCostJuels); + s_subscriptions[sender] -= (_getCostJuels(actualGasCost) + extraCostJuels); } - function getCostJuels(uint256 costWei) internal view returns (uint256 costJuels) { - costJuels = (1e18 * costWei) / uint256(getFeedData()); + function _getCostJuels(uint256 costWei) internal view returns (uint256 costJuels) { + costJuels = (1e18 * costWei) / uint256(_getFeedData()); } - function getFeedData() internal view returns (int256) { + function _getFeedData() internal view returns (int256) { uint32 stalenessSeconds = s_config.stalenessSeconds; bool staleFallback = stalenessSeconds > 0; uint256 timestamp; diff --git a/contracts/src/v0.8/dev/transmission/ERC-4337/SCA.sol b/contracts/src/v0.8/dev/transmission/ERC-4337/SCA.sol index bf1ddf41af9..6a11eecfe00 100644 --- a/contracts/src/v0.8/dev/transmission/ERC-4337/SCA.sol +++ b/contracts/src/v0.8/dev/transmission/ERC-4337/SCA.sol @@ -1,11 +1,12 @@ // SPDX-License-Identifier: MIT -import "../../../vendor/entrypoint/interfaces/IAccount.sol"; -import "./SCALibrary.sol"; -import "../../../vendor/entrypoint/core/Helpers.sol"; - /// TODO: decide on a compiler version. Must not be dynamic, and must be > 0.8.12. pragma solidity 0.8.15; +import {IAccount} from "../../../vendor/entrypoint/interfaces/IAccount.sol"; +import {SCALibrary} from "./SCALibrary.sol"; +import {UserOperation} from "../../../vendor/entrypoint/interfaces/UserOperation.sol"; +import {_packValidationData} from "../../../vendor/entrypoint/core/Helpers.sol"; + /// @dev Smart Contract Account, a contract deployed for a single user and that allows /// @dev them to invoke meta-transactions. /// TODO: Consider making the Smart Contract Account upgradeable. @@ -39,9 +40,9 @@ contract SCA is IAccount { } // Verify signature on hash. - bytes32 fullHash = SCALibrary.getUserOpFullHash(userOpHash, address(this)); + bytes32 fullHash = SCALibrary._getUserOpFullHash(userOpHash, address(this)); bytes memory signature = userOp.signature; - if (SCALibrary.recoverSignature(signature, fullHash) != i_owner) { + if (SCALibrary._recoverSignature(signature, fullHash) != i_owner) { return _packValidationData(true, 0, 0); // signature error } s_nonce++; diff --git a/contracts/src/v0.8/dev/transmission/ERC-4337/SCALibrary.sol b/contracts/src/v0.8/dev/transmission/ERC-4337/SCALibrary.sol index 23c865c2e5d..47587e278f4 100644 --- a/contracts/src/v0.8/dev/transmission/ERC-4337/SCALibrary.sol +++ b/contracts/src/v0.8/dev/transmission/ERC-4337/SCALibrary.sol @@ -19,7 +19,7 @@ library SCALibrary { uint256 topupAmount; } - function getUserOpFullHash(bytes32 userOpHash, address scaAddress) internal view returns (bytes32 fullHash) { + function _getUserOpFullHash(bytes32 userOpHash, address scaAddress) internal view returns (bytes32 fullHash) { bytes32 hashOfEncoding = keccak256(abi.encode(SCALibrary.TYPEHASH, userOpHash)); fullHash = keccak256( abi.encodePacked( @@ -33,7 +33,7 @@ library SCALibrary { ); } - function recoverSignature(bytes memory signature, bytes32 fullHash) internal pure returns (address) { + function _recoverSignature(bytes memory signature, bytes32 fullHash) internal pure returns (address) { bytes32 r; bytes32 s; assembly { diff --git a/contracts/src/v0.8/dev/transmission/testhelpers/SmartContractAccountHelper.sol b/contracts/src/v0.8/dev/transmission/testhelpers/SmartContractAccountHelper.sol index 108cd5477ac..c33df49d16b 100644 --- a/contracts/src/v0.8/dev/transmission/testhelpers/SmartContractAccountHelper.sol +++ b/contracts/src/v0.8/dev/transmission/testhelpers/SmartContractAccountHelper.sol @@ -1,11 +1,12 @@ -import "../ERC-4337/SCA.sol"; -import "../ERC-4337/SmartContractAccountFactory.sol"; -import "../ERC-4337/SCALibrary.sol"; - +// SPDX-License-Identifier: MIT pragma solidity ^0.8.15; +import {SCA} from "../ERC-4337/SCA.sol"; +import {SmartContractAccountFactory} from "../ERC-4337/SmartContractAccountFactory.sol"; +import {SCALibrary} from "../ERC-4337/SCALibrary.sol"; + library SmartContractAccountHelper { - bytes constant initailizeCode = type(SCA).creationCode; + bytes internal constant INITIALIZE_CODE = type(SCA).creationCode; function getFullEndTxEncoding( address endContract, @@ -20,14 +21,14 @@ library SmartContractAccountHelper { } function getFullHashForSigning(bytes32 userOpHash, address scaAddress) public view returns (bytes32) { - return SCALibrary.getUserOpFullHash(userOpHash, scaAddress); + return SCALibrary._getUserOpFullHash(userOpHash, scaAddress); } function getSCAInitCodeWithConstructor( address owner, address entryPoint ) public pure returns (bytes memory initCode) { - initCode = bytes.concat(initailizeCode, abi.encode(owner, entryPoint)); + initCode = bytes.concat(INITIALIZE_CODE, abi.encode(owner, entryPoint)); } function getInitCode( @@ -36,7 +37,7 @@ library SmartContractAccountHelper { address entryPoint ) external pure returns (bytes memory initCode) { bytes32 salt = bytes32(uint256(uint160(owner)) << 96); - bytes memory initializeCodeWithConstructor = bytes.concat(initailizeCode, abi.encode(owner, entryPoint)); + bytes memory initializeCodeWithConstructor = bytes.concat(INITIALIZE_CODE, abi.encode(owner, entryPoint)); initCode = bytes.concat( bytes20(address(factory)), abi.encodeWithSelector( @@ -54,7 +55,7 @@ library SmartContractAccountHelper { address factory ) external pure returns (address) { bytes32 salt = bytes32(uint256(uint160(owner)) << 96); - bytes memory initializeCodeWithConstructor = bytes.concat(initailizeCode, abi.encode(owner, entryPoint)); + bytes memory initializeCodeWithConstructor = bytes.concat(INITIALIZE_CODE, abi.encode(owner, entryPoint)); bytes32 initializeCodeHash = keccak256(initializeCodeWithConstructor); return address(uint160(uint256(keccak256(abi.encodePacked(hex"ff", address(factory), salt, initializeCodeHash))))); } @@ -63,7 +64,7 @@ library SmartContractAccountHelper { address recipient, uint256 topupThreshold, uint256 topupAmount - ) external view returns (bytes memory) { + ) external pure returns (bytes memory) { SCALibrary.DirectFundingData memory data = SCALibrary.DirectFundingData({ recipient: recipient, topupThreshold: topupThreshold, diff --git a/contracts/src/v0.8/dev/Flags.sol b/contracts/src/v0.8/l2ep/dev/Flags.sol similarity index 88% rename from contracts/src/v0.8/dev/Flags.sol rename to contracts/src/v0.8/l2ep/dev/Flags.sol index a06a67026f3..b943c06d0c3 100644 --- a/contracts/src/v0.8/dev/Flags.sol +++ b/contracts/src/v0.8/l2ep/dev/Flags.sol @@ -1,12 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.6; -import "../shared/access/SimpleReadAccessController.sol"; -import "../shared/interfaces/AccessControllerInterface.sol"; -import "../interfaces/TypeAndVersionInterface.sol"; +import {SimpleReadAccessController} from "../../shared/access/SimpleReadAccessController.sol"; +import {AccessControllerInterface} from "../../shared/interfaces/AccessControllerInterface.sol"; +import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol"; /* dev dependencies - to be re/moved after audit */ -import "./interfaces/FlagsInterface.sol"; +import {FlagsInterface} from "./interfaces/FlagsInterface.sol"; /** * @title The Flags contract @@ -17,11 +17,12 @@ import "./interfaces/FlagsInterface.sol"; * An expected pattern is to allow addresses to raise flags on themselves, so if you are subscribing to * FlagOn events you should filter for addresses you care about. */ -contract Flags is TypeAndVersionInterface, FlagsInterface, SimpleReadAccessController { +// solhint-disable custom-errors +contract Flags is ITypeAndVersion, FlagsInterface, SimpleReadAccessController { AccessControllerInterface public raisingAccessController; AccessControllerInterface public loweringAccessController; - mapping(address => bool) private flags; + mapping(address => bool) private s_flags; event FlagRaised(address indexed subject); event FlagLowered(address indexed subject); @@ -43,7 +44,7 @@ contract Flags is TypeAndVersionInterface, FlagsInterface, SimpleReadAccessContr * - Flags 1.1.0: upgraded to solc 0.8, added lowering access controller * - Flags 1.0.0: initial release * - * @inheritdoc TypeAndVersionInterface + * @inheritdoc ITypeAndVersion */ function typeAndVersion() external pure virtual override returns (string memory) { return "Flags 1.1.0"; @@ -56,7 +57,7 @@ contract Flags is TypeAndVersionInterface, FlagsInterface, SimpleReadAccessContr * false value indicates that no flag was raised. */ function getFlag(address subject) external view override checkAccess returns (bool) { - return flags[subject]; + return s_flags[subject]; } /** @@ -68,7 +69,7 @@ contract Flags is TypeAndVersionInterface, FlagsInterface, SimpleReadAccessContr function getFlags(address[] calldata subjects) external view override checkAccess returns (bool[] memory) { bool[] memory responses = new bool[](subjects.length); for (uint256 i = 0; i < subjects.length; i++) { - responses[i] = flags[subjects[i]]; + responses[i] = s_flags[subjects[i]]; } return responses; } @@ -161,15 +162,15 @@ contract Flags is TypeAndVersionInterface, FlagsInterface, SimpleReadAccessContr } function _tryToRaiseFlag(address subject) private { - if (!flags[subject]) { - flags[subject] = true; + if (!s_flags[subject]) { + s_flags[subject] = true; emit FlagRaised(subject); } } function _tryToLowerFlag(address subject) private { - if (flags[subject]) { - flags[subject] = false; + if (s_flags[subject]) { + s_flags[subject] = false; emit FlagLowered(subject); } } diff --git a/contracts/src/v0.8/l2ep/dev/arbitrum/ArbitrumSequencerUptimeFeed.sol b/contracts/src/v0.8/l2ep/dev/arbitrum/ArbitrumSequencerUptimeFeed.sol index 8af16ad7b3e..6d8d31a8085 100644 --- a/contracts/src/v0.8/l2ep/dev/arbitrum/ArbitrumSequencerUptimeFeed.sol +++ b/contracts/src/v0.8/l2ep/dev/arbitrum/ArbitrumSequencerUptimeFeed.sol @@ -6,7 +6,7 @@ import {AggregatorInterface} from "../../../interfaces/AggregatorInterface.sol"; import {AggregatorV3Interface} from "../../../interfaces/AggregatorV3Interface.sol"; import {AggregatorV2V3Interface} from "../../../interfaces/AggregatorV2V3Interface.sol"; import {TypeAndVersionInterface} from "../../../interfaces/TypeAndVersionInterface.sol"; -import {FlagsInterface} from "./../../../dev/interfaces/FlagsInterface.sol"; +import {FlagsInterface} from "../interfaces/FlagsInterface.sol"; import {ArbitrumSequencerUptimeFeedInterface} from "../interfaces/ArbitrumSequencerUptimeFeedInterface.sol"; import {SimpleReadAccessController} from "../../../shared/access/SimpleReadAccessController.sol"; diff --git a/contracts/src/v0.8/dev/interfaces/FlagsInterface.sol b/contracts/src/v0.8/l2ep/dev/interfaces/FlagsInterface.sol similarity index 100% rename from contracts/src/v0.8/dev/interfaces/FlagsInterface.sol rename to contracts/src/v0.8/l2ep/dev/interfaces/FlagsInterface.sol diff --git a/contracts/src/v0.8/dev/ocr2/OCR2Base.sol b/contracts/src/v0.8/shared/ocr2/OCR2Base.sol similarity index 91% rename from contracts/src/v0.8/dev/ocr2/OCR2Base.sol rename to contracts/src/v0.8/shared/ocr2/OCR2Base.sol index 5e50d99f213..0f0317602d3 100644 --- a/contracts/src/v0.8/dev/ocr2/OCR2Base.sol +++ b/contracts/src/v0.8/shared/ocr2/OCR2Base.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import "../../shared/access/ConfirmedOwner.sol"; -import "./OCR2Abstract.sol"; +import {ConfirmedOwner} from "../access/ConfirmedOwner.sol"; +import {OCR2Abstract} from "./OCR2Abstract.sol"; /** * @notice Onchain verification of reports from the offchain reporting protocol @@ -14,6 +14,7 @@ import "./OCR2Abstract.sol"; * will be folded directly into the application contract. Inheritance prevents us from doing lots * of juicy storage layout optimizations, leading to a substantial increase in gas cost. */ +// solhint-disable custom-errors abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract { error ReportInvalid(); @@ -23,8 +24,6 @@ abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract { i_uniqueReports = uniqueReports; } - uint256 private constant maxUint32 = (1 << 32) - 1; - // Storing these fields used on the hot path in a ConfigInfo variable reduces the // retrieval of all of them to a single SLOAD. If any further fields are // added, make sure that storage of the struct still takes at most 32 bytes. @@ -159,7 +158,7 @@ abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract { s_latestConfigBlockNumber = uint32(block.number); s_configCount += 1; { - s_configInfo.latestConfigDigest = configDigestFromConfigData( + s_configInfo.latestConfigDigest = _configDigestFromConfigData( block.chainid, address(this), s_configCount, @@ -188,37 +187,6 @@ abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract { _afterSetConfig(args.f, args.onchainConfig); } - function configDigestFromConfigData( - uint256 _chainId, - address _contractAddress, - uint64 _configCount, - address[] memory _signers, - address[] memory _transmitters, - uint8 _f, - bytes memory _onchainConfig, - uint64 _encodedConfigVersion, - bytes memory _encodedConfig - ) internal pure returns (bytes32) { - uint256 h = uint256( - keccak256( - abi.encode( - _chainId, - _contractAddress, - _configCount, - _signers, - _transmitters, - _f, - _onchainConfig, - _encodedConfigVersion, - _encodedConfig - ) - ) - ); - uint256 prefixMask = type(uint256).max << (256 - 16); // 0xFFFF00..00 - uint256 prefix = 0x0001 << (256 - 16); // 0x000100..00 - return bytes32((prefix & prefixMask) | (h & ~prefixMask)); - } - /** * @notice information about current offchain reporting protocol configuration * @return configCount ordinal number of current config, out of all configs applied to this contract so far @@ -290,7 +258,7 @@ abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract { 32 + // word containing length of ss 0; // placeholder - function requireExpectedMsgDataLength( + function _requireExpectedMsgDataLength( bytes calldata report, bytes32[] calldata rs, bytes32[] calldata ss @@ -341,7 +309,7 @@ abstract contract OCR2Base is ConfirmedOwner, OCR2Abstract { ConfigInfo memory configInfo = s_configInfo; require(configInfo.latestConfigDigest == configDigest, "configDigest mismatch"); - requireExpectedMsgDataLength(report, rs, ss); + _requireExpectedMsgDataLength(report, rs, ss); uint256 expectedNumSignatures; if (i_uniqueReports) { diff --git a/contracts/src/v0.8/dev/ocr2/README.md b/contracts/src/v0.8/shared/ocr2/README.md similarity index 100% rename from contracts/src/v0.8/dev/ocr2/README.md rename to contracts/src/v0.8/shared/ocr2/README.md diff --git a/contracts/test/v0.8/dev/ArbitrumSequencerUptimeFeed.test.ts b/contracts/test/v0.8/dev/ArbitrumSequencerUptimeFeed.test.ts index ad1b549acca..4d9ddefd5bf 100644 --- a/contracts/test/v0.8/dev/ArbitrumSequencerUptimeFeed.test.ts +++ b/contracts/test/v0.8/dev/ArbitrumSequencerUptimeFeed.test.ts @@ -44,7 +44,7 @@ describe('ArbitrumSequencerUptimeFeed', () => { accessController = await accessControllerFactory.deploy() const flagsHistoryFactory = await ethers.getContractFactory( - 'src/v0.8/dev/Flags.sol:Flags', + 'src/v0.8/l2ep/dev/Flags.sol:Flags', deployer, ) flags = await flagsHistoryFactory.deploy( diff --git a/contracts/test/v0.8/foundry/transmission/EIP_712_1014_4337.t.sol b/contracts/test/v0.8/foundry/transmission/EIP_712_1014_4337.t.sol index ad7b2999c90..c62e6451bf8 100644 --- a/contracts/test/v0.8/foundry/transmission/EIP_712_1014_4337.t.sol +++ b/contracts/test/v0.8/foundry/transmission/EIP_712_1014_4337.t.sol @@ -135,7 +135,7 @@ contract EIP_712_1014_4337 is BaseTest { // Sign user operation. bytes32 userOpHash = entryPoint.getUserOpHash(op); - bytes32 fullHash = SCALibrary.getUserOpFullHash(userOpHash, toDeployAddress); + bytes32 fullHash = SCALibrary._getUserOpFullHash(userOpHash, toDeployAddress); (uint8 v, bytes32 r, bytes32 s) = vm.sign(END_USER_PKEY, fullHash); op.signature = abi.encodePacked(r, s, v - 27); @@ -195,7 +195,7 @@ contract EIP_712_1014_4337 is BaseTest { // Sign user operation. bytes32 userOpHash = entryPoint.getUserOpHash(op); - bytes32 fullHash = SCALibrary.getUserOpFullHash(userOpHash, toDeployAddress); + bytes32 fullHash = SCALibrary._getUserOpFullHash(userOpHash, toDeployAddress); (uint8 v, bytes32 r, bytes32 s) = vm.sign(END_USER_PKEY, fullHash); op.signature = abi.encodePacked(r, s, v - 27); @@ -260,7 +260,7 @@ contract EIP_712_1014_4337 is BaseTest { // Sign user operation. bytes32 userOpHash = entryPoint.getUserOpHash(op); - bytes32 fullHash = SCALibrary.getUserOpFullHash(userOpHash, toDeployAddress); + bytes32 fullHash = SCALibrary._getUserOpFullHash(userOpHash, toDeployAddress); (uint8 v, bytes32 r, bytes32 s) = vm.sign(END_USER_PKEY, fullHash); op.signature = abi.encodePacked(r, s, v - 27); @@ -338,7 +338,7 @@ contract EIP_712_1014_4337 is BaseTest { }); // Sign user operation. - bytes32 fullHash = SCALibrary.getUserOpFullHash(entryPoint.getUserOpHash(op), toDeployAddress); + bytes32 fullHash = SCALibrary._getUserOpFullHash(entryPoint.getUserOpHash(op), toDeployAddress); op.signature = getSignature(fullHash); // Deposit funds for the transaction. diff --git a/core/gethwrappers/transmission/generated/smart_contract_account_helper/smart_contract_account_helper.go b/core/gethwrappers/transmission/generated/smart_contract_account_helper/smart_contract_account_helper.go index 4bf2e75b97f..add1d2ce51b 100644 --- a/core/gethwrappers/transmission/generated/smart_contract_account_helper/smart_contract_account_helper.go +++ b/core/gethwrappers/transmission/generated/smart_contract_account_helper/smart_contract_account_helper.go @@ -29,7 +29,7 @@ var ( ) var SmartContractAccountHelperMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"calculateSmartContractAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"topupThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"topupAmount\",\"type\":\"uint256\"}],\"name\":\"getAbiEncodedDirectRequestData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"endContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getFullEndTxEncoding\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"encoding\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"scaAddress\",\"type\":\"address\"}],\"name\":\"getFullHashForSigning\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getInitCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSCAInitCodeWithConstructor\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"}],\"name\":\"calculateSmartContractAccountAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"topupThreshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"topupAmount\",\"type\":\"uint256\"}],\"name\":\"getAbiEncodedDirectRequestData\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"endContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"getFullEndTxEncoding\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"encoding\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"userOpHash\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"scaAddress\",\"type\":\"address\"}],\"name\":\"getFullHashForSigning\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"factory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getInitCode\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"entryPoint\",\"type\":\"address\"}],\"name\":\"getSCAInitCodeWithConstructor\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"initCode\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", Bin: "0x61162261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061007c5760003560e01c8063e0237bef1161005a578063e0237bef14610134578063e464b3631461016c578063fc59bac31461017f57600080fd5b80632c86cb35146100815780634b770f561461010057806382311e3314610113575b600080fd5b6100ea61008f36600461076b565b604080516060808201835273ffffffffffffffffffffffffffffffffffffffff959095168082526020808301958652918301938452825191820152925183820152905182840152805180830390930183526080909101905290565b6040516100f79190610818565b60405180910390f35b6100ea61010e36600461082b565b610192565b61012661012136600461086e565b610336565b6040519081526020016100f7565b61014761014236600461082b565b610454565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100f7565b6100ea61017a36600461089a565b6105df565b6100ea61018d3660046108f3565b61069d565b6040516060907fffffffffffffffffffffffffffffffffffffffff00000000000000000000000084831b16906000906101cd60208201610735565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff8881166020840152871690820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261026292916020016109e6565b60405160208183030381529060405290508560601b630af4926f60e01b8383604051602401610292929190610a15565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909516949094179093525161031c939201610a36565b604051602081830303815290604052925050509392505050565b600061044d8383604080517f4750045d47fce615521b32cee713ff8db50147e98aec5ca94926b52651ca3fa060208083019190915281830194909452815180820383018152606080830184528151918601919091207f190000000000000000000000000000000000000000000000000000000000000060808401527f010000000000000000000000000000000000000000000000000000000000000060818401527f1c7d3b72b37a35523e273aaadd7b4cd66f618bb81429ab053412d51f50ccea6160828401524660a284015293901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c282015260d6808201939093528151808203909301835260f6019052805191012090565b9392505050565b6040516000907fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b1690829061049060208201610735565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff8981166020840152881690820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261052592916020016109e6565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815282825280516020918201207fff000000000000000000000000000000000000000000000000000000000000008285015260609790971b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166021840152603583019490945260558083019690965280518083039096018652607590910190525082519201919091209392505050565b6060604051806020016105f190610735565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081815273ffffffffffffffffffffffffffffffffffffffff8681166020840152851690820152606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261068692916020016109e6565b604051602081830303815290604052905092915050565b60607f89553be40000000000000000000000000000000000000000000000000000000085856106cc8642610a7e565b856040516020016106e09493929190610abd565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261071c9291602001610b02565b6040516020818303038152906040529050949350505050565b610acb80610b4b83390190565b803573ffffffffffffffffffffffffffffffffffffffff8116811461076657600080fd5b919050565b60008060006060848603121561078057600080fd5b61078984610742565b95602085013595506040909401359392505050565b60005b838110156107b95781810151838201526020016107a1565b838111156107c8576000848401525b50505050565b600081518084526107e681602086016020860161079e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061044d60208301846107ce565b60008060006060848603121561084057600080fd5b61084984610742565b925061085760208501610742565b915061086560408501610742565b90509250925092565b6000806040838503121561088157600080fd5b8235915061089160208401610742565b90509250929050565b600080604083850312156108ad57600080fd5b6108b683610742565b915061089160208401610742565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000806000806080858703121561090957600080fd5b61091285610742565b93506020850135925060408501359150606085013567ffffffffffffffff8082111561093d57600080fd5b818701915087601f83011261095157600080fd5b813581811115610963576109636108c4565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019083821181831017156109a9576109a96108c4565b816040528281528a60208487010111156109c257600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b600083516109f881846020880161079e565b835190830190610a0c81836020880161079e565b01949350505050565b828152604060208201526000610a2e60408301846107ce565b949350505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008316815260008251610a7081601485016020870161079e565b919091016014019392505050565b60008219821115610ab8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b500190565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152826040820152608060608201526000610af860808301846107ce565b9695505050505050565b7fffffffff000000000000000000000000000000000000000000000000000000008316815260008251610b3c81600485016020870161079e565b91909101600401939250505056fe60c060405234801561001057600080fd5b50604051610acb380380610acb83398101604081905261002f91610062565b6001600160a01b039182166080521660a052610095565b80516001600160a01b038116811461005d57600080fd5b919050565b6000806040838503121561007557600080fd5b61007e83610046565b915061008c60208401610046565b90509250929050565b60805160a051610a046100c760003960008181607101526103c301526000818161010101526102ee0152610a046000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80637eccf63e116100505780637eccf63e146100de57806389553be4146100e7578063dba6335f146100fc57600080fd5b8063140fcfb11461006c5780633a871cdd146100bd575b600080fd5b6100937f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100d06100cb36600461063a565b610123565b6040519081526020016100b4565b6100d060005481565b6100fa6100f53660046106ce565b6103ab565b005b6100937f000000000000000000000000000000000000000000000000000000000000000081565b60008054846020013514610179576000546040517f7ba633940000000000000000000000000000000000000000000000000000000081526004810191909152602085013560248201526044015b60405180910390fd5b60006102908430604080517f4750045d47fce615521b32cee713ff8db50147e98aec5ca94926b52651ca3fa060208083019190915281830194909452815180820383018152606080830184528151918601919091207f190000000000000000000000000000000000000000000000000000000000000060808401527f010000000000000000000000000000000000000000000000000000000000000060818401527f1c7d3b72b37a35523e273aaadd7b4cd66f618bb81429ab053412d51f50ccea6160828401524660a284015293901b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001660c282015260d6808201939093528151808203909301835260f6019052805191012090565b905060006102a261014087018761076b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016915061031c90508284610544565b73ffffffffffffffffffffffffffffffffffffffff161461034d576103446001600080610602565b925050506103a4565b60008054908061035c83610806565b9091555060009050610371606088018861076b565b61037f91600490829061083e565b81019061038c9190610897565b509250505061039e6000826000610602565b93505050505b9392505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461041c576040517f4a0bfec1000000000000000000000000000000000000000000000000000000008152336004820152602401610170565b65ffffffffffff83161580159061043a57508265ffffffffffff1642115b15610481576040517f300249d700000000000000000000000000000000000000000000000000000000815265ffffffffffff84166004820152426024820152604401610170565b6000808673ffffffffffffffffffffffffffffffffffffffff168685856040516104ac929190610993565b60006040518083038185875af1925050503d80600081146104e9576040519150601f19603f3d011682016040523d82523d6000602084013e6104ee565b606091505b50915091508161053b578051600003610533576040517f20e9b5d200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b50505050505050565b602082015160408084015184516000939284918791908110610568576105686109a3565b016020015160f81c905060018561058083601b6109d2565b6040805160008152602081018083529390935260ff90911690820152606081018590526080810184905260a0016020604051602081039080840390855afa1580156105cf573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00151979650505050505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561062a57600061062d565b60015b60ff161717949350505050565b60008060006060848603121561064f57600080fd5b833567ffffffffffffffff81111561066657600080fd5b8401610160818703121561067957600080fd5b95602085013595506040909401359392505050565b73ffffffffffffffffffffffffffffffffffffffff811681146106b057600080fd5b50565b803565ffffffffffff811681146106c957600080fd5b919050565b6000806000806000608086880312156106e657600080fd5b85356106f18161068e565b945060208601359350610706604087016106b3565b9250606086013567ffffffffffffffff8082111561072357600080fd5b818801915088601f83011261073757600080fd5b81358181111561074657600080fd5b89602082850101111561075857600080fd5b9699959850939650602001949392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126107a057600080fd5b83018035915067ffffffffffffffff8211156107bb57600080fd5b6020019150368190038213156107d057600080fd5b9250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610837576108376107d7565b5060010190565b6000808585111561084e57600080fd5b8386111561085b57600080fd5b5050820193919092039150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080600080608085870312156108ad57600080fd5b84356108b88161068e565b9350602085013592506108cd604086016106b3565b9150606085013567ffffffffffffffff808211156108ea57600080fd5b818701915087601f8301126108fe57600080fd5b81358181111561091057610910610868565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561095657610956610868565b816040528281528a602084870101111561096f57600080fd5b82602086016020830137600060208483010152809550505050505092959194509250565b8183823760009101908152919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff821660ff84168060ff038211156109ef576109ef6107d7565b01939250505056fea164736f6c634300080f000aa164736f6c634300080f000a", } diff --git a/core/gethwrappers/transmission/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/transmission/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 3a0a324c80e..8ea0492fa40 100644 --- a/core/gethwrappers/transmission/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/transmission/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -6,4 +6,4 @@ paymaster_wrapper: ../../../contracts/solc/v0.8.15/Paymaster.abi ../../../contra sca: ../../../contracts/solc/v0.8.15/SCA.abi ../../../contracts/solc/v0.8.15/SCA.bin ae0f860cdac87d4ac505edbd228bd3ea1108550453aba67aebcb61f09cf70d0b sca_wrapper: ../../../contracts/solc/v0.8.15/SCA.abi ../../../contracts/solc/v0.8.15/SCA.bin 2a8100fbdb41e6ce917ed333a624eaa4a8984b07e2d8d8ca6bba9bc9f74b05d7 smart_contract_account_factory: ../../../contracts/solc/v0.8.15/SmartContractAccountFactory.abi ../../../contracts/solc/v0.8.15/SmartContractAccountFactory.bin a44d6fa2dbf9cb3441d6d637d89e1cd656f28b6bf4146f58d508067474bf845b -smart_contract_account_helper: ../../../contracts/solc/v0.8.15/SmartContractAccountHelper.abi ../../../contracts/solc/v0.8.15/SmartContractAccountHelper.bin 0db06d3fdb558d152c13bed492301179ea0fcdc6f992990291f1ecabbf836bb9 +smart_contract_account_helper: ../../../contracts/solc/v0.8.15/SmartContractAccountHelper.abi ../../../contracts/solc/v0.8.15/SmartContractAccountHelper.bin 22f960a74bd1581a12aa4f8f438a3f265f32f43682f5c1897ca50707b9982d56