Commit fa9823f3 authored by Maurelian's avatar Maurelian Committed by GitHub

Naming improvements in Oracle (#2990)

* style(ctb): Rename append to propose
Please enter the commit message for your changes. Lines starting

* style(ctb): Use output root for bytes32

This is more accurate than saying 'L2 output' which is better
applied to the full unhashed data structure

* style(ctb): Rename sequencer to proposer in oracle
Co-authored-by: default avatarmergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
parent 1487cf60
---
'@eth-optimism/contracts-bedrock': patch
---
Naming improvements for functions and variables in the L2OutputOracle
...@@ -36,8 +36,8 @@ type L2OutputOracleOutputProposal struct { ...@@ -36,8 +36,8 @@ type L2OutputOracleOutputProposal struct {
// L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. // L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract.
var L2OutputOracleMetaData = &bind.MetaData{ var L2OutputOracleMetaData = &bind.MetaData{
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\":\"_sequencer\",\"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\":\"l2Output\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"L2OutputAppended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"l2Output\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l1Timestamp\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"L2OutputDeleted\",\"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\":\"previousSequencer\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newSequencer\",\"type\":\"address\"}],\"name\":\"SequencerChanged\",\"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\":\"MAJOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PATCH_VERSION\",\"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\":\"bytes32\",\"name\":\"_l2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_l1Blockhash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1BlockNumber\",\"type\":\"uint256\"}],\"name\":\"appendL2Output\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newSequencer\",\"type\":\"address\"}],\"name\":\"changeSequencer\",\"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\":\"structL2OutputOracle.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\":\"structL2OutputOracle.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_genesisL2Output\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_sequencer\",\"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\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequencer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", 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\":\"MAJOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINOR_VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PATCH_VERSION\",\"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\":\"structL2OutputOracle.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\":\"structL2OutputOracle.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\"}]",
Bin: "0x6101806040523480156200001257600080fd5b5060405162001e5538038062001e558339810160408190526200003591620005d6565b6000608081905260a052600160c052428310620000cb5760405162461bcd60e51b815260206004820152604360248201527f4f7574707574204f7261636c653a20496e697469616c204c3220626c6f636b2060448201527f74696d65206d757374206265206c657373207468616e2063757272656e742074606482015262696d6560e81b608482015260a4015b60405180910390fd5b60e0889052610100869052610120859052610140849052610160839052620000f68786848462000104565b505050505050505062000648565b6000620001126001620001cd565b905080156200012b576000805461ff0019166101001790555b6040805180820182528681524260208083019182526000888152606790915292909220905181559051600190910155606684905562000169620002e0565b620001748362000348565b6200017f82620004f6565b8015620001c6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60008054610100900460ff161562000262578160ff16600114801562000206575062000204306200054860201b620011f01760201c565b155b6200025a5760405162461bcd60e51b815260206004820152602e602482015260008051602062001e1583398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000c2565b506000919050565b60005460ff808416911610620002c15760405162461bcd60e51b815260206004820152602e602482015260008051602062001e1583398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000c2565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166200033c5760405162461bcd60e51b815260206004820152602b602482015260008051602062001e3583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c2565b6200034662000557565b565b6033546001600160a01b03163314620003a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000c2565b6001600160a01b038116620004145760405162461bcd60e51b815260206004820152602f60248201527f4f75747075744f7261636c653a206e65772073657175656e636572206973207460448201526e6865207a65726f206164647265737360881b6064820152608401620000c2565b6033546001600160a01b03828116911614156200049a5760405162461bcd60e51b815260206004820152603360248201527f4f75747075744f7261636c653a2073657175656e6365722063616e6e6f74206260448201527f652073616d6520617320746865206f776e6572000000000000000000000000006064820152608401620000c2565b6065546040516001600160a01b038084169216907f6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d90600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff16620005b35760405162461bcd60e51b815260206004820152602b602482015260008051602062001e3583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c2565b6200034633620004f6565b80516001600160a01b0381168114620002db57600080fd5b600080600080600080600080610100898b031215620005f457600080fd5b885197506020890151965060408901519550606089015194506080890151935060a089015192506200062960c08a01620005be565b91506200063960e08a01620005be565b90509295985092959890939650565b60805160a05160c05160e0516101005161012051610140516101605161173d620006d8600039600081816101750152610f0f0152600081816101de0152610f6801526000818161025b01528181610e390152610f33015260006103fd01526000818161028f01528181610776015261108f0152600061031501526000610431015260006104da015261173d6000f3fe60806040526004361061015e5760003560e01c8063715018a6116100c0578063d1de856c11610074578063dcec334811610059578063dcec334814610493578063f2fde38b146104a8578063f786becd146104c857600080fd5b8063d1de856c14610453578063d20b1a511461047357600080fd5b8063a25ae557116100a5578063a25ae55714610377578063a4771aad146103eb578063c8b915311461041f57600080fd5b8063715018a6146103375780638da5cb5b1461034c57600080fd5b80634599c78811610117578063529933df116100fc578063529933df1461027d5780635c1bba38146102b15780636bf2606a1461030357600080fd5b80634599c788146102335780634ab65d731461024957600080fd5b806320e9fcd41161014857806320e9fcd4146101cc57806325188104146102005780632af8ded81461021357600080fd5b80622134cc14610163578063093b3d90146101aa575b600080fd5b34801561016f57600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156101b657600080fd5b506101ca6101c5366004611548565b6104fc565b005b3480156101d857600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b6101ca61020e3660046115be565b6107a2565b34801561021f57600080fd5b506101ca61022e366004611614565b610b4b565b34801561023f57600080fd5b5061019760665481565b34801561025557600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561028957600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b3480156102bd57600080fd5b506065546102de9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a1565b34801561030f57600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561034357600080fd5b506101ca610da8565b34801561035857600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff166102de565b34801561038357600080fd5b506103d0610392366004611636565b604080518082019091526000808252602082015250600090815260676020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101a1565b3480156103f757600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561042b57600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561045f57600080fd5b5061019761046e366004611636565b610e35565b34801561047f57600080fd5b506101ca61048e36600461164f565b610f92565b34801561049f57600080fd5b5061019761108b565b3480156104b457600080fd5b506101ca6104c3366004611614565b6110c0565b3480156104d457600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff163314610582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6066546000908152606760209081526040918290208251808401909352805480845260019091015491830191909152825114610666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605260248201527f4f75747075744f7261636c653a20546865206f757470757420726f6f7420746f60448201527f2064656c65746520646f6573206e6f74206d6174636820746865206c6174657360648201527f74206f75747075742070726f706f73616c2e0000000000000000000000000000608482015260a401610579565b8060200151826020015114610723576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f4f75747075744f7261636c653a205468652074696d657374616d7020746f206460448201527f656c65746520646f6573206e6f74206d6174636820746865206c61746573742060648201527f6f75747075742070726f706f73616c2e00000000000000000000000000000000608482015260a401610579565b606654602082015182516040517f7320566fd5256cf8923648a5d9f560f1e92f1435a1bb32ddd1fe107f224ad35990600090a4606680546000908152606760205260408120818155600101555461079b907f0000000000000000000000000000000000000000000000000000000000000000906116c4565b6066555050565b60655473ffffffffffffffffffffffffffffffffffffffff163314610849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f75747075744f7261636c653a2063616c6c6572206973206e6f74207468652060448201527f73657175656e63657200000000000000000000000000000000000000000000006064820152608401610579565b61085161108b565b8314610905576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f626520657175616c20746f206e65787420657870656374656420626c6f636b2060648201527f6e756d6265722e00000000000000000000000000000000000000000000000000608482015260a401610579565b4261090f84610e35565b1061099c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4f75747075744f7261636c653a2043616e6e6f7420617070656e64204c32206f60448201527f757470757420696e206675747572652e000000000000000000000000000000006064820152608401610579565b83610a29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4f75747075744f7261636c653a2043616e6e6f74207375626d697420656d707460448201527f79204c32206f75747075742e00000000000000000000000000000000000000006064820152608401610579565b8115610ae55781814014610ae5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b6861736820646f6573206e6f7460448201527f206d61746368207468652068617368206174207468652065787065637465642060648201527f6865696768742e00000000000000000000000000000000000000000000000000608482015260a401610579565b6040805180820182528581524260208083018281526000888152606790925284822093518455516001909301929092556066869055915185929187917fd6703ded1701060d9ae1793db76d594790a4e775781225f79b5aa8a77987c0809190a450505050565b60335473ffffffffffffffffffffffffffffffffffffffff163314610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610579565b73ffffffffffffffffffffffffffffffffffffffff8116610c6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f75747075744f7261636c653a206e65772073657175656e636572206973207460448201527f6865207a65726f206164647265737300000000000000000000000000000000006064820152608401610579565b60335473ffffffffffffffffffffffffffffffffffffffff82811691161415610d1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4f75747075744f7261636c653a2073657175656e6365722063616e6e6f74206260448201527f652073616d6520617320746865206f776e6572000000000000000000000000006064820152608401610579565b60655460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d90600090a3606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314610e29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610579565b610e33600061120c565b565b60007f0000000000000000000000000000000000000000000000000000000000000000821015610f0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f62652067726561746572207468616e206f7220657175616c20746f207468652060648201527f7374617274696e6720626c6f636b206e756d6265722e00000000000000000000608482015260a401610579565b7f0000000000000000000000000000000000000000000000000000000000000000610f587f0000000000000000000000000000000000000000000000000000000000000000846116c4565b610f6291906116db565b610f8c907f0000000000000000000000000000000000000000000000000000000000000000611718565b92915050565b6000610f9e6001611283565b90508015610fd357600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6040805180820182528681524260208083019182526000888152606790915292909220905181559051600190910155606684905561100f61140e565b61101883610b4b565b6110218261120c565b801561108457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006066546110bb9190611718565b905090565b60335473ffffffffffffffffffffffffffffffffffffffff163314611141576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610579565b73ffffffffffffffffffffffffffffffffffffffff81166111e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610579565b6111ed8161120c565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff161561133a578160ff1660011480156112a65750303b155b611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610579565b506000919050565b60005460ff8084169116106113d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610579565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff166114a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610579565b610e33600054610100900460ff1661153f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610579565b610e333361120c565b60006040828403121561155a57600080fd5b6040516040810181811067ffffffffffffffff821117156115a4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b600080600080608085870312156115d457600080fd5b5050823594602084013594506040840135936060013592509050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461140957600080fd5b60006020828403121561162657600080fd5b61162f826115f0565b9392505050565b60006020828403121561164857600080fd5b5035919050565b6000806000806080858703121561166557600080fd5b843593506020850135925061167c604086016115f0565b915061168a606086016115f0565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156116d6576116d6611695565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561171357611713611695565b500290565b6000821982111561172b5761172b611695565b50019056fea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", Bin: "0x6101806040523480156200001257600080fd5b5060405162001e4538038062001e458339810160408190526200003591620005ca565b6000608081905260a052600160c052428310620000cb5760405162461bcd60e51b815260206004820152604360248201527f4f7574707574204f7261636c653a20496e697469616c204c3220626c6f636b2060448201527f74696d65206d757374206265206c657373207468616e2063757272656e742074606482015262696d6560e81b608482015260a4015b60405180910390fd5b60e0889052610100869052610120859052610140849052610160839052620000f68786848462000104565b50505050505050506200063c565b6000620001126001620001cd565b905080156200012b576000805461ff0019166101001790555b6040805180820182528681524260208083019182526000888152606790915292909220905181559051600190910155606684905562000169620002e0565b620001748362000348565b6200017f82620004ea565b8015620001c6576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60008054610100900460ff161562000262578160ff16600114801562000206575062000204306200053c60201b620011ec1760201c565b155b6200025a5760405162461bcd60e51b815260206004820152602e602482015260008051602062001e0583398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000c2565b506000919050565b60005460ff808416911610620002c15760405162461bcd60e51b815260206004820152602e602482015260008051602062001e0583398151915260448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620000c2565b506000805460ff191660ff92909216919091179055600190565b919050565b600054610100900460ff166200033c5760405162461bcd60e51b815260206004820152602b602482015260008051602062001e2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c2565b620003466200054b565b565b6033546001600160a01b03163314620003a45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620000c2565b6001600160a01b038116620004135760405162461bcd60e51b815260206004820152602e60248201527f4f75747075744f7261636c653a206e65772070726f706f73657220697320746860448201526d65207a65726f206164647265737360901b6064820152608401620000c2565b6033546001600160a01b03828116911614156200048e5760405162461bcd60e51b815260206004820152603260248201527f4f75747075744f7261636c653a2070726f706f7365722063616e6e6f742062656044820152711039b0b6b29030b9903a34329037bbb732b960711b6064820152608401620000c2565b6065546040516001600160a01b038084169216907f3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd90600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03163b151590565b600054610100900460ff16620005a75760405162461bcd60e51b815260206004820152602b602482015260008051602062001e2583398151915260448201526a6e697469616c697a696e6760a81b6064820152608401620000c2565b6200034633620004ea565b80516001600160a01b0381168114620002db57600080fd5b600080600080600080600080610100898b031215620005e857600080fd5b885197506020890151965060408901519550606089015194506080890151935060a089015192506200061d60c08a01620005b2565b91506200062d60e08a01620005b2565b90509295985092959890939650565b60805160a05160c05160e05161010051610120516101405161016051611739620006cc600039600081816101750152610f0b0152600081816101de0152610f6401526000818161022801528181610e350152610f2f015260006103cc01526000818161025c01528181610772015261108b015260006102900152600061042d015260006104d601526117396000f3fe60806040526004361061015e5760003560e01c80639aaab648116100c0578063d1de856c11610074578063dcec334811610059578063dcec33481461048f578063f2fde38b146104a4578063f786becd146104c457600080fd5b8063d1de856c1461044f578063d20b1a511461046f57600080fd5b8063a4771aad116100a5578063a4771aad146103ba578063a8e4fb90146103ee578063c8b915311461041b57600080fd5b80639aaab64814610333578063a25ae5571461034657600080fd5b8063529933df11610117578063715018a6116100fc578063715018a6146102b257806372d5fe21146102c75780638da5cb5b146102e757600080fd5b8063529933df1461024a5780636bf2606a1461027e57600080fd5b806320e9fcd41161014857806320e9fcd4146101cc5780634599c788146102005780634ab65d731461021657600080fd5b80622134cc14610163578063093b3d90146101aa575b600080fd5b34801561016f57600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b3480156101b657600080fd5b506101ca6101c5366004611544565b6104f8565b005b3480156101d857600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561020c57600080fd5b5061019760665481565b34801561022257600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561025657600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561028a57600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b3480156102be57600080fd5b506101ca61079e565b3480156102d357600080fd5b506101ca6102e23660046115de565b61082b565b3480156102f357600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a1565b6101ca610341366004611600565b610a88565b34801561035257600080fd5b5061039f610361366004611632565b604080518082019091526000808252602082015250600090815260676020908152604091829020825180840190935280548352600101549082015290565b604080518251815260209283015192810192909252016101a1565b3480156103c657600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fa57600080fd5b5060655461030e9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561042757600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b34801561045b57600080fd5b5061019761046a366004611632565b610e31565b34801561047b57600080fd5b506101ca61048a36600461164b565b610f8e565b34801561049b57600080fd5b50610197611087565b3480156104b057600080fd5b506101ca6104bf3660046115de565b6110bc565b3480156104d057600080fd5b506101977f000000000000000000000000000000000000000000000000000000000000000081565b60335473ffffffffffffffffffffffffffffffffffffffff16331461057e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6066546000908152606760209081526040918290208251808401909352805480845260019091015491830191909152825114610662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605260248201527f4f75747075744f7261636c653a20546865206f757470757420726f6f7420746f60448201527f2064656c65746520646f6573206e6f74206d6174636820746865206c6174657360648201527f74206f75747075742070726f706f73616c2e0000000000000000000000000000608482015260a401610575565b806020015182602001511461071f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605060248201527f4f75747075744f7261636c653a205468652074696d657374616d7020746f206460448201527f656c65746520646f6573206e6f74206d6174636820746865206c61746573742060648201527f6f75747075742070726f706f73616c2e00000000000000000000000000000000608482015260a401610575565b606654602082015182516040517f11e942315215fbc11bf574b22ca610d001e704d870a2307833c188d31600b5c690600090a46066805460009081526067602052604081208181556001015554610797907f0000000000000000000000000000000000000000000000000000000000000000906116c0565b6066555050565b60335473ffffffffffffffffffffffffffffffffffffffff16331461081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610575565b6108296000611208565b565b60335473ffffffffffffffffffffffffffffffffffffffff1633146108ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610575565b73ffffffffffffffffffffffffffffffffffffffff811661094f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f75747075744f7261636c653a206e65772070726f706f73657220697320746860448201527f65207a65726f20616464726573730000000000000000000000000000000000006064820152608401610575565b60335473ffffffffffffffffffffffffffffffffffffffff828116911614156109fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f75747075744f7261636c653a2070726f706f7365722063616e6e6f7420626560448201527f2073616d6520617320746865206f776e657200000000000000000000000000006064820152608401610575565b60655460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd90600090a3606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60655473ffffffffffffffffffffffffffffffffffffffff163314610b2f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4f75747075744f7261636c653a2063616c6c6572206973206e6f74207468652060448201527f70726f706f7365720000000000000000000000000000000000000000000000006064820152608401610575565b610b37611087565b8314610beb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f626520657175616c20746f206e65787420657870656374656420626c6f636b2060648201527f6e756d6265722e00000000000000000000000000000000000000000000000000608482015260a401610575565b42610bf584610e31565b10610c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603160248201527f4f75747075744f7261636c653a2043616e6e6f742070726f706f7365204c322060448201527f6f757470757420696e206675747572652e0000000000000000000000000000006064820152608401610575565b83610d0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f4f75747075744f7261636c653a2043616e6e6f74207375626d697420656d707460448201527f79204c32206f75747075742e00000000000000000000000000000000000000006064820152608401610575565b8115610dcb5781814014610dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604760248201527f4f75747075744f7261636c653a20426c6f636b6861736820646f6573206e6f7460448201527f206d61746368207468652068617368206174207468652065787065637465642060648201527f6865696768742e00000000000000000000000000000000000000000000000000608482015260a401610575565b6040805180820182528581524260208083018281526000888152606790925284822093518455516001909301929092556066869055915185929187917fc120f5e881491e6e212befa39e36b8f57d5eca31915f2e5d60a420f418caa6df9190a450505050565b60007f0000000000000000000000000000000000000000000000000000000000000000821015610f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605660248201527f4f75747075744f7261636c653a20426c6f636b206e756d626572206d7573742060448201527f62652067726561746572207468616e206f7220657175616c20746f207468652060648201527f7374617274696e6720626c6f636b206e756d6265722e00000000000000000000608482015260a401610575565b7f0000000000000000000000000000000000000000000000000000000000000000610f547f0000000000000000000000000000000000000000000000000000000000000000846116c0565b610f5e91906116d7565b610f88907f0000000000000000000000000000000000000000000000000000000000000000611714565b92915050565b6000610f9a600161127f565b90508015610fcf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6040805180820182528681524260208083019182526000888152606790915292909220905181559051600190910155606684905561100b61140a565b6110148361082b565b61101d82611208565b801561108057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006066546110b79190611714565b905090565b60335473ffffffffffffffffffffffffffffffffffffffff16331461113d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610575565b73ffffffffffffffffffffffffffffffffffffffff81166111e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610575565b6111e981611208565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008054610100900460ff1615611336578160ff1660011480156112a25750303b155b61132e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610575565b506000919050565b60005460ff8084169116106113cd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610575565b50600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055600190565b919050565b600054610100900460ff166114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610575565b610829600054610100900460ff1661153b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610575565b61082933611208565b60006040828403121561155657600080fd5b6040516040810181811067ffffffffffffffff821117156115a0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052823581526020928301359281019290925250919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461140557600080fd5b6000602082840312156115f057600080fd5b6115f9826115ba565b9392505050565b6000806000806080858703121561161657600080fd5b5050823594602084013594506040840135936060013592509050565b60006020828403121561164457600080fd5b5035919050565b6000806000806080858703121561166157600080fd5b8435935060208501359250611678604086016115ba565b9150611686606086016115ba565b905092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156116d2576116d2611691565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561170f5761170f611691565b500290565b6000821982111561172757611727611691565b50019056fea164736f6c634300080a000a496e697469616c697a61626c653a20636f6e747261637420697320616c726561496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069",
} }
// L2OutputOracleABI is the input ABI used to generate the binding from. // L2OutputOracleABI is the input ABI used to generate the binding from.
...@@ -49,7 +49,7 @@ var L2OutputOracleABI = L2OutputOracleMetaData.ABI ...@@ -49,7 +49,7 @@ var L2OutputOracleABI = L2OutputOracleMetaData.ABI
var L2OutputOracleBin = L2OutputOracleMetaData.Bin var L2OutputOracleBin = L2OutputOracleMetaData.Bin
// DeployL2OutputOracle deploys a new Ethereum contract, binding an instance of L2OutputOracle to it. // DeployL2OutputOracle deploys a new Ethereum contract, binding an instance of L2OutputOracle to it.
func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _submissionInterval *big.Int, _genesisL2Output [32]byte, _historicalTotalBlocks *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _l2BlockTime *big.Int, _sequencer common.Address, _owner common.Address) (common.Address, *types.Transaction, *L2OutputOracle, error) { func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _submissionInterval *big.Int, _genesisL2Output [32]byte, _historicalTotalBlocks *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _l2BlockTime *big.Int, _proposer common.Address, _owner common.Address) (common.Address, *types.Transaction, *L2OutputOracle, error) {
parsed, err := L2OutputOracleMetaData.GetAbi() parsed, err := L2OutputOracleMetaData.GetAbi()
if err != nil { if err != nil {
return common.Address{}, nil, nil, err return common.Address{}, nil, nil, err
...@@ -58,7 +58,7 @@ func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, ...@@ -58,7 +58,7 @@ func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend,
return common.Address{}, nil, nil, errors.New("GetABI returned nil") return common.Address{}, nil, nil, errors.New("GetABI returned nil")
} }
address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend, _submissionInterval, _genesisL2Output, _historicalTotalBlocks, _startingBlockNumber, _startingTimestamp, _l2BlockTime, _sequencer, _owner) address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend, _submissionInterval, _genesisL2Output, _historicalTotalBlocks, _startingBlockNumber, _startingTimestamp, _l2BlockTime, _proposer, _owner)
if err != nil { if err != nil {
return common.Address{}, nil, nil, err return common.Address{}, nil, nil, err
} }
...@@ -610,12 +610,12 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) Owner() (common.Address, err ...@@ -610,12 +610,12 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) Owner() (common.Address, err
return _L2OutputOracle.Contract.Owner(&_L2OutputOracle.CallOpts) return _L2OutputOracle.Contract.Owner(&_L2OutputOracle.CallOpts)
} }
// Sequencer is a free data retrieval call binding the contract method 0x5c1bba38. // Proposer is a free data retrieval call binding the contract method 0xa8e4fb90.
// //
// Solidity: function sequencer() view returns(address) // Solidity: function proposer() view returns(address)
func (_L2OutputOracle *L2OutputOracleCaller) Sequencer(opts *bind.CallOpts) (common.Address, error) { func (_L2OutputOracle *L2OutputOracleCaller) Proposer(opts *bind.CallOpts) (common.Address, error) {
var out []interface{} var out []interface{}
err := _L2OutputOracle.contract.Call(opts, &out, "sequencer") err := _L2OutputOracle.contract.Call(opts, &out, "proposer")
if err != nil { if err != nil {
return *new(common.Address), err return *new(common.Address), err
...@@ -627,60 +627,39 @@ func (_L2OutputOracle *L2OutputOracleCaller) Sequencer(opts *bind.CallOpts) (com ...@@ -627,60 +627,39 @@ func (_L2OutputOracle *L2OutputOracleCaller) Sequencer(opts *bind.CallOpts) (com
} }
// Sequencer is a free data retrieval call binding the contract method 0x5c1bba38. // Proposer is a free data retrieval call binding the contract method 0xa8e4fb90.
// //
// Solidity: function sequencer() view returns(address) // Solidity: function proposer() view returns(address)
func (_L2OutputOracle *L2OutputOracleSession) Sequencer() (common.Address, error) { func (_L2OutputOracle *L2OutputOracleSession) Proposer() (common.Address, error) {
return _L2OutputOracle.Contract.Sequencer(&_L2OutputOracle.CallOpts) return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts)
} }
// Sequencer is a free data retrieval call binding the contract method 0x5c1bba38. // Proposer is a free data retrieval call binding the contract method 0xa8e4fb90.
// //
// Solidity: function sequencer() view returns(address) // Solidity: function proposer() view returns(address)
func (_L2OutputOracle *L2OutputOracleCallerSession) Sequencer() (common.Address, error) { func (_L2OutputOracle *L2OutputOracleCallerSession) Proposer() (common.Address, error) {
return _L2OutputOracle.Contract.Sequencer(&_L2OutputOracle.CallOpts) return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts)
} }
// AppendL2Output is a paid mutator transaction binding the contract method 0x25188104. // ChangeProposer is a paid mutator transaction binding the contract method 0x72d5fe21.
// //
// Solidity: function appendL2Output(bytes32 _l2Output, uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber) payable returns() // Solidity: function changeProposer(address _newProposer) returns()
func (_L2OutputOracle *L2OutputOracleTransactor) AppendL2Output(opts *bind.TransactOpts, _l2Output [32]byte, _l2BlockNumber *big.Int, _l1Blockhash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { func (_L2OutputOracle *L2OutputOracleTransactor) ChangeProposer(opts *bind.TransactOpts, _newProposer common.Address) (*types.Transaction, error) {
return _L2OutputOracle.contract.Transact(opts, "appendL2Output", _l2Output, _l2BlockNumber, _l1Blockhash, _l1BlockNumber) return _L2OutputOracle.contract.Transact(opts, "changeProposer", _newProposer)
} }
// AppendL2Output is a paid mutator transaction binding the contract method 0x25188104. // ChangeProposer is a paid mutator transaction binding the contract method 0x72d5fe21.
// //
// Solidity: function appendL2Output(bytes32 _l2Output, uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber) payable returns() // Solidity: function changeProposer(address _newProposer) returns()
func (_L2OutputOracle *L2OutputOracleSession) AppendL2Output(_l2Output [32]byte, _l2BlockNumber *big.Int, _l1Blockhash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { func (_L2OutputOracle *L2OutputOracleSession) ChangeProposer(_newProposer common.Address) (*types.Transaction, error) {
return _L2OutputOracle.Contract.AppendL2Output(&_L2OutputOracle.TransactOpts, _l2Output, _l2BlockNumber, _l1Blockhash, _l1BlockNumber) return _L2OutputOracle.Contract.ChangeProposer(&_L2OutputOracle.TransactOpts, _newProposer)
} }
// AppendL2Output is a paid mutator transaction binding the contract method 0x25188104. // ChangeProposer is a paid mutator transaction binding the contract method 0x72d5fe21.
// //
// Solidity: function appendL2Output(bytes32 _l2Output, uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber) payable returns() // Solidity: function changeProposer(address _newProposer) returns()
func (_L2OutputOracle *L2OutputOracleTransactorSession) AppendL2Output(_l2Output [32]byte, _l2BlockNumber *big.Int, _l1Blockhash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) { func (_L2OutputOracle *L2OutputOracleTransactorSession) ChangeProposer(_newProposer common.Address) (*types.Transaction, error) {
return _L2OutputOracle.Contract.AppendL2Output(&_L2OutputOracle.TransactOpts, _l2Output, _l2BlockNumber, _l1Blockhash, _l1BlockNumber) return _L2OutputOracle.Contract.ChangeProposer(&_L2OutputOracle.TransactOpts, _newProposer)
}
// ChangeSequencer is a paid mutator transaction binding the contract method 0x2af8ded8.
//
// Solidity: function changeSequencer(address _newSequencer) returns()
func (_L2OutputOracle *L2OutputOracleTransactor) ChangeSequencer(opts *bind.TransactOpts, _newSequencer common.Address) (*types.Transaction, error) {
return _L2OutputOracle.contract.Transact(opts, "changeSequencer", _newSequencer)
}
// ChangeSequencer is a paid mutator transaction binding the contract method 0x2af8ded8.
//
// Solidity: function changeSequencer(address _newSequencer) returns()
func (_L2OutputOracle *L2OutputOracleSession) ChangeSequencer(_newSequencer common.Address) (*types.Transaction, error) {
return _L2OutputOracle.Contract.ChangeSequencer(&_L2OutputOracle.TransactOpts, _newSequencer)
}
// ChangeSequencer is a paid mutator transaction binding the contract method 0x2af8ded8.
//
// Solidity: function changeSequencer(address _newSequencer) returns()
func (_L2OutputOracle *L2OutputOracleTransactorSession) ChangeSequencer(_newSequencer common.Address) (*types.Transaction, error) {
return _L2OutputOracle.Contract.ChangeSequencer(&_L2OutputOracle.TransactOpts, _newSequencer)
} }
// DeleteL2Output is a paid mutator transaction binding the contract method 0x093b3d90. // DeleteL2Output is a paid mutator transaction binding the contract method 0x093b3d90.
...@@ -706,23 +685,44 @@ func (_L2OutputOracle *L2OutputOracleTransactorSession) DeleteL2Output(_proposal ...@@ -706,23 +685,44 @@ func (_L2OutputOracle *L2OutputOracleTransactorSession) DeleteL2Output(_proposal
// Initialize is a paid mutator transaction binding the contract method 0xd20b1a51. // Initialize is a paid mutator transaction binding the contract method 0xd20b1a51.
// //
// Solidity: function initialize(bytes32 _genesisL2Output, uint256 _startingBlockNumber, address _sequencer, address _owner) returns() // Solidity: function initialize(bytes32 _genesisL2Output, uint256 _startingBlockNumber, address _proposer, address _owner) returns()
func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _genesisL2Output [32]byte, _startingBlockNumber *big.Int, _sequencer common.Address, _owner common.Address) (*types.Transaction, error) { func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _genesisL2Output [32]byte, _startingBlockNumber *big.Int, _proposer common.Address, _owner common.Address) (*types.Transaction, error) {
return _L2OutputOracle.contract.Transact(opts, "initialize", _genesisL2Output, _startingBlockNumber, _sequencer, _owner) return _L2OutputOracle.contract.Transact(opts, "initialize", _genesisL2Output, _startingBlockNumber, _proposer, _owner)
} }
// Initialize is a paid mutator transaction binding the contract method 0xd20b1a51. // Initialize is a paid mutator transaction binding the contract method 0xd20b1a51.
// //
// Solidity: function initialize(bytes32 _genesisL2Output, uint256 _startingBlockNumber, address _sequencer, address _owner) returns() // Solidity: function initialize(bytes32 _genesisL2Output, uint256 _startingBlockNumber, address _proposer, address _owner) returns()
func (_L2OutputOracle *L2OutputOracleSession) Initialize(_genesisL2Output [32]byte, _startingBlockNumber *big.Int, _sequencer common.Address, _owner common.Address) (*types.Transaction, error) { func (_L2OutputOracle *L2OutputOracleSession) Initialize(_genesisL2Output [32]byte, _startingBlockNumber *big.Int, _proposer common.Address, _owner common.Address) (*types.Transaction, error) {
return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _genesisL2Output, _startingBlockNumber, _sequencer, _owner) return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _genesisL2Output, _startingBlockNumber, _proposer, _owner)
} }
// Initialize is a paid mutator transaction binding the contract method 0xd20b1a51. // Initialize is a paid mutator transaction binding the contract method 0xd20b1a51.
// //
// Solidity: function initialize(bytes32 _genesisL2Output, uint256 _startingBlockNumber, address _sequencer, address _owner) returns() // Solidity: function initialize(bytes32 _genesisL2Output, uint256 _startingBlockNumber, address _proposer, address _owner) returns()
func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_genesisL2Output [32]byte, _startingBlockNumber *big.Int, _sequencer common.Address, _owner common.Address) (*types.Transaction, error) { func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_genesisL2Output [32]byte, _startingBlockNumber *big.Int, _proposer common.Address, _owner common.Address) (*types.Transaction, error) {
return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _genesisL2Output, _startingBlockNumber, _sequencer, _owner) return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _genesisL2Output, _startingBlockNumber, _proposer, _owner)
}
// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648.
//
// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber) payable returns()
func (_L2OutputOracle *L2OutputOracleTransactor) ProposeL2Output(opts *bind.TransactOpts, _outputRoot [32]byte, _l2BlockNumber *big.Int, _l1Blockhash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) {
return _L2OutputOracle.contract.Transact(opts, "proposeL2Output", _outputRoot, _l2BlockNumber, _l1Blockhash, _l1BlockNumber)
}
// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648.
//
// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber) payable returns()
func (_L2OutputOracle *L2OutputOracleSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1Blockhash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) {
return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1Blockhash, _l1BlockNumber)
}
// ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648.
//
// Solidity: function proposeL2Output(bytes32 _outputRoot, uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber) payable returns()
func (_L2OutputOracle *L2OutputOracleTransactorSession) ProposeL2Output(_outputRoot [32]byte, _l2BlockNumber *big.Int, _l1Blockhash [32]byte, _l1BlockNumber *big.Int) (*types.Transaction, error) {
return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1Blockhash, _l1BlockNumber)
} }
// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
...@@ -901,9 +901,9 @@ func (_L2OutputOracle *L2OutputOracleFilterer) ParseInitialized(log types.Log) ( ...@@ -901,9 +901,9 @@ func (_L2OutputOracle *L2OutputOracleFilterer) ParseInitialized(log types.Log) (
return event, nil return event, nil
} }
// L2OutputOracleL2OutputAppendedIterator is returned from FilterL2OutputAppended and is used to iterate over the raw logs and unpacked data for L2OutputAppended events raised by the L2OutputOracle contract. // L2OutputOracleOutputDeletedIterator is returned from FilterOutputDeleted and is used to iterate over the raw logs and unpacked data for OutputDeleted events raised by the L2OutputOracle contract.
type L2OutputOracleL2OutputAppendedIterator struct { type L2OutputOracleOutputDeletedIterator struct {
Event *L2OutputOracleL2OutputAppended // Event containing the contract specifics and raw log Event *L2OutputOracleOutputDeleted // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data event string // Event name to use for unpacking event data
...@@ -917,7 +917,7 @@ type L2OutputOracleL2OutputAppendedIterator struct { ...@@ -917,7 +917,7 @@ type L2OutputOracleL2OutputAppendedIterator struct {
// Next advances the iterator to the subsequent event, returning whether there // Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is // are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure. // returned and Error() can be queried for the exact failure.
func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool { func (it *L2OutputOracleOutputDeletedIterator) Next() bool {
// If the iterator failed, stop iterating // If the iterator failed, stop iterating
if it.fail != nil { if it.fail != nil {
return false return false
...@@ -926,7 +926,7 @@ func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool { ...@@ -926,7 +926,7 @@ func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool {
if it.done { if it.done {
select { select {
case log := <-it.logs: case log := <-it.logs:
it.Event = new(L2OutputOracleL2OutputAppended) it.Event = new(L2OutputOracleOutputDeleted)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err it.fail = err
return false return false
...@@ -941,7 +941,7 @@ func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool { ...@@ -941,7 +941,7 @@ func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool {
// Iterator still in progress, wait for either a data or an error event // Iterator still in progress, wait for either a data or an error event
select { select {
case log := <-it.logs: case log := <-it.logs:
it.Event = new(L2OutputOracleL2OutputAppended) it.Event = new(L2OutputOracleOutputDeleted)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err it.fail = err
return false return false
...@@ -957,33 +957,33 @@ func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool { ...@@ -957,33 +957,33 @@ func (it *L2OutputOracleL2OutputAppendedIterator) Next() bool {
} }
// Error returns any retrieval or parsing error occurred during filtering. // Error returns any retrieval or parsing error occurred during filtering.
func (it *L2OutputOracleL2OutputAppendedIterator) Error() error { func (it *L2OutputOracleOutputDeletedIterator) Error() error {
return it.fail return it.fail
} }
// Close terminates the iteration process, releasing any pending underlying // Close terminates the iteration process, releasing any pending underlying
// resources. // resources.
func (it *L2OutputOracleL2OutputAppendedIterator) Close() error { func (it *L2OutputOracleOutputDeletedIterator) Close() error {
it.sub.Unsubscribe() it.sub.Unsubscribe()
return nil return nil
} }
// L2OutputOracleL2OutputAppended represents a L2OutputAppended event raised by the L2OutputOracle contract. // L2OutputOracleOutputDeleted represents a OutputDeleted event raised by the L2OutputOracle contract.
type L2OutputOracleL2OutputAppended struct { type L2OutputOracleOutputDeleted struct {
L2Output [32]byte OutputRoot [32]byte
L1Timestamp *big.Int L1Timestamp *big.Int
L2BlockNumber *big.Int L2BlockNumber *big.Int
Raw types.Log // Blockchain specific contextual infos Raw types.Log // Blockchain specific contextual infos
} }
// FilterL2OutputAppended is a free log retrieval operation binding the contract event 0xd6703ded1701060d9ae1793db76d594790a4e775781225f79b5aa8a77987c080. // FilterOutputDeleted is a free log retrieval operation binding the contract event 0x11e942315215fbc11bf574b22ca610d001e704d870a2307833c188d31600b5c6.
// //
// Solidity: event L2OutputAppended(bytes32 indexed l2Output, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber) // Solidity: event OutputDeleted(bytes32 indexed outputRoot, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber)
func (_L2OutputOracle *L2OutputOracleFilterer) FilterL2OutputAppended(opts *bind.FilterOpts, l2Output [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleL2OutputAppendedIterator, error) { func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputDeleted(opts *bind.FilterOpts, outputRoot [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputDeletedIterator, error) {
var l2OutputRule []interface{} var outputRootRule []interface{}
for _, l2OutputItem := range l2Output { for _, outputRootItem := range outputRoot {
l2OutputRule = append(l2OutputRule, l2OutputItem) outputRootRule = append(outputRootRule, outputRootItem)
} }
var l1TimestampRule []interface{} var l1TimestampRule []interface{}
for _, l1TimestampItem := range l1Timestamp { for _, l1TimestampItem := range l1Timestamp {
...@@ -994,21 +994,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) FilterL2OutputAppended(opts *bind ...@@ -994,21 +994,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) FilterL2OutputAppended(opts *bind
l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem)
} }
logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "L2OutputAppended", l2OutputRule, l1TimestampRule, l2BlockNumberRule) logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputDeleted", outputRootRule, l1TimestampRule, l2BlockNumberRule)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &L2OutputOracleL2OutputAppendedIterator{contract: _L2OutputOracle.contract, event: "L2OutputAppended", logs: logs, sub: sub}, nil return &L2OutputOracleOutputDeletedIterator{contract: _L2OutputOracle.contract, event: "OutputDeleted", logs: logs, sub: sub}, nil
} }
// WatchL2OutputAppended is a free log subscription operation binding the contract event 0xd6703ded1701060d9ae1793db76d594790a4e775781225f79b5aa8a77987c080. // WatchOutputDeleted is a free log subscription operation binding the contract event 0x11e942315215fbc11bf574b22ca610d001e704d870a2307833c188d31600b5c6.
// //
// Solidity: event L2OutputAppended(bytes32 indexed l2Output, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber) // Solidity: event OutputDeleted(bytes32 indexed outputRoot, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber)
func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind.WatchOpts, sink chan<- *L2OutputOracleL2OutputAppended, l2Output [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputDeleted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputDeleted, outputRoot [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) {
var l2OutputRule []interface{} var outputRootRule []interface{}
for _, l2OutputItem := range l2Output { for _, outputRootItem := range outputRoot {
l2OutputRule = append(l2OutputRule, l2OutputItem) outputRootRule = append(outputRootRule, outputRootItem)
} }
var l1TimestampRule []interface{} var l1TimestampRule []interface{}
for _, l1TimestampItem := range l1Timestamp { for _, l1TimestampItem := range l1Timestamp {
...@@ -1019,7 +1019,7 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind. ...@@ -1019,7 +1019,7 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind.
l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem)
} }
logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "L2OutputAppended", l2OutputRule, l1TimestampRule, l2BlockNumberRule) logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputDeleted", outputRootRule, l1TimestampRule, l2BlockNumberRule)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -1029,8 +1029,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind. ...@@ -1029,8 +1029,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind.
select { select {
case log := <-logs: case log := <-logs:
// New log arrived, parse the event and forward to the user // New log arrived, parse the event and forward to the user
event := new(L2OutputOracleL2OutputAppended) event := new(L2OutputOracleOutputDeleted)
if err := _L2OutputOracle.contract.UnpackLog(event, "L2OutputAppended", log); err != nil { if err := _L2OutputOracle.contract.UnpackLog(event, "OutputDeleted", log); err != nil {
return err return err
} }
event.Raw = log event.Raw = log
...@@ -1051,21 +1051,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind. ...@@ -1051,21 +1051,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputAppended(opts *bind.
}), nil }), nil
} }
// ParseL2OutputAppended is a log parse operation binding the contract event 0xd6703ded1701060d9ae1793db76d594790a4e775781225f79b5aa8a77987c080. // ParseOutputDeleted is a log parse operation binding the contract event 0x11e942315215fbc11bf574b22ca610d001e704d870a2307833c188d31600b5c6.
// //
// Solidity: event L2OutputAppended(bytes32 indexed l2Output, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber) // Solidity: event OutputDeleted(bytes32 indexed outputRoot, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber)
func (_L2OutputOracle *L2OutputOracleFilterer) ParseL2OutputAppended(log types.Log) (*L2OutputOracleL2OutputAppended, error) { func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputDeleted(log types.Log) (*L2OutputOracleOutputDeleted, error) {
event := new(L2OutputOracleL2OutputAppended) event := new(L2OutputOracleOutputDeleted)
if err := _L2OutputOracle.contract.UnpackLog(event, "L2OutputAppended", log); err != nil { if err := _L2OutputOracle.contract.UnpackLog(event, "OutputDeleted", log); err != nil {
return nil, err return nil, err
} }
event.Raw = log event.Raw = log
return event, nil return event, nil
} }
// L2OutputOracleL2OutputDeletedIterator is returned from FilterL2OutputDeleted and is used to iterate over the raw logs and unpacked data for L2OutputDeleted events raised by the L2OutputOracle contract. // L2OutputOracleOutputProposedIterator is returned from FilterOutputProposed and is used to iterate over the raw logs and unpacked data for OutputProposed events raised by the L2OutputOracle contract.
type L2OutputOracleL2OutputDeletedIterator struct { type L2OutputOracleOutputProposedIterator struct {
Event *L2OutputOracleL2OutputDeleted // Event containing the contract specifics and raw log Event *L2OutputOracleOutputProposed // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data event string // Event name to use for unpacking event data
...@@ -1079,7 +1079,7 @@ type L2OutputOracleL2OutputDeletedIterator struct { ...@@ -1079,7 +1079,7 @@ type L2OutputOracleL2OutputDeletedIterator struct {
// Next advances the iterator to the subsequent event, returning whether there // Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is // are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure. // returned and Error() can be queried for the exact failure.
func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool { func (it *L2OutputOracleOutputProposedIterator) Next() bool {
// If the iterator failed, stop iterating // If the iterator failed, stop iterating
if it.fail != nil { if it.fail != nil {
return false return false
...@@ -1088,7 +1088,7 @@ func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool { ...@@ -1088,7 +1088,7 @@ func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool {
if it.done { if it.done {
select { select {
case log := <-it.logs: case log := <-it.logs:
it.Event = new(L2OutputOracleL2OutputDeleted) it.Event = new(L2OutputOracleOutputProposed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err it.fail = err
return false return false
...@@ -1103,7 +1103,7 @@ func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool { ...@@ -1103,7 +1103,7 @@ func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool {
// Iterator still in progress, wait for either a data or an error event // Iterator still in progress, wait for either a data or an error event
select { select {
case log := <-it.logs: case log := <-it.logs:
it.Event = new(L2OutputOracleL2OutputDeleted) it.Event = new(L2OutputOracleOutputProposed)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err it.fail = err
return false return false
...@@ -1119,33 +1119,33 @@ func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool { ...@@ -1119,33 +1119,33 @@ func (it *L2OutputOracleL2OutputDeletedIterator) Next() bool {
} }
// Error returns any retrieval or parsing error occurred during filtering. // Error returns any retrieval or parsing error occurred during filtering.
func (it *L2OutputOracleL2OutputDeletedIterator) Error() error { func (it *L2OutputOracleOutputProposedIterator) Error() error {
return it.fail return it.fail
} }
// Close terminates the iteration process, releasing any pending underlying // Close terminates the iteration process, releasing any pending underlying
// resources. // resources.
func (it *L2OutputOracleL2OutputDeletedIterator) Close() error { func (it *L2OutputOracleOutputProposedIterator) Close() error {
it.sub.Unsubscribe() it.sub.Unsubscribe()
return nil return nil
} }
// L2OutputOracleL2OutputDeleted represents a L2OutputDeleted event raised by the L2OutputOracle contract. // L2OutputOracleOutputProposed represents a OutputProposed event raised by the L2OutputOracle contract.
type L2OutputOracleL2OutputDeleted struct { type L2OutputOracleOutputProposed struct {
L2Output [32]byte OutputRoot [32]byte
L1Timestamp *big.Int L1Timestamp *big.Int
L2BlockNumber *big.Int L2BlockNumber *big.Int
Raw types.Log // Blockchain specific contextual infos Raw types.Log // Blockchain specific contextual infos
} }
// FilterL2OutputDeleted is a free log retrieval operation binding the contract event 0x7320566fd5256cf8923648a5d9f560f1e92f1435a1bb32ddd1fe107f224ad359. // FilterOutputProposed is a free log retrieval operation binding the contract event 0xc120f5e881491e6e212befa39e36b8f57d5eca31915f2e5d60a420f418caa6df.
// //
// Solidity: event L2OutputDeleted(bytes32 indexed l2Output, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber) // Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber)
func (_L2OutputOracle *L2OutputOracleFilterer) FilterL2OutputDeleted(opts *bind.FilterOpts, l2Output [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleL2OutputDeletedIterator, error) { func (_L2OutputOracle *L2OutputOracleFilterer) FilterOutputProposed(opts *bind.FilterOpts, outputRoot [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (*L2OutputOracleOutputProposedIterator, error) {
var l2OutputRule []interface{} var outputRootRule []interface{}
for _, l2OutputItem := range l2Output { for _, outputRootItem := range outputRoot {
l2OutputRule = append(l2OutputRule, l2OutputItem) outputRootRule = append(outputRootRule, outputRootItem)
} }
var l1TimestampRule []interface{} var l1TimestampRule []interface{}
for _, l1TimestampItem := range l1Timestamp { for _, l1TimestampItem := range l1Timestamp {
...@@ -1156,21 +1156,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) FilterL2OutputDeleted(opts *bind. ...@@ -1156,21 +1156,21 @@ func (_L2OutputOracle *L2OutputOracleFilterer) FilterL2OutputDeleted(opts *bind.
l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem)
} }
logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "L2OutputDeleted", l2OutputRule, l1TimestampRule, l2BlockNumberRule) logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OutputProposed", outputRootRule, l1TimestampRule, l2BlockNumberRule)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &L2OutputOracleL2OutputDeletedIterator{contract: _L2OutputOracle.contract, event: "L2OutputDeleted", logs: logs, sub: sub}, nil return &L2OutputOracleOutputProposedIterator{contract: _L2OutputOracle.contract, event: "OutputProposed", logs: logs, sub: sub}, nil
} }
// WatchL2OutputDeleted is a free log subscription operation binding the contract event 0x7320566fd5256cf8923648a5d9f560f1e92f1435a1bb32ddd1fe107f224ad359. // WatchOutputProposed is a free log subscription operation binding the contract event 0xc120f5e881491e6e212befa39e36b8f57d5eca31915f2e5d60a420f418caa6df.
// //
// Solidity: event L2OutputDeleted(bytes32 indexed l2Output, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber) // Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber)
func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.WatchOpts, sink chan<- *L2OutputOracleL2OutputDeleted, l2Output [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) { func (_L2OutputOracle *L2OutputOracleFilterer) WatchOutputProposed(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOutputProposed, outputRoot [][32]byte, l1Timestamp []*big.Int, l2BlockNumber []*big.Int) (event.Subscription, error) {
var l2OutputRule []interface{} var outputRootRule []interface{}
for _, l2OutputItem := range l2Output { for _, outputRootItem := range outputRoot {
l2OutputRule = append(l2OutputRule, l2OutputItem) outputRootRule = append(outputRootRule, outputRootItem)
} }
var l1TimestampRule []interface{} var l1TimestampRule []interface{}
for _, l1TimestampItem := range l1Timestamp { for _, l1TimestampItem := range l1Timestamp {
...@@ -1181,7 +1181,7 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.W ...@@ -1181,7 +1181,7 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.W
l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem) l2BlockNumberRule = append(l2BlockNumberRule, l2BlockNumberItem)
} }
logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "L2OutputDeleted", l2OutputRule, l1TimestampRule, l2BlockNumberRule) logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OutputProposed", outputRootRule, l1TimestampRule, l2BlockNumberRule)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -1191,8 +1191,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.W ...@@ -1191,8 +1191,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.W
select { select {
case log := <-logs: case log := <-logs:
// New log arrived, parse the event and forward to the user // New log arrived, parse the event and forward to the user
event := new(L2OutputOracleL2OutputDeleted) event := new(L2OutputOracleOutputProposed)
if err := _L2OutputOracle.contract.UnpackLog(event, "L2OutputDeleted", log); err != nil { if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil {
return err return err
} }
event.Raw = log event.Raw = log
...@@ -1213,12 +1213,12 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.W ...@@ -1213,12 +1213,12 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchL2OutputDeleted(opts *bind.W
}), nil }), nil
} }
// ParseL2OutputDeleted is a log parse operation binding the contract event 0x7320566fd5256cf8923648a5d9f560f1e92f1435a1bb32ddd1fe107f224ad359. // ParseOutputProposed is a log parse operation binding the contract event 0xc120f5e881491e6e212befa39e36b8f57d5eca31915f2e5d60a420f418caa6df.
// //
// Solidity: event L2OutputDeleted(bytes32 indexed l2Output, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber) // Solidity: event OutputProposed(bytes32 indexed outputRoot, uint256 indexed l1Timestamp, uint256 indexed l2BlockNumber)
func (_L2OutputOracle *L2OutputOracleFilterer) ParseL2OutputDeleted(log types.Log) (*L2OutputOracleL2OutputDeleted, error) { func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputProposed(log types.Log) (*L2OutputOracleOutputProposed, error) {
event := new(L2OutputOracleL2OutputDeleted) event := new(L2OutputOracleOutputProposed)
if err := _L2OutputOracle.contract.UnpackLog(event, "L2OutputDeleted", log); err != nil { if err := _L2OutputOracle.contract.UnpackLog(event, "OutputProposed", log); err != nil {
return nil, err return nil, err
} }
event.Raw = log event.Raw = log
...@@ -1378,9 +1378,9 @@ func (_L2OutputOracle *L2OutputOracleFilterer) ParseOwnershipTransferred(log typ ...@@ -1378,9 +1378,9 @@ func (_L2OutputOracle *L2OutputOracleFilterer) ParseOwnershipTransferred(log typ
return event, nil return event, nil
} }
// L2OutputOracleSequencerChangedIterator is returned from FilterSequencerChanged and is used to iterate over the raw logs and unpacked data for SequencerChanged events raised by the L2OutputOracle contract. // L2OutputOracleProposerChangedIterator is returned from FilterProposerChanged and is used to iterate over the raw logs and unpacked data for ProposerChanged events raised by the L2OutputOracle contract.
type L2OutputOracleSequencerChangedIterator struct { type L2OutputOracleProposerChangedIterator struct {
Event *L2OutputOracleSequencerChanged // Event containing the contract specifics and raw log Event *L2OutputOracleProposerChanged // Event containing the contract specifics and raw log
contract *bind.BoundContract // Generic contract to use for unpacking event data contract *bind.BoundContract // Generic contract to use for unpacking event data
event string // Event name to use for unpacking event data event string // Event name to use for unpacking event data
...@@ -1394,7 +1394,7 @@ type L2OutputOracleSequencerChangedIterator struct { ...@@ -1394,7 +1394,7 @@ type L2OutputOracleSequencerChangedIterator struct {
// Next advances the iterator to the subsequent event, returning whether there // Next advances the iterator to the subsequent event, returning whether there
// are any more events found. In case of a retrieval or parsing error, false is // are any more events found. In case of a retrieval or parsing error, false is
// returned and Error() can be queried for the exact failure. // returned and Error() can be queried for the exact failure.
func (it *L2OutputOracleSequencerChangedIterator) Next() bool { func (it *L2OutputOracleProposerChangedIterator) Next() bool {
// If the iterator failed, stop iterating // If the iterator failed, stop iterating
if it.fail != nil { if it.fail != nil {
return false return false
...@@ -1403,7 +1403,7 @@ func (it *L2OutputOracleSequencerChangedIterator) Next() bool { ...@@ -1403,7 +1403,7 @@ func (it *L2OutputOracleSequencerChangedIterator) Next() bool {
if it.done { if it.done {
select { select {
case log := <-it.logs: case log := <-it.logs:
it.Event = new(L2OutputOracleSequencerChanged) it.Event = new(L2OutputOracleProposerChanged)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err it.fail = err
return false return false
...@@ -1418,7 +1418,7 @@ func (it *L2OutputOracleSequencerChangedIterator) Next() bool { ...@@ -1418,7 +1418,7 @@ func (it *L2OutputOracleSequencerChangedIterator) Next() bool {
// Iterator still in progress, wait for either a data or an error event // Iterator still in progress, wait for either a data or an error event
select { select {
case log := <-it.logs: case log := <-it.logs:
it.Event = new(L2OutputOracleSequencerChanged) it.Event = new(L2OutputOracleProposerChanged)
if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
it.fail = err it.fail = err
return false return false
...@@ -1434,60 +1434,60 @@ func (it *L2OutputOracleSequencerChangedIterator) Next() bool { ...@@ -1434,60 +1434,60 @@ func (it *L2OutputOracleSequencerChangedIterator) Next() bool {
} }
// Error returns any retrieval or parsing error occurred during filtering. // Error returns any retrieval or parsing error occurred during filtering.
func (it *L2OutputOracleSequencerChangedIterator) Error() error { func (it *L2OutputOracleProposerChangedIterator) Error() error {
return it.fail return it.fail
} }
// Close terminates the iteration process, releasing any pending underlying // Close terminates the iteration process, releasing any pending underlying
// resources. // resources.
func (it *L2OutputOracleSequencerChangedIterator) Close() error { func (it *L2OutputOracleProposerChangedIterator) Close() error {
it.sub.Unsubscribe() it.sub.Unsubscribe()
return nil return nil
} }
// L2OutputOracleSequencerChanged represents a SequencerChanged event raised by the L2OutputOracle contract. // L2OutputOracleProposerChanged represents a ProposerChanged event raised by the L2OutputOracle contract.
type L2OutputOracleSequencerChanged struct { type L2OutputOracleProposerChanged struct {
PreviousSequencer common.Address PreviousProposer common.Address
NewSequencer common.Address NewProposer common.Address
Raw types.Log // Blockchain specific contextual infos Raw types.Log // Blockchain specific contextual infos
} }
// FilterSequencerChanged is a free log retrieval operation binding the contract event 0x6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d. // FilterProposerChanged is a free log retrieval operation binding the contract event 0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd.
// //
// Solidity: event SequencerChanged(address indexed previousSequencer, address indexed newSequencer) // Solidity: event ProposerChanged(address indexed previousProposer, address indexed newProposer)
func (_L2OutputOracle *L2OutputOracleFilterer) FilterSequencerChanged(opts *bind.FilterOpts, previousSequencer []common.Address, newSequencer []common.Address) (*L2OutputOracleSequencerChangedIterator, error) { func (_L2OutputOracle *L2OutputOracleFilterer) FilterProposerChanged(opts *bind.FilterOpts, previousProposer []common.Address, newProposer []common.Address) (*L2OutputOracleProposerChangedIterator, error) {
var previousSequencerRule []interface{} var previousProposerRule []interface{}
for _, previousSequencerItem := range previousSequencer { for _, previousProposerItem := range previousProposer {
previousSequencerRule = append(previousSequencerRule, previousSequencerItem) previousProposerRule = append(previousProposerRule, previousProposerItem)
} }
var newSequencerRule []interface{} var newProposerRule []interface{}
for _, newSequencerItem := range newSequencer { for _, newProposerItem := range newProposer {
newSequencerRule = append(newSequencerRule, newSequencerItem) newProposerRule = append(newProposerRule, newProposerItem)
} }
logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "SequencerChanged", previousSequencerRule, newSequencerRule) logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "ProposerChanged", previousProposerRule, newProposerRule)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &L2OutputOracleSequencerChangedIterator{contract: _L2OutputOracle.contract, event: "SequencerChanged", logs: logs, sub: sub}, nil return &L2OutputOracleProposerChangedIterator{contract: _L2OutputOracle.contract, event: "ProposerChanged", logs: logs, sub: sub}, nil
} }
// WatchSequencerChanged is a free log subscription operation binding the contract event 0x6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d. // WatchProposerChanged is a free log subscription operation binding the contract event 0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd.
// //
// Solidity: event SequencerChanged(address indexed previousSequencer, address indexed newSequencer) // Solidity: event ProposerChanged(address indexed previousProposer, address indexed newProposer)
func (_L2OutputOracle *L2OutputOracleFilterer) WatchSequencerChanged(opts *bind.WatchOpts, sink chan<- *L2OutputOracleSequencerChanged, previousSequencer []common.Address, newSequencer []common.Address) (event.Subscription, error) { func (_L2OutputOracle *L2OutputOracleFilterer) WatchProposerChanged(opts *bind.WatchOpts, sink chan<- *L2OutputOracleProposerChanged, previousProposer []common.Address, newProposer []common.Address) (event.Subscription, error) {
var previousSequencerRule []interface{} var previousProposerRule []interface{}
for _, previousSequencerItem := range previousSequencer { for _, previousProposerItem := range previousProposer {
previousSequencerRule = append(previousSequencerRule, previousSequencerItem) previousProposerRule = append(previousProposerRule, previousProposerItem)
} }
var newSequencerRule []interface{} var newProposerRule []interface{}
for _, newSequencerItem := range newSequencer { for _, newProposerItem := range newProposer {
newSequencerRule = append(newSequencerRule, newSequencerItem) newProposerRule = append(newProposerRule, newProposerItem)
} }
logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "SequencerChanged", previousSequencerRule, newSequencerRule) logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "ProposerChanged", previousProposerRule, newProposerRule)
if err != nil { if err != nil {
return nil, err return nil, err
} }
...@@ -1497,8 +1497,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchSequencerChanged(opts *bind. ...@@ -1497,8 +1497,8 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchSequencerChanged(opts *bind.
select { select {
case log := <-logs: case log := <-logs:
// New log arrived, parse the event and forward to the user // New log arrived, parse the event and forward to the user
event := new(L2OutputOracleSequencerChanged) event := new(L2OutputOracleProposerChanged)
if err := _L2OutputOracle.contract.UnpackLog(event, "SequencerChanged", log); err != nil { if err := _L2OutputOracle.contract.UnpackLog(event, "ProposerChanged", log); err != nil {
return err return err
} }
event.Raw = log event.Raw = log
...@@ -1519,12 +1519,12 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchSequencerChanged(opts *bind. ...@@ -1519,12 +1519,12 @@ func (_L2OutputOracle *L2OutputOracleFilterer) WatchSequencerChanged(opts *bind.
}), nil }), nil
} }
// ParseSequencerChanged is a log parse operation binding the contract event 0x6ec88bae255aa7e73521c3beb17e9bc7940169e669440c5531733c0d2e91110d. // ParseProposerChanged is a log parse operation binding the contract event 0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd.
// //
// Solidity: event SequencerChanged(address indexed previousSequencer, address indexed newSequencer) // Solidity: event ProposerChanged(address indexed previousProposer, address indexed newProposer)
func (_L2OutputOracle *L2OutputOracleFilterer) ParseSequencerChanged(log types.Log) (*L2OutputOracleSequencerChanged, error) { func (_L2OutputOracle *L2OutputOracleFilterer) ParseProposerChanged(log types.Log) (*L2OutputOracleProposerChanged, error) {
event := new(L2OutputOracleSequencerChanged) event := new(L2OutputOracleProposerChanged)
if err := _L2OutputOracle.contract.UnpackLog(event, "SequencerChanged", log); err != nil { if err := _L2OutputOracle.contract.UnpackLog(event, "ProposerChanged", log); err != nil {
return nil, err return nil, err
} }
event.Raw = log event.Raw = log
......
...@@ -185,7 +185,7 @@ func (d *Driver) CraftTx( ...@@ -185,7 +185,7 @@ func (d *Driver) CraftTx(
opts.Nonce = nonce opts.Nonce = nonce
opts.NoSend = true opts.NoSend = true
return d.l2ooContract.AppendL2Output(opts, l2OutputRoot, nextCheckpointBlock, l1Header.Hash(), l1Header.Number) return d.l2ooContract.ProposeL2Output(opts, l2OutputRoot, nextCheckpointBlock, l1Header.Hash(), l1Header.Number)
} }
// UpdateGasPrice signs an otherwise identical txn to the one provided but with // UpdateGasPrice signs an otherwise identical txn to the one provided but with
......
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 262334) GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 262334)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 75318) GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 75340)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 353380) GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 353380)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 116384) GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 116384)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353402) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 353402)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 116359) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 116381)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45413) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 45368)
GasBenchMark_L2OutputOracle:test_appendL2Output_benchmark() (gas: 68673) GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 68672)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75069) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75069)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35373) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35328)
DeployerWhitelist_Test:test_owner() (gas: 7658) DeployerWhitelist_Test:test_owner() (gas: 7680)
DeployerWhitelist_Test:test_storageSlots() (gas: 33494) DeployerWhitelist_Test:test_storageSlots() (gas: 33516)
Encoding_Test:test_encodeDepositTransaction() (gas: 64610) Encoding_Test:test_encodeDepositTransaction() (gas: 64567)
GasPriceOracle_Test:test_baseFee() (gas: 8370) GasPriceOracle_Test:test_baseFee() (gas: 8392)
GasPriceOracle_Test:test_gasPrice() (gas: 8381) GasPriceOracle_Test:test_gasPrice() (gas: 8381)
GasPriceOracle_Test:test_l1BaseFee() (gas: 10582) GasPriceOracle_Test:test_l1BaseFee() (gas: 10582)
GasPriceOracle_Test:test_onlyOwnerSetDecimals() (gas: 10553) GasPriceOracle_Test:test_onlyOwnerSetDecimals() (gas: 10575)
GasPriceOracle_Test:test_onlyOwnerSetOverhead() (gas: 10599) GasPriceOracle_Test:test_onlyOwnerSetOverhead() (gas: 10599)
GasPriceOracle_Test:test_onlyOwnerSetScalar() (gas: 10640) GasPriceOracle_Test:test_onlyOwnerSetScalar() (gas: 10640)
GasPriceOracle_Test:test_owner() (gas: 9806) GasPriceOracle_Test:test_owner() (gas: 9762)
GasPriceOracle_Test:test_setDecimals() (gas: 36798) GasPriceOracle_Test:test_setDecimals() (gas: 36798)
GasPriceOracle_Test:test_setGasPriceReverts() (gas: 11740) GasPriceOracle_Test:test_setGasPriceReverts() (gas: 11740)
GasPriceOracle_Test:test_setL1BaseFeeReverts() (gas: 11717) GasPriceOracle_Test:test_setL1BaseFeeReverts() (gas: 11739)
GasPriceOracle_Test:test_setOverhead() (gas: 36767) GasPriceOracle_Test:test_setOverhead() (gas: 36767)
GasPriceOracle_Test:test_setScalar() (gas: 36818) GasPriceOracle_Test:test_setScalar() (gas: 36818)
GasPriceOracle_Test:test_storageLayout() (gas: 86683) GasPriceOracle_Test:test_storageLayout() (gas: 86683)
Hashing_Test:test_hashDepositSource() (gas: 673) Hashing_Test:test_hashDepositSource() (gas: 673)
Hashing_Test:test_hashDepositTransaction() (gas: 39129) Hashing_Test:test_hashDepositTransaction() (gas: 39151)
L1BlockTest:test_basefee() (gas: 7531) L1BlockTest:test_basefee() (gas: 7553)
L1BlockTest:test_hash() (gas: 7575) L1BlockTest:test_hash() (gas: 7575)
L1BlockTest:test_number() (gas: 7630) L1BlockTest:test_number() (gas: 7652)
L1BlockTest:test_sequenceNumber() (gas: 7695) L1BlockTest:test_sequenceNumber() (gas: 7630)
L1BlockTest:test_timestamp() (gas: 7662) L1BlockTest:test_timestamp() (gas: 7684)
L1BlockTest:test_updateValues() (gas: 28216) L1BlockTest:test_updateValues() (gas: 28238)
L1BlockNumberTest:test_fallback() (gas: 18774) L1BlockNumberTest:test_fallback() (gas: 18774)
L1BlockNumberTest:test_getL1BlockNumber() (gas: 10657) L1BlockNumberTest:test_getL1BlockNumber() (gas: 10612)
L1BlockNumberTest:test_receive() (gas: 25437) L1BlockNumberTest:test_receive() (gas: 25437)
L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 24561) L1CrossDomainMessenger_Test:testCannot_L1MessengerPause() (gas: 24496)
L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 24508) L1CrossDomainMessenger_Test:testCannot_L1MessengerUnpause() (gas: 24508)
L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 24748) L1CrossDomainMessenger_Test:test_L1MessengerMessageVersion() (gas: 24725)
L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 48017) L1CrossDomainMessenger_Test:test_L1MessengerPause() (gas: 48039)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 77750) L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageSucceeds() (gas: 77772)
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67778) L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas: 67800)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60471) L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60449)
L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38127) L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38127)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 297745) L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 297767)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490048) L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490070)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40889) L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 40889)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24249) L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24249)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86146) L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 86190)
L1StandardBridge_Test:test_depositERC20() (gas: 578867) L1StandardBridge_Test:test_depositERC20() (gas: 578889)
L1StandardBridge_Test:test_depositERC20To() (gas: 581048) L1StandardBridge_Test:test_depositERC20To() (gas: 581070)
L1StandardBridge_Test:test_depositETH() (gas: 372975) L1StandardBridge_Test:test_depositETH() (gas: 372910)
L1StandardBridge_Test:test_depositETHTo() (gas: 330097) L1StandardBridge_Test:test_depositETHTo() (gas: 330097)
L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490759) L1StandardBridge_Test:test_finalizeERC20Withdrawal() (gas: 490759)
L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64409) L1StandardBridge_Test:test_finalizeETHWithdrawal() (gas: 64431)
L1StandardBridge_Test:test_initialize() (gas: 26336) L1StandardBridge_Test:test_initialize() (gas: 26358)
L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22363) L1StandardBridge_Test:test_onlyEOADepositERC20() (gas: 22319)
L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40882) L1StandardBridge_Test:test_onlyEOADepositETH() (gas: 40838)
L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36271) L1StandardBridge_Test:test_onlyL2BridgeFinalizeERC20Withdrawal() (gas: 36293)
L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35600) L1StandardBridge_Test:test_onlyPortalFinalizeERC20Withdrawal() (gas: 35622)
L1StandardBridge_Test:test_receive() (gas: 519560) L1StandardBridge_Test:test_receive() (gas: 519560)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10800) L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10822)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8477) L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8499)
L2CrossDomainMessenger_Test:test_L2MessengerPause() (gas: 31772) L2CrossDomainMessenger_Test:test_L2MessengerPause() (gas: 31816)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57309) L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageSucceeds() (gas: 57331)
L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 36137) L2CrossDomainMessenger_Test:test_L2MessengerRelayMessageToSystemContract() (gas: 36070)
L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41600) L2CrossDomainMessenger_Test:test_L2MessengerRelayShouldRevertIfPaused() (gas: 41535)
L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 120536) L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 120536)
L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133720) L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 133720)
L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10576) L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10598)
L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54776) L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 54732)
L2OutputOracleTest:testCannot_AppendWithUnmatchedBlockhash() (gas: 26811) L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 26808)
L2OutputOracleTest:testCannot_appendEmptyOutput() (gas: 24086) L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 24866)
L2OutputOracleTest:testCannot_appendFutureTimetamp() (gas: 26075) L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91136)
L2OutputOracleTest:testCannot_appendOnWrongFork() (gas: 26360) L2OutputOracleTest:testCannot_deleteL2Output_withWrongTime() (gas: 87085)
L2OutputOracleTest:testCannot_appendOutputIfNotSequencer() (gas: 23477) L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 24107)
L2OutputOracleTest:testCannot_appendUnexpectedBlockNumber() (gas: 25984) L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 26031)
L2OutputOracleTest:testCannot_deleteL2Output_ifNotOwner() (gas: 24778) L2OutputOracleTest:testCannot_proposeL2OutputIfNotProposer() (gas: 23477)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongRoot() (gas: 91048) L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 26381)
L2OutputOracleTest:testCannot_deleteL2Output_withWrongTime() (gas: 87063) L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 25940)
L2OutputOracleTest:test_appendWithBlockhashAndHeight() (gas: 75048) L2OutputOracleTest:test_changeProposer() (gas: 56008)
L2OutputOracleTest:test_appendingAnotherOutput() (gas: 76839)
L2OutputOracleTest:test_changeSequencer() (gas: 55963)
L2OutputOracleTest:test_computeL2Timestamp() (gas: 30200) L2OutputOracleTest:test_computeL2Timestamp() (gas: 30200)
L2OutputOracleTest:test_constructor() (gas: 48793) L2OutputOracleTest:test_constructor() (gas: 48902)
L2OutputOracleTest:test_deleteL2Output() (gas: 76438) L2OutputOracleTest:test_deleteOutput() (gas: 76562)
L2OutputOracleTest:test_getL2Output() (gas: 82869) L2OutputOracleTest:test_getL2Output() (gas: 82893)
L2OutputOracleTest:test_latestBlockNumber() (gas: 76176) L2OutputOracleTest:test_latestBlockNumber() (gas: 76177)
L2OutputOracleTest:test_nextBlockNumber() (gas: 15122) L2OutputOracleTest:test_nextBlockNumber() (gas: 15166)
L2OutputOracleTest:test_updateOwner() (gas: 34603) L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 75025)
L2OutputOracleTest:test_proposingAnotherOutput() (gas: 76816)
L2OutputOracleTest:test_updateOwner() (gas: 34624)
L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 19451) L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 19451)
L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 24516) L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 24472)
L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 38865) L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 38899)
L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843) L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 230843)
L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133459) L2StandardBridge_Test:test_ERC20BridgeFailed_whenLocalTokenIsBridge() (gas: 133459)
L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21656) L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21656)
L2StandardBridge_Test:test_finalizeDeposit() (gas: 93203) L2StandardBridge_Test:test_finalizeDeposit() (gas: 93225)
L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 140469) L2StandardBridge_Test:test_finalizeDeposit_failsToCompleteOutboundTransfer() (gas: 140491)
L2StandardBridge_Test:test_initialize() (gas: 14802) L2StandardBridge_Test:test_initialize() (gas: 14824)
L2StandardBridge_Test:test_receive() (gas: 136864) L2StandardBridge_Test:test_receive() (gas: 136864)
L2StandardBridge_Test:test_withdraw() (gas: 353020) L2StandardBridge_Test:test_withdraw() (gas: 353038)
L2StandardBridge_Test:test_withdrawTo() (gas: 353705) L2StandardBridge_Test:test_withdrawTo() (gas: 353723)
L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 252006) L2StandardBridge_Test:test_withdraw_onlyEOA() (gas: 252006)
L2ToL1MessagePasserTest:test_burn() (gas: 112037) L2ToL1MessagePasserTest:test_burn() (gas: 112059)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 67892) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromContract() (gas: 67847)
L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA() (gas: 74831) L2ToL1MessagePasserTest:test_initiateWithdrawal_fromEOA() (gas: 74831)
LegacyERC20ETH_Test:test_approve() (gas: 10796) LegacyERC20ETH_Test:test_approve() (gas: 10731)
LegacyERC20ETH_Test:test_burn() (gas: 10681) LegacyERC20ETH_Test:test_burn() (gas: 10615)
LegacyERC20ETH_Test:test_crossDomain() (gas: 10577) LegacyERC20ETH_Test:test_crossDomain() (gas: 10599)
LegacyERC20ETH_Test:test_decreaseAllowance() (gas: 10731) LegacyERC20ETH_Test:test_decreaseAllowance() (gas: 10731)
LegacyERC20ETH_Test:test_increaseAllowance() (gas: 10741) LegacyERC20ETH_Test:test_increaseAllowance() (gas: 10763)
LegacyERC20ETH_Test:test_metadata() (gas: 15586) LegacyERC20ETH_Test:test_metadata() (gas: 15608)
LegacyERC20ETH_Test:test_mint() (gas: 10627) LegacyERC20ETH_Test:test_mint() (gas: 10627)
LegacyERC20ETH_Test:test_transfer() (gas: 10829) LegacyERC20ETH_Test:test_transfer() (gas: 10762)
LegacyERC20ETH_Test:test_transferFrom() (gas: 13008) LegacyERC20ETH_Test:test_transferFrom() (gas: 13008)
OptimismMintableERC20_Test:test_bridge() (gas: 9828) OptimismMintableERC20_Test:test_bridge() (gas: 9850)
OptimismMintableERC20_Test:test_burn() (gas: 52826) OptimismMintableERC20_Test:test_burn() (gas: 52791)
OptimismMintableERC20_Test:test_burnRevertsFromNotBridge() (gas: 13219) OptimismMintableERC20_Test:test_burnRevertsFromNotBridge() (gas: 13241)
OptimismMintableERC20_Test:test_erc165_supportsInterface() (gas: 7828) OptimismMintableERC20_Test:test_erc165_supportsInterface() (gas: 7828)
OptimismMintableERC20_Test:test_l1Token() (gas: 9824) OptimismMintableERC20_Test:test_l1Token() (gas: 9757)
OptimismMintableERC20_Test:test_l2Bridge() (gas: 9746) OptimismMintableERC20_Test:test_l2Bridge() (gas: 9768)
OptimismMintableERC20_Test:test_mint() (gas: 65754) OptimismMintableERC20_Test:test_mint() (gas: 65754)
OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13243) OptimismMintableERC20_Test:test_mintRevertsFromNotBridge() (gas: 13243)
OptimismMintableERC20_Test:test_remoteToken() (gas: 9740) OptimismMintableERC20_Test:test_remoteToken() (gas: 9762)
OptimismMintableTokenFactory_Test:test_bridge() (gas: 7663) OptimismMintableTokenFactory_Test:test_bridge() (gas: 7598)
OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1113150) OptimismMintableTokenFactory_Test:test_createStandardL2Token() (gas: 1113150)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2209211) OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 2209211)
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9399) OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9399)
OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10686) OptimismPortalUpgradeable_Test:test_cannotInitImpl() (gas: 10686)
OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15728) OptimismPortalUpgradeable_Test:test_cannotInitProxy() (gas: 15684)
OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15990) OptimismPortalUpgradeable_Test:test_initValuesOnProxy() (gas: 15990)
OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843) OptimismPortalUpgradeable_Test:test_upgrading() (gas: 230843)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17319) OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17341)
OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14238) OptimismPortal_Test:test_OptimismPortalContractCreationReverts() (gas: 14215)
OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126614) OptimismPortal_Test:test_OptimismPortalReceiveEth() (gas: 126636)
OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31902) OptimismPortal_Test:test_cannotVerifyRecentWithdrawal() (gas: 31925)
OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 75820) OptimismPortal_Test:test_depositTransaction_NoValueContract() (gas: 75797)
OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76099) OptimismPortal_Test:test_depositTransaction_NoValueEOA() (gas: 76121)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75825) OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract() (gas: 75825)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76146) OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA() (gas: 76146)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 82846) OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation() (gas: 82846)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 75007) OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation() (gas: 75029)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82550) OptimismPortal_Test:test_depositTransaction_withEthValueFromContract() (gas: 82485)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83145) OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA() (gas: 83101)
OptimismPortal_Test:test_invalidWithdrawalProof() (gas: 45086) OptimismPortal_Test:test_invalidWithdrawalProof() (gas: 45176)
OptimismPortal_Test:test_isOutputFinalized() (gas: 131886) OptimismPortal_Test:test_isOutputFinalized() (gas: 132184)
OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 23999) OptimismPortal_Test:test_simple_isOutputFinalized() (gas: 23978)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101427) Proxy_Test:test_clashingFunctionSignatures() (gas: 101427)
Proxy_Test:test_implementationKey() (gas: 20942) Proxy_Test:test_implementationKey() (gas: 20942)
Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 30021) Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 30021)
Proxy_Test:test_implementationZeroAddress() (gas: 48000) Proxy_Test:test_implementationZeroAddress() (gas: 48022)
Proxy_Test:test_itDelegatesToTheImplementation() (gas: 45251) Proxy_Test:test_itDelegatesToTheImplementation() (gas: 45184)
Proxy_Test:test_ownerKey() (gas: 19091) Proxy_Test:test_ownerKey() (gas: 19113)
Proxy_Test:test_ownerProxyCallIfNotAdmin() (gas: 34711) Proxy_Test:test_ownerProxyCallIfNotAdmin() (gas: 34733)
Proxy_Test:test_payableUpgradeToAndCall() (gas: 53865) Proxy_Test:test_payableUpgradeToAndCall() (gas: 53887)
Proxy_Test:test_revertUpgradeToAndCall() (gas: 104654) Proxy_Test:test_revertUpgradeToAndCall() (gas: 104654)
Proxy_Test:test_upgradeToAndCall() (gas: 125305) Proxy_Test:test_upgradeToAndCall() (gas: 125238)
Proxy_Test:test_zeroAddressCaller() (gas: 14825) Proxy_Test:test_zeroAddressCaller() (gas: 14758)
ProxyAdmin_Test:test_chugsplashChangeProxyAdmin() (gas: 35647) ProxyAdmin_Test:test_chugsplashChangeProxyAdmin() (gas: 35647)
ProxyAdmin_Test:test_chugsplashGetProxyAdmin() (gas: 15689) ProxyAdmin_Test:test_chugsplashGetProxyAdmin() (gas: 15711)
ProxyAdmin_Test:test_chugsplashGetProxyImplementation() (gas: 51167) ProxyAdmin_Test:test_chugsplashGetProxyImplementation() (gas: 51122)
ProxyAdmin_Test:test_chugsplashUpgrade() (gas: 48972) ProxyAdmin_Test:test_chugsplashUpgrade() (gas: 48994)
ProxyAdmin_Test:test_chugsplashUpgradeAndCall() (gas: 82345) ProxyAdmin_Test:test_chugsplashUpgradeAndCall() (gas: 82322)
ProxyAdmin_Test:test_delegateResolvedChangeProxyAdmin() (gas: 34020) ProxyAdmin_Test:test_delegateResolvedChangeProxyAdmin() (gas: 33976)
ProxyAdmin_Test:test_delegateResolvedGetProxyAdmin() (gas: 17708) ProxyAdmin_Test:test_delegateResolvedGetProxyAdmin() (gas: 17685)
ProxyAdmin_Test:test_delegateResolvedGetProxyImplementation() (gas: 62016) ProxyAdmin_Test:test_delegateResolvedGetProxyImplementation() (gas: 62016)
ProxyAdmin_Test:test_delegateResolvedUpgrade() (gas: 58466) ProxyAdmin_Test:test_delegateResolvedUpgrade() (gas: 58422)
ProxyAdmin_Test:test_delegateResolvedUpgradeAndCall() (gas: 97926) ProxyAdmin_Test:test_delegateResolvedUpgradeAndCall() (gas: 97948)
ProxyAdmin_Test:test_erc1967ChangeProxyAdmin() (gas: 33863) ProxyAdmin_Test:test_erc1967ChangeProxyAdmin() (gas: 33863)
ProxyAdmin_Test:test_erc1967GetProxyAdmin() (gas: 15672) ProxyAdmin_Test:test_erc1967GetProxyAdmin() (gas: 15672)
ProxyAdmin_Test:test_erc1967GetProxyImplementation() (gas: 52102) ProxyAdmin_Test:test_erc1967GetProxyImplementation() (gas: 52124)
ProxyAdmin_Test:test_erc1967Upgrade() (gas: 50036) ProxyAdmin_Test:test_erc1967Upgrade() (gas: 50036)
ProxyAdmin_Test:test_erc1967UpgradeAndCall() (gas: 79019) ProxyAdmin_Test:test_erc1967UpgradeAndCall() (gas: 79019)
ProxyAdmin_Test:test_isUpgrading() (gas: 19575) ProxyAdmin_Test:test_isUpgrading() (gas: 19530)
ProxyAdmin_Test:test_onlyOwner() (gas: 22715) ProxyAdmin_Test:test_onlyOwner() (gas: 22715)
ProxyAdmin_Test:test_onlyOwnerSetAddressManager() (gas: 10600) ProxyAdmin_Test:test_onlyOwnerSetAddressManager() (gas: 10622)
ProxyAdmin_Test:test_onlyOwnerSetImplementationName() (gas: 11113) ProxyAdmin_Test:test_onlyOwnerSetImplementationName() (gas: 11135)
ProxyAdmin_Test:test_onlyOwnerSetProxyType() (gas: 10751) ProxyAdmin_Test:test_onlyOwnerSetProxyType() (gas: 10751)
ProxyAdmin_Test:test_owner() (gas: 9818) ProxyAdmin_Test:test_owner() (gas: 9776)
ProxyAdmin_Test:test_proxyType() (gas: 20622) ProxyAdmin_Test:test_proxyType() (gas: 20622)
ProxyAdmin_Test:test_setImplementationName() (gas: 39002) ProxyAdmin_Test:test_setImplementationName() (gas: 38957)
RLPReader_Test:testReadBool() (gas: 1109) RLPReader_Test:testReadBool() (gas: 1109)
RLPReader_Test:test_readAddress() (gas: 1347) RLPReader_Test:test_readAddress() (gas: 1347)
RLPReader_Test:test_readAddressSmall() (gas: 614) RLPReader_Test:test_readAddressSmall() (gas: 614)
RLPReader_Test:test_readAddressTooLarge() (gas: 3646) RLPReader_Test:test_readAddressTooLarge() (gas: 3646)
RLPReader_Test:test_readAddressTooShort() (gas: 3603) RLPReader_Test:test_readAddressTooShort() (gas: 3625)
RLPReader_Test:test_readBoolInvalidValue() (gas: 3677) RLPReader_Test:test_readBoolInvalidValue() (gas: 3699)
RLPReader_Test:test_readBoolLargeInput() (gas: 3550) RLPReader_Test:test_readBoolLargeInput() (gas: 3572)
RLPReader_Test:test_readBytes32_revertOnList() (gas: 3998) RLPReader_Test:test_readBytes32_revertOnList() (gas: 4020)
RLPReader_Test:test_readBytes32_revertOnTooLong() (gas: 3588) RLPReader_Test:test_readBytes32_revertOnTooLong() (gas: 3610)
RLPReader_Test:test_readBytes_bytestring00() (gas: 1823) RLPReader_Test:test_readBytes_bytestring00() (gas: 1845)
RLPReader_Test:test_readBytes_bytestring01() (gas: 1846) RLPReader_Test:test_readBytes_bytestring01() (gas: 1846)
RLPReader_Test:test_readBytes_bytestring7f() (gas: 1844) RLPReader_Test:test_readBytes_bytestring7f() (gas: 1779)
RLPReader_Test:test_readBytes_invalidListLength() (gas: 3812) RLPReader_Test:test_readBytes_invalidListLength() (gas: 3834)
RLPReader_Test:test_readBytes_invalidStringLength() (gas: 3768) RLPReader_Test:test_readBytes_invalidStringLength() (gas: 3790)
RLPReader_Test:test_readBytes_revertListItem() (gas: 3922) RLPReader_Test:test_readBytes_revertListItem() (gas: 3944)
RLPReader_Test:test_readList_dictTest1() (gas: 23791) RLPReader_Test:test_readList_dictTest1() (gas: 23791)
RLPReader_Test:test_readList_empty() (gas: 4472) RLPReader_Test:test_readList_empty() (gas: 4472)
RLPReader_Test:test_readList_incorrectLengthInArray() (gas: 4210) RLPReader_Test:test_readList_incorrectLengthInArray() (gas: 4210)
RLPReader_Test:test_readList_int32Overflow() (gas: 3955) RLPReader_Test:test_readList_int32Overflow() (gas: 3955)
RLPReader_Test:test_readList_int32Overflow2() (gas: 4021) RLPReader_Test:test_readList_int32Overflow2() (gas: 3998)
RLPReader_Test:test_readList_invalidShortList() (gas: 3855) RLPReader_Test:test_readList_invalidShortList() (gas: 3788)
RLPReader_Test:test_readList_invalidValue() (gas: 3787) RLPReader_Test:test_readList_invalidValue() (gas: 3787)
RLPReader_Test:test_readList_leadingZerosInLongLengthArray1() (gas: 4193) RLPReader_Test:test_readList_leadingZerosInLongLengthArray1() (gas: 4215)
RLPReader_Test:test_readList_leadingZerosInLongLengthArray2() (gas: 4177) RLPReader_Test:test_readList_leadingZerosInLongLengthArray2() (gas: 4199)
RLPReader_Test:test_readList_leadingZerosInLongLengthList1() (gas: 38560) RLPReader_Test:test_readList_leadingZerosInLongLengthList1() (gas: 38582)
RLPReader_Test:test_readList_listOfLists() (gas: 9619) RLPReader_Test:test_readList_listOfLists() (gas: 9641)
RLPReader_Test:test_readList_listOfLists2() (gas: 12479) RLPReader_Test:test_readList_listOfLists2() (gas: 12456)
RLPReader_Test:test_readList_longList1() (gas: 29013) RLPReader_Test:test_readList_longList1() (gas: 29013)
RLPReader_Test:test_readList_longList2() (gas: 202895) RLPReader_Test:test_readList_longList2() (gas: 202917)
RLPReader_Test:test_readList_longStringLength() (gas: 3853) RLPReader_Test:test_readList_longStringLength() (gas: 3787)
RLPReader_Test:test_readList_multiList() (gas: 12025) RLPReader_Test:test_readList_multiList() (gas: 11961)
RLPReader_Test:test_readList_nonOptimalLongLengthArray1() (gas: 4200) RLPReader_Test:test_readList_nonOptimalLongLengthArray1() (gas: 4222)
RLPReader_Test:test_readList_nonOptimalLongLengthArray2() (gas: 4223) RLPReader_Test:test_readList_nonOptimalLongLengthArray2() (gas: 4223)
RLPReader_Test:test_readList_notLongEnough() (gas: 3841) RLPReader_Test:test_readList_notLongEnough() (gas: 3863)
RLPReader_Test:test_readList_shortListMax1() (gas: 40662) RLPReader_Test:test_readList_shortListMax1() (gas: 40596)
RLPReader_Test:test_readList_stringList() (gas: 16796) RLPReader_Test:test_readList_stringList() (gas: 16818)
RLPReader_Test:test_readString_emptyString() (gas: 1719) RLPReader_Test:test_readString_emptyString() (gas: 1719)
RLPReader_Test:test_readString_longString() (gas: 3076) RLPReader_Test:test_readString_longString() (gas: 3098)
RLPReader_Test:test_readString_longString2() (gas: 18524) RLPReader_Test:test_readString_longString2() (gas: 18546)
RLPReader_Test:test_readString_shortString() (gas: 2280) RLPReader_Test:test_readString_shortString() (gas: 2302)
RLPReader_Test:test_readString_shortString2() (gas: 2775) RLPReader_Test:test_readString_shortString2() (gas: 2775)
RLPReader_Test:test_readUint256_mediumInt1() (gas: 1235) RLPReader_Test:test_readUint256_mediumInt1() (gas: 1257)
RLPReader_Test:test_readUint256_mediumInt2() (gas: 1237) RLPReader_Test:test_readUint256_mediumInt2() (gas: 1237)
RLPReader_Test:test_readUint256_mediumInt3() (gas: 1238) RLPReader_Test:test_readUint256_mediumInt3() (gas: 1238)
RLPReader_Test:test_readUint256_smallInt() (gas: 1084) RLPReader_Test:test_readUint256_smallInt() (gas: 1106)
RLPReader_Test:test_readUint256_smallInt2() (gas: 1151) RLPReader_Test:test_readUint256_smallInt2() (gas: 1151)
RLPReader_Test:test_readUint256_smallInt3() (gas: 1127) RLPReader_Test:test_readUint256_smallInt3() (gas: 1104)
RLPReader_Test:test_readUint256_smallInt4() (gas: 1128) RLPReader_Test:test_readUint256_smallInt4() (gas: 1150)
RLPReader_Test:test_readUint256_zero() (gas: 1258) RLPReader_Test:test_readUint256_zero() (gas: 1258)
RLPWriter_Test:test_writeList_dictTest1() (gas: 37148) RLPWriter_Test:test_writeList_dictTest1() (gas: 37170)
RLPWriter_Test:test_writeList_empty() (gas: 1751) RLPWriter_Test:test_writeList_empty() (gas: 1773)
RLPWriter_Test:test_writeList_listoflists() (gas: 10969) RLPWriter_Test:test_writeList_listoflists() (gas: 10991)
RLPWriter_Test:test_writeList_listoflists2() (gas: 16779) RLPWriter_Test:test_writeList_listoflists2() (gas: 16779)
RLPWriter_Test:test_writeList_longlist1() (gas: 40730) RLPWriter_Test:test_writeList_longlist1() (gas: 40730)
RLPWriter_Test:test_writeList_longlist2() (gas: 283278) RLPWriter_Test:test_writeList_longlist2() (gas: 283255)
RLPWriter_Test:test_writeList_multiList() (gas: 22660) RLPWriter_Test:test_writeList_multiList() (gas: 22682)
RLPWriter_Test:test_writeList_shortListMax1() (gas: 36985) RLPWriter_Test:test_writeList_shortListMax1() (gas: 36985)
RLPWriter_Test:test_writeList_stringList() (gas: 10786) RLPWriter_Test:test_writeList_stringList() (gas: 10786)
RLPWriter_Test:test_writeString_bytestring00() (gas: 1022) RLPWriter_Test:test_writeString_bytestring00() (gas: 978)
RLPWriter_Test:test_writeString_bytestring01() (gas: 978) RLPWriter_Test:test_writeString_bytestring01() (gas: 1000)
RLPWriter_Test:test_writeString_bytestring7f() (gas: 1002) RLPWriter_Test:test_writeString_bytestring7f() (gas: 1002)
RLPWriter_Test:test_writeString_empty() (gas: 1704) RLPWriter_Test:test_writeString_empty() (gas: 1659)
RLPWriter_Test:test_writeString_longstring() (gas: 17180) RLPWriter_Test:test_writeString_longstring() (gas: 17135)
RLPWriter_Test:test_writeString_longstring2() (gas: 261864) RLPWriter_Test:test_writeString_longstring2() (gas: 261886)
RLPWriter_Test:test_writeString_shortstring() (gas: 2544) RLPWriter_Test:test_writeString_shortstring() (gas: 2544)
RLPWriter_Test:test_writeString_shortstring2() (gas: 15563) RLPWriter_Test:test_writeString_shortstring2() (gas: 15563)
RLPWriter_Test:test_writeUint_mediumint() (gas: 8430) RLPWriter_Test:test_writeUint_mediumint() (gas: 8452)
RLPWriter_Test:test_writeUint_mediumint2() (gas: 8780) RLPWriter_Test:test_writeUint_mediumint2() (gas: 8780)
RLPWriter_Test:test_writeUint_mediumint3() (gas: 9189) RLPWriter_Test:test_writeUint_mediumint3() (gas: 9189)
RLPWriter_Test:test_writeUint_smallint() (gas: 7350) RLPWriter_Test:test_writeUint_smallint() (gas: 7350)
RLPWriter_Test:test_writeUint_smallint2() (gas: 7352) RLPWriter_Test:test_writeUint_smallint2() (gas: 7352)
RLPWriter_Test:test_writeUint_smallint3() (gas: 7372) RLPWriter_Test:test_writeUint_smallint3() (gas: 7372)
RLPWriter_Test:test_writeUint_smallint4() (gas: 7351) RLPWriter_Test:test_writeUint_smallint4() (gas: 7373)
RLPWriter_Test:test_writeUint_zero() (gas: 7798) RLPWriter_Test:test_writeUint_zero() (gas: 7798)
ResourceMetering_Test:test_initialResourceParams() (gas: 8964) ResourceMetering_Test:test_initialResourceParams() (gas: 8986)
ResourceMetering_Test:test_updateNoGasDelta() (gas: 2008317) ResourceMetering_Test:test_updateNoGasDelta() (gas: 2008317)
ResourceMetering_Test:test_updateOneEmptyBlock() (gas: 18171) ResourceMetering_Test:test_updateOneEmptyBlock() (gas: 18126)
ResourceMetering_Test:test_updateParamsNoChange() (gas: 13956) ResourceMetering_Test:test_updateParamsNoChange() (gas: 13956)
ResourceMetering_Test:test_updateTenEmptyBlocks() (gas: 20571) ResourceMetering_Test:test_updateTenEmptyBlocks() (gas: 20593)
ResourceMetering_Test:test_updateTwoEmptyBlocks() (gas: 20594) ResourceMetering_Test:test_updateTwoEmptyBlocks() (gas: 20594)
ResourceMetering_Test:test_useMaxSucceeds() (gas: 8017087) ResourceMetering_Test:test_useMaxSucceeds() (gas: 8017109)
ResourceMetering_Test:test_useMoreThanMaxReverts() (gas: 16047) ResourceMetering_Test:test_useMoreThanMaxReverts() (gas: 16069)
Semver_Test:test_behindProxy() (gas: 504908) Semver_Test:test_behindProxy() (gas: 504930)
Semver_Test:test_major() (gas: 5406) Semver_Test:test_major() (gas: 5428)
Semver_Test:test_minor() (gas: 5430) Semver_Test:test_minor() (gas: 5430)
Semver_Test:test_patch() (gas: 5364) Semver_Test:test_patch() (gas: 5386)
SequencerFeeVault_Test:test_constructor() (gas: 7656) SequencerFeeVault_Test:test_constructor() (gas: 7611)
SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5407) SequencerFeeVault_Test:test_minWithdrawalAmount() (gas: 5429)
SequencerFeeVault_Test:test_receive() (gas: 17338) SequencerFeeVault_Test:test_receive() (gas: 17338)
SequencerFeeVault_Test:test_revertWithdraw() (gas: 9332) SequencerFeeVault_Test:test_revertWithdraw() (gas: 9267)
SequencerFeeVault_Test:test_withdraw() (gas: 147582) SequencerFeeVault_Test:test_withdraw() (gas: 147604)
...@@ -75,7 +75,7 @@ ...@@ -75,7 +75,7 @@
|-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------| |-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------|
| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | | __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/L2OutputOracle.sol:L2OutputOracle |
|-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------| |-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------|
| sequencer | address | 101 | 0 | 20 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | | proposer | address | 101 | 0 | 20 | contracts/L1/L2OutputOracle.sol:L2OutputOracle |
|-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------| |-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------|
| latestBlockNumber | uint256 | 102 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | | latestBlockNumber | uint256 | 102 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle |
|-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------| |-------------------+----------------------------------------------------------+------+--------+-------+------------------------------------------------|
......
...@@ -10,7 +10,7 @@ import { Semver } from "../universal/Semver.sol"; ...@@ -10,7 +10,7 @@ import { Semver } from "../universal/Semver.sol";
* @custom:proxied * @custom:proxied
* @title L2OutputOracle * @title L2OutputOracle
* @notice The L2 state is committed to in this contract * @notice The L2 state is committed to in this contract
* The payable keyword is used on appendL2Output to save gas on the msg.value check. * The payable keyword is used on proposeL2Output to save gas on the msg.value check.
* This contract should be deployed behind an upgradable proxy * This contract should be deployed behind an upgradable proxy
*/ */
// slither-disable-next-line locked-ether // slither-disable-next-line locked-ether
...@@ -27,14 +27,14 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -27,14 +27,14 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
} }
/** /**
* @notice Emitted when an output is appended. * @notice Emitted when an output is proposed.
* *
* @param l2Output The output root. * @param outputRoot The output root.
* @param l1Timestamp The L1 timestamp when appended. * @param l1Timestamp The L1 timestamp when proposed.
* @param l2BlockNumber The L2 block number of the output root. * @param l2BlockNumber The L2 block number of the output root.
*/ */
event L2OutputAppended( event OutputProposed(
bytes32 indexed l2Output, bytes32 indexed outputRoot,
uint256 indexed l1Timestamp, uint256 indexed l1Timestamp,
uint256 indexed l2BlockNumber uint256 indexed l2BlockNumber
); );
...@@ -42,23 +42,23 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -42,23 +42,23 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
/** /**
* @notice Emitted when an output is deleted. * @notice Emitted when an output is deleted.
* *
* @param l2Output The output root. * @param outputRoot The output root.
* @param l1Timestamp The L1 timestamp when appended. * @param l1Timestamp The L1 timestamp when proposed.
* @param l2BlockNumber The L2 block number of the output root. * @param l2BlockNumber The L2 block number of the output root.
*/ */
event L2OutputDeleted( event OutputDeleted(
bytes32 indexed l2Output, bytes32 indexed outputRoot,
uint256 indexed l1Timestamp, uint256 indexed l1Timestamp,
uint256 indexed l2BlockNumber uint256 indexed l2BlockNumber
); );
/** /**
* @notice Emitted when the sequencer address is changed. * @notice Emitted when the proposer address is changed.
* *
* @param previousSequencer The previous sequencer address. * @param previousProposer The previous proposer address.
* @param newSequencer The new sequencer address. * @param newProposer The new proposer address.
*/ */
event SequencerChanged(address indexed previousSequencer, address indexed newSequencer); event ProposerChanged(address indexed previousProposer, address indexed newProposer);
/** /**
* @notice The interval in L2 blocks at which checkpoints must be submitted. * @notice The interval in L2 blocks at which checkpoints must be submitted.
...@@ -91,9 +91,9 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -91,9 +91,9 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
uint256 public immutable L2_BLOCK_TIME; uint256 public immutable L2_BLOCK_TIME;
/** /**
* @notice The address of the sequencer; * @notice The address of the proposer;
*/ */
address public sequencer; address public proposer;
/** /**
* @notice The number of the most recent L2 block recorded in this contract. * @notice The number of the most recent L2 block recorded in this contract.
...@@ -108,10 +108,10 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -108,10 +108,10 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
mapping(uint256 => OutputProposal) internal l2Outputs; mapping(uint256 => OutputProposal) internal l2Outputs;
/** /**
* @notice Reverts if called by any account other than the sequencer. * @notice Reverts if called by any account other than the proposer.
*/ */
modifier onlySequencer() { modifier onlyProposer() {
require(sequencer == msg.sender, "OutputOracle: caller is not the sequencer"); require(proposer == msg.sender, "OutputOracle: caller is not the proposer");
_; _;
} }
...@@ -124,7 +124,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -124,7 +124,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
* @param _startingBlockNumber The number of the first L2 block. * @param _startingBlockNumber The number of the first L2 block.
* @param _startingTimestamp The timestamp of the first L2 block. * @param _startingTimestamp The timestamp of the first L2 block.
* @param _l2BlockTime The timestamp of the first L2 block. * @param _l2BlockTime The timestamp of the first L2 block.
* @param _sequencer The address of the sequencer. * @param _proposer The address of the proposer.
* @param _owner The address of the owner. * @param _owner The address of the owner.
*/ */
constructor( constructor(
...@@ -134,7 +134,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -134,7 +134,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
uint256 _startingBlockNumber, uint256 _startingBlockNumber,
uint256 _startingTimestamp, uint256 _startingTimestamp,
uint256 _l2BlockTime, uint256 _l2BlockTime,
address _sequencer, address _proposer,
address _owner address _owner
) Semver(0, 0, 1) { ) Semver(0, 0, 1) {
require( require(
...@@ -148,7 +148,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -148,7 +148,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
STARTING_TIMESTAMP = _startingTimestamp; STARTING_TIMESTAMP = _startingTimestamp;
L2_BLOCK_TIME = _l2BlockTime; L2_BLOCK_TIME = _l2BlockTime;
initialize(_genesisL2Output, _startingBlockNumber, _sequencer, _owner); initialize(_genesisL2Output, _startingBlockNumber, _proposer, _owner);
} }
/** /**
...@@ -156,55 +156,55 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -156,55 +156,55 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
* *
* @param _genesisL2Output The initial L2 output of the L2 chain. * @param _genesisL2Output The initial L2 output of the L2 chain.
* @param _startingBlockNumber The timestamp to start L2 block at. * @param _startingBlockNumber The timestamp to start L2 block at.
* @param _sequencer The address of the sequencer. * @param _proposer The address of the proposer.
* @param _owner The address of the owner. * @param _owner The address of the owner.
*/ */
function initialize( function initialize(
bytes32 _genesisL2Output, bytes32 _genesisL2Output,
uint256 _startingBlockNumber, uint256 _startingBlockNumber,
address _sequencer, address _proposer,
address _owner address _owner
) public initializer { ) public initializer {
l2Outputs[_startingBlockNumber] = OutputProposal(_genesisL2Output, block.timestamp); l2Outputs[_startingBlockNumber] = OutputProposal(_genesisL2Output, block.timestamp);
latestBlockNumber = _startingBlockNumber; latestBlockNumber = _startingBlockNumber;
__Ownable_init(); __Ownable_init();
changeSequencer(_sequencer); changeProposer(_proposer);
_transferOwnership(_owner); _transferOwnership(_owner);
} }
/** /**
* @notice Accepts an L2 outputRoot and the timestamp of the corresponding L2 block. The * @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 * timestamp must be equal to the current value returned by `nextTimestamp()` in order
* to be accepted. This function may only be called by the Sequencer. * to be accepted. This function may only be called by the Proposer.
* *
* @param _l2Output The L2 output of the checkpoint block. * @param _outputRoot The L2 output of the checkpoint block.
* @param _l2BlockNumber The L2 block number that resulted in _l2Output. * @param _l2BlockNumber The L2 block number that resulted in _outputRoot.
* @param _l1Blockhash A block hash which must be included in the current chain. * @param _l1Blockhash A block hash which must be included in the current chain.
* @param _l1BlockNumber The block number with the specified block hash. * @param _l1BlockNumber The block number with the specified block hash.
*/ */
function appendL2Output( function proposeL2Output(
bytes32 _l2Output, bytes32 _outputRoot,
uint256 _l2BlockNumber, uint256 _l2BlockNumber,
bytes32 _l1Blockhash, bytes32 _l1Blockhash,
uint256 _l1BlockNumber uint256 _l1BlockNumber
) external payable onlySequencer { ) external payable onlyProposer {
require( require(
_l2BlockNumber == nextBlockNumber(), _l2BlockNumber == nextBlockNumber(),
"OutputOracle: Block number must be equal to next expected block number." "OutputOracle: Block number must be equal to next expected block number."
); );
require( require(
computeL2Timestamp(_l2BlockNumber) < block.timestamp, computeL2Timestamp(_l2BlockNumber) < block.timestamp,
"OutputOracle: Cannot append L2 output in future." "OutputOracle: Cannot propose L2 output in future."
); );
require(_l2Output != bytes32(0), "OutputOracle: Cannot submit empty L2 output."); require(_outputRoot != bytes32(0), "OutputOracle: Cannot submit empty L2 output.");
if (_l1Blockhash != bytes32(0)) { if (_l1Blockhash != bytes32(0)) {
// This check allows the sequencer to append an output based on a given L1 block, // This check allows the proposer to propose an output based on a given L1 block,
// without fear that it will be reorged out. // without fear that it will be reorged out.
// It will also revert if the blockheight provided is more than 256 blocks behind the // It will also revert if the blockheight provided is more than 256 blocks behind the
// chain tip (as the hash will return as zero). This does open the door to a griefing // chain tip (as the hash will return as zero). This does open the door to a griefing
// attack in which the sequencer's submission is censored until the block is no longer // attack in which the proposer's submission is censored until the block is no longer
// retrievable, if the sequencer is experiencing this attack it can simply leave out the // retrievable, if the proposer is experiencing this attack it can simply leave out the
// blockhash value, and delay submission until it is confident that the L1 block is // blockhash value, and delay submission until it is confident that the L1 block is
// finalized. // finalized.
require( require(
...@@ -213,16 +213,16 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -213,16 +213,16 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
); );
} }
l2Outputs[_l2BlockNumber] = OutputProposal(_l2Output, block.timestamp); l2Outputs[_l2BlockNumber] = OutputProposal(_outputRoot, block.timestamp);
latestBlockNumber = _l2BlockNumber; latestBlockNumber = _l2BlockNumber;
emit L2OutputAppended(_l2Output, block.timestamp, _l2BlockNumber); emit OutputProposed(_outputRoot, block.timestamp, _l2BlockNumber);
} }
/** /**
* @notice Deletes the most recent output. This is used to remove the most recent output in the * @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 * event that an erreneous output is submitted. It can only be called by the contract's
* owner, not the sequencer. Longer term, this should be replaced with a more robust * 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 * mechanism which will allow deletion of proposals shown to be invalid by a fault
* proof. * proof.
* *
...@@ -240,11 +240,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -240,11 +240,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
"OutputOracle: The timestamp to delete does not match the latest output proposal." "OutputOracle: The timestamp to delete does not match the latest output proposal."
); );
emit L2OutputDeleted( emit OutputDeleted(outputToDelete.outputRoot, outputToDelete.timestamp, latestBlockNumber);
outputToDelete.outputRoot,
outputToDelete.timestamp,
latestBlockNumber
);
delete l2Outputs[latestBlockNumber]; delete l2Outputs[latestBlockNumber];
latestBlockNumber = latestBlockNumber - SUBMISSION_INTERVAL; latestBlockNumber = latestBlockNumber - SUBMISSION_INTERVAL;
...@@ -283,13 +279,13 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { ...@@ -283,13 +279,13 @@ contract L2OutputOracle is OwnableUpgradeable, Semver {
} }
/** /**
* @notice Transfers the sequencer role to a new account (`newSequencer`). * @notice Transfers the proposer role to a new account (`newProposer`).
* Can only be called by the current owner. * Can only be called by the current owner.
*/ */
function changeSequencer(address _newSequencer) public onlyOwner { function changeProposer(address _newProposer) public onlyOwner {
require(_newSequencer != address(0), "OutputOracle: new sequencer is the zero address"); require(_newProposer != address(0), "OutputOracle: new proposer is the zero address");
require(_newSequencer != owner(), "OutputOracle: sequencer cannot be same as the owner"); require(_newProposer != owner(), "OutputOracle: proposer cannot be same as the owner");
emit SequencerChanged(sequencer, _newSequencer); emit ProposerChanged(proposer, _newProposer);
sequencer = _newSequencer; proposer = _newProposer;
} }
} }
...@@ -183,7 +183,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver { ...@@ -183,7 +183,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
uint256 offset = (_l2BlockNumber - startingBlockNumber) % interval; uint256 offset = (_l2BlockNumber - startingBlockNumber) % interval;
// Look up the checkpoint block after it. // Look up the checkpoint block after it.
proposal = L2_ORACLE.getL2Output(_l2BlockNumber + (interval - offset)); proposal = L2_ORACLE.getL2Output(_l2BlockNumber + (interval - offset));
// False if that block is not yet appended. // False if that block is not yet proposed.
if (proposal.outputRoot == bytes32(uint256(0))) { if (proposal.outputRoot == bytes32(uint256(0))) {
return false; return false;
} }
......
...@@ -129,11 +129,11 @@ contract GasBenchMark_L2OutputOracle is L2OutputOracle_Initializer { ...@@ -129,11 +129,11 @@ contract GasBenchMark_L2OutputOracle is L2OutputOracle_Initializer {
function setUp() public override { function setUp() public override {
super.setUp(); super.setUp();
nextBlockNumber = oracle.nextBlockNumber(); nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.startPrank(sequencer); vm.startPrank(proposer);
} }
function test_appendL2Output_benchmark() external { function test_proposeL2Output_benchmark() external {
oracle.appendL2Output(nonZeroHash, nextBlockNumber, 0, 0); oracle.proposeL2Output(nonZeroHash, nextBlockNumber, 0, 0);
} }
} }
...@@ -58,7 +58,7 @@ contract L2OutputOracle_Initializer is CommonTest { ...@@ -58,7 +58,7 @@ contract L2OutputOracle_Initializer is CommonTest {
L2OutputOracle oracleImpl; L2OutputOracle oracleImpl;
// Constructor arguments // Constructor arguments
address sequencer = 0x000000000000000000000000000000000000AbBa; address proposer = 0x000000000000000000000000000000000000AbBa;
address owner = 0x000000000000000000000000000000000000ACDC; address owner = 0x000000000000000000000000000000000000ACDC;
uint256 submissionInterval = 1800; uint256 submissionInterval = 1800;
uint256 l2BlockTime = 2; uint256 l2BlockTime = 2;
...@@ -70,8 +70,8 @@ contract L2OutputOracle_Initializer is CommonTest { ...@@ -70,8 +70,8 @@ contract L2OutputOracle_Initializer is CommonTest {
// Test data // Test data
uint256 initL1Time; uint256 initL1Time;
// Advance the evm's time to meet the L2OutputOracle's requirements for appendL2Output // Advance the evm's time to meet the L2OutputOracle's requirements for proposeL2Output
function warpToAppendTime(uint256 _nextBlockNumber) public { function warpToProposeTime(uint256 _nextBlockNumber) public {
vm.warp(oracle.computeL2Timestamp(_nextBlockNumber) + 1); vm.warp(oracle.computeL2Timestamp(_nextBlockNumber) + 1);
} }
...@@ -83,7 +83,7 @@ contract L2OutputOracle_Initializer is CommonTest { ...@@ -83,7 +83,7 @@ contract L2OutputOracle_Initializer is CommonTest {
initL1Time = startingTimestamp + 1; initL1Time = startingTimestamp + 1;
vm.warp(initL1Time); vm.warp(initL1Time);
vm.roll(startingBlockNumber); vm.roll(startingBlockNumber);
// Deploy the L2OutputOracle and transfer owernship to the sequencer // Deploy the L2OutputOracle and transfer owernship to the proposer
oracleImpl = new L2OutputOracle( oracleImpl = new L2OutputOracle(
submissionInterval, submissionInterval,
genesisL2Output, genesisL2Output,
...@@ -91,7 +91,7 @@ contract L2OutputOracle_Initializer is CommonTest { ...@@ -91,7 +91,7 @@ contract L2OutputOracle_Initializer is CommonTest {
startingBlockNumber, startingBlockNumber,
startingTimestamp, startingTimestamp,
l2BlockTime, l2BlockTime,
sequencer, proposer,
owner owner
); );
Proxy proxy = new Proxy(multisig); Proxy proxy = new Proxy(multisig);
...@@ -102,7 +102,7 @@ contract L2OutputOracle_Initializer is CommonTest { ...@@ -102,7 +102,7 @@ contract L2OutputOracle_Initializer is CommonTest {
L2OutputOracle.initialize.selector, L2OutputOracle.initialize.selector,
genesisL2Output, genesisL2Output,
startingBlockNumber, startingBlockNumber,
sequencer, proposer,
owner owner
) )
); );
......
...@@ -7,7 +7,7 @@ import { Proxy } from "../universal/Proxy.sol"; ...@@ -7,7 +7,7 @@ import { Proxy } from "../universal/Proxy.sol";
contract L2OutputOracleTest is L2OutputOracle_Initializer { contract L2OutputOracleTest is L2OutputOracle_Initializer {
bytes32 appendedOutput1 = keccak256(abi.encode(1)); bytes32 proposedOutput1 = keccak256(abi.encode(1));
function setUp() public override { function setUp() public override {
super.setUp(); super.setUp();
...@@ -20,7 +20,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -20,7 +20,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
assertEq(oracle.latestBlockNumber(), startingBlockNumber); assertEq(oracle.latestBlockNumber(), startingBlockNumber);
assertEq(oracle.STARTING_BLOCK_NUMBER(), startingBlockNumber); assertEq(oracle.STARTING_BLOCK_NUMBER(), startingBlockNumber);
assertEq(oracle.STARTING_TIMESTAMP(), startingTimestamp); assertEq(oracle.STARTING_TIMESTAMP(), startingTimestamp);
assertEq(oracle.sequencer(), sequencer); assertEq(oracle.proposer(), proposer);
assertEq(oracle.owner(), owner); assertEq(oracle.owner(), owner);
L2OutputOracle.OutputProposal memory proposal = oracle.getL2Output(startingBlockNumber); L2OutputOracle.OutputProposal memory proposal = oracle.getL2Output(startingBlockNumber);
...@@ -34,24 +34,24 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -34,24 +34,24 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
// Test: latestBlockNumber() should return the correct value // Test: latestBlockNumber() should return the correct value
function test_latestBlockNumber() external { function test_latestBlockNumber() external {
uint256 appendedNumber = oracle.nextBlockNumber(); uint256 proposedNumber = oracle.nextBlockNumber();
// Roll to after the block number we'll append // Roll to after the block number we'll propose
warpToAppendTime(appendedNumber); warpToProposeTime(proposedNumber);
vm.prank(sequencer); vm.prank(proposer);
oracle.appendL2Output(appendedOutput1, appendedNumber, 0, 0); oracle.proposeL2Output(proposedOutput1, proposedNumber, 0, 0);
assertEq(oracle.latestBlockNumber(), appendedNumber); assertEq(oracle.latestBlockNumber(), proposedNumber);
} }
// Test: getL2Output() should return the correct value // Test: getL2Output() should return the correct value
function test_getL2Output() external { function test_getL2Output() external {
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(sequencer); vm.prank(proposer);
oracle.appendL2Output(appendedOutput1, nextBlockNumber, 0, 0); oracle.proposeL2Output(proposedOutput1, nextBlockNumber, 0, 0);
L2OutputOracle.OutputProposal memory proposal = oracle.getL2Output(nextBlockNumber); L2OutputOracle.OutputProposal memory proposal = oracle.getL2Output(nextBlockNumber);
assertEq(proposal.outputRoot, appendedOutput1); assertEq(proposal.outputRoot, proposedOutput1);
assertEq(proposal.timestamp, block.timestamp); assertEq(proposal.timestamp, block.timestamp);
L2OutputOracle.OutputProposal memory proposal2 = oracle.getL2Output(0); L2OutputOracle.OutputProposal memory proposal2 = oracle.getL2Output(0);
...@@ -96,26 +96,26 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -96,26 +96,26 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
* Ownership tests * * Ownership tests *
*******************/ *******************/
event SequencerChanged(address indexed previousSequencer, address indexed newSequencer); event ProposerChanged(address indexed previousProposer, address indexed newProposer);
function test_changeSequencer() public { function test_changeProposer() public {
address newSequencer = address(20); address newProposer = address(20);
vm.expectRevert("Ownable: caller is not the owner"); vm.expectRevert("Ownable: caller is not the owner");
oracle.changeSequencer(newSequencer); oracle.changeProposer(newProposer);
vm.startPrank(owner); vm.startPrank(owner);
vm.expectRevert("OutputOracle: new sequencer is the zero address"); vm.expectRevert("OutputOracle: new proposer is the zero address");
oracle.changeSequencer(address(0)); oracle.changeProposer(address(0));
vm.expectRevert("OutputOracle: sequencer cannot be same as the owner"); vm.expectRevert("OutputOracle: proposer cannot be same as the owner");
oracle.changeSequencer(owner); oracle.changeProposer(owner);
// Double check sequencer has not changed. // Double check proposer has not changed.
assertEq(sequencer, oracle.sequencer()); assertEq(proposer, oracle.proposer());
vm.expectEmit(true, true, true, true); vm.expectEmit(true, true, true, true);
emit SequencerChanged(sequencer, newSequencer); emit ProposerChanged(proposer, newProposer);
oracle.changeSequencer(newSequencer); oracle.changeProposer(newProposer);
vm.stopPrank(); vm.stopPrank();
} }
...@@ -136,89 +136,89 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -136,89 +136,89 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
} }
/***************************** /*****************************
* Append Tests - Happy Path * * Propose Tests - Happy Path *
*****************************/ *****************************/
// Test: appendL2Output succeeds when given valid input, and no block hash and number are // Test: proposeL2Output succeeds when given valid input, and no block hash and number are
// specified. // specified.
function test_appendingAnotherOutput() public { function test_proposingAnotherOutput() public {
bytes32 appendedOutput2 = keccak256(abi.encode(2)); bytes32 proposedOutput2 = keccak256(abi.encode(2));
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
uint256 appendedNumber = oracle.latestBlockNumber(); uint256 proposedNumber = oracle.latestBlockNumber();
// Ensure the submissionInterval is enforced // Ensure the submissionInterval is enforced
assertEq(nextBlockNumber, appendedNumber + submissionInterval); assertEq(nextBlockNumber, proposedNumber + submissionInterval);
vm.roll(nextBlockNumber + 1); vm.roll(nextBlockNumber + 1);
vm.prank(sequencer); vm.prank(proposer);
oracle.appendL2Output(appendedOutput2, nextBlockNumber, 0, 0); oracle.proposeL2Output(proposedOutput2, nextBlockNumber, 0, 0);
} }
// Test: appendL2Output succeeds when given valid input, and when a block hash and number are // Test: proposeL2Output succeeds when given valid input, and when a block hash and number are
// specified for reorg protection. // specified for reorg protection.
function test_appendWithBlockhashAndHeight() external { function test_proposeWithBlockhashAndHeight() external {
// Get the number and hash of a previous block in the chain // Get the number and hash of a previous block in the chain
uint256 prevL1BlockNumber = block.number - 1; uint256 prevL1BlockNumber = block.number - 1;
bytes32 prevL1BlockHash = blockhash(prevL1BlockNumber); bytes32 prevL1BlockHash = blockhash(prevL1BlockNumber);
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(sequencer); vm.prank(proposer);
oracle.appendL2Output(nonZeroHash, nextBlockNumber, prevL1BlockHash, prevL1BlockNumber); oracle.proposeL2Output(nonZeroHash, nextBlockNumber, prevL1BlockHash, prevL1BlockNumber);
} }
/*************************** /***************************
* Append Tests - Sad Path * * Propose Tests - Sad Path *
***************************/ ***************************/
// Test: appendL2Output fails if called by a party that is not the sequencer. // Test: proposeL2Output fails if called by a party that is not the proposer.
function testCannot_appendOutputIfNotSequencer() external { function testCannot_proposeL2OutputIfNotProposer() external {
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(address(128)); vm.prank(address(128));
vm.expectRevert("OutputOracle: caller is not the sequencer"); vm.expectRevert("OutputOracle: caller is not the proposer");
oracle.appendL2Output(nonZeroHash, nextBlockNumber, 0, 0); oracle.proposeL2Output(nonZeroHash, nextBlockNumber, 0, 0);
} }
// Test: appendL2Output fails given a zero blockhash. // Test: proposeL2Output fails given a zero blockhash.
function testCannot_appendEmptyOutput() external { function testCannot_proposeEmptyOutput() external {
bytes32 outputToAppend = bytes32(0); bytes32 outputToPropose = bytes32(0);
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(sequencer); vm.prank(proposer);
vm.expectRevert("OutputOracle: Cannot submit empty L2 output."); vm.expectRevert("OutputOracle: Cannot submit empty L2 output.");
oracle.appendL2Output(outputToAppend, nextBlockNumber, 0, 0); oracle.proposeL2Output(outputToPropose, nextBlockNumber, 0, 0);
} }
// Test: appendL2Output fails if the block number doesn't match the next expected number. // Test: proposeL2Output fails if the block number doesn't match the next expected number.
function testCannot_appendUnexpectedBlockNumber() external { function testCannot_proposeUnexpectedBlockNumber() external {
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(sequencer); vm.prank(proposer);
vm.expectRevert("OutputOracle: Block number must be equal to next expected block number."); vm.expectRevert("OutputOracle: Block number must be equal to next expected block number.");
oracle.appendL2Output(nonZeroHash, nextBlockNumber - 1, 0, 0); oracle.proposeL2Output(nonZeroHash, nextBlockNumber - 1, 0, 0);
} }
// Test: appendL2Output fails if it would have a timestamp in the future. // Test: proposeL2Output fails if it would have a timestamp in the future.
function testCannot_appendFutureTimetamp() external { function testCannot_proposeFutureTimetamp() external {
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
uint256 nextTimestamp = oracle.computeL2Timestamp(nextBlockNumber); uint256 nextTimestamp = oracle.computeL2Timestamp(nextBlockNumber);
vm.warp(nextTimestamp); vm.warp(nextTimestamp);
vm.prank(sequencer); vm.prank(proposer);
vm.expectRevert("OutputOracle: Cannot append L2 output in future."); vm.expectRevert("OutputOracle: Cannot propose L2 output in future.");
oracle.appendL2Output(nonZeroHash, nextBlockNumber, 0, 0); oracle.proposeL2Output(nonZeroHash, nextBlockNumber, 0, 0);
} }
// Test: appendL2Output fails if a non-existent L1 block hash and number are provided for reorg // Test: proposeL2Output fails if a non-existent L1 block hash and number are provided for reorg
// protection. // protection.
function testCannot_appendOnWrongFork() external { function testCannot_proposeOnWrongFork() external {
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(sequencer); vm.prank(proposer);
vm.expectRevert("OutputOracle: Blockhash does not match the hash at the expected height."); vm.expectRevert("OutputOracle: Blockhash does not match the hash at the expected height.");
oracle.appendL2Output( oracle.proposeL2Output(
nonZeroHash, nonZeroHash,
nextBlockNumber, nextBlockNumber,
bytes32(uint256(0x01)), bytes32(uint256(0x01)),
...@@ -226,9 +226,9 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -226,9 +226,9 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
); );
} }
// Test: appendL2Output fails when given valid input, but the block hash and number do not // Test: proposeL2Output fails when given valid input, but the block hash and number do not
// match. // match.
function testCannot_AppendWithUnmatchedBlockhash() external { function testCannot_ProposeWithUnmatchedBlockhash() external {
// Move ahead to block 100 so that we can reference historical blocks // Move ahead to block 100 so that we can reference historical blocks
vm.roll(100); vm.roll(100);
...@@ -237,26 +237,26 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -237,26 +237,26 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
bytes32 l1BlockHash = blockhash(l1BlockNumber); bytes32 l1BlockHash = blockhash(l1BlockNumber);
uint256 nextBlockNumber = oracle.nextBlockNumber(); uint256 nextBlockNumber = oracle.nextBlockNumber();
warpToAppendTime(nextBlockNumber); warpToProposeTime(nextBlockNumber);
vm.prank(sequencer); vm.prank(proposer);
// This will fail when foundry no longer returns zerod block hashes // This will fail when foundry no longer returns zerod block hashes
vm.expectRevert("OutputOracle: Blockhash does not match the hash at the expected height."); vm.expectRevert("OutputOracle: Blockhash does not match the hash at the expected height.");
oracle.appendL2Output(nonZeroHash, nextBlockNumber, l1BlockHash, l1BlockNumber - 1); oracle.proposeL2Output(nonZeroHash, nextBlockNumber, l1BlockHash, l1BlockNumber - 1);
} }
/***************************** /*****************************
* Delete Tests - Happy Path * * Delete Tests - Happy Path *
*****************************/ *****************************/
event L2OutputDeleted( event OutputDeleted(
bytes32 indexed l2Output, bytes32 indexed l2Output,
uint256 indexed l1Timestamp, uint256 indexed l1Timestamp,
uint256 indexed l2BlockNumber uint256 indexed l2BlockNumber
); );
function test_deleteL2Output() external { function test_deleteOutput() external {
test_appendingAnotherOutput(); test_proposingAnotherOutput();
uint256 latestBlockNumber = oracle.latestBlockNumber(); uint256 latestBlockNumber = oracle.latestBlockNumber();
L2OutputOracle.OutputProposal memory proposalToDelete = oracle.getL2Output( L2OutputOracle.OutputProposal memory proposalToDelete = oracle.getL2Output(
...@@ -268,7 +268,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -268,7 +268,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
vm.prank(owner); vm.prank(owner);
vm.expectEmit(true, true, false, false); vm.expectEmit(true, true, false, false);
emit L2OutputDeleted( emit OutputDeleted(
proposalToDelete.outputRoot, proposalToDelete.outputRoot,
proposalToDelete.timestamp, proposalToDelete.timestamp,
latestBlockNumber latestBlockNumber
...@@ -298,7 +298,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -298,7 +298,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
} }
function testCannot_deleteL2Output_withWrongRoot() external { function testCannot_deleteL2Output_withWrongRoot() external {
test_appendingAnotherOutput(); test_proposingAnotherOutput();
uint256 previousBlockNumber = oracle.latestBlockNumber() - submissionInterval; uint256 previousBlockNumber = oracle.latestBlockNumber() - submissionInterval;
L2OutputOracle.OutputProposal memory proposalToDelete = oracle.getL2Output( L2OutputOracle.OutputProposal memory proposalToDelete = oracle.getL2Output(
...@@ -313,7 +313,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ...@@ -313,7 +313,7 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer {
} }
function testCannot_deleteL2Output_withWrongTime() external { function testCannot_deleteL2Output_withWrongTime() external {
test_appendingAnotherOutput(); test_proposingAnotherOutput();
uint256 latestBlockNumber = oracle.latestBlockNumber(); uint256 latestBlockNumber = oracle.latestBlockNumber();
L2OutputOracle.OutputProposal memory proposalToDelete = oracle.getL2Output( L2OutputOracle.OutputProposal memory proposalToDelete = oracle.getL2Output(
...@@ -351,7 +351,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer { ...@@ -351,7 +351,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer {
assertEq(genesisL2Output, initOutput.outputRoot); assertEq(genesisL2Output, initOutput.outputRoot);
assertEq(initL1Time, initOutput.timestamp); assertEq(initL1Time, initOutput.timestamp);
assertEq(sequencer, oracleImpl.sequencer()); assertEq(proposer, oracleImpl.proposer());
assertEq(owner, oracleImpl.owner()); assertEq(owner, oracleImpl.owner());
} }
...@@ -360,7 +360,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer { ...@@ -360,7 +360,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer {
L2OutputOracle(payable(proxy)).initialize( L2OutputOracle(payable(proxy)).initialize(
genesisL2Output, genesisL2Output,
startingBlockNumber, startingBlockNumber,
sequencer, proposer,
owner owner
); );
} }
...@@ -370,7 +370,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer { ...@@ -370,7 +370,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer {
L2OutputOracle(oracleImpl).initialize( L2OutputOracle(oracleImpl).initialize(
genesisL2Output, genesisL2Output,
startingBlockNumber, startingBlockNumber,
sequencer, proposer,
owner owner
); );
} }
......
...@@ -288,8 +288,8 @@ contract OptimismPortal_Test is Portal_Initializer { ...@@ -288,8 +288,8 @@ contract OptimismPortal_Test is Portal_Initializer {
uint256 checkpoint = oracle.nextBlockNumber(); uint256 checkpoint = oracle.nextBlockNumber();
vm.roll(checkpoint); vm.roll(checkpoint);
vm.warp(oracle.computeL2Timestamp(checkpoint) + 1); vm.warp(oracle.computeL2Timestamp(checkpoint) + 1);
vm.prank(oracle.sequencer()); vm.prank(oracle.proposer());
oracle.appendL2Output(keccak256(abi.encode(2)), checkpoint, 0, 0); oracle.proposeL2Output(keccak256(abi.encode(2)), checkpoint, 0, 0);
// warp to the final second of the finalization period // warp to the final second of the finalization period
uint256 finalizationHorizon = block.timestamp + op.FINALIZATION_PERIOD_SECONDS(); uint256 finalizationHorizon = block.timestamp + op.FINALIZATION_PERIOD_SECONDS();
......
[{"elements": [{"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1929, "filename_used": "contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "starting_column": 1, "ending_column": 2}}, {"type": "function", "name": "receive", "source_mapping": {"start": 826, "length": 110, "filename_used": "contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [33, 34, 35], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1929, "filename_used": "contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "starting_column": 1, "ending_column": 2}}, "signature": "receive()"}}, {"type": "function", "name": "depositTransaction", "source_mapping": {"start": 1367, "length": 646, "filename_used": "contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1929, "filename_used": "contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "starting_column": 1, "ending_column": 2}}, "signature": "depositTransaction(address,uint256,uint256,bool,bytes)"}}], "description": "Contract locking ether found:\n\tContract DepositFeed (contracts/L1/DepositFeed.sol#7-67) has payable functions:\n\t - DepositFeed.receive() (contracts/L1/DepositFeed.sol#33-35)\n\t - DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes) (contracts/L1/DepositFeed.sol#46-66)\n\tBut does not have a function to withdraw the ether\n", "markdown": "Contract locking ether found:\n\tContract [DepositFeed](contracts/L1/DepositFeed.sol#L7-L67) has payable functions:\n\t - [DepositFeed.receive()](contracts/L1/DepositFeed.sol#L33-L35)\n\t - [DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes)](contracts/L1/DepositFeed.sol#L46-L66)\n\tBut does not have a function to withdraw the ether\n", "first_markdown_element": "contracts/L1/DepositFeed.sol#L7-L67", "id": "288a726f2c33db8578a9b3b43eaabd069d963e2dbe1fb2ae508c861783d169f5", "check": "locked-ether", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1666, "filename_used": "./contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "starting_column": 1, "ending_column": 2}}, {"type": "function", "name": "depositTransaction", "source_mapping": {"start": 1102, "length": 648, "filename_used": "./contracts/contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1666, "filename_used": "./contracts/contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "starting_column": 1, "ending_column": 2}}, "signature": "depositTransaction(address,uint256,uint256,bool,bytes)"}}], "description": "Contract locking ether found:\n\tContract DepositFeed (contracts/L1/DepositFeed.sol#7-59) has payable functions:\n\t - DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes) (contracts/L1/DepositFeed.sol#38-58)\n\tBut does not have a function to withdraw the ether\n", "markdown": "Contract locking ether found:\n\tContract [DepositFeed](contracts/L1/DepositFeed.sol#L7-L59) has payable functions:\n\t - [DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes)](contracts/L1/DepositFeed.sol#L38-L58)\n\tBut does not have a function to withdraw the ether\n", "first_markdown_element": "contracts/L1/DepositFeed.sol#L7-L59", "id": "be013b000d4c176d4d893619bdca725d93e4761e4b2e22fa77a64144e53abb26", "check": "locked-ether", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "appendL2Output", "source_mapping": {"start": 1769, "length": 422, "filename_used": "./contracts/L1/MockL2OutputOracle.sol", "filename_relative": "contracts/L1/MockL2OutputOracle.sol", "filename_absolute": "./contracts/L1/MockL2OutputOracle.sol", "filename_short": "contracts/L1/MockL2OutputOracle.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockL2OutputOracle", "source_mapping": {"start": 95, "length": 2773, "filename_used": "./contracts/L1/MockL2OutputOracle.sol", "filename_relative": "contracts/L1/MockL2OutputOracle.sol", "filename_absolute": "./contracts/L1/MockL2OutputOracle.sol", "filename_short": "contracts/L1/MockL2OutputOracle.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69], "starting_column": 1, "ending_column": 2}}, "signature": "appendL2Output(bytes32,uint256)"}}, {"type": "node", "name": "require(bool,string)(_timestamp == nextTimestamp(),Timestamp not equal to next expected timestamp)", "source_mapping": {"start": 2010, "length": 88, "filename_used": "./contracts/L1/MockL2OutputOracle.sol", "filename_relative": "contracts/L1/MockL2OutputOracle.sol", "filename_absolute": "./contracts/L1/MockL2OutputOracle.sol", "filename_short": "contracts/L1/MockL2OutputOracle.sol", "is_dependency": false, "lines": [48], "starting_column": 9, "ending_column": 97}, "type_specific_fields": {"parent": {"type": "function", "name": "appendL2Output", "source_mapping": {"start": 1769, "length": 422, "filename_used": "./contracts/L1/MockL2OutputOracle.sol", "filename_relative": "contracts/L1/MockL2OutputOracle.sol", "filename_absolute": "./contracts/L1/MockL2OutputOracle.sol", "filename_short": "contracts/L1/MockL2OutputOracle.sol", "is_dependency": false, "lines": [45, 46, 47, 48, 49, 50, 51], "starting_column": 5, "ending_column": 6}, "type_specific_fields": {"parent": {"type": "contract", "name": "MockL2OutputOracle", "source_mapping": {"start": 95, "length": 2773, "filename_used": "./contracts/L1/MockL2OutputOracle.sol", "filename_relative": "contracts/L1/MockL2OutputOracle.sol", "filename_absolute": "./contracts/L1/MockL2OutputOracle.sol", "filename_short": "contracts/L1/MockL2OutputOracle.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69], "starting_column": 1, "ending_column": 2}}, "signature": "appendL2Output(bytes32,uint256)"}}}}], "description": "MockL2OutputOracle.appendL2Output(bytes32,uint256) (contracts/L1/MockL2OutputOracle.sol#45-51) uses a dangerous strict equality:\n\t- require(bool,string)(_timestamp == nextTimestamp(),Timestamp not equal to next expected timestamp) (contracts/L1/MockL2OutputOracle.sol#48)\n", "markdown": "[MockL2OutputOracle.appendL2Output(bytes32,uint256)](contracts/L1/MockL2OutputOracle.sol#L45-L51) uses a dangerous strict equality:\n\t- [require(bool,string)(_timestamp == nextTimestamp(),Timestamp not equal to next expected timestamp)](contracts/L1/MockL2OutputOracle.sol#L48)\n", "first_markdown_element": "contracts/L1/MockL2OutputOracle.sol#L45-L51", "id": "74ee9955ede80e105221045625f8b4f963a0ca8422674891166ad65bdcdba57a", "check": "incorrect-equality", "impact": "Medium", "confidence": "High"}, {"elements": [{"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 86, "length": 1666, "filename_used": "./contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1666, "filename_used": "./contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}, {"type": "node", "name": "OFFSET = uint160(0x1111000000000000000000000000000000001111)", "source_mapping": {"start": 284, "length": 85, "filename_used": "./contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [14], "starting_column": 5, "ending_column": 90}, "type_specific_fields": {"parent": {"type": "function", "name": "slitherConstructorConstantVariables", "source_mapping": {"start": 86, "length": 1666, "filename_used": "./contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "starting_column": 1, "ending_column": 2}, "type_specific_fields": {"parent": {"type": "contract", "name": "DepositFeed", "source_mapping": {"start": 86, "length": 1666, "filename_used": "./contracts/L1/DepositFeed.sol", "filename_relative": "contracts/L1/DepositFeed.sol", "filename_absolute": "./contracts/L1/DepositFeed.sol", "filename_short": "contracts/L1/DepositFeed.sol", "is_dependency": false, "lines": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "starting_column": 1, "ending_column": 2}}, "signature": "slitherConstructorConstantVariables()"}}}}], "description": "DepositFeed.slitherConstructorConstantVariables() (contracts/L1/DepositFeed.sol#7-59) uses literals with too many digits:\n\t- OFFSET = uint160(0x1111000000000000000000000000000000001111) (contracts/L1/DepositFeed.sol#14)\n", "markdown": "[DepositFeed.slitherConstructorConstantVariables()](contracts/L1/DepositFeed.sol#L7-L59) uses literals with too many digits:\n\t- [OFFSET = uint160(0x1111000000000000000000000000000000001111)](contracts/L1/DepositFeed.sol#L14)\n", "first_markdown_element": "contracts/L1/DepositFeed.sol#L7-L59", "id": "14adc89c437b961183112ca2328ae0e07b627d12995c5555d2c2fca5d4dbe1aa", "check": "too-many-digits", "impact": "Informational", "confidence": "Medium"}] [
{
"elements": [
{
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1929,
"filename_used": "contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59, 60, 61, 62, 63, 64, 65, 66, 67
],
"starting_column": 1,
"ending_column": 2
}
},
{
"type": "function",
"name": "receive",
"source_mapping": {
"start": 826,
"length": 110,
"filename_used": "contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [33, 34, 35],
"starting_column": 5,
"ending_column": 6
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1929,
"filename_used": "contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "receive()"
}
},
{
"type": "function",
"name": "depositTransaction",
"source_mapping": {
"start": 1367,
"length": 646,
"filename_used": "contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66
],
"starting_column": 5,
"ending_column": 6
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1929,
"filename_used": "contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "depositTransaction(address,uint256,uint256,bool,bytes)"
}
}
],
"description": "Contract locking ether found:\n\tContract DepositFeed (contracts/L1/DepositFeed.sol#7-67) has payable functions:\n\t - DepositFeed.receive() (contracts/L1/DepositFeed.sol#33-35)\n\t - DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes) (contracts/L1/DepositFeed.sol#46-66)\n\tBut does not have a function to withdraw the ether\n",
"markdown": "Contract locking ether found:\n\tContract [DepositFeed](contracts/L1/DepositFeed.sol#L7-L67) has payable functions:\n\t - [DepositFeed.receive()](contracts/L1/DepositFeed.sol#L33-L35)\n\t - [DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes)](contracts/L1/DepositFeed.sol#L46-L66)\n\tBut does not have a function to withdraw the ether\n",
"first_markdown_element": "contracts/L1/DepositFeed.sol#L7-L67",
"id": "288a726f2c33db8578a9b3b43eaabd069d963e2dbe1fb2ae508c861783d169f5",
"check": "locked-ether",
"impact": "Medium",
"confidence": "High"
},
{
"elements": [
{
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1666,
"filename_used": "./contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59
],
"starting_column": 1,
"ending_column": 2
}
},
{
"type": "function",
"name": "depositTransaction",
"source_mapping": {
"start": 1102,
"length": 648,
"filename_used": "./contracts/contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58
],
"starting_column": 5,
"ending_column": 6
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1666,
"filename_used": "./contracts/contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "depositTransaction(address,uint256,uint256,bool,bytes)"
}
}
],
"description": "Contract locking ether found:\n\tContract DepositFeed (contracts/L1/DepositFeed.sol#7-59) has payable functions:\n\t - DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes) (contracts/L1/DepositFeed.sol#38-58)\n\tBut does not have a function to withdraw the ether\n",
"markdown": "Contract locking ether found:\n\tContract [DepositFeed](contracts/L1/DepositFeed.sol#L7-L59) has payable functions:\n\t - [DepositFeed.depositTransaction(address,uint256,uint256,bool,bytes)](contracts/L1/DepositFeed.sol#L38-L58)\n\tBut does not have a function to withdraw the ether\n",
"first_markdown_element": "contracts/L1/DepositFeed.sol#L7-L59",
"id": "be013b000d4c176d4d893619bdca725d93e4761e4b2e22fa77a64144e53abb26",
"check": "locked-ether",
"impact": "Medium",
"confidence": "High"
},
{
"elements": [
{
"type": "function",
"name": "proposeL2Output",
"source_mapping": {
"start": 1769,
"length": 422,
"filename_used": "./contracts/L1/MockL2OutputOracle.sol",
"filename_relative": "contracts/L1/MockL2OutputOracle.sol",
"filename_absolute": "./contracts/L1/MockL2OutputOracle.sol",
"filename_short": "contracts/L1/MockL2OutputOracle.sol",
"is_dependency": false,
"lines": [45, 46, 47, 48, 49, 50, 51],
"starting_column": 5,
"ending_column": 6
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "MockL2OutputOracle",
"source_mapping": {
"start": 95,
"length": 2773,
"filename_used": "./contracts/L1/MockL2OutputOracle.sol",
"filename_relative": "contracts/L1/MockL2OutputOracle.sol",
"filename_absolute": "./contracts/L1/MockL2OutputOracle.sol",
"filename_short": "contracts/L1/MockL2OutputOracle.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "proposeL2Output(bytes32,uint256)"
}
},
{
"type": "node",
"name": "require(bool,string)(_timestamp == nextTimestamp(),Timestamp not equal to next expected timestamp)",
"source_mapping": {
"start": 2010,
"length": 88,
"filename_used": "./contracts/L1/MockL2OutputOracle.sol",
"filename_relative": "contracts/L1/MockL2OutputOracle.sol",
"filename_absolute": "./contracts/L1/MockL2OutputOracle.sol",
"filename_short": "contracts/L1/MockL2OutputOracle.sol",
"is_dependency": false,
"lines": [48],
"starting_column": 9,
"ending_column": 97
},
"type_specific_fields": {
"parent": {
"type": "function",
"name": "proposeL2Output",
"source_mapping": {
"start": 1769,
"length": 422,
"filename_used": "./contracts/L1/MockL2OutputOracle.sol",
"filename_relative": "contracts/L1/MockL2OutputOracle.sol",
"filename_absolute": "./contracts/L1/MockL2OutputOracle.sol",
"filename_short": "contracts/L1/MockL2OutputOracle.sol",
"is_dependency": false,
"lines": [45, 46, 47, 48, 49, 50, 51],
"starting_column": 5,
"ending_column": 6
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "MockL2OutputOracle",
"source_mapping": {
"start": 95,
"length": 2773,
"filename_used": "./contracts/L1/MockL2OutputOracle.sol",
"filename_relative": "contracts/L1/MockL2OutputOracle.sol",
"filename_absolute": "./contracts/L1/MockL2OutputOracle.sol",
"filename_short": "contracts/L1/MockL2OutputOracle.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "proposeL2Output(bytes32,uint256)"
}
}
}
}
],
"description": "MockL2OutputOracle.proposeL2Output(bytes32,uint256) (contracts/L1/MockL2OutputOracle.sol#45-51) uses a dangerous strict equality:\n\t- require(bool,string)(_timestamp == nextTimestamp(),Timestamp not equal to next expected timestamp) (contracts/L1/MockL2OutputOracle.sol#48)\n",
"markdown": "[MockL2OutputOracle.proposeL2Output(bytes32,uint256)](contracts/L1/MockL2OutputOracle.sol#L45-L51) uses a dangerous strict equality:\n\t- [require(bool,string)(_timestamp == nextTimestamp(),Timestamp not equal to next expected timestamp)](contracts/L1/MockL2OutputOracle.sol#L48)\n",
"first_markdown_element": "contracts/L1/MockL2OutputOracle.sol#L45-L51",
"id": "74ee9955ede80e105221045625f8b4f963a0ca8422674891166ad65bdcdba57a",
"check": "incorrect-equality",
"impact": "Medium",
"confidence": "High"
},
{
"elements": [
{
"type": "function",
"name": "slitherConstructorConstantVariables",
"source_mapping": {
"start": 86,
"length": 1666,
"filename_used": "./contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
59
],
"starting_column": 1,
"ending_column": 2
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1666,
"filename_used": "./contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "slitherConstructorConstantVariables()"
}
},
{
"type": "node",
"name": "OFFSET = uint160(0x1111000000000000000000000000000000001111)",
"source_mapping": {
"start": 284,
"length": 85,
"filename_used": "./contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [14],
"starting_column": 5,
"ending_column": 90
},
"type_specific_fields": {
"parent": {
"type": "function",
"name": "slitherConstructorConstantVariables",
"source_mapping": {
"start": 86,
"length": 1666,
"filename_used": "./contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
56, 57, 58, 59
],
"starting_column": 1,
"ending_column": 2
},
"type_specific_fields": {
"parent": {
"type": "contract",
"name": "DepositFeed",
"source_mapping": {
"start": 86,
"length": 1666,
"filename_used": "./contracts/L1/DepositFeed.sol",
"filename_relative": "contracts/L1/DepositFeed.sol",
"filename_absolute": "./contracts/L1/DepositFeed.sol",
"filename_short": "contracts/L1/DepositFeed.sol",
"is_dependency": false,
"lines": [
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59
],
"starting_column": 1,
"ending_column": 2
}
},
"signature": "slitherConstructorConstantVariables()"
}
}
}
}
],
"description": "DepositFeed.slitherConstructorConstantVariables() (contracts/L1/DepositFeed.sol#7-59) uses literals with too many digits:\n\t- OFFSET = uint160(0x1111000000000000000000000000000000001111) (contracts/L1/DepositFeed.sol#14)\n",
"markdown": "[DepositFeed.slitherConstructorConstantVariables()](contracts/L1/DepositFeed.sol#L7-L59) uses literals with too many digits:\n\t- [OFFSET = uint160(0x1111000000000000000000000000000000001111)](contracts/L1/DepositFeed.sol#L14)\n",
"first_markdown_element": "contracts/L1/DepositFeed.sol#L7-L59",
"id": "14adc89c437b961183112ca2328ae0e07b627d12995c5555d2c2fca5d4dbe1aa",
"check": "too-many-digits",
"impact": "Informational",
"confidence": "Medium"
}
]
...@@ -33,9 +33,7 @@ const getTargetOutput = async ( ...@@ -33,9 +33,7 @@ const getTargetOutput = async (
withdrawalTimestamp: number withdrawalTimestamp: number
) => { ) => {
const submissionInterval = (await oracle.SUBMISSION_INTERVAL()).toNumber() const submissionInterval = (await oracle.SUBMISSION_INTERVAL()).toNumber()
const startingTimestamp = ( const startingTimestamp = (await oracle.STARTING_TIMESTAMP()).toNumber()
await oracle.STARTING_TIMESTAMP()
).toNumber()
const nextTimestamp = (await oracle.nextTimestamp()).toNumber() const nextTimestamp = (await oracle.nextTimestamp()).toNumber()
let targetOutputTimestamp let targetOutputTimestamp
if (withdrawalTimestamp < nextTimestamp) { if (withdrawalTimestamp < nextTimestamp) {
......
...@@ -43,7 +43,7 @@ described [below](#l2-output-commitment-construction). ...@@ -43,7 +43,7 @@ described [below](#l2-output-commitment-construction).
If there is no newly finalized output, the service continues querying until it receives one. It then submits this If there is no newly finalized output, the service continues querying until it receives one. It then submits this
output, and the appropriate timestamp, to the [L2 Output Root](#l2-output-root-smart-contract) contract's output, and the appropriate timestamp, to the [L2 Output Root](#l2-output-root-smart-contract) contract's
`appendL2Output()` function. The timestamp MUST be the next multiple of the `SUBMISSION_INTERVAL` value. `proposeL2Output()` function. The timestamp MUST be the next multiple of the `SUBMISSION_INTERVAL` value.
The proposer may also delete the most recent output root by calling the `deleteL2Output()` function. The proposer may also delete the most recent output root by calling the `deleteL2Output()` function.
The function can be called repeatedly if it is necessary to roll back the state further. The function can be called repeatedly if it is necessary to roll back the state further.
...@@ -102,13 +102,13 @@ The L2 Output Oracle contract implements the following interface: ...@@ -102,13 +102,13 @@ The L2 Output Oracle contract implements the following interface:
* @notice Accepts an L2 outputRoot and the timestamp of the corresponding L2 block. The * @notice Accepts an L2 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 * timestamp must be equal to the current value returned by `nextTimestamp()` in order to be
* accepted. * accepted.
* This function may only be called by the Sequencer. * This function may only be called by the Proposer.
* @param _l2Output The L2 output of the checkpoint block. * @param _l2Output The L2 output of the checkpoint block.
* @param _l2BlockNumber The L2 block number that resulted in _l2Output. * @param _l2BlockNumber The L2 block number that resulted in _l2Output.
* @param _l1Blockhash A block hash which must be included in the current chain. * @param _l1Blockhash A block hash which must be included in the current chain.
* @param _l1BlockNumber The block number with the specified block hash. * @param _l1BlockNumber The block number with the specified block hash.
*/ */
function appendL2Output( function proposeL2Output(
bytes32 _l2Output, bytes32 _l2Output,
uint256 _l2BlockNumber, uint256 _l2BlockNumber,
bytes32 _l1Blockhash, bytes32 _l1Blockhash,
...@@ -133,7 +133,7 @@ function nextBlockNumber() public view returns (uint256) { ...@@ -133,7 +133,7 @@ function nextBlockNumber() public view returns (uint256) {
### L1 Reorgs ### L1 Reorgs
If the L1 has a reorg after an output has been generated and submitted, the L2 state and correct output may change If the L1 has a reorg after an output has been generated and submitted, the L2 state and correct output may change
leading to a faulty proposal. This is mitigated against by allowing the sequencer to submit an leading to a faulty proposal. This is mitigated against by allowing the proposer to submit an
L1 block number and hash to the Output Oracle when appending a new output; in the event of a reorg, the block hash L1 block number and hash to the Output Oracle when appending a new output; in the event of a reorg, the block hash
will not match that of the block with that number and the call will revert. will not match that of the block with that number and the call will revert.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment