Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: N01-N14: Address Noncritical Issues #728

Merged
merged 28 commits into from
Nov 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
1ecbb3f
fix: remove duplicated logic
bmzig Nov 7, 2024
b1f17b4
improve: allow the removal of adapters
bmzig Nov 7, 2024
5298182
chore: update/fix comments
bmzig Nov 7, 2024
507dba7
chore: remove unused SafeERC20 import
bmzig Nov 7, 2024
5971acc
nit: explicitly define visibility for `chainAdapters`
bmzig Nov 7, 2024
2fbfc88
nit: consistent comments
bmzig Nov 7, 2024
2ad851d
improve: index event fields
bmzig Nov 7, 2024
edfadf4
chore: remove legacy comments
bmzig Nov 7, 2024
75b2974
custom gas token comment
bmzig Nov 7, 2024
b621adf
Merge branch '1124oz/n02' into bz/ozNonCriticals
bmzig Nov 7, 2024
702f21e
Merge branch '1124oz/n04' into bz/ozNonCriticals
bmzig Nov 7, 2024
98100c3
Merge branch '1124oz/n05' into bz/ozNonCriticals
bmzig Nov 7, 2024
467a207
Merge branch '1124oz/n07' into bz/ozNonCriticals
bmzig Nov 7, 2024
30b1ecb
Merge branch '1124oz/n08' into bz/ozNonCriticals
bmzig Nov 7, 2024
e13dd1f
Merge branch '1124oz/n09' into bz/ozNonCriticals
bmzig Nov 7, 2024
06bd68d
Merge branch '1124oz/n13' into bz/ozNonCriticals
bmzig Nov 7, 2024
c335be2
use consistent pragmas
bmzig Nov 7, 2024
36b4869
N-03: Unused Struct
bmzig Nov 8, 2024
3df9450
N-11: File and Contract Names Mismatch
bmzig Nov 8, 2024
813bf95
N-12: Constant Could be Used to Denote ETH on L2s
bmzig Nov 8, 2024
88ae26a
N-14 Incorrect Interface Implementation
bmzig Nov 8, 2024
03a0d1a
N-10 Naming Suggestions
bmzig Nov 12, 2024
416c1b4
Revert "N-03: Unused Struct"
bmzig Nov 14, 2024
12c4d53
Merge master and update hardhat.config.ts
bmzig Nov 15, 2024
b6cae1c
Merge 'master' and make pragmas consistent
bmzig Nov 18, 2024
79b75ae
delete duplicate file
bmzig Nov 18, 2024
8ee3938
Merge branch 'master' into 1124oz/nonCriticals
bmzig Nov 18, 2024
8e43769
consolidate updateAdapter and change arbitrum spoke pool pragma
bmzig Nov 18, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 1 addition & 4 deletions contracts/Arbitrum_SpokePool.sol
pxrl marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1

// Arbitrum only supports v0.8.19
// See https://docs.arbitrum.io/for-devs/concepts/differences-between-arbitrum-ethereum/solidity-support#differences-from-solidity-on-ethereum
pragma solidity ^0.8.19;
pragma solidity ^0.8.0;

import "./SpokePool.sol";
import "./libraries/CircleCCTPAdapter.sol";
Expand Down
2 changes: 1 addition & 1 deletion contracts/SpokePool.sol
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ pragma solidity ^0.8.0;

import "./MerkleLib.sol";
import "./erc7683/ERC7683.sol";
import "./erc7683/ERC7683Across.sol";
import "./erc7683/ERC7683Permit2Lib.sol";
import "./external/interfaces/WETH9Interface.sol";
import "./interfaces/SpokePoolMessageHandler.sol";
import "./interfaces/SpokePoolInterface.sol";
Expand Down
7 changes: 2 additions & 5 deletions contracts/chain-adapters/ForwarderBase.sol
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ abstract contract ForwarderBase is UUPSUpgradeable, ForwarderInterface, MultiCal
// the network ID of an L3. These chain IDs are used as the key in this mapping because network IDs are enforced to be unique. Since we require the chain
// ID to be sent along with a message or token relay, ForwarderInterface's relay functions include an extra field, `destinationChainId`, when compared to the
// relay functions of `AdapterInterface`.
mapping(uint256 => address) chainAdapters;
mapping(uint256 => address) public chainAdapters;
pxrl marked this conversation as resolved.
Show resolved Hide resolved

// An array of which contains all token relays sent to this forwarder. A token relay is only stored here if it is received from the L1 cross domain admin.
// Each TokenRelay element contains a yes/no value describing whether or not the token relay has been executed. TokenRelays can only ever be executed once,
// but anybody can execute a stored TokenRelay in the array.
Expand All @@ -38,7 +39,6 @@ abstract contract ForwarderBase is UUPSUpgradeable, ForwarderInterface, MultiCal
event SetXDomainAdmin(address indexed crossDomainAdmin);

error InvalidCrossDomainAdmin();
error InvalidChainAdapter();
error InvalidTokenRelayId();
// Error which is triggered when there is no adapter set in the `chainAdapters` mapping.
error UninitializedChainAdapter();
Expand Down Expand Up @@ -90,9 +90,7 @@ abstract contract ForwarderBase is UUPSUpgradeable, ForwarderInterface, MultiCal
* as the L1 sender is the old cross-domain admin.
*/
function setCrossDomainAdmin(address _newCrossDomainAdmin) external onlyAdmin {
if (_newCrossDomainAdmin == address(0)) revert InvalidCrossDomainAdmin();
_setCrossDomainAdmin(_newCrossDomainAdmin);
emit SetXDomainAdmin(_newCrossDomainAdmin);
}
pxrl marked this conversation as resolved.
Show resolved Hide resolved

/**
Expand All @@ -103,7 +101,6 @@ abstract contract ForwarderBase is UUPSUpgradeable, ForwarderInterface, MultiCal
* L3 (e.g. ArbitrumOrbit, OpStack, etc.).
*/
function updateAdapter(uint256 _destinationChainId, address _l2Adapter) external onlyAdmin {
if (_l2Adapter == address(0)) revert InvalidChainAdapter();
chainAdapters[_destinationChainId] = _l2Adapter;
emit ChainAdaptersUpdated(_destinationChainId, _l2Adapter);
}
Expand Down
2 changes: 1 addition & 1 deletion contracts/chain-adapters/Router_Adapter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ contract Router_Adapter is AdapterInterface {
* contracts.
* @param message Data to send to `target`.
* @dev The message passed into this function is wrapped into a `relayMessage` function call, which is then passed
* to L2. The `L2_TARGET` contract implements AdapterInterface, so upon arrival on L2, the arguments to the L2 contract's
* to L2. The `L2_TARGET` contract implements ForwarderInterface, so upon arrival on L2, the arguments to the L2 contract's
pxrl marked this conversation as resolved.
Show resolved Hide resolved
* `relayMessage` call will be these `target` and `message` values. From there, the forwarder derives the next appropriate
* method to send `message` to the following layers and ultimately to the target on L3.
*/
Expand Down
10 changes: 7 additions & 3 deletions contracts/chain-adapters/ZkStack_Adapter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,11 @@ import { BridgeHubInterface } from "../interfaces/ZkStackBridgeHub.sol";
contract ZkStack_Adapter is AdapterInterface {
using SafeERC20 for IERC20;

// The ZkSync bridgehub contract treats address(1) to represent ETH.
address private constant ETH_TOKEN_ADDRESS = address(1);
pxrl marked this conversation as resolved.
Show resolved Hide resolved
nicholaspai marked this conversation as resolved.
Show resolved Hide resolved

// We need to pay a base fee to the operator to include our L1 --> L2 transaction.
// https://era.zksync.io/docs/dev/developer-guides/bridging/l1-l2.html#getting-the-base-cost
// https://docs.zksync.io/build/developer-reference/l1-l2-interoperability#l1-to-l2-gas-estimation-for-transactions
pxrl marked this conversation as resolved.
Show resolved Hide resolved

// Limit on L2 gas to spend.
uint256 public immutable L2_GAS_LIMIT; // typically 2_000_000
Expand Down Expand Up @@ -53,7 +56,8 @@ contract ZkStack_Adapter is AdapterInterface {
// when calling a hub pool message relay, which would otherwise cause a large amount of ETH to be sent to L2.
uint256 private immutable MAX_TX_GASPRICE;

event ZkStackMessageRelayed(bytes32 canonicalTxHash);
event ZkStackMessageRelayed(bytes32 indexed canonicalTxHash);
pxrl marked this conversation as resolved.
Show resolved Hide resolved

error ETHGasTokenRequired();
error TransactionFeeTooHigh();

Expand Down Expand Up @@ -85,7 +89,7 @@ contract ZkStack_Adapter is AdapterInterface {
L1_GAS_TO_L2_GAS_PER_PUB_DATA_LIMIT = _l1GasToL2GasPerPubDataLimit;
SHARED_BRIDGE = BRIDGE_HUB.sharedBridge();
address gasToken = BRIDGE_HUB.baseToken(CHAIN_ID);
if (gasToken != address(1)) {
if (gasToken != ETH_TOKEN_ADDRESS) {
pxrl marked this conversation as resolved.
Show resolved Hide resolved
revert ETHGasTokenRequired();
}
}
Expand Down
11 changes: 7 additions & 4 deletions contracts/chain-adapters/ZkStack_CustomGasToken_Adapter.sol
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,11 @@ interface FunderInterface {
contract ZkStack_CustomGasToken_Adapter is AdapterInterface {
using SafeERC20 for IERC20;

// The ZkSync bridgehub contract treats address(1) to represent ETH.
address private constant ETH_TOKEN_ADDRESS = address(1);
pxrl marked this conversation as resolved.
Show resolved Hide resolved

// We need to pay a base fee to the operator to include our L1 --> L2 transaction.
// https://era.zksync.io/docs/dev/developer-guides/bridging/l1-l2.html#getting-the-base-cost
// https://docs.zksync.io/build/developer-reference/l1-l2-interoperability#l1-to-l2-gas-estimation-for-transactions

// Limit on L2 gas to spend.
uint256 public immutable L2_GAS_LIMIT; // typically 2_000_000
Expand Down Expand Up @@ -74,7 +77,7 @@ contract ZkStack_CustomGasToken_Adapter is AdapterInterface {
// when calling a hub pool message relay, which would otherwise cause a large amount of the custom gas token to be sent to L2.
uint256 private immutable MAX_TX_GASPRICE;

event ZkStackMessageRelayed(bytes32 canonicalTxHash);
event ZkStackMessageRelayed(bytes32 indexed canonicalTxHash);
bmzig marked this conversation as resolved.
Show resolved Hide resolved
pxrl marked this conversation as resolved.
Show resolved Hide resolved
error ETHGasTokenNotAllowed();
error TransactionFeeTooHigh();

Expand Down Expand Up @@ -109,7 +112,7 @@ contract ZkStack_CustomGasToken_Adapter is AdapterInterface {
L1_GAS_TO_L2_GAS_PER_PUB_DATA_LIMIT = _l1GasToL2GasPerPubDataLimit;
SHARED_BRIDGE = BRIDGE_HUB.sharedBridge();
CUSTOM_GAS_TOKEN = BRIDGE_HUB.baseToken(CHAIN_ID);
if (CUSTOM_GAS_TOKEN == address(1)) {
if (CUSTOM_GAS_TOKEN == ETH_TOKEN_ADDRESS) {
pxrl marked this conversation as resolved.
Show resolved Hide resolved
revert ETHGasTokenNotAllowed();
}
}
Expand Down Expand Up @@ -179,7 +182,7 @@ contract ZkStack_CustomGasToken_Adapter is AdapterInterface {
refundRecipient: L2_REFUND_ADDRESS,
secondBridgeAddress: SHARED_BRIDGE,
secondBridgeValue: amount,
secondBridgeCalldata: _secondBridgeCalldata(to, address(1), 0)
secondBridgeCalldata: _secondBridgeCalldata(to, ETH_TOKEN_ADDRESS, 0)
})
);
} else if (l1Token == CUSTOM_GAS_TOKEN) {
Expand Down
7 changes: 2 additions & 5 deletions contracts/chain-adapters/l2/Arbitrum_WithdrawalHelper.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
// SPDX-License-Identifier: BUSL-1.1

// Arbitrum only supports v0.8.19
// See https://docs.arbitrum.io/for-devs/concepts/differences-between-arbitrum-ethereum/solidity-support#differences-from-solidity-on-ethereum
pxrl marked this conversation as resolved.
Show resolved Hide resolved
pragma solidity ^0.8.19;
pragma solidity ^0.8.0;

import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
Expand Down Expand Up @@ -53,7 +50,7 @@ contract Arbitrum_WithdrawalHelper is WithdrawalHelperBase {

/**
* @notice Initializes the withdrawal helper contract.
* @param _crossDomainAdmin L1 address of the contract which can send root bundles/messages to this forwarder contract.
* @param _crossDomainAdmin L1 address of the contract which may execute admin functions on this contract.
pxrl marked this conversation as resolved.
Show resolved Hide resolved
*/
function initialize(address _crossDomainAdmin) public initializer {
__WithdrawalHelper_init(_crossDomainAdmin);
Expand Down
3 changes: 0 additions & 3 deletions contracts/chain-adapters/l2/Ovm_WithdrawalHelper.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.8.0;

import { WithdrawalHelperBase } from "./WithdrawalHelperBase.sol";
Expand Down Expand Up @@ -58,8 +57,6 @@ contract Ovm_WithdrawalHelper is WithdrawalHelperBase {
* is 0.
* @param _l2Gateway Address of the Optimism ERC20 L2 standard bridge contract.
* @param _tokenRecipient The L1 address which will unconditionally receive tokens from withdrawals by this contract.
* @param _crossDomainAdmin Address of the admin on L1. This address is the only one which may tell this contract to send tokens to an
* L2 address.
pxrl marked this conversation as resolved.
Show resolved Hide resolved
* @param _spokePool The contract address of the Ovm_SpokePool which is deployed on this L2 network.
*/
constructor(
Expand Down
11 changes: 3 additions & 8 deletions contracts/chain-adapters/l2/WithdrawalHelperBase.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
// SPDX-License-Identifier: BUSL-1.1
pragma solidity ^0.8.19;
pragma solidity ^0.8.0;

import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
pxrl marked this conversation as resolved.
Show resolved Hide resolved
import { MultiCaller } from "@uma/core/contracts/common/implementation/MultiCaller.sol";
import { CircleCCTPAdapter, ITokenMessenger, CircleDomainIds } from "../../libraries/CircleCCTPAdapter.sol";
import { WETH9Interface } from "../../external/interfaces/WETH9Interface.sol";
Expand All @@ -13,12 +12,10 @@ import { UUPSUpgradeable } from "@openzeppelin/contracts-upgradeable/proxy/utils
* @notice This contract contains general configurations for bridging tokens from an L2 to a single recipient on L1.
* @dev This contract should be deployed on L2. It provides an interface to withdraw tokens to some address on L1. The only
* function which must be implemented in contracts which inherit this contract is `withdrawToken`. It is up to that function
* to determine which bridges to use for an input L2 token. Importantly, that function must also verify that the l2 to l1
* to determine which bridges to use for an input L2 token. Importantly, that function must also verify that the L2 to L1
pxrl marked this conversation as resolved.
Show resolved Hide resolved
* token mapping is correct so that the bridge call itself can succeed.
*/
abstract contract WithdrawalHelperBase is CircleCCTPAdapter, MultiCaller, UUPSUpgradeable {
using SafeERC20 for IERC20;

pxrl marked this conversation as resolved.
Show resolved Hide resolved
// The L2 address of the wrapped native token for this L2.
WETH9Interface public immutable WRAPPED_NATIVE_TOKEN;
// The L1 address which will unconditionally receive all withdrawals from this contract.
Expand All @@ -29,7 +26,7 @@ abstract contract WithdrawalHelperBase is CircleCCTPAdapter, MultiCaller, UUPSUp
// on this withdrawal helper contract, similar to how it may send admin functions to spoke pools.
address public crossDomainAdmin;

event SetXDomainAdmin(address _crossDomainAdmin);
event SetXDomainAdmin(address indexed _crossDomainAdmin);
pxrl marked this conversation as resolved.
Show resolved Hide resolved

// Error which triggers when the cross domain admin was attempted to be set to the zero address.
error InvalidCrossDomainAdmin();
Expand All @@ -50,8 +47,6 @@ abstract contract WithdrawalHelperBase is CircleCCTPAdapter, MultiCaller, UUPSUp
* @param _destinationCircleDomainId Circle's assigned CCTP domain ID for the destination network.
* @param _l2TokenGateway Address of the network's l2 token gateway/bridge contract.
* @param _tokenRecipient L1 address which will unconditionally receive all withdrawals originating from this contract.
* @param _crossDomainAdmin Address of the admin on L1. This address is the only one which may tell this contract to send tokens to an
* L2 address.
pxrl marked this conversation as resolved.
Show resolved Hide resolved
* @dev _disableInitializers() restricts anybody from initializing the implementation contract, which if not done,
* may disrupt the proxy if another EOA were to initialize it.
*/
Expand Down
10 changes: 5 additions & 5 deletions contracts/erc7683/ERC7683OrderDepositor.sol
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

import { Output, GaslessCrossChainOrder, OnchainCrossChainOrder, ResolvedCrossChainOrder, IOriginSettler, FillInstruction } from "./ERC7683.sol";
import { AcrossOrderData, AcrossOriginFillerData, ERC7683Permit2Lib, ACROSS_ORDER_DATA_TYPE_HASH } from "./ERC7683Across.sol";
import { AcrossOrderData, AcrossOriginFillerData, ERC7683Permit2Lib, ACROSS_ORDER_DATA_TYPE_HASH } from "./ERC7683Permit2Lib.sol";

/**
* @notice ERC7683OrderDepositor processes an external order type and translates it into an AcrossV3 deposit.
Expand Down Expand Up @@ -46,18 +46,18 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
* @dev This will pull in the user's funds and make the order available to be filled.
* @param order the ERC7683 compliant order.
* @param signature signature for the EIP-712 compliant order type.
* @param fillerData Across-specific fillerData.
* @param originFillerData Across-specific fillerData.
*/
function openFor(
GaslessCrossChainOrder calldata order,
bytes calldata signature,
bytes calldata fillerData
bytes calldata originFillerData
) external {
(
ResolvedCrossChainOrder memory resolvedOrder,
AcrossOrderData memory acrossOrderData,
AcrossOriginFillerData memory acrossOriginFillerData
) = _resolveFor(order, fillerData);
) = _resolveFor(order, originFillerData);
pxrl marked this conversation as resolved.
Show resolved Hide resolved

// Verify Permit2 signature and pull user funds into this contract
_processPermit2Order(order, acrossOrderData, signature);
Expand Down Expand Up @@ -357,7 +357,7 @@ abstract contract ERC7683OrderDepositor is IOriginSettler {
address exclusiveRelayer,
uint32 quoteTimestamp,
uint32 fillDeadline,
uint32 exclusivityDeadline,
uint32 exclusivityPeriod,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

N-10 OK.

fwiw, now that the exclusivity input is contextual, I think exclusivityDeadline is objectively a better name than exclusivityPeriod (...and has the benefit of being backwards compatible with what the API currently returns. It might be preferable to revert to that in order to reduce integrator confusion.

@mrice32 @nicholaspai Any thoughts?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think exclusivityDeadline is objectively a better name than exclusivityPeriod

Are you saying this because we'd only specify exclusivity as a timestamp when initiating 7683 orders? Even for both gasless and gasful deposits?

bytes memory message
) internal virtual;

Expand Down
pxrl marked this conversation as resolved.
Show resolved Hide resolved
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

N-11

Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ bytes32 constant ACROSS_ORDER_DATA_TYPE_HASH = keccak256(ACROSS_ORDER_DATA_TYPE)
* @custom:security-contact bugs@across.to
*/
library ERC7683Permit2Lib {
bytes internal constant CROSS_CHAIN_ORDER_TYPE =
bytes internal constant GASLESS_CROSS_CHAIN_ORDER_TYPE =
abi.encodePacked(
"GaslessCrossChainOrder(",
"address originSettler,",
Expand All @@ -59,17 +59,17 @@ library ERC7683Permit2Lib {
"AcrossOrderData orderData)"
);

bytes internal constant CROSS_CHAIN_ORDER_EIP712_TYPE =
abi.encodePacked(CROSS_CHAIN_ORDER_TYPE, ACROSS_ORDER_DATA_TYPE);
bytes32 internal constant CROSS_CHAIN_ORDER_TYPE_HASH = keccak256(CROSS_CHAIN_ORDER_EIP712_TYPE);
bytes internal constant GASLESS_CROSS_CHAIN_ORDER_EIP712_TYPE =
bmzig marked this conversation as resolved.
Show resolved Hide resolved
abi.encodePacked(GASLESS_CROSS_CHAIN_ORDER_TYPE, ACROSS_ORDER_DATA_TYPE);
bytes32 internal constant GASLESS_CROSS_CHAIN_ORDER_TYPE_HASH = keccak256(GASLESS_CROSS_CHAIN_ORDER_EIP712_TYPE);

string private constant TOKEN_PERMISSIONS_TYPE = "TokenPermissions(address token,uint256 amount)";
string internal constant PERMIT2_ORDER_TYPE =
string(
abi.encodePacked(
"GaslessCrossChainOrder witness)",
ACROSS_ORDER_DATA_TYPE,
CROSS_CHAIN_ORDER_TYPE,
GASLESS_CROSS_CHAIN_ORDER_TYPE,
TOKEN_PERMISSIONS_TYPE
)
);
Expand All @@ -79,7 +79,7 @@ library ERC7683Permit2Lib {
return
keccak256(
abi.encode(
CROSS_CHAIN_ORDER_TYPE_HASH,
GASLESS_CROSS_CHAIN_ORDER_TYPE_HASH,
order.originSettler,
order.user,
order.nonce,
Expand Down
13 changes: 0 additions & 13 deletions hardhat.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,19 +67,6 @@ const config: HardhatUserConfig = {
compilers: [DEFAULT_CONTRACT_COMPILER_SETTINGS],
overrides: {
"contracts/HubPool.sol": LARGE_CONTRACT_COMPILER_SETTINGS,
"contracts/Arbitrum_SpokePool.sol": {
...DEFAULT_CONTRACT_COMPILER_SETTINGS,
// NOTE: Arbitrum, only supports 0.8.19.
// See https://docs.arbitrum.io/for-devs/concepts/differences-between-arbitrum-ethereum/solidity-support#differences-from-solidity-on-ethereum
version: "0.8.19",
},
"contracts/AlephZero_SpokePool.sol": {
...DEFAULT_CONTRACT_COMPILER_SETTINGS,
// NOTE: Arbitrum, only supports 0.8.19.
// See https://docs.arbitrum.io/for-devs/concepts/differences-between-arbitrum-ethereum/solidity-support#differences-from-solidity-on-ethereum
version: "0.8.19",
},
// "contracts/Polygon_SpokePool.sol": MEDIUM_CONTRACT_COMPILER_SETTINGS,
"contracts/Linea_SpokePool.sol": {
...DEFAULT_CONTRACT_COMPILER_SETTINGS,
// NOTE: Linea only supports 0.8.19.
Expand Down
Loading