{
  "address": "0xD54EEac0423186df59641D2fA945AdDB3d385b19",
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_submissionInterval",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_genesisL2Output",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_historicalTotalBlocks",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_startingBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_startingTimestamp",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_l2BlockTime",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_proposer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "outputRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "l1Timestamp",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "l2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "OutputDeleted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "outputRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "l1Timestamp",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "l2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "OutputProposed",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousProposer",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newProposer",
          "type": "address"
        }
      ],
      "name": "ProposerChanged",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "HISTORICAL_TOTAL_BLOCKS",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "L2_BLOCK_TIME",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STARTING_BLOCK_NUMBER",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "STARTING_TIMESTAMP",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "SUBMISSION_INTERVAL",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_newProposer",
          "type": "address"
        }
      ],
      "name": "changeProposer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_l2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "computeL2Timestamp",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "outputRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.OutputProposal",
          "name": "_proposal",
          "type": "tuple"
        }
      ],
      "name": "deleteL2Output",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "_l2BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "getL2Output",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "outputRoot",
              "type": "bytes32"
            },
            {
              "internalType": "uint256",
              "name": "timestamp",
              "type": "uint256"
            }
          ],
          "internalType": "struct Types.OutputProposal",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_genesisL2Output",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_startingBlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_proposer",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_owner",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "latestBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nextBlockNumber",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_outputRoot",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_l2BlockNumber",
          "type": "uint256"
        },
        {
          "internalType": "bytes32",
          "name": "_l1Blockhash",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "_l1BlockNumber",
          "type": "uint256"
        }
      ],
      "name": "proposeL2Output",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proposer",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "version",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "transactionHash": "0xacf29d32fc76595ac29c0b3795ea05db894b030056f5b1eefc5d984648b25f2e",
  "receipt": {
    "to": null,
    "from": "0x1D066Ef7AA90ae85Bb017e85968A9e1851DA95Db",
    "contractAddress": "0xD54EEac0423186df59641D2fA945AdDB3d385b19",
    "transactionIndex": 0,
    "gasUsed": "1628261",
    "logsBloom": "0x00400008000000000000000000000000000000000000000000800000000002000000000000000000000000000080000400000000000000000200000000000000000000000000000000000000800000000001000000000000000000000000000000000000020000000000000000000804000000000000000000000000080000400000000000000000000000000000000000000000000081000000000000000000000000000000000000000000000400000000000000000000000000840000000000000040000000000000000000040000000000000000000000000000000020000000000000000000000000000008000000000000200000000000000000000000",
    "blockHash": "0x5bd8ca98c113de21b83bf8ab5394a0136979164858c25cc0864317a9bc69ef76",
    "transactionHash": "0xacf29d32fc76595ac29c0b3795ea05db894b030056f5b1eefc5d984648b25f2e",
    "logs": [
      {
        "transactionIndex": 0,
        "blockNumber": 7568963,
        "transactionHash": "0xacf29d32fc76595ac29c0b3795ea05db894b030056f5b1eefc5d984648b25f2e",
        "address": "0xD54EEac0423186df59641D2fA945AdDB3d385b19",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x0000000000000000000000000000000000000000000000000000000000000000",
          "0x0000000000000000000000001d066ef7aa90ae85bb017e85968a9e1851da95db"
        ],
        "data": "0x",
        "logIndex": 0,
        "blockHash": "0x5bd8ca98c113de21b83bf8ab5394a0136979164858c25cc0864317a9bc69ef76"
      },
      {
        "transactionIndex": 0,
        "blockNumber": 7568963,
        "transactionHash": "0xacf29d32fc76595ac29c0b3795ea05db894b030056f5b1eefc5d984648b25f2e",
        "address": "0xD54EEac0423186df59641D2fA945AdDB3d385b19",
        "topics": [
          "0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd",
          "0x0000000000000000000000000000000000000000000000000000000000000000",
          "0x000000000000000000000000154359205dceafd23ed5066bfd5d541c816a5cdf"
        ],
        "data": "0x",
        "logIndex": 1,
        "blockHash": "0x5bd8ca98c113de21b83bf8ab5394a0136979164858c25cc0864317a9bc69ef76"
      },
      {
        "transactionIndex": 0,
        "blockNumber": 7568963,
        "transactionHash": "0xacf29d32fc76595ac29c0b3795ea05db894b030056f5b1eefc5d984648b25f2e",
        "address": "0xD54EEac0423186df59641D2fA945AdDB3d385b19",
        "topics": [
          "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
          "0x0000000000000000000000001d066ef7aa90ae85bb017e85968a9e1851da95db",
          "0x000000000000000000000000eed173e5b7f9860b9b9808a8b0d0ddf28db6386c"
        ],
        "data": "0x",
        "logIndex": 2,
        "blockHash": "0x5bd8ca98c113de21b83bf8ab5394a0136979164858c25cc0864317a9bc69ef76"
      },
      {
        "transactionIndex": 0,
        "blockNumber": 7568963,
        "transactionHash": "0xacf29d32fc76595ac29c0b3795ea05db894b030056f5b1eefc5d984648b25f2e",
        "address": "0xD54EEac0423186df59641D2fA945AdDB3d385b19",
        "topics": [
          "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498"
        ],
        "data": "0x0000000000000000000000000000000000000000000000000000000000000001",
        "logIndex": 3,
        "blockHash": "0x5bd8ca98c113de21b83bf8ab5394a0136979164858c25cc0864317a9bc69ef76"
      }
    ],
    "blockNumber": 7568963,
    "cumulativeGasUsed": "1628261",
    "status": 1,
    "byzantium": true
  },
  "args": [
    1800,
    "0x0000000000000000000000000000000000000000000000000000000000000000",
    0,
    0,
    1662857796,
    2,
    "0x154359205DcEAFD23eD5066bFd5D541c816A5CDF",
    "0xeeD173E5b7f9860b9B9808a8B0D0Ddf28db6386C"
  ],
  "numDeployments": 1,
  "solcInputHash": "ada691c3f5ff59bd3e60fdb28388fb6d",
  "metadata": "{\"compiler\":{\"version\":\"0.8.15+commit.e14f2714\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_historicalTotalBlocks\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"OutputDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"OutputProposed\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousProposer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newProposer\",\"type\":\"address\"}],\"name\":\"ProposerChanged\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"HISTORICAL_TOTAL_BLOCKS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STARTING_BLOCK_NUMBER\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STARTING_TIMESTAMP\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newProposer\",\"type\":\"address\"}],\"name\":\"changeProposer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.OutputProposal\",\"name\":\"_proposal\",\"type\":\"tuple\"}],\"name\":\"deleteL2Output\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"getL2Output\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"internalType\":\"struct Types.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nextBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1Blockhash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"proposeL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proposer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"custom:proxied\":\"@title L2OutputOracle\",\"events\":{\"OutputDeleted(bytes32,uint256,uint256)\":{\"params\":{\"l1Timestamp\":\"The L1 timestamp when proposed.\",\"l2BlockNumber\":\"The L2 block number of the output root.\",\"outputRoot\":\"The output root.\"}},\"OutputProposed(bytes32,uint256,uint256)\":{\"params\":{\"l1Timestamp\":\"The L1 timestamp when proposed.\",\"l2BlockNumber\":\"The L2 block number of the output root.\",\"outputRoot\":\"The output root.\"}},\"ProposerChanged(address,address)\":{\"params\":{\"newProposer\":\"The new proposer address.\",\"previousProposer\":\"The previous proposer address.\"}}},\"kind\":\"dev\",\"methods\":{\"computeL2Timestamp(uint256)\":{\"params\":{\"_l2BlockNumber\":\"The L2 block number of the target block.\"}},\"constructor\":{\"custom:semver\":\"0.0.1\",\"params\":{\"_genesisL2Output\":\"The initial L2 output of the L2 chain.\",\"_historicalTotalBlocks\":\"Number of blocks preceding this L2 chain.\",\"_l2BlockTime\":\"The time per L2 block, in seconds.\",\"_owner\":\"The address of the owner.\",\"_proposer\":\"The address of the proposer.\",\"_startingBlockNumber\":\"The number of the first L2 block.\",\"_startingTimestamp\":\"The timestamp of the first L2 block.\",\"_submissionInterval\":\"Interval in blocks at which checkpoints must be submitted.\"}},\"deleteL2Output((bytes32,uint256))\":{\"params\":{\"_proposal\":\"Represents the output proposal to delete\"}},\"getL2Output(uint256)\":{\"params\":{\"_l2BlockNumber\":\"The L2 block number of the target block.\"}},\"initialize(bytes32,uint256,address,address)\":{\"params\":{\"_genesisL2Output\":\"The initial L2 output of the L2 chain.\",\"_owner\":\"The address of the owner.\",\"_proposer\":\"The address of the proposer.\",\"_startingBlockNumber\":\"The timestamp to start L2 block at.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proposeL2Output(bytes32,uint256,bytes32,uint256)\":{\"params\":{\"_l1BlockNumber\":\"The block number with the specified block hash.\",\"_l1Blockhash\":\"A block hash which must be included in the current chain.\",\"_l2BlockNumber\":\"The L2 block number that resulted in _outputRoot.\",\"_outputRoot\":\"The L2 output of the checkpoint block.\"}},\"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.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"version()\":{\"returns\":{\"_0\":\"Semver contract version as a string.\"}}},\"version\":1},\"userdoc\":{\"events\":{\"OutputDeleted(bytes32,uint256,uint256)\":{\"notice\":\"Emitted when an output is deleted.\"},\"OutputProposed(bytes32,uint256,uint256)\":{\"notice\":\"Emitted when an output is proposed.\"},\"ProposerChanged(address,address)\":{\"notice\":\"Emitted when the proposer address is changed.\"}},\"kind\":\"user\",\"methods\":{\"HISTORICAL_TOTAL_BLOCKS()\":{\"notice\":\"The number of blocks in the chain before the first block in this contract.\"},\"L2_BLOCK_TIME()\":{\"notice\":\"The time between L2 blocks in seconds.\"},\"STARTING_BLOCK_NUMBER()\":{\"notice\":\"The number of the first L2 block recorded in this contract.\"},\"STARTING_TIMESTAMP()\":{\"notice\":\"The timestamp of the first L2 block recorded in this contract.\"},\"SUBMISSION_INTERVAL()\":{\"notice\":\"The interval in L2 blocks at which checkpoints must be submitted.\"},\"changeProposer(address)\":{\"notice\":\"Transfers the proposer role to a new account (`newProposer`).         Can only be called by the current owner.\"},\"computeL2Timestamp(uint256)\":{\"notice\":\"Returns the L2 timestamp corresponding to a given L2 block number.         Returns a null output proposal if none is found.\"},\"deleteL2Output((bytes32,uint256))\":{\"notice\":\"Deletes the most recent output. This is used to remove the most recent output in the         event that an erreneous output is submitted. It can only be called by the contract's         owner, not the proposer. Longer term, this should be replaced with a more robust         mechanism which will allow deletion of proposals shown to be invalid by a fault         proof.\"},\"getL2Output(uint256)\":{\"notice\":\"Returns the L2 output proposal associated with a target L2 block number. If the         L2 block number provided is between checkpoints, this function will rerutn the next         proposal for the next checkpoint.         Reverts if the output proposal is either not found, or predates         the STARTING_BLOCK_NUMBER.\"},\"initialize(bytes32,uint256,address,address)\":{\"notice\":\"Initializer.\"},\"latestBlockNumber()\":{\"notice\":\"The number of the most recent L2 block recorded in this contract.\"},\"nextBlockNumber()\":{\"notice\":\"Computes the block number of the next L2 block that needs to be checkpointed.\"},\"proposeL2Output(bytes32,uint256,bytes32,uint256)\":{\"notice\":\"Accepts an outputRoot and the timestamp of the corresponding L2 block. The         timestamp must be equal to the current value returned by `nextTimestamp()` in order         to be accepted. This function may only be called by the Proposer.\"},\"proposer()\":{\"notice\":\"The address of the proposer;\"},\"version()\":{\"notice\":\"Returns the full semver contract version.\"}},\"notice\":\"The L2 state is committed to in this contract         The payable keyword is used on proposeL2Output to save gas on the msg.value check.         This contract should be deployed behind an upgradable proxy\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/L1/L2OutputOracle.sol\":\"L2OutputOracle\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[\":@eth-optimism/contracts-periphery/=node_modules/@eth-optimism/contracts-periphery/contracts/\",\":@openzeppelin/=node_modules/@openzeppelin/\",\":@openzeppelin/contracts-upgradeable/=node_modules/@openzeppelin/contracts-upgradeable/\",\":@openzeppelin/contracts/=node_modules/@openzeppelin/contracts/\",\":@rari-capital/=node_modules/@rari-capital/\",\":@rari-capital/solmate/=node_modules/@rari-capital/solmate/\",\":contracts/=contracts/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"contracts/L1/L2OutputOracle.sol\":{\"keccak256\":\"0xedbefffc244badc0a6ccaa4eb19112d5527a4a5366e335186a46605b7fcb1174\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2e9c96610ca1955d166368322b65065944f7de8cdd638e4921548c378819895b\",\"dweb:/ipfs/QmUmqta7EjQ5Wr6uhgmeuEh5hdRxNpKmXBjJrjBYWk23Yi\"]},\"contracts/libraries/Types.sol\":{\"keccak256\":\"0x93045c0c97287a12e1bdde0685e26f185411b81b93b9df15c8cce90bccdcf77c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c90b59d09f92aba5ab0862264efe2beb0f77fba750867f8d686a1f39ee6af2c\",\"dweb:/ipfs/QmW7Zj5d7NgDi5Mdv6jptJgfsUj8LvGroud9p2Z7vhcKLC\"]},\"contracts/universal/Semver.sol\":{\"keccak256\":\"0x8215e8fbaace5e06fdf0be26cd8ec224847cf03e89bd78dc8ba3ec2cb429d4fe\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfe4869ad9a1a10aee499ed4ac74a19f9f95dd9173efa656f6b1728f6912a9ad\",\"dweb:/ipfs/QmbiKSxpNnKQv8jwEvGUJkksaLPp8UU8N1twbDimM3RhXr\"]},\"node_modules/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a\",\"dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb\"]},\"node_modules/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x0203dcadc5737d9ef2c211d6fa15d18ebc3b30dfa51903b64870b01a062b0b4e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6eb2fd1e9894dbe778f4b8131adecebe570689e63cf892f4e21257bfe1252497\",\"dweb:/ipfs/QmXgUGNfZvrn6N2miv3nooSs7Jm34A41qz94fu2GtDFcx8\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"keccak256\":\"0x611aa3f23e59cfdd1863c536776407b3e33d695152a266fa7cfb34440a29a8a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b4b2110b7f2b3eb32951bc08046fa90feccffa594e1176cb91cdfb0e94726b4\",\"dweb:/ipfs/QmSxLwYjicf9zWFuieRc8WQwE4FisA1Um5jp1iSa731TGt\"]},\"node_modules/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c\",\"dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a\"]},\"node_modules/@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xaf159a8b1923ad2a26d516089bceca9bdeaeacd04be50983ea00ba63070f08a3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f2cf1c531122bc7ca96b8c8db6a60deae60441e5223065e792553d4849b5638\",\"dweb:/ipfs/QmPBdJmBBABMDCfyDjCbdxgiqRavgiSL88SYPGibgbPas9\"]}},\"version\":1}",
  "bytecode": "[encoded data, 17076 characters]",
  "deployedBytecode": "[encoded data, 13554 characters]",
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "methods": {
      "computeL2Timestamp(uint256)": {
        "params": {
          "_l2BlockNumber": "The L2 block number of the target block."
        }
      },
      "constructor": {
        "params": {
          "_genesisL2Output": "The initial L2 output of the L2 chain.",
          "_historicalTotalBlocks": "Number of blocks preceding this L2 chain.",
          "_l2BlockTime": "The time per L2 block, in seconds.",
          "_owner": "The address of the owner.",
          "_proposer": "The address of the proposer.",
          "_startingBlockNumber": "The number of the first L2 block.",
          "_startingTimestamp": "The timestamp of the first L2 block.",
          "_submissionInterval": "Interval in blocks at which checkpoints must be submitted."
        }
      },
      "deleteL2Output((bytes32,uint256))": {
        "params": {
          "_proposal": "Represents the output proposal to delete"
        }
      },
      "getL2Output(uint256)": {
        "params": {
          "_l2BlockNumber": "The L2 block number of the target block."
        }
      },
      "initialize(bytes32,uint256,address,address)": {
        "params": {
          "_genesisL2Output": "The initial L2 output of the L2 chain.",
          "_owner": "The address of the owner.",
          "_proposer": "The address of the proposer.",
          "_startingBlockNumber": "The timestamp to start L2 block at."
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "proposeL2Output(bytes32,uint256,bytes32,uint256)": {
        "params": {
          "_l1BlockNumber": "The block number with the specified block hash.",
          "_l1Blockhash": "A block hash which must be included in the current chain.",
          "_l2BlockNumber": "The L2 block number that resulted in _outputRoot.",
          "_outputRoot": "The L2 output of the checkpoint block."
        }
      },
      "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."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "version()": {
        "returns": {
          "_0": "Semver contract version as a string."
        }
      }
    },
    "events": {
      "OutputDeleted(bytes32,uint256,uint256)": {
        "params": {
          "l1Timestamp": "The L1 timestamp when proposed.",
          "l2BlockNumber": "The L2 block number of the output root.",
          "outputRoot": "The output root."
        }
      },
      "OutputProposed(bytes32,uint256,uint256)": {
        "params": {
          "l1Timestamp": "The L1 timestamp when proposed.",
          "l2BlockNumber": "The L2 block number of the output root.",
          "outputRoot": "The output root."
        }
      },
      "ProposerChanged(address,address)": {
        "params": {
          "newProposer": "The new proposer address.",
          "previousProposer": "The previous proposer address."
        }
      }
    }
  },
  "userdoc": {
    "version": 1,
    "kind": "user",
    "methods": {
      "HISTORICAL_TOTAL_BLOCKS()": {
        "notice": "The number of blocks in the chain before the first block in this contract."
      },
      "L2_BLOCK_TIME()": {
        "notice": "The time between L2 blocks in seconds."
      },
      "STARTING_BLOCK_NUMBER()": {
        "notice": "The number of the first L2 block recorded in this contract."
      },
      "STARTING_TIMESTAMP()": {
        "notice": "The timestamp of the first L2 block recorded in this contract."
      },
      "SUBMISSION_INTERVAL()": {
        "notice": "The interval in L2 blocks at which checkpoints must be submitted."
      },
      "changeProposer(address)": {
        "notice": "Transfers the proposer role to a new account (`newProposer`).         Can only be called by the current owner."
      },
      "computeL2Timestamp(uint256)": {
        "notice": "Returns the L2 timestamp corresponding to a given L2 block number.         Returns a null output proposal if none is found."
      },
      "deleteL2Output((bytes32,uint256))": {
        "notice": "Deletes the most recent output. This is used to remove the most recent output in the         event that an erreneous output is submitted. It can only be called by the contract's         owner, not the proposer. Longer term, this should be replaced with a more robust         mechanism which will allow deletion of proposals shown to be invalid by a fault         proof."
      },
      "getL2Output(uint256)": {
        "notice": "Returns the L2 output proposal associated with a target L2 block number. If the         L2 block number provided is between checkpoints, this function will rerutn the next         proposal for the next checkpoint.         Reverts if the output proposal is either not found, or predates         the STARTING_BLOCK_NUMBER."
      },
      "initialize(bytes32,uint256,address,address)": {
        "notice": "Initializer."
      },
      "latestBlockNumber()": {
        "notice": "The number of the most recent L2 block recorded in this contract."
      },
      "nextBlockNumber()": {
        "notice": "Computes the block number of the next L2 block that needs to be checkpointed."
      },
      "proposeL2Output(bytes32,uint256,bytes32,uint256)": {
        "notice": "Accepts an outputRoot and the timestamp of the corresponding L2 block. The         timestamp must be equal to the current value returned by `nextTimestamp()` in order         to be accepted. This function may only be called by the Proposer."
      },
      "proposer()": {
        "notice": "The address of the proposer;"
      },
      "version()": {
        "notice": "Returns the full semver contract version."
      }
    },
    "events": {
      "OutputDeleted(bytes32,uint256,uint256)": {
        "notice": "Emitted when an output is deleted."
      },
      "OutputProposed(bytes32,uint256,uint256)": {
        "notice": "Emitted when an output is proposed."
      },
      "ProposerChanged(address,address)": {
        "notice": "Emitted when the proposer address is changed."
      }
    },
    "notice": "The L2 state is committed to in this contract         The payable keyword is used on proposeL2Output to save gas on the msg.value check.         This contract should be deployed behind an upgradable proxy"
  },
  "storageLayout": {
    "storage": [
      {
        "astId": 26027,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "_initialized",
        "offset": 0,
        "slot": "0",
        "type": "t_uint8"
      },
      {
        "astId": 26030,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "_initializing",
        "offset": 1,
        "slot": "0",
        "type": "t_bool"
      },
      {
        "astId": 26641,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "__gap",
        "offset": 0,
        "slot": "1",
        "type": "t_array(t_uint256)50_storage"
      },
      {
        "astId": 25899,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "_owner",
        "offset": 0,
        "slot": "51",
        "type": "t_address"
      },
      {
        "astId": 26019,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "__gap",
        "offset": 0,
        "slot": "52",
        "type": "t_array(t_uint256)49_storage"
      },
      {
        "astId": 479,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "proposer",
        "offset": 0,
        "slot": "101",
        "type": "t_address"
      },
      {
        "astId": 482,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "latestBlockNumber",
        "offset": 0,
        "slot": "102",
        "type": "t_uint256"
      },
      {
        "astId": 488,
        "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
        "label": "l2Outputs",
        "offset": 0,
        "slot": "103",
        "type": "t_mapping(t_uint256,t_struct(OutputProposal)4280_storage)"
      }
    ],
    "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_mapping(t_uint256,t_struct(OutputProposal)4280_storage)": {
        "encoding": "mapping",
        "key": "t_uint256",
        "label": "mapping(uint256 => struct Types.OutputProposal)",
        "numberOfBytes": "32",
        "value": "t_struct(OutputProposal)4280_storage"
      },
      "t_struct(OutputProposal)4280_storage": {
        "encoding": "inplace",
        "label": "struct Types.OutputProposal",
        "numberOfBytes": "64",
        "members": [
          {
            "astId": 4277,
            "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
            "label": "outputRoot",
            "offset": 0,
            "slot": "0",
            "type": "t_bytes32"
          },
          {
            "astId": 4279,
            "contract": "contracts/L1/L2OutputOracle.sol:L2OutputOracle",
            "label": "timestamp",
            "offset": 0,
            "slot": "1",
            "type": "t_uint256"
          }
        ]
      },
      "t_uint256": {
        "encoding": "inplace",
        "label": "uint256",
        "numberOfBytes": "32"
      },
      "t_uint8": {
        "encoding": "inplace",
        "label": "uint8",
        "numberOfBytes": "1"
      }
    }
  }
}