Constants.sol 2.7 KB
Newer Older
1 2 3
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

4 5
import { ResourceMetering } from "../L1/ResourceMetering.sol";

6 7 8 9
/// @title Constants
/// @notice Constants is a library for storing constants. Simple! Don't put everything in here, just
///         the stuff used in multiple contracts. Constants that only apply to a single contract
///         should be defined in that contract instead.
10
library Constants {
11 12 13 14 15 16
    /// @notice Special address to be used as the tx origin for gas estimation calls in the
    ///         OptimismPortal and CrossDomainMessenger calls. You only need to use this address if
    ///         the minimum gas limit specified by the user is not actually enough to execute the
    ///         given message and you're attempting to estimate the actual necessary gas limit. We
    ///         use address(1) because it's the ecrecover precompile and therefore guaranteed to
    ///         never have any code on any EVM chain.
17
    address internal constant ESTIMATION_ADDRESS = address(1);
18

19 20 21
    /// @notice Value used for the L2 sender storage slot in both the OptimismPortal and the
    ///         CrossDomainMessenger contracts before an actual sender is set. This value is
    ///         non-zero to reduce the gas cost of message passing transactions.
22
    address internal constant DEFAULT_L2_SENDER = 0x000000000000000000000000000000000000dEaD;
23

24 25 26 27 28 29 30 31 32
    /// @notice The storage slot that holds the address of a proxy implementation.
    /// @dev `bytes32(uint256(keccak256('eip1967.proxy.implementation')) - 1)`
    bytes32 internal constant PROXY_IMPLEMENTATION_ADDRESS =
        0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;

    /// @notice The storage slot that holds the address of the owner.
    /// @dev `bytes32(uint256(keccak256('eip1967.proxy.admin')) - 1)`
    bytes32 internal constant PROXY_OWNER_ADDRESS = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;

33 34
    /// @notice Returns the default values for the ResourceConfig. These are the recommended values
    ///         for a production network.
35
    function DEFAULT_RESOURCE_CONFIG() internal pure returns (ResourceMetering.ResourceConfig memory) {
36 37 38 39 40 41 42 43 44 45
        ResourceMetering.ResourceConfig memory config = ResourceMetering.ResourceConfig({
            maxResourceLimit: 20_000_000,
            elasticityMultiplier: 10,
            baseFeeMaxChangeDenominator: 8,
            minimumBaseFee: 1 gwei,
            systemTxMaxGas: 1_000_000,
            maximumBaseFee: type(uint128).max
        });
        return config;
    }
46 47 48 49

    /// @notice The `reinitailizer` input for upgradable contracts. This value must be updated
    ///         each time that the contracts are deployed.
    uint8 internal constant INITIALIZER = 3;
50
}