{
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "version",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "enum SystemConfig.UpdateType",
          "name": "updateType",
          "type": "uint8"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "ConfigUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "BATCH_INBOX_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L1_CROSS_DOMAIN_MESSENGER_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L1_ERC_721_BRIDGE_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L1_STANDARD_BRIDGE_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L2_OUTPUT_ORACLE_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "OPTIMISM_PORTAL_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "UNSAFE_BLOCK_SIGNER_SLOT",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "batchInbox",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "batcherHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gasLimit",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_overhead",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_scalar",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_batcherHash",
          "type": "bytes32"
        },
        {
          "internalType": "uint64",
          "name": "_gasLimit",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "_unsafeBlockSigner",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "maxResourceLimit",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "elasticityMultiplier",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "baseFeeMaxChangeDenominator",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "minimumBaseFee",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "systemTxMaxGas",
              "type": "uint32"
            },
            {
              "internalType": "uint128",
              "name": "maximumBaseFee",
              "type": "uint128"
            }
          ],
          "internalType": "struct ResourceMetering.ResourceConfig",
          "name": "_config",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "_startBlock",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_batchInbox",
          "type": "address"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "l1CrossDomainMessenger",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "l1ERC721Bridge",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "l1StandardBridge",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "l2OutputOracle",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "optimismPortal",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "optimismMintableERC20Factory",
              "type": "address"
            }
          ],
          "internalType": "struct SystemConfig.Addresses",
          "name": "_addresses",
          "type": "tuple"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l1CrossDomainMessenger",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l1ERC721Bridge",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l1StandardBridge",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "l2OutputOracle",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "minimumGasLimit",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "optimismMintableERC20Factory",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "optimismPortal",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "overhead",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "resourceConfig",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "maxResourceLimit",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "elasticityMultiplier",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "baseFeeMaxChangeDenominator",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "minimumBaseFee",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "systemTxMaxGas",
              "type": "uint32"
            },
            {
              "internalType": "uint128",
              "name": "maximumBaseFee",
              "type": "uint128"
            }
          ],
          "internalType": "struct ResourceMetering.ResourceConfig",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "scalar",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_batcherHash",
          "type": "bytes32"
        }
      ],
      "name": "setBatcherHash",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_overhead",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_scalar",
          "type": "uint256"
        }
      ],
      "name": "setGasConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_gasLimit",
          "type": "uint64"
        }
      ],
      "name": "setGasLimit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint32",
              "name": "maxResourceLimit",
              "type": "uint32"
            },
            {
              "internalType": "uint8",
              "name": "elasticityMultiplier",
              "type": "uint8"
            },
            {
              "internalType": "uint8",
              "name": "baseFeeMaxChangeDenominator",
              "type": "uint8"
            },
            {
              "internalType": "uint32",
              "name": "minimumBaseFee",
              "type": "uint32"
            },
            {
              "internalType": "uint32",
              "name": "systemTxMaxGas",
              "type": "uint32"
            },
            {
              "internalType": "uint128",
              "name": "maximumBaseFee",
              "type": "uint128"
            }
          ],
          "internalType": "struct ResourceMetering.ResourceConfig",
          "name": "_config",
          "type": "tuple"
        }
      ],
      "name": "setResourceConfig",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_unsafeBlockSigner",
          "type": "address"
        }
      ],
      "name": "setUnsafeBlockSigner",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startBlock",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unsafeBlockSigner",
      "outputs": [
        {
          "internalType": "address",
          "name": "addr_",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "address": "0xab9cf6d9f717f57386624a66E59102f7eFCd33f3",
  "args": [],
  "bytecode": "[encoded data, 21498 characters]",
  "deployedBytecode": "[encoded data, 15768 characters]",
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "methods": {
      "constructor": {},
      "initialize(address,uint256,uint256,bytes32,uint64,address,(uint32,uint8,uint8,uint32,uint32,uint128),uint256,address,(address,address,address,address,address,address))": {
        "params": {
          "_addresses": "Set of L1 contract addresses. These should be the proxies.",
          "_batchInbox": "Batch inbox address. An identifier for the op-node to find                           canonical data.",
          "_batcherHash": "Initial batcher hash.",
          "_config": "Initial ResourceConfig.",
          "_gasLimit": "Initial gas limit.",
          "_overhead": "Initial overhead value.",
          "_owner": "Initial owner of the contract.",
          "_scalar": "Initial scalar value.",
          "_startBlock": "Starting block for the op-node to search for logs from.                           Contracts that were deployed before this field existed                           need to have this field set manually via an override.                           Newly deployed contracts should set this value to uint256(0).",
          "_unsafeBlockSigner": "Initial unsafe block signer address."
        }
      },
      "minimumGasLimit()": {
        "returns": {
          "_0": "uint64 Minimum gas limit."
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "resourceConfig()": {
        "returns": {
          "_0": "ResourceConfig"
        }
      },
      "setBatcherHash(bytes32)": {
        "params": {
          "_batcherHash": "New batcher hash."
        }
      },
      "setGasConfig(uint256,uint256)": {
        "params": {
          "_overhead": "New overhead value.",
          "_scalar": "New scalar value."
        }
      },
      "setGasLimit(uint64)": {
        "params": {
          "_gasLimit": "New gas limit."
        }
      },
      "setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128))": {
        "params": {
          "_config": "The new resource config values."
        }
      },
      "setUnsafeBlockSigner(address)": {
        "params": {
          "_unsafeBlockSigner": "New unsafe block signer address."
        }
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "unsafeBlockSigner()": {
        "returns": {
          "addr_": "Address of the unsafe block signer."
        }
      },
      "version()": {
        "returns": {
          "_0": "Semver contract version as a string."
        }
      }
    },
    "events": {
      "ConfigUpdate(uint256,uint8,bytes)": {
        "params": {
          "data": "Encoded update data.",
          "updateType": "Type of update.",
          "version": "SystemConfig version."
        }
      }
    },
    "title": "SystemConfig"
  },
  "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true},{\"internalType\":\"enum SystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false}],\"type\":\"event\",\"name\":\"ConfigUpdate\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false}],\"type\":\"event\",\"name\":\"Initialized\",\"anonymous\":false},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true}],\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"anonymous\":false},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"L2_OUTPUT_ORACLE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"internalType\":\"struct ResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}]},{\"internalType\":\"uint256\",\"name\":\"_startBlock\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"internalType\":\"struct SystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l2OutputOracle\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"initialize\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"l2OutputOracle\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"renounceOwnership\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"resourceConfig\",\"outputs\":[{\"internalType\":\"struct ResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}]}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setBatcherHash\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setGasConfig\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setGasLimit\"},{\"inputs\":[{\"internalType\":\"struct ResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\",\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}]}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setResourceConfig\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}]},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\",\"name\":\"transferOwnership\"},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}]},{\"inputs\":[],\"stateMutability\":\"view\",\"type\":\"function\",\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}]}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"constructor\":{\"custom:semver\":\"1.5.0\"},\"initialize(address,uint256,uint256,bytes32,uint64,address,(uint32,uint8,uint8,uint32,uint32,uint128),uint256,address,(address,address,address,address,address,address))\":{\"params\":{\"_addresses\":\"Set of L1 contract addresses. These should be the proxies.\",\"_batchInbox\":\"Batch inbox address. An identifier for the op-node to find                           canonical data.\",\"_batcherHash\":\"Initial batcher hash.\",\"_config\":\"Initial ResourceConfig.\",\"_gasLimit\":\"Initial gas limit.\",\"_overhead\":\"Initial overhead value.\",\"_owner\":\"Initial owner of the contract.\",\"_scalar\":\"Initial scalar value.\",\"_startBlock\":\"Starting block for the op-node to search for logs from.                           Contracts that were deployed before this field existed                           need to have this field set manually via an override.                           Newly deployed contracts should set this value to uint256(0).\",\"_unsafeBlockSigner\":\"Initial unsafe block signer address.\"}},\"minimumGasLimit()\":{\"returns\":{\"_0\":\"uint64 Minimum gas limit.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"resourceConfig()\":{\"returns\":{\"_0\":\"ResourceConfig\"}},\"setBatcherHash(bytes32)\":{\"params\":{\"_batcherHash\":\"New batcher hash.\"}},\"setGasConfig(uint256,uint256)\":{\"params\":{\"_overhead\":\"New overhead value.\",\"_scalar\":\"New scalar value.\"}},\"setGasLimit(uint64)\":{\"params\":{\"_gasLimit\":\"New gas limit.\"}},\"setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128))\":{\"params\":{\"_config\":\"The new resource config values.\"}},\"setUnsafeBlockSigner(address)\":{\"params\":{\"_unsafeBlockSigner\":\"New unsafe block signer address.\"}},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unsafeBlockSigner()\":{\"returns\":{\"addr_\":\"Address of the unsafe block signer.\"}},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BATCH_INBOX_SLOT()\":{\"notice\":\"Storage slot that the batch inbox address is stored at.\"},\"L1_CROSS_DOMAIN_MESSENGER_SLOT()\":{\"notice\":\"Storage slot that the L1CrossDomainMessenger address is stored at.\"},\"L1_ERC_721_BRIDGE_SLOT()\":{\"notice\":\"Storage slot that the L1ERC721Bridge address is stored at.\"},\"L1_STANDARD_BRIDGE_SLOT()\":{\"notice\":\"Storage slot that the L1StandardBridge address is stored at.\"},\"L2_OUTPUT_ORACLE_SLOT()\":{\"notice\":\"Storage slot that the L2OutputOracle address is stored at.\"},\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT()\":{\"notice\":\"Storage slot that the OptimismMintableERC20Factory address is stored at.\"},\"OPTIMISM_PORTAL_SLOT()\":{\"notice\":\"Storage slot that the OptimismPortal address is stored at.\"},\"UNSAFE_BLOCK_SIGNER_SLOT()\":{\"notice\":\"Storage slot that the unsafe block signer is stored at.         Storing it at this deterministic storage slot allows for decoupling the storage         layout from the way that `solc` lays out storage. The `op-node` uses a storage         proof to fetch this value.\"},\"VERSION()\":{\"notice\":\"Version identifier, used for upgrades.\"},\"batchInbox()\":{\"notice\":\"Getter for the BatchInbox address.\"},\"batcherHash()\":{\"notice\":\"Identifier for the batcher.         For version 1 of this configuration, this is represented as an address left-padded         with zeros to 32 bytes.\"},\"constructor\":{\"notice\":\"Constructs the SystemConfig contract. Cannot set         the owner to `address(0)` due to the Ownable contract's         implementation, so set it to `address(0xdEaD)`\"},\"gasLimit()\":{\"notice\":\"L2 block gas limit.\"},\"initialize(address,uint256,uint256,bytes32,uint64,address,(uint32,uint8,uint8,uint32,uint32,uint128),uint256,address,(address,address,address,address,address,address))\":{\"notice\":\"Initializer.         The resource config must be set before the require check.\"},\"l1CrossDomainMessenger()\":{\"notice\":\"Getter for the L1CrossDomainMessenger address.\"},\"l1ERC721Bridge()\":{\"notice\":\"Getter for the L1ERC721Bridge address.\"},\"l1StandardBridge()\":{\"notice\":\"Getter for the L1StandardBridge address.\"},\"l2OutputOracle()\":{\"notice\":\"Getter for the L2OutputOracle address.\"},\"minimumGasLimit()\":{\"notice\":\"Returns the minimum L2 gas limit that can be safely set for the system to         operate. The L2 gas limit must be larger than or equal to the amount of         gas that is allocated for deposits per block plus the amount of gas that         is allocated for the system transaction.         This function is used to determine if changes to parameters are safe.\"},\"optimismMintableERC20Factory()\":{\"notice\":\"Getter for the OptimismMintableERC20Factory address.\"},\"optimismPortal()\":{\"notice\":\"Getter for the OptimismPortal address.\"},\"overhead()\":{\"notice\":\"Fixed L2 gas overhead. Used as part of the L2 fee calculation.\"},\"resourceConfig()\":{\"notice\":\"A getter for the resource config.         Ensures that the struct is returned instead of a tuple.\"},\"scalar()\":{\"notice\":\"Dynamic L2 gas overhead. Used as part of the L2 fee calculation.\"},\"setBatcherHash(bytes32)\":{\"notice\":\"Updates the batcher hash.\"},\"setGasConfig(uint256,uint256)\":{\"notice\":\"Updates gas config.\"},\"setGasLimit(uint64)\":{\"notice\":\"Updates the L2 gas limit.\"},\"setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128))\":{\"notice\":\"An external setter for the resource config.         In the future, this method may emit an event that the `op-node` picks up         for when the resource config is changed.\"},\"setUnsafeBlockSigner(address)\":{\"notice\":\"Updates the unsafe block signer address.\"},\"startBlock()\":{\"notice\":\"The block at which the op-node can start searching for logs from.\"},\"unsafeBlockSigner()\":{\"notice\":\"High level getter for the unsafe block signer address.         Unsafe blocks can be propagated across the p2p network if they are signed by the         key corresponding to this address.\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"version\":1}},\"settings\":{\"remappings\":[\":.ignored_clones-with-immutable-args/=node_modules/.ignored_clones-with-immutable-args/src/\",\":.ignored_forge-std/=node_modules/.ignored_forge-std/src/\",\":@cwia/=lib/clones-with-immutable-args/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@rari-capital/solmate/=lib/solmate/\",\":clones-with-immutable-args/=lib/clones-with-immutable-args/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":solmate/=lib/solmate/src/\"],\"optimizer\":{\"enabled\":true,\"runs\":999999},\"metadata\":{\"bytecodeHash\":\"none\"},\"compilationTarget\":{\"src/L1/SystemConfig.sol\":\"SystemConfig\"},\"libraries\":{}},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x2a21b14ff90012878752f230d3ffd5c3405e5938d06c97a7d89c0a64561d0d66\",\"urls\":[\"bzz-raw://3313a8f9bb1f9476857c9050067b31982bf2140b83d84f3bc0cec1f62bbe947f\",\"dweb:/ipfs/Qma17Pk8NRe7aB4UD3jjVxk7nSFaov3eQyv86hcyqkwJRV\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xd6153ce99bcdcce22b124f755e72553295be6abcd63804cfdffceb188b8bef10\",\"urls\":[\"bzz-raw://35c47bece3c03caaa07fab37dd2bb3413bfbca20db7bd9895024390e0a469487\",\"dweb:/ipfs/QmPGWT2x3QHcKxqe6gRmAkdakhbaRgx3DLzcakHz5M4eXG\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xd15c3e400531f00203839159b2b8e7209c5158b35618f570c695b7e47f12e9f0\",\"urls\":[\"bzz-raw://b600b852e0597aa69989cc263111f02097e2827edc1bdc70306303e3af5e9929\",\"dweb:/ipfs/QmU4WfM28A1nDqghuuGeFmN3CnVrk6opWtiF65K4vhFPeC\"],\"license\":\"MIT\"},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb3ebde1c8d27576db912d87c3560dab14adfb9cd001be95890ec4ba035e652e7\",\"urls\":[\"bzz-raw://a709421c4f5d4677db8216055d2d4dac96a613efdb08178a9f7041f0c5cef689\",\"dweb:/ipfs/QmYs2rStvVLDnSJs8HgaMD1ABwoKKWdiVbQyNfLfFWTjTy\"],\"license\":\"MIT\"},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x622fcd8a49e132df5ec7651cc6ae3aaf0cf59bdcd67a9a804a1b9e2485113b7d\",\"urls\":[\"bzz-raw://af77088eb606427d4c55e578984a615779c86bc30646a20f7bb27299ba390f7c\",\"dweb:/ipfs/QmZGQdhdQDtHc7gZXWrKXgA3govc74X8U63BiWhPQK3mK8\"],\"license\":\"MIT\"},\"src/L1/ResourceMetering.sol\":{\"keccak256\":\"0xcbdb44713cb15af4c542ef51f2be9e32da0bb4ffc72a03953b38870955023fc3\",\"urls\":[\"bzz-raw://0d7663f5fac06c6344f68aa531d7e9a4e0ba9d2d3a6a3ad8d5bbec4b9b9ca202\",\"dweb:/ipfs/QmbMAZcVwf7syjhKyj3LjwsNMVZiQUPaV5D1zEr4r57v6H\"],\"license\":\"MIT\"},\"src/L1/SystemConfig.sol\":{\"keccak256\":\"0x1d2714b8c87e98f5237f9f68b0d86bcbdd82b3dc878b93a543caa152f0e4ed8d\",\"urls\":[\"bzz-raw://3c16648343328c2bfc7a421c5881a1572135212cc856e0eb4aa41291bca50685\",\"dweb:/ipfs/QmVRUE8CCxqVKr6A3XJxTTaVtx5tniSzDJbhP81ihEueqw\"],\"license\":\"MIT\"},\"src/libraries/Arithmetic.sol\":{\"keccak256\":\"0x06a5a8b00527843f0cfc1bb3c0661316966a6cc432f88be31f23cde78cd07560\",\"urls\":[\"bzz-raw://d5209e78e5415c0bf8b350362a825cc56152811abd6fcf2df3d4fa47766d3dee\",\"dweb:/ipfs/Qmf43xyc4Um32NmccayDfhm8kSnS2mhHXpPZnwABJS7cWm\"],\"license\":\"MIT\"},\"src/libraries/Burn.sol\":{\"keccak256\":\"0x90a795bcea3ef06d6d5011256c4bd63d1a4271f519246dbf1ee3e8f1c0e21010\",\"urls\":[\"bzz-raw://9f60c3aa77cf0c484ddda4754157cff4dc0e2eace4bea67990daff4c0612ab5f\",\"dweb:/ipfs/QmSYGanMFve9uBC17X7hFneSFnwnJxz86Jgh6MX9BRMweb\"],\"license\":\"MIT\"},\"src/universal/Semver.sol\":{\"keccak256\":\"0x9de68ce536aee1aa616b4bf88d7ccc335460e6edd0e7170bdbf94c4fe3d41c60\",\"urls\":[\"bzz-raw://d5909c0b049b03a2bc24816ecf15b0aaf18c04a963174e1eba7624321bef330d\",\"dweb:/ipfs/QmeqdutwZWHqQMXauNR6WY8PrUpfsTiWTQyanbnGM9QqzT\"],\"license\":\"MIT\"}},\"version\":1}",
  "numDeployments": 4,
  "receipt": {
    "transactionHash": "0x68ca51b8bd08a3f3819151ed1069a72a137cde123eb4208cd74ffc203c173fcb",
    "transactionIndex": "0x13",
    "blockHash": "0xa6d331f0f1bd46d1aa2c3575c353e2b981d69bb858e6c58c4d24d75115986a68",
    "blockNumber": "0x3e1f50",
    "from": "0x18394B52d3Cb931dfA76F63251919D051953413d",
    "to": null,
    "cumulativeGasUsed": "0x12ad568",
    "gasUsed": "0x1d76ea",
    "contractAddress": "0xab9cf6d9f717f57386624a66E59102f7eFCd33f3",
    "logs": [
      {
        "address": "0xab9cf6d9f717f57386624a66E59102f7eFCd33f3",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x0000000000000000000000000000000000000000000000000000000000000000",
          "0x00000000000000000000000018394b52d3cb931dfa76f63251919d051953413d"
        ],
        "data": "0x",
        "blockHash": "0xa6d331f0f1bd46d1aa2c3575c353e2b981d69bb858e6c58c4d24d75115986a68",
        "blockNumber": "0x3e1f50",
        "transactionHash": "0x68ca51b8bd08a3f3819151ed1069a72a137cde123eb4208cd74ffc203c173fcb",
        "transactionIndex": "0x13",
        "logIndex": "0x10",
        "removed": false
      },
      {
        "address": "0xab9cf6d9f717f57386624a66E59102f7eFCd33f3",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x00000000000000000000000018394b52d3cb931dfa76f63251919d051953413d",
          "0x000000000000000000000000000000000000000000000000000000000000dead"
        ],
        "data": "0x",
        "blockHash": "0xa6d331f0f1bd46d1aa2c3575c353e2b981d69bb858e6c58c4d24d75115986a68",
        "blockNumber": "0x3e1f50",
        "transactionHash": "0x68ca51b8bd08a3f3819151ed1069a72a137cde123eb4208cd74ffc203c173fcb",
        "transactionIndex": "0x13",
        "logIndex": "0x11",
        "removed": false
      },
      {
        "address": "0xab9cf6d9f717f57386624a66E59102f7eFCd33f3",
        "topics": [
          "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
        ],
        "data": "0x0000000000000000000000000000000000000000000000000000000000000002",
        "blockHash": "0xa6d331f0f1bd46d1aa2c3575c353e2b981d69bb858e6c58c4d24d75115986a68",
        "blockNumber": "0x3e1f50",
        "transactionHash": "0x68ca51b8bd08a3f3819151ed1069a72a137cde123eb4208cd74ffc203c173fcb",
        "transactionIndex": "0x13",
        "logIndex": "0x12",
        "removed": false
      }
    ],
    "status": "0x1",
    "logsBloom": "0x00000000000010000000000000100000000000000000000000800000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000020000000000000000000400000000000000000000004000000000000000000000080000000000000000000000000000000000000010000000400000000000000000000000000000000000000008400000000000000000000040000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000020000",
    "type": "0x2",
    "effectiveGasPrice": "0xbec78df7"
  },
  "solcInputHash": "0x0000000000000000000000000000000000000000000000000000000000000000",
  "storageLayout": {
    "storage": [
      {
        "astId": 29536,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "_initialized",
        "offset": 0,
        "slot": "0",
        "type": "t_uint8"
      },
      {
        "astId": 29539,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "_initializing",
        "offset": 1,
        "slot": "0",
        "type": "t_bool"
      },
      {
        "astId": 31067,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "__gap",
        "offset": 0,
        "slot": "1",
        "type": "t_array(t_uint256)50_storage"
      },
      {
        "astId": 29408,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "_owner",
        "offset": 0,
        "slot": "51",
        "type": "t_address"
      },
      {
        "astId": 29528,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "__gap",
        "offset": 0,
        "slot": "52",
        "type": "t_array(t_uint256)49_storage"
      },
      {
        "astId": 55210,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "overhead",
        "offset": 0,
        "slot": "101",
        "type": "t_uint256"
      },
      {
        "astId": 55213,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "scalar",
        "offset": 0,
        "slot": "102",
        "type": "t_uint256"
      },
      {
        "astId": 55216,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "batcherHash",
        "offset": 0,
        "slot": "103",
        "type": "t_bytes32"
      },
      {
        "astId": 55219,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "gasLimit",
        "offset": 0,
        "slot": "104",
        "type": "t_uint64"
      },
      {
        "astId": 55223,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "_resourceConfig",
        "offset": 0,
        "slot": "105",
        "type": "t_struct(ResourceConfig)54752_storage"
      },
      {
        "astId": 55236,
        "contract": "src/L1/SystemConfig.sol:SystemConfig",
        "label": "startBlock",
        "offset": 0,
        "slot": "106",
        "type": "t_uint256"
      }
    ],
    "types": {
      "t_address": {
        "encoding": "inplace",
        "label": "address",
        "numberOfBytes": "20"
      },
      "t_array(t_uint256)49_storage": {
        "encoding": "inplace",
        "label": "uint256[49]",
        "numberOfBytes": "1568",
        "base": "t_uint256"
      },
      "t_array(t_uint256)50_storage": {
        "encoding": "inplace",
        "label": "uint256[50]",
        "numberOfBytes": "1600",
        "base": "t_uint256"
      },
      "t_bool": {
        "encoding": "inplace",
        "label": "bool",
        "numberOfBytes": "1"
      },
      "t_bytes32": {
        "encoding": "inplace",
        "label": "bytes32",
        "numberOfBytes": "32"
      },
      "t_struct(ResourceConfig)54752_storage": {
        "encoding": "inplace",
        "label": "struct ResourceMetering.ResourceConfig",
        "numberOfBytes": "32",
        "members": [
          {
            "astId": 54741,
            "contract": "src/L1/SystemConfig.sol:SystemConfig",
            "label": "maxResourceLimit",
            "offset": 0,
            "slot": "0",
            "type": "t_uint32"
          },
          {
            "astId": 54743,
            "contract": "src/L1/SystemConfig.sol:SystemConfig",
            "label": "elasticityMultiplier",
            "offset": 4,
            "slot": "0",
            "type": "t_uint8"
          },
          {
            "astId": 54745,
            "contract": "src/L1/SystemConfig.sol:SystemConfig",
            "label": "baseFeeMaxChangeDenominator",
            "offset": 5,
            "slot": "0",
            "type": "t_uint8"
          },
          {
            "astId": 54747,
            "contract": "src/L1/SystemConfig.sol:SystemConfig",
            "label": "minimumBaseFee",
            "offset": 6,
            "slot": "0",
            "type": "t_uint32"
          },
          {
            "astId": 54749,
            "contract": "src/L1/SystemConfig.sol:SystemConfig",
            "label": "systemTxMaxGas",
            "offset": 10,
            "slot": "0",
            "type": "t_uint32"
          },
          {
            "astId": 54751,
            "contract": "src/L1/SystemConfig.sol:SystemConfig",
            "label": "maximumBaseFee",
            "offset": 14,
            "slot": "0",
            "type": "t_uint128"
          }
        ]
      },
      "t_uint128": {
        "encoding": "inplace",
        "label": "uint128",
        "numberOfBytes": "16"
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint32": {
        "encoding": "inplace",
        "label": "uint32",
        "numberOfBytes": "4"
      },
      "t_uint64": {
        "encoding": "inplace",
        "label": "uint64",
        "numberOfBytes": "8"
      },
      "t_uint8": {
        "encoding": "inplace",
        "label": "uint8",
        "numberOfBytes": "1"
      }
    }
  },
  "transactionHash": "0x68ca51b8bd08a3f3819151ed1069a72a137cde123eb4208cd74ffc203c173fcb",
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "BATCH_INBOX_SLOT()": {
        "notice": "Storage slot that the batch inbox address is stored at."
      },
      "L1_CROSS_DOMAIN_MESSENGER_SLOT()": {
        "notice": "Storage slot that the L1CrossDomainMessenger address is stored at."
      },
      "L1_ERC_721_BRIDGE_SLOT()": {
        "notice": "Storage slot that the L1ERC721Bridge address is stored at."
      },
      "L1_STANDARD_BRIDGE_SLOT()": {
        "notice": "Storage slot that the L1StandardBridge address is stored at."
      },
      "L2_OUTPUT_ORACLE_SLOT()": {
        "notice": "Storage slot that the L2OutputOracle address is stored at."
      },
      "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT()": {
        "notice": "Storage slot that the OptimismMintableERC20Factory address is stored at."
      },
      "OPTIMISM_PORTAL_SLOT()": {
        "notice": "Storage slot that the OptimismPortal address is stored at."
      },
      "UNSAFE_BLOCK_SIGNER_SLOT()": {
        "notice": "Storage slot that the unsafe block signer is stored at.         Storing it at this deterministic storage slot allows for decoupling the storage         layout from the way that `solc` lays out storage. The `op-node` uses a storage         proof to fetch this value."
      },
      "VERSION()": {
        "notice": "Version identifier, used for upgrades."
      },
      "batchInbox()": {
        "notice": "Getter for the BatchInbox address."
      },
      "batcherHash()": {
        "notice": "Identifier for the batcher.         For version 1 of this configuration, this is represented as an address left-padded         with zeros to 32 bytes."
      },
      "constructor": {
        "notice": "Constructs the SystemConfig contract. Cannot set         the owner to `address(0)` due to the Ownable contract's         implementation, so set it to `address(0xdEaD)`"
      },
      "gasLimit()": {
        "notice": "L2 block gas limit."
      },
      "initialize(address,uint256,uint256,bytes32,uint64,address,(uint32,uint8,uint8,uint32,uint32,uint128),uint256,address,(address,address,address,address,address,address))": {
        "notice": "Initializer.         The resource config must be set before the require check."
      },
      "l1CrossDomainMessenger()": {
        "notice": "Getter for the L1CrossDomainMessenger address."
      },
      "l1ERC721Bridge()": {
        "notice": "Getter for the L1ERC721Bridge address."
      },
      "l1StandardBridge()": {
        "notice": "Getter for the L1StandardBridge address."
      },
      "l2OutputOracle()": {
        "notice": "Getter for the L2OutputOracle address."
      },
      "minimumGasLimit()": {
        "notice": "Returns the minimum L2 gas limit that can be safely set for the system to         operate. The L2 gas limit must be larger than or equal to the amount of         gas that is allocated for deposits per block plus the amount of gas that         is allocated for the system transaction.         This function is used to determine if changes to parameters are safe."
      },
      "optimismMintableERC20Factory()": {
        "notice": "Getter for the OptimismMintableERC20Factory address."
      },
      "optimismPortal()": {
        "notice": "Getter for the OptimismPortal address."
      },
      "overhead()": {
        "notice": "Fixed L2 gas overhead. Used as part of the L2 fee calculation."
      },
      "resourceConfig()": {
        "notice": "A getter for the resource config.         Ensures that the struct is returned instead of a tuple."
      },
      "scalar()": {
        "notice": "Dynamic L2 gas overhead. Used as part of the L2 fee calculation."
      },
      "setBatcherHash(bytes32)": {
        "notice": "Updates the batcher hash."
      },
      "setGasConfig(uint256,uint256)": {
        "notice": "Updates gas config."
      },
      "setGasLimit(uint64)": {
        "notice": "Updates the L2 gas limit."
      },
      "setResourceConfig((uint32,uint8,uint8,uint32,uint32,uint128))": {
        "notice": "An external setter for the resource config.         In the future, this method may emit an event that the `op-node` picks up         for when the resource config is changed."
      },
      "setUnsafeBlockSigner(address)": {
        "notice": "Updates the unsafe block signer address."
      },
      "startBlock()": {
        "notice": "The block at which the op-node can start searching for logs from."
      },
      "unsafeBlockSigner()": {
        "notice": "High level getter for the unsafe block signer address.         Unsafe blocks can be propagated across the p2p network if they are signed by the         key corresponding to this address."
      },
      "version()": {
        "notice": "Returns the full semver contract version."
      }
    },
    "events": {
      "ConfigUpdate(uint256,uint8,bytes)": {
        "notice": "Emitted when configuration is updated."
      }
    },
    "notice": "The SystemConfig contract is used to manage configuration of an Optimism network.         All configuration is stored on L1 and picked up by L2 as part of the derviation of         the L2 chain."
  }
}