diff --git a/op-bindings/bindings/l2outputoracle.go b/op-bindings/bindings/l2outputoracle.go index ad7ebe6a1a5b..10a717a5b0f9 100644 --- a/op-bindings/bindings/l2outputoracle.go +++ b/op-bindings/bindings/l2outputoracle.go @@ -36,8 +36,8 @@ type TypesOutputProposal struct { // L2OutputOracleMetaData contains all meta data concerning the L2OutputOracle contract. var L2OutputOracleMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"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\":\"OutputProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"OutputsDeleted\",\"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\":\"L2_BLOCK_TIME\",\"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\":\"_proposer\",\"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\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"deleteL2Outputs\",\"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\":\"structTypes.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"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\":[],\"name\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162001d3d38038062001d3d8339810160408190526200003591620004d7565b6000608081905260a052600160c05260e08690526101008590526200005d8484848462000069565b50505050505062000534565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a7306200024a60201b620010911760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b42841115620001cd5760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a4016200011a565b606684905560658590556068859055620001e662000259565b620001f183620002c1565b620001fc82620003a5565b801562000243576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b6001600160a01b03163b151590565b600054610100900460ff16620002b55760405162461bcd60e51b815260206004820152602b602482015260008051602062001d1d83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b620002bf620003f7565b565b620002cb6200045e565b6001600160a01b038116620003495760405162461bcd60e51b815260206004820152603760248201527f4c324f75747075744f7261636c653a206e65772070726f706f7365722063616e60448201527f6e6f7420626520746865207a65726f206164647265737300000000000000000060648201526084016200011a565b6067546040516001600160a01b038084169216907f3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd90600090a3606780546001600160a01b0319166001600160a01b0392909216919091179055565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620004535760405162461bcd60e51b815260206004820152602b602482015260008051602062001d1d83398151915260448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b620002bf33620003a5565b6033546001600160a01b03163314620002bf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200011a565b80516001600160a01b0381168114620004d257600080fd5b919050565b60008060008060008060c08789031215620004f157600080fd5b865195506020870151945060408701519350606087015192506200051860808801620004ba565b91506200052860a08801620004ba565b90509295509295509295565b60805160a05160c05160e051610100516117816200059c600039600081816101240152610f5b0152600081816101a30152818161094701528181610e1701528181610e5e0152610fa90152600061065001526000610627015260006105fe01526117816000f3fe60806040526004361061010d5760003560e01c806388786272116100a5578063a25ae55711610074578063d1de856c11610059578063d1de856c1461032f578063dcec33481461034f578063f2fde38b1461036457600080fd5b8063a25ae557146102c7578063a8e4fb901461030257600080fd5b8063887862721461023257806389c44cbb146102485780638da5cb5b146102685780639aaab648146102b457600080fd5b806354fd4d50116100e157806354fd4d50146101c557806370872aa5146101e7578063715018a6146101fd57806372d5fe211461021257600080fd5b80622134cc14610112578063019e2729146101595780634599c7881461017b578063529933df14610191575b600080fd5b34801561011e57600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561016557600080fd5b50610179610174366004611442565b610384565b005b34801561018757600080fd5b5061014660685481565b34801561019d57600080fd5b506101467f000000000000000000000000000000000000000000000000000000000000000081565b3480156101d157600080fd5b506101da6105f7565b60405161015091906114b8565b3480156101f357600080fd5b5061014660655481565b34801561020957600080fd5b5061017961069a565b34801561021e57600080fd5b5061017961022d366004611509565b6106ae565b34801561023e57600080fd5b5061014660665481565b34801561025457600080fd5b5061017961026336600461152b565b6107e7565b34801561027457600080fd5b5060335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610150565b6101796102c2366004611544565b61099d565b3480156102d357600080fd5b506102e76102e236600461152b565b610d47565b60408051825181526020928301519281019290925201610150565b34801561030e57600080fd5b5060675461028f9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033b57600080fd5b5061014661034a36600461152b565b610f57565b34801561035b57600080fd5b50610146610fa5565b34801561037057600080fd5b5061017961037f366004611509565b610fda565b600054610100900460ff16158080156103a45750600054600160ff909116105b806103be5750303b1580156103be575060005460ff166001145b61044f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156104ad57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b42841115610564576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a401610446565b60668490556065859055606885905561057b6110ad565b610584836106ae565b61058d8261114c565b80156105f057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050505050565b60606106227f00000000000000000000000000000000000000000000000000000000000000006111c3565b61064b7f00000000000000000000000000000000000000000000000000000000000000006111c3565b6106747f00000000000000000000000000000000000000000000000000000000000000006111c3565b60405160200161068693929190611576565b604051602081830303815290604052905090565b6106a26112f8565b6106ac600061114c565b565b6106b66112f8565b73ffffffffffffffffffffffffffffffffffffffff8116610759576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324f75747075744f7261636c653a206e65772070726f706f7365722063616e60448201527f6e6f7420626520746865207a65726f20616464726573730000000000000000006064820152608401610446565b60675460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd90600090a3606780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6107ef6112f8565b60008181526069602052604090205461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c65746520612060448201527f6e6f6e2d6578697374656e74206f7574707574000000000000000000000000006064820152608401610446565b606854811115610942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c617465737420626c6f636b206e756d60648201527f6265720000000000000000000000000000000000000000000000000000000000608482015260a401610446565b61096c7f00000000000000000000000000000000000000000000000000000000000000008261161b565b60685560405181907f21cbfd8ae20a7662b0a8aa9162fc9428f52c94b2e0ac268312628ea47f3f17eb90600090a250565b60675473ffffffffffffffffffffffffffffffffffffffff163314610a44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4c324f75747075744f7261636c653a2066756e6374696f6e2063616e206f6e6c60448201527f792062652063616c6c65642062792070726f706f7365720000000000000000006064820152608401610446565b610a4c610fa5565b8314610b00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a401610446565b42610b0a84610f57565b10610b97576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e2074686520667574757265000000000000000000006064820152608401610446565b83610c24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f20686173680000000000006064820152608401610446565b8115610ce05781814014610ce0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b6861736820646f6573206e60448201527f6f74206d6174636820746865206861736820617420746865206578706563746560648201527f6420686569676874000000000000000000000000000000000000000000000000608482015260a401610446565b8242857fc120f5e881491e6e212befa39e36b8f57d5eca31915f2e5d60a420f418caa6df60405160405180910390a4505060408051808201825292835242602080850191825260008481526069909152919091209251835551600190920191909155606855565b6040805180820190915260008082526020820152606854821115610e13576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d6265722063616e60448201527f6e6f742062652067726561746572207468616e20746865206c6174657374206260648201527f6c6f636b206e756d626572000000000000000000000000000000000000000000608482015260a401610446565b60007f000000000000000000000000000000000000000000000000000000000000000060655484610e44919061161b565b610e4e9190611661565b905060008115610e9157610e82827f000000000000000000000000000000000000000000000000000000000000000061161b565b610e8c9085611675565b610e93565b835b600081815260696020908152604091829020825180840190935280548084526001909101549183019190915291925090610f4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a206e6f206f757470757420666f756e642060448201527f666f722074686520676976656e20626c6f636b206e756d6265720000000000006064820152608401610446565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000060655483610f88919061161b565b610f92919061168d565b606654610f9f9190611675565b92915050565b60007f0000000000000000000000000000000000000000000000000000000000000000606854610fd59190611675565b905090565b610fe26112f8565b73ffffffffffffffffffffffffffffffffffffffff8116611085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610446565b61108e8161114c565b50565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600054610100900460ff16611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610446565b6106ac611379565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60608160000361120657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611230578061121a816116ca565b91506112299050600a83611702565b915061120a565b60008167ffffffffffffffff81111561124b5761124b611716565b6040519080825280601f01601f191660200182016040528015611275576020820181803683370190505b5090505b8415610f4f5761128a60018361161b565b9150611297600a86611661565b6112a2906030611675565b60f81b8183815181106112b7576112b7611745565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506112f1600a86611702565b9450611279565b60335473ffffffffffffffffffffffffffffffffffffffff1633146106ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610446565b600054610100900460ff16611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610446565b6106ac3361114c565b803573ffffffffffffffffffffffffffffffffffffffff8116811461143d57600080fd5b919050565b6000806000806080858703121561145857600080fd5b843593506020850135925061146f60408601611419565b915061147d60608601611419565b905092959194509250565b60005b838110156114a357818101518382015260200161148b565b838111156114b2576000848401525b50505050565b60208152600082518060208401526114d7816040850160208701611488565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60006020828403121561151b57600080fd5b61152482611419565b9392505050565b60006020828403121561153d57600080fd5b5035919050565b6000806000806080858703121561155a57600080fd5b5050823594602084013594506040840135936060013592509050565b60008451611588818460208901611488565b80830190507f2e0000000000000000000000000000000000000000000000000000000000000080825285516115c4816001850160208a01611488565b600192019182015283516115df816002840160208801611488565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561162d5761162d6115ec565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261167057611670611632565b500690565b60008219821115611688576116886115ec565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156116c5576116c56115ec565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036116fb576116fb6115ec565b5060010190565b60008261171157611711611632565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069", + ABI: "[{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_submissionInterval\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l2BlockTime\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_proposer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_challenger\",\"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\":\"OutputProposed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"OutputsDeleted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CHALLENGER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_BLOCK_TIME\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PROPOSER\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUBMISSION_INTERVAL\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"computeL2Timestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2BlockNumber\",\"type\":\"uint256\"}],\"name\":\"deleteL2Outputs\",\"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\":\"structTypes.OutputProposal\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_startingBlockNumber\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_startingTimestamp\",\"type\":\"uint256\"}],\"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\":[{\"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\":\"startingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startingTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101606040523480156200001257600080fd5b506040516200169938038062001699833981016040819052620000359162000267565b6000608081905260a052600160c05260e08690526101008590526001600160a01b03808316610140528116610120526200007084846200007c565b505050505050620002c4565b600054610100900460ff16158080156200009d5750600054600160ff909116105b80620000cd5750620000ba306200023b60201b62000f001760201c565b158015620000cd575060005460ff166001145b620001365760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200015a576000805461ff0019166101001790555b42821115620001e05760405162461bcd60e51b8152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201526374696d6560e01b608482015260a4016200012d565b600282905560018390556003839055801562000236576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6001600160a01b03163b151590565b80516001600160a01b03811681146200026257600080fd5b919050565b60008060008060008060c087890312156200028157600080fd5b86519550602087015194506040870151935060608701519250620002a8608088016200024a565b9150620002b860a088016200024a565b90509295509295509295565b60805160a05160c05160e05161010051610120516101405161134a6200034f6000396000818161029b01526106450152600081816101a601526103cd01526000818160f30152610c2f015260008181610150015281816105d701528181610aeb01528181610b320152610c7d0152600061036b0152600061034201526000610319015261134a6000f3fe6080604052600436106100dc5760003560e01c806389c44cbb1161007f578063bffa7f0f11610059578063bffa7f0f14610289578063d1de856c146102bd578063dcec3348146102dd578063e4a30116146102f257600080fd5b806389c44cbb146102195780639aaab6481461023b578063a25ae5571461024e57600080fd5b806354fd4d50116100bb57806354fd4d50146101725780636b4d98dd1461019457806370872aa5146101ed578063887862721461020357600080fd5b80622134cc146100e15780634599c78814610128578063529933df1461013e575b600080fd5b3480156100ed57600080fd5b506101157f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b34801561013457600080fd5b5061011560035481565b34801561014a57600080fd5b506101157f000000000000000000000000000000000000000000000000000000000000000081565b34801561017e57600080fd5b50610187610312565b60405161011f9190611081565b3480156101a057600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161011f565b3480156101f957600080fd5b5061011560015481565b34801561020f57600080fd5b5061011560025481565b34801561022557600080fd5b506102396102343660046110d2565b6103b5565b005b6102396102493660046110eb565b61062d565b34801561025a57600080fd5b5061026e6102693660046110d2565b610a1b565b6040805182518152602092830151928101929092520161011f565b34801561029557600080fd5b506101c87f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c957600080fd5b506101156102d83660046110d2565b610c2b565b3480156102e957600080fd5b50610115610c79565b3480156102fe57600080fd5b5061023961030d36600461111d565b610cae565b606061033d7f0000000000000000000000000000000000000000000000000000000000000000610f1c565b6103667f0000000000000000000000000000000000000000000000000000000000000000610f1c565b61038f7f0000000000000000000000000000000000000000000000000000000000000000610f1c565b6040516020016103a19392919061113f565b604051602081830303815290604052905090565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461047f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f4c324f75747075744f7261636c653a206f6e6c7920746865206368616c6c656e60448201527f67657220616464726573732063616e2064656c657465206f757470757473000060648201526084015b60405180910390fd5b60008181526004602052604090205461051a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c65746520612060448201527f6e6f6e2d6578697374656e74206f7574707574000000000000000000000000006064820152608401610476565b6003548111156105d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4c324f75747075744f7261636c653a2063616e6e6f742064656c657465206f7560448201527f747075747320616674657220746865206c617465737420626c6f636b206e756d60648201527f6265720000000000000000000000000000000000000000000000000000000000608482015260a401610476565b6105fc7f0000000000000000000000000000000000000000000000000000000000000000826111e4565b60035560405181907f21cbfd8ae20a7662b0a8aa9162fc9428f52c94b2e0ac268312628ea47f3f17eb90600090a250565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610718576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604160248201527f4c324f75747075744f7261636c653a206f6e6c79207468652070726f706f736560448201527f7220616464726573732063616e2070726f706f7365206e6577206f757470757460648201527f7300000000000000000000000000000000000000000000000000000000000000608482015260a401610476565b610720610c79565b83146107d4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d626572206d757360448201527f7420626520657175616c20746f206e65787420657870656374656420626c6f6360648201527f6b206e756d626572000000000000000000000000000000000000000000000000608482015260a401610476565b426107de84610c2b565b1061086b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603660248201527f4c324f75747075744f7261636c653a2063616e6e6f742070726f706f7365204c60448201527f32206f757470757420696e2074686520667574757265000000000000000000006064820152608401610476565b836108f8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a204c32206f75747075742070726f706f7360448201527f616c2063616e6e6f7420626520746865207a65726f20686173680000000000006064820152608401610476565b81156109b457818140146109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f4c324f75747075744f7261636c653a20626c6f636b6861736820646f6573206e60448201527f6f74206d6174636820746865206861736820617420746865206578706563746560648201527f6420686569676874000000000000000000000000000000000000000000000000608482015260a401610476565b8242857fc120f5e881491e6e212befa39e36b8f57d5eca31915f2e5d60a420f418caa6df60405160405180910390a4505060408051808201825292835242602080850191825260008481526004909152919091209251835551600190920191909155600355565b6040805180820190915260008082526020820152600354821115610ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4c324f75747075744f7261636c653a20626c6f636b206e756d6265722063616e60448201527f6e6f742062652067726561746572207468616e20746865206c6174657374206260648201527f6c6f636b206e756d626572000000000000000000000000000000000000000000608482015260a401610476565b60007f000000000000000000000000000000000000000000000000000000000000000060015484610b1891906111e4565b610b22919061122a565b905060008115610b6557610b56827f00000000000000000000000000000000000000000000000000000000000000006111e4565b610b60908561123e565b610b67565b835b600081815260046020908152604091829020825180840190935280548084526001909101549183019190915291925090610c23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4c324f75747075744f7261636c653a206e6f206f757470757420666f756e642060448201527f666f722074686520676976656e20626c6f636b206e756d6265720000000000006064820152608401610476565b949350505050565b60007f000000000000000000000000000000000000000000000000000000000000000060015483610c5c91906111e4565b610c669190611256565b600254610c73919061123e565b92915050565b60007f0000000000000000000000000000000000000000000000000000000000000000600354610ca9919061123e565b905090565b600054610100900460ff1615808015610cce5750600054600160ff909116105b80610ce85750303b158015610ce8575060005460ff166001145b610d74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610476565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790558015610dd257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b42821115610e89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526044602482018190527f4c324f75747075744f7261636c653a207374617274696e67204c322074696d65908201527f7374616d70206d757374206265206c657373207468616e2063757272656e742060648201527f74696d6500000000000000000000000000000000000000000000000000000000608482015260a401610476565b6002829055600183905560038390558015610efb57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b606081600003610f5f57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115610f895780610f7381611293565b9150610f829050600a836112cb565b9150610f63565b60008167ffffffffffffffff811115610fa457610fa46112df565b6040519080825280601f01601f191660200182016040528015610fce576020820181803683370190505b5090505b8415610c2357610fe36001836111e4565b9150610ff0600a8661122a565b610ffb90603061123e565b60f81b8183815181106110105761101061130e565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061104a600a866112cb565b9450610fd2565b60005b8381101561106c578181015183820152602001611054565b8381111561107b576000848401525b50505050565b60208152600082518060208401526110a0816040850160208701611051565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b6000602082840312156110e457600080fd5b5035919050565b6000806000806080858703121561110157600080fd5b5050823594602084013594506040840135936060013592509050565b6000806040838503121561113057600080fd5b50508035926020909101359150565b60008451611151818460208901611051565b80830190507f2e00000000000000000000000000000000000000000000000000000000000000808252855161118d816001850160208a01611051565b600192019182015283516111a8816002840160208801611051565b0160020195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156111f6576111f66111b5565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082611239576112396111fb565b500690565b60008219821115611251576112516111b5565b500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561128e5761128e6111b5565b500290565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112c4576112c46111b5565b5060010190565b6000826112da576112da6111fb565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea164736f6c634300080f000a", } // L2OutputOracleABI is the input ABI used to generate the binding from. @@ -49,7 +49,7 @@ var L2OutputOracleABI = L2OutputOracleMetaData.ABI var L2OutputOracleBin = L2OutputOracleMetaData.Bin // DeployL2OutputOracle deploys a new Ethereum contract, binding an instance of L2OutputOracle to it. -func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _owner common.Address) (common.Address, *types.Transaction, *L2OutputOracle, error) { +func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, _submissionInterval *big.Int, _l2BlockTime *big.Int, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _challenger common.Address) (common.Address, *types.Transaction, *L2OutputOracle, error) { parsed, err := L2OutputOracleMetaData.GetAbi() if err != nil { return common.Address{}, nil, nil, err @@ -58,7 +58,7 @@ func DeployL2OutputOracle(auth *bind.TransactOpts, backend bind.ContractBackend, return common.Address{}, nil, nil, errors.New("GetABI returned nil") } - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _owner) + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(L2OutputOracleBin), backend, _submissionInterval, _l2BlockTime, _startingBlockNumber, _startingTimestamp, _proposer, _challenger) if err != nil { return common.Address{}, nil, nil, err } @@ -207,6 +207,37 @@ func (_L2OutputOracle *L2OutputOracleTransactorRaw) Transact(opts *bind.Transact return _L2OutputOracle.Contract.contract.Transact(opts, method, params...) } +// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. +// +// Solidity: function CHALLENGER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) CHALLENGER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "CHALLENGER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. +// +// Solidity: function CHALLENGER() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) CHALLENGER() (common.Address, error) { + return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) +} + +// CHALLENGER is a free data retrieval call binding the contract method 0x6b4d98dd. +// +// Solidity: function CHALLENGER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) CHALLENGER() (common.Address, error) { + return _L2OutputOracle.Contract.CHALLENGER(&_L2OutputOracle.CallOpts) +} + // L2BLOCKTIME is a free data retrieval call binding the contract method 0x002134cc. // // Solidity: function L2_BLOCK_TIME() view returns(uint256) @@ -238,6 +269,37 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) L2BLOCKTIME() (*big.Int, err return _L2OutputOracle.Contract.L2BLOCKTIME(&_L2OutputOracle.CallOpts) } +// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. +// +// Solidity: function PROPOSER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCaller) PROPOSER(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _L2OutputOracle.contract.Call(opts, &out, "PROPOSER") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. +// +// Solidity: function PROPOSER() view returns(address) +func (_L2OutputOracle *L2OutputOracleSession) PROPOSER() (common.Address, error) { + return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) +} + +// PROPOSER is a free data retrieval call binding the contract method 0xbffa7f0f. +// +// Solidity: function PROPOSER() view returns(address) +func (_L2OutputOracle *L2OutputOracleCallerSession) PROPOSER() (common.Address, error) { + return _L2OutputOracle.Contract.PROPOSER(&_L2OutputOracle.CallOpts) +} + // SUBMISSIONINTERVAL is a free data retrieval call binding the contract method 0x529933df. // // Solidity: function SUBMISSION_INTERVAL() view returns(uint256) @@ -393,68 +455,6 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) NextBlockNumber() (*big.Int, return _L2OutputOracle.Contract.NextBlockNumber(&_L2OutputOracle.CallOpts) } -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "owner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) Owner() (common.Address, error) { - return _L2OutputOracle.Contract.Owner(&_L2OutputOracle.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) Owner() (common.Address, error) { - return _L2OutputOracle.Contract.Owner(&_L2OutputOracle.CallOpts) -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleCaller) Proposer(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _L2OutputOracle.contract.Call(opts, &out, "proposer") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleSession) Proposer() (common.Address, error) { - return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) -} - -// Proposer is a free data retrieval call binding the contract method 0xa8e4fb90. -// -// Solidity: function proposer() view returns(address) -func (_L2OutputOracle *L2OutputOracleCallerSession) Proposer() (common.Address, error) { - return _L2OutputOracle.Contract.Proposer(&_L2OutputOracle.CallOpts) -} - // StartingBlockNumber is a free data retrieval call binding the contract method 0x70872aa5. // // Solidity: function startingBlockNumber() view returns(uint256) @@ -548,27 +548,6 @@ func (_L2OutputOracle *L2OutputOracleCallerSession) Version() (string, error) { return _L2OutputOracle.Contract.Version(&_L2OutputOracle.CallOpts) } -// ChangeProposer is a paid mutator transaction binding the contract method 0x72d5fe21. -// -// Solidity: function changeProposer(address _proposer) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) ChangeProposer(opts *bind.TransactOpts, _proposer common.Address) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "changeProposer", _proposer) -} - -// ChangeProposer is a paid mutator transaction binding the contract method 0x72d5fe21. -// -// Solidity: function changeProposer(address _proposer) returns() -func (_L2OutputOracle *L2OutputOracleSession) ChangeProposer(_proposer common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ChangeProposer(&_L2OutputOracle.TransactOpts, _proposer) -} - -// ChangeProposer is a paid mutator transaction binding the contract method 0x72d5fe21. -// -// Solidity: function changeProposer(address _proposer) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) ChangeProposer(_proposer common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.ChangeProposer(&_L2OutputOracle.TransactOpts, _proposer) -} - // DeleteL2Outputs is a paid mutator transaction binding the contract method 0x89c44cbb. // // Solidity: function deleteL2Outputs(uint256 _l2BlockNumber) returns() @@ -590,25 +569,25 @@ func (_L2OutputOracle *L2OutputOracleTransactorSession) DeleteL2Outputs(_l2Block return _L2OutputOracle.Contract.DeleteL2Outputs(&_L2OutputOracle.TransactOpts, _l2BlockNumber) } -// Initialize is a paid mutator transaction binding the contract method 0x019e2729. +// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. // -// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _owner) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _owner common.Address) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "initialize", _startingBlockNumber, _startingTimestamp, _proposer, _owner) +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() +func (_L2OutputOracle *L2OutputOracleTransactor) Initialize(opts *bind.TransactOpts, _startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.contract.Transact(opts, "initialize", _startingBlockNumber, _startingTimestamp) } -// Initialize is a paid mutator transaction binding the contract method 0x019e2729. +// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. // -// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _owner) returns() -func (_L2OutputOracle *L2OutputOracleSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _owner common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp, _proposer, _owner) +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() +func (_L2OutputOracle *L2OutputOracleSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp) } -// Initialize is a paid mutator transaction binding the contract method 0x019e2729. +// Initialize is a paid mutator transaction binding the contract method 0xe4a30116. // -// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, address _owner) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int, _proposer common.Address, _owner common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp, _proposer, _owner) +// Solidity: function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) returns() +func (_L2OutputOracle *L2OutputOracleTransactorSession) Initialize(_startingBlockNumber *big.Int, _startingTimestamp *big.Int) (*types.Transaction, error) { + return _L2OutputOracle.Contract.Initialize(&_L2OutputOracle.TransactOpts, _startingBlockNumber, _startingTimestamp) } // ProposeL2Output is a paid mutator transaction binding the contract method 0x9aaab648. @@ -632,48 +611,6 @@ func (_L2OutputOracle *L2OutputOracleTransactorSession) ProposeL2Output(_outputR return _L2OutputOracle.Contract.ProposeL2Output(&_L2OutputOracle.TransactOpts, _outputRoot, _l2BlockNumber, _l1Blockhash, _l1BlockNumber) } -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_L2OutputOracle *L2OutputOracleTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_L2OutputOracle *L2OutputOracleSession) RenounceOwnership() (*types.Transaction, error) { - return _L2OutputOracle.Contract.RenounceOwnership(&_L2OutputOracle.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _L2OutputOracle.Contract.RenounceOwnership(&_L2OutputOracle.TransactOpts) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_L2OutputOracle *L2OutputOracleTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _L2OutputOracle.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_L2OutputOracle *L2OutputOracleSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.TransferOwnership(&_L2OutputOracle.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_L2OutputOracle *L2OutputOracleTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _L2OutputOracle.Contract.TransferOwnership(&_L2OutputOracle.TransactOpts, newOwner) -} - // L2OutputOracleInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the L2OutputOracle contract. type L2OutputOracleInitializedIterator struct { Event *L2OutputOracleInitialized // Event containing the contract specifics and raw log @@ -1113,309 +1050,3 @@ func (_L2OutputOracle *L2OutputOracleFilterer) ParseOutputsDeleted(log types.Log event.Raw = log return event, nil } - -// L2OutputOracleOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the L2OutputOracle contract. -type L2OutputOracleOwnershipTransferredIterator struct { - Event *L2OutputOracleOwnershipTransferred // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// 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 -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleOwnershipTransferredIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleOwnershipTransferred) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleOwnershipTransferred represents a OwnershipTransferred event raised by the L2OutputOracle contract. -type L2OutputOracleOwnershipTransferred struct { - PreviousOwner common.Address - NewOwner common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*L2OutputOracleOwnershipTransferredIterator, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &L2OutputOracleOwnershipTransferredIterator{contract: _L2OutputOracle.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil -} - -// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *L2OutputOracleOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) { - - var previousOwnerRule []interface{} - for _, previousOwnerItem := range previousOwner { - previousOwnerRule = append(previousOwnerRule, previousOwnerItem) - } - var newOwnerRule []interface{} - for _, newOwnerItem := range newOwner { - newOwnerRule = append(newOwnerRule, newOwnerItem) - } - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleOwnershipTransferred) - if err := _L2OutputOracle.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0. -// -// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseOwnershipTransferred(log types.Log) (*L2OutputOracleOwnershipTransferred, error) { - event := new(L2OutputOracleOwnershipTransferred) - if err := _L2OutputOracle.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// 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 L2OutputOracleProposerChangedIterator struct { - Event *L2OutputOracleProposerChanged // Event containing the contract specifics and raw log - - contract *bind.BoundContract // Generic contract to use for unpacking event data - event string // Event name to use for unpacking event data - - logs chan types.Log // Log channel receiving the found contract events - sub ethereum.Subscription // Subscription for errors, completion and termination - done bool // Whether the subscription completed delivering logs - fail error // Occurred error to stop iteration -} - -// 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 -// returned and Error() can be queried for the exact failure. -func (it *L2OutputOracleProposerChangedIterator) Next() bool { - // If the iterator failed, stop iterating - if it.fail != nil { - return false - } - // If the iterator completed, deliver directly whatever's available - if it.done { - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleProposerChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - default: - return false - } - } - // Iterator still in progress, wait for either a data or an error event - select { - case log := <-it.logs: - it.Event = new(L2OutputOracleProposerChanged) - if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil { - it.fail = err - return false - } - it.Event.Raw = log - return true - - case err := <-it.sub.Err(): - it.done = true - it.fail = err - return it.Next() - } -} - -// Error returns any retrieval or parsing error occurred during filtering. -func (it *L2OutputOracleProposerChangedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *L2OutputOracleProposerChangedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// L2OutputOracleProposerChanged represents a ProposerChanged event raised by the L2OutputOracle contract. -type L2OutputOracleProposerChanged struct { - PreviousProposer common.Address - NewProposer common.Address - Raw types.Log // Blockchain specific contextual infos -} - -// FilterProposerChanged is a free log retrieval operation binding the contract event 0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd. -// -// Solidity: event ProposerChanged(address indexed previousProposer, address indexed newProposer) -func (_L2OutputOracle *L2OutputOracleFilterer) FilterProposerChanged(opts *bind.FilterOpts, previousProposer []common.Address, newProposer []common.Address) (*L2OutputOracleProposerChangedIterator, error) { - - var previousProposerRule []interface{} - for _, previousProposerItem := range previousProposer { - previousProposerRule = append(previousProposerRule, previousProposerItem) - } - var newProposerRule []interface{} - for _, newProposerItem := range newProposer { - newProposerRule = append(newProposerRule, newProposerItem) - } - - logs, sub, err := _L2OutputOracle.contract.FilterLogs(opts, "ProposerChanged", previousProposerRule, newProposerRule) - if err != nil { - return nil, err - } - return &L2OutputOracleProposerChangedIterator{contract: _L2OutputOracle.contract, event: "ProposerChanged", logs: logs, sub: sub}, nil -} - -// WatchProposerChanged is a free log subscription operation binding the contract event 0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd. -// -// Solidity: event ProposerChanged(address indexed previousProposer, address indexed newProposer) -func (_L2OutputOracle *L2OutputOracleFilterer) WatchProposerChanged(opts *bind.WatchOpts, sink chan<- *L2OutputOracleProposerChanged, previousProposer []common.Address, newProposer []common.Address) (event.Subscription, error) { - - var previousProposerRule []interface{} - for _, previousProposerItem := range previousProposer { - previousProposerRule = append(previousProposerRule, previousProposerItem) - } - var newProposerRule []interface{} - for _, newProposerItem := range newProposer { - newProposerRule = append(newProposerRule, newProposerItem) - } - - logs, sub, err := _L2OutputOracle.contract.WatchLogs(opts, "ProposerChanged", previousProposerRule, newProposerRule) - if err != nil { - return nil, err - } - return event.NewSubscription(func(quit <-chan struct{}) error { - defer sub.Unsubscribe() - for { - select { - case log := <-logs: - // New log arrived, parse the event and forward to the user - event := new(L2OutputOracleProposerChanged) - if err := _L2OutputOracle.contract.UnpackLog(event, "ProposerChanged", log); err != nil { - return err - } - event.Raw = log - - select { - case sink <- event: - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - case err := <-sub.Err(): - return err - case <-quit: - return nil - } - } - }), nil -} - -// ParseProposerChanged is a log parse operation binding the contract event 0x3d7728dc2838bb794606bd89f5a37930830b32060f69ee929bbfc59b669024dd. -// -// Solidity: event ProposerChanged(address indexed previousProposer, address indexed newProposer) -func (_L2OutputOracle *L2OutputOracleFilterer) ParseProposerChanged(log types.Log) (*L2OutputOracleProposerChanged, error) { - event := new(L2OutputOracleProposerChanged) - if err := _L2OutputOracle.contract.UnpackLog(event, "ProposerChanged", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} diff --git a/op-chain-ops/genesis/config.go b/op-chain-ops/genesis/config.go index a09fc23050a9..876ca880c358 100644 --- a/op-chain-ops/genesis/config.go +++ b/op-chain-ops/genesis/config.go @@ -40,7 +40,7 @@ type DeployConfig struct { L2OutputOracleSubmissionInterval uint64 `json:"l2OutputOracleSubmissionInterval"` L2OutputOracleStartingTimestamp int `json:"l2OutputOracleStartingTimestamp"` L2OutputOracleProposer common.Address `json:"l2OutputOracleProposer"` - L2OutputOracleOwner common.Address `json:"l2OutputOracleOwner"` + L2OutputOracleChallenger common.Address `json:"l2OutputOracleChallenger"` SystemConfigOwner common.Address `json:"systemConfigOwner"` @@ -141,8 +141,8 @@ func (d *DeployConfig) Check() error { if d.L2OutputOracleProposer == (common.Address{}) { return fmt.Errorf("%w: L2OutputOracleProposer cannot be address(0)", ErrInvalidDeployConfig) } - if d.L2OutputOracleOwner == (common.Address{}) { - return fmt.Errorf("%w: L2OutputOracleOwner cannot be address(0)", ErrInvalidDeployConfig) + if d.L2OutputOracleChallenger == (common.Address{}) { + return fmt.Errorf("%w: L2OutputOracleChallenger cannot be address(0)", ErrInvalidDeployConfig) } if d.SystemConfigOwner == (common.Address{}) { return fmt.Errorf("%w: SystemConfigOwner cannot be address(0)", ErrInvalidDeployConfig) diff --git a/op-chain-ops/genesis/layer_one.go b/op-chain-ops/genesis/layer_one.go index 2d1e6ae4075e..26b8fd1a0cf7 100644 --- a/op-chain-ops/genesis/layer_one.go +++ b/op-chain-ops/genesis/layer_one.go @@ -104,8 +104,6 @@ func BuildL1DeveloperGenesis(config *DeployConfig) (*core.Genesis, error) { "initialize", big.NewInt(0), uint642Big(uint64(config.L1GenesisBlockTimestamp)), - config.L2OutputOracleProposer, - config.L2OutputOracleOwner, ) if err != nil { return nil, err @@ -280,7 +278,7 @@ func deployL1Contracts(config *DeployConfig, backend *backends.SimulatedBackend) big.NewInt(0), uint642Big(uint64(config.L1GenesisBlockTimestamp)), config.L2OutputOracleProposer, - config.L2OutputOracleOwner, + config.L2OutputOracleChallenger, }, }, { diff --git a/op-chain-ops/genesis/layer_one_test.go b/op-chain-ops/genesis/layer_one_test.go index d64a617c19db..bea7d8420b36 100644 --- a/op-chain-ops/genesis/layer_one_test.go +++ b/op-chain-ops/genesis/layer_one_test.go @@ -42,13 +42,13 @@ func TestBuildL1DeveloperGenesis(t *testing.T) { portal, err := bindings.NewOptimismPortal(predeploys.DevOptimismPortalAddr, sim) require.NoError(t, err) - proposer, err := oracle.Proposer(callOpts) + proposer, err := oracle.PROPOSER(callOpts) require.NoError(t, err) require.Equal(t, config.L2OutputOracleProposer, proposer) - owner, err := oracle.Owner(callOpts) + owner, err := oracle.CHALLENGER(callOpts) require.NoError(t, err) - require.Equal(t, config.L2OutputOracleOwner, owner) + require.Equal(t, config.L2OutputOracleChallenger, owner) // Same set of tests as exist in the deployment scripts interval, err := oracle.SUBMISSIONINTERVAL(callOpts) diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json b/op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json index 3c38a8436405..f203b26d4fcd 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json +++ b/op-chain-ops/genesis/testdata/test-deploy-config-devnet-l1.json @@ -14,7 +14,7 @@ "l2OutputOracleSubmissionInterval": 20, "l2OutputOracleStartingTimestamp": -1, "l2OutputOracleProposer": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "l2OutputOracleOwner": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", + "l2OutputOracleChallenger": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", "l1BlockTime": 15, "cliqueSignerAddress": "0xca062b0fd91172d89bcd4bb084ac4e21972cc467", diff --git a/op-chain-ops/genesis/testdata/test-deploy-config-full.json b/op-chain-ops/genesis/testdata/test-deploy-config-full.json index 0f8503626289..26152a70cb7b 100644 --- a/op-chain-ops/genesis/testdata/test-deploy-config-full.json +++ b/op-chain-ops/genesis/testdata/test-deploy-config-full.json @@ -12,7 +12,7 @@ "l2OutputOracleSubmissionInterval": 6, "l2OutputOracleStartingTimestamp": -1, "l2OutputOracleProposer": "0x7770000000000000000000000000000000000001", - "l2OutputOracleOwner": "0x7770000000000000000000000000000000000002", + "l2OutputOracleChallenger": "0x7770000000000000000000000000000000000002", "systemConfigOwner": "0x7770000000000000000000000000000000000003", "l1BlockTime": 15, "l1GenesisBlockNonce": "0x0", diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index 8253552a16fd..bc10ba5b916d 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -69,7 +69,7 @@ func MakeDeployParams(t require.TestingT, tp *TestParams) *DeployParams { L2OutputOracleSubmissionInterval: 6, L2OutputOracleStartingTimestamp: -1, L2OutputOracleProposer: addresses.Proposer, - L2OutputOracleOwner: common.Address{}, // tbd + L2OutputOracleChallenger: common.Address{}, // tbd SystemConfigOwner: addresses.SysCfgOwner, @@ -264,7 +264,7 @@ func ForkedDeployConfig(t require.TestingT, mnemonicCfg *MnemonicConfig, startBl L2OutputOracleSubmissionInterval: 10, L2OutputOracleStartingTimestamp: int(startBlock.Time()), L2OutputOracleProposer: addrs.Proposer, - L2OutputOracleOwner: addrs.Deployer, + L2OutputOracleChallenger: addrs.Deployer, L2GenesisBlockCoinbase: common.HexToAddress("0x42000000000000000000000000000000000000f0"), L2GenesisBlockGasLimit: hexutil.Uint64(15_000_000), // taken from devnet, need to check this diff --git a/op-e2e/setup.go b/op-e2e/setup.go index 76c36bbe4e3a..e30b114d35d0 100644 --- a/op-e2e/setup.go +++ b/op-e2e/setup.go @@ -62,7 +62,7 @@ func DefaultSystemConfig(t *testing.T) SystemConfig { L2OutputOracleSubmissionInterval: 4, L2OutputOracleStartingTimestamp: -1, L2OutputOracleProposer: addresses.Proposer, - L2OutputOracleOwner: common.Address{}, // tbd + L2OutputOracleChallenger: common.Address{}, // tbd SystemConfigOwner: addresses.SysCfgOwner, diff --git a/packages/contracts-bedrock/.gas-snapshot b/packages/contracts-bedrock/.gas-snapshot index 09cb3085d79f..9ca25d87b5a4 100644 --- a/packages/contracts-bedrock/.gas-snapshot +++ b/packages/contracts-bedrock/.gas-snapshot @@ -5,7 +5,7 @@ GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 1122 GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348176) GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112253) GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40502) -GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 72829) +GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 70685) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74956) GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35693) CrossDomainMessenger_Test:testFuzz_baseGas(uint32) (runs: 256, μ: 20196, ~: 20196) @@ -85,30 +85,28 @@ L2CrossDomainMessenger_Test:test_L2MessengerSendMessage() (gas: 122423) L2CrossDomainMessenger_Test:test_L2MessengerTwiceSendMessage() (gas: 134632) L2CrossDomainMessenger_Test:test_L2MessengerXDomainSenderReverts() (gas: 10568) L2CrossDomainMessenger_Test:test_L2MessengerxDomainMessageSenderResets() (gas: 52615) -L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 31194) -L2OutputOracleTest:testCannot_constructWithBadTimestamp() (gas: 70886) -L2OutputOracleTest:testCannot_deleteL2Outputs_afterLatest() (gas: 199838) -L2OutputOracleTest:testCannot_deleteL2Outputs_ifNotOwner() (gas: 18871) -L2OutputOracleTest:testCannot_deleteL2Outputs_nonExistent() (gas: 91129) -L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 28503) -L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 30461) -L2OutputOracleTest:testCannot_proposeL2OutputIfNotProposer() (gas: 27724) -L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 30789) -L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 30164) -L2OutputOracleTest:test_changeProposer() (gas: 47223) +L2OutputOracleTest:testCannot_ProposeWithUnmatchedBlockhash() (gas: 29072) +L2OutputOracleTest:testCannot_constructWithBadTimestamp() (gas: 70566) +L2OutputOracleTest:testCannot_deleteL2Outputs_afterLatest() (gas: 195025) +L2OutputOracleTest:testCannot_deleteL2Outputs_ifNotChallenger() (gas: 16716) +L2OutputOracleTest:testCannot_deleteL2Outputs_nonExistent() (gas: 86795) +L2OutputOracleTest:testCannot_proposeEmptyOutput() (gas: 26359) +L2OutputOracleTest:testCannot_proposeFutureTimetamp() (gas: 28316) +L2OutputOracleTest:testCannot_proposeL2Output_ifNotProposer() (gas: 25601) +L2OutputOracleTest:testCannot_proposeOnWrongFork() (gas: 28645) +L2OutputOracleTest:testCannot_proposeUnexpectedBlockNumber() (gas: 28020) L2OutputOracleTest:test_computeL2Timestamp() (gas: 37163) -L2OutputOracleTest:test_constructor() (gas: 39324) -L2OutputOracleTest:test_deleteOutputs_multipleOutputs() (gas: 262835) -L2OutputOracleTest:test_deleteOutputs_singleOutput() (gas: 152682) -L2OutputOracleTest:test_getL2Output() (gas: 89261) -L2OutputOracleTest:test_latestBlockNumber() (gas: 80647) -L2OutputOracleTest:test_nextBlockNumber() (gas: 15187) -L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 79453) -L2OutputOracleTest:test_proposingAnotherOutput() (gas: 81255) -L2OutputOracleTest:test_updateOwner() (gas: 36063) -L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 19546) -L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 24523) -L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 30297) +L2OutputOracleTest:test_constructor() (gas: 33592) +L2OutputOracleTest:test_deleteOutputs_multipleOutputs() (gas: 258025) +L2OutputOracleTest:test_deleteOutputs_singleOutput() (gas: 148182) +L2OutputOracleTest:test_getL2Output() (gas: 87205) +L2OutputOracleTest:test_latestBlockNumber() (gas: 78460) +L2OutputOracleTest:test_nextBlockNumber() (gas: 15143) +L2OutputOracleTest:test_proposeWithBlockhashAndHeight() (gas: 77309) +L2OutputOracleTest:test_proposingAnotherOutput() (gas: 79089) +L2OutputOracleUpgradeable_Test:test_cannotInitImpl() (gas: 15171) +L2OutputOracleUpgradeable_Test:test_cannotInitProxy() (gas: 20152) +L2OutputOracleUpgradeable_Test:test_initValuesOnProxy() (gas: 26095) L2OutputOracleUpgradeable_Test:test_upgrading() (gas: 180457) L2StandardBridge_Test:test_cannotWithdrawEthWithoutSendingIt() (gas: 21749) L2StandardBridge_Test:test_finalizeBridgeETH_incorrectValueReverts() (gas: 23733) @@ -150,23 +148,23 @@ OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10 OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15767) OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_success() (gas: 16010) OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_success() (gas: 180435) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 199367) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 201567) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 199455) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 201655) OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39634) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 197043) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 195266) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 175309) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235543) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 239675) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 231454) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 334069) -OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 195723) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 85495) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 197131) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 195340) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 175375) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235617) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 239873) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 231564) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 334179) +OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 195745) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 85517) OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50754) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 138753) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_success() (gas: 279048) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 191110) -OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 181320) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 138775) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_success() (gas: 279092) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 191154) +OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 181342) OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17298) OptimismPortal_Test:test_OptimismPortalReceiveEth_success() (gas: 127483) OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76706) @@ -178,7 +176,7 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75852) OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83370) OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 83964) -OptimismPortal_Test:test_isBlockFinalized_success() (gas: 109644) +OptimismPortal_Test:test_isBlockFinalized_success() (gas: 107478) OptimismPortal_Test:test_simple_isBlockFinalized_success() (gas: 24142) Proxy_Test:test_clashingFunctionSignatures() (gas: 101347) Proxy_Test:test_implementationKey() (gas: 20887) diff --git a/packages/contracts-bedrock/.storage-layout b/packages/contracts-bedrock/.storage-layout index 57d6596da359..1ea58db6b722 100644 --- a/packages/contracts-bedrock/.storage-layout +++ b/packages/contracts-bedrock/.storage-layout @@ -71,21 +71,13 @@ |---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| | _initializing | bool | 0 | 1 | 1 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | |---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| __gap | uint256[50] | 1 | 0 | 1600 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | +| startingBlockNumber | uint256 | 1 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | |---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| _owner | address | 51 | 0 | 20 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | +| startingTimestamp | uint256 | 2 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | |---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| __gap | uint256[49] | 52 | 0 | 1568 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | +| latestBlockNumber | uint256 | 3 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | |---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| startingBlockNumber | uint256 | 101 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | -|---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| startingTimestamp | uint256 | 102 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | -|---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| proposer | address | 103 | 0 | 20 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | -|---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| latestBlockNumber | uint256 | 104 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | -|---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------| -| l2Outputs | mapping(uint256 => struct Types.OutputProposal) | 105 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | +| l2Outputs | mapping(uint256 => struct Types.OutputProposal) | 4 | 0 | 32 | contracts/L1/L2OutputOracle.sol:L2OutputOracle | +---------------------+-------------------------------------------------+------+--------+-------+------------------------------------------------+ ======================= diff --git a/packages/contracts-bedrock/contracts/L1/L2OutputOracle.sol b/packages/contracts-bedrock/contracts/L1/L2OutputOracle.sol index fbb2f97a8da3..c0901ec47442 100644 --- a/packages/contracts-bedrock/contracts/L1/L2OutputOracle.sol +++ b/packages/contracts-bedrock/contracts/L1/L2OutputOracle.sol @@ -1,9 +1,7 @@ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; -import { - OwnableUpgradeable -} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; +import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; import { Semver } from "../universal/Semver.sol"; import { Types } from "../libraries/Types.sol"; @@ -15,7 +13,7 @@ import { Types } from "../libraries/Types.sol"; * This contract should be deployed behind an upgradable proxy */ // slither-disable-next-line locked-ether -contract L2OutputOracle is OwnableUpgradeable, Semver { +contract L2OutputOracle is Initializable, Semver { /** * @notice The interval in L2 blocks at which checkpoints must be submitted. */ @@ -26,6 +24,16 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { */ uint256 public immutable L2_BLOCK_TIME; + /** + * @notice The address of the challenger. Can be updated via upgrade. + */ + address public immutable CHALLENGER; + + /** + * @notice The address of the proposer. Can be updated via upgrade. + */ + address public immutable PROPOSER; + /** * @notice The number of the first L2 block recorded in this contract. */ @@ -36,11 +44,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { */ uint256 public startingTimestamp; - /** - * @notice The address of the proposer; - */ - address public proposer; - /** * @notice The number of the most recent L2 block recorded in this contract. */ @@ -73,22 +76,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { */ event OutputsDeleted(uint256 indexed l2BlockNumber); - /** - * @notice Emitted when the proposer address is changed. - * - * @param previousProposer The previous proposer address. - * @param newProposer The new proposer address. - */ - event ProposerChanged(address indexed previousProposer, address indexed newProposer); - - /** - * @notice Reverts if called by any account other than the proposer. - */ - modifier onlyProposer() { - require(proposer == msg.sender, "L2OutputOracle: function can only be called by proposer"); - _; - } - /** * @custom:semver 0.0.1 * @@ -97,7 +84,7 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { * @param _startingBlockNumber The number of the first L2 block. * @param _startingTimestamp The timestamp of the first L2 block. * @param _proposer The address of the proposer. - * @param _owner The address of the owner. + * @param _challenger The address of the challenger. */ constructor( uint256 _submissionInterval, @@ -105,12 +92,14 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { uint256 _startingBlockNumber, uint256 _startingTimestamp, address _proposer, - address _owner + address _challenger ) Semver(0, 0, 1) { SUBMISSION_INTERVAL = _submissionInterval; L2_BLOCK_TIME = _l2BlockTime; + PROPOSER = _proposer; + CHALLENGER = _challenger; - initialize(_startingBlockNumber, _startingTimestamp, _proposer, _owner); + initialize(_startingBlockNumber, _startingTimestamp); } /** @@ -118,15 +107,11 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { * * @param _startingBlockNumber Block number for the first recoded L2 block. * @param _startingTimestamp Timestamp for the first recoded L2 block. - * @param _proposer The address of the proposer. - * @param _owner The address of the owner. */ - function initialize( - uint256 _startingBlockNumber, - uint256 _startingTimestamp, - address _proposer, - address _owner - ) public initializer { + function initialize(uint256 _startingBlockNumber, uint256 _startingTimestamp) + public + initializer + { require( _startingTimestamp <= block.timestamp, "L2OutputOracle: starting L2 timestamp must be less than current time" @@ -135,21 +120,21 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { startingTimestamp = _startingTimestamp; startingBlockNumber = _startingBlockNumber; latestBlockNumber = _startingBlockNumber; - - __Ownable_init(); - changeProposer(_proposer); - _transferOwnership(_owner); } /** * @notice Deletes all output proposals after and including the proposal that corresponds to - * the given block number. Can only be called by the owner, but will be replaced with - * a mechanism that allows a challenger contract to delete proposals. + * the given block number. Only the challenger address can delete outputs. * * @param _l2BlockNumber L2 block number of the first output root to delete. */ // solhint-disable-next-line ordering - function deleteL2Outputs(uint256 _l2BlockNumber) external onlyOwner { + function deleteL2Outputs(uint256 _l2BlockNumber) external { + require( + msg.sender == CHALLENGER, + "L2OutputOracle: only the challenger address can delete outputs" + ); + // Simple check that accomplishes two things: // 1. Prevents deleting anything before (and including) the starting block. // 2. Prevents deleting anything other than a checkpoint block. @@ -188,7 +173,12 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { uint256 _l2BlockNumber, bytes32 _l1Blockhash, uint256 _l1BlockNumber - ) external payable onlyProposer { + ) external payable { + require( + msg.sender == PROPOSER, + "L2OutputOracle: only the proposer address can propose new outputs" + ); + require( _l2BlockNumber == nextBlockNumber(), "L2OutputOracle: block number must be equal to next expected block number" @@ -262,19 +252,6 @@ contract L2OutputOracle is OwnableUpgradeable, Semver { return output; } - /** - * @notice Allows the owner to change the proposer address. - * - * @param _proposer New proposer address. - */ - function changeProposer(address _proposer) public onlyOwner { - require(_proposer != address(0), "L2OutputOracle: new proposer cannot be the zero address"); - - emit ProposerChanged(proposer, _proposer); - - proposer = _proposer; - } - /** * @notice Computes the block number of the next L2 block that needs to be checkpointed. */ diff --git a/packages/contracts-bedrock/contracts/deployment/BaseSystemDictator.sol b/packages/contracts-bedrock/contracts/deployment/BaseSystemDictator.sol index 2ae8cdb0fb3f..bd87fd7b5b89 100644 --- a/packages/contracts-bedrock/contracts/deployment/BaseSystemDictator.sol +++ b/packages/contracts-bedrock/contracts/deployment/BaseSystemDictator.sol @@ -55,14 +55,6 @@ contract BaseSystemDictator is Ownable { SystemConfig systemConfigImpl; } - /** - * @notice Fixed L2OutputOracle config. - */ - struct L2OutputOracleConfig { - address l2OutputOracleProposer; - address l2OutputOracleOwner; - } - /** * @notice Dynamic L2OutputOracle config. */ @@ -89,7 +81,6 @@ contract BaseSystemDictator is Ownable { GlobalConfig globalConfig; ProxyAddressConfig proxyAddressConfig; ImplementationAddressConfig implementationAddressConfig; - L2OutputOracleConfig l2OutputOracleConfig; SystemConfigConfig systemConfigConfig; } diff --git a/packages/contracts-bedrock/contracts/deployment/MigrationSystemDictator.sol b/packages/contracts-bedrock/contracts/deployment/MigrationSystemDictator.sol index 6bf8e8cb2851..9bd26c1881a8 100644 --- a/packages/contracts-bedrock/contracts/deployment/MigrationSystemDictator.sol +++ b/packages/contracts-bedrock/contracts/deployment/MigrationSystemDictator.sol @@ -157,9 +157,7 @@ contract MigrationSystemDictator is BaseSystemDictator { L2OutputOracle.initialize, ( l2OutputOracleDynamicConfig.l2OutputOracleStartingBlockNumber, - l2OutputOracleDynamicConfig.l2OutputOracleStartingTimestamp, - config.l2OutputOracleConfig.l2OutputOracleProposer, - config.l2OutputOracleConfig.l2OutputOracleOwner + l2OutputOracleDynamicConfig.l2OutputOracleStartingTimestamp ) ) ); diff --git a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol index 83711df9411a..a7f2e61768db 100644 --- a/packages/contracts-bedrock/contracts/test/CommonTest.t.sol +++ b/packages/contracts-bedrock/contracts/test/CommonTest.t.sol @@ -131,7 +131,7 @@ contract L2OutputOracle_Initializer is CommonTest { address(oracleImpl), abi.encodeCall( L2OutputOracle.initialize, - (startingBlockNumber, startingTimestamp, proposer, owner) + (startingBlockNumber, startingTimestamp) ) ); oracle = L2OutputOracle(address(proxy)); diff --git a/packages/contracts-bedrock/contracts/test/L2OutputOracle.t.sol b/packages/contracts-bedrock/contracts/test/L2OutputOracle.t.sol index aa7b734b0052..c33b870ca2e4 100644 --- a/packages/contracts-bedrock/contracts/test/L2OutputOracle.t.sol +++ b/packages/contracts-bedrock/contracts/test/L2OutputOracle.t.sol @@ -15,13 +15,12 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { } function test_constructor() external { - assertEq(oracle.owner(), owner); + assertEq(oracle.PROPOSER(), proposer); + assertEq(oracle.CHALLENGER(), owner); assertEq(oracle.SUBMISSION_INTERVAL(), submissionInterval); assertEq(oracle.latestBlockNumber(), startingBlockNumber); assertEq(oracle.startingBlockNumber(), startingBlockNumber); assertEq(oracle.startingTimestamp(), startingTimestamp); - assertEq(oracle.proposer(), proposer); - assertEq(oracle.owner(), owner); } function testCannot_constructWithBadTimestamp() external { @@ -111,47 +110,6 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ); } - /******************* - * Ownership tests * - *******************/ - - event ProposerChanged(address indexed previousProposer, address indexed newProposer); - - function test_changeProposer() public { - address newProposer = address(20); - vm.expectRevert("Ownable: caller is not the owner"); - oracle.changeProposer(newProposer); - - vm.startPrank(owner); - vm.expectRevert("L2OutputOracle: new proposer cannot be the zero address"); - oracle.changeProposer(address(0)); - - // Double check proposer has not changed. - assertEq(proposer, oracle.proposer()); - - vm.expectEmit(true, true, true, true); - emit ProposerChanged(proposer, newProposer); - oracle.changeProposer(newProposer); - vm.stopPrank(); - } - - event OwnershipTransferred(address indexed, address indexed); - - function test_updateOwner() public { - address newOwner = address(21); - vm.expectRevert("Ownable: caller is not the owner"); - oracle.transferOwnership(newOwner); - // Double check owner has not changed. - assertEq(owner, oracle.owner()); - - vm.startPrank(owner); - vm.expectEmit(true, true, true, true); - emit OwnershipTransferred(owner, newOwner); - oracle.transferOwnership(newOwner); - assertEq(newOwner, oracle.owner()); - vm.stopPrank(); - } - /***************************** * Propose Tests - Happy Path * *****************************/ @@ -190,12 +148,12 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { ***************************/ // Test: proposeL2Output fails if called by a party that is not the proposer. - function testCannot_proposeL2OutputIfNotProposer() external { + function testCannot_proposeL2Output_ifNotProposer() external { uint256 nextBlockNumber = oracle.nextBlockNumber(); warpToProposeTime(nextBlockNumber); vm.prank(address(128)); - vm.expectRevert("L2OutputOracle: function can only be called by proposer"); + vm.expectRevert("L2OutputOracle: only the proposer address can propose new outputs"); oracle.proposeL2Output(nonZeroHash, nextBlockNumber, 0, 0); } @@ -322,10 +280,10 @@ contract L2OutputOracleTest is L2OutputOracle_Initializer { * Delete Tests - Sad Path * ***************************/ - function testCannot_deleteL2Outputs_ifNotOwner() external { + function testCannot_deleteL2Outputs_ifNotChallenger() external { uint256 latestBlockNumber = oracle.latestBlockNumber(); - vm.expectRevert("Ownable: caller is not the owner"); + vm.expectRevert("L2OutputOracle: only the challenger address can delete outputs"); oracle.deleteL2Outputs(latestBlockNumber); } @@ -371,17 +329,15 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer { assertEq(startingBlockNumber, oracleImpl.startingBlockNumber()); assertEq(startingTimestamp, oracleImpl.startingTimestamp()); - assertEq(proposer, oracleImpl.proposer()); - assertEq(owner, oracleImpl.owner()); + assertEq(proposer, oracleImpl.PROPOSER()); + assertEq(owner, oracleImpl.CHALLENGER()); } function test_cannotInitProxy() external { vm.expectRevert("Initializable: contract is already initialized"); L2OutputOracle(payable(proxy)).initialize( startingBlockNumber, - startingTimestamp, - proposer, - owner + startingTimestamp ); } @@ -389,9 +345,7 @@ contract L2OutputOracleUpgradeable_Test is L2OutputOracle_Initializer { vm.expectRevert("Initializable: contract is already initialized"); L2OutputOracle(oracleImpl).initialize( startingBlockNumber, - startingTimestamp, - proposer, - owner + startingTimestamp ); } diff --git a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol index f979a63db559..4df71fe33cf9 100644 --- a/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol +++ b/packages/contracts-bedrock/contracts/test/OptimismPortal.t.sol @@ -233,7 +233,7 @@ contract OptimismPortal_Test is Portal_Initializer { uint256 checkpoint = oracle.nextBlockNumber(); vm.roll(checkpoint); vm.warp(oracle.computeL2Timestamp(checkpoint) + 1); - vm.prank(oracle.proposer()); + vm.prank(oracle.PROPOSER()); oracle.proposeL2Output(keccak256(abi.encode(2)), checkpoint, 0, 0); // warp to the final second of the finalization period @@ -312,7 +312,7 @@ contract OptimismPortal_FinalizeWithdrawal_Test is Portal_Initializer { function setUp() public override { // Configure the oracle to return the output root we've prepared. vm.warp(oracle.computeL2Timestamp(_proposedBlockNumber) + 1); - vm.prank(oracle.proposer()); + vm.prank(oracle.PROPOSER()); oracle.proposeL2Output(_outputRoot, _proposedBlockNumber, 0, 0); // Warp beyond the finalization period for the block we've proposed. diff --git a/packages/contracts-bedrock/deploy-config/devnetL1.json b/packages/contracts-bedrock/deploy-config/devnetL1.json index b49b5e193b2b..4df8beea552f 100644 --- a/packages/contracts-bedrock/deploy-config/devnetL1.json +++ b/packages/contracts-bedrock/deploy-config/devnetL1.json @@ -15,7 +15,7 @@ "l2OutputOracleSubmissionInterval": 20, "l2OutputOracleStartingTimestamp": -1, "l2OutputOracleProposer": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "l2OutputOracleOwner": "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", + "l2OutputOracleChallenger": "0x15d34AAf54267DB7D7c367839AAf71A00a2C6A65", "l2GenesisBlockCoinbase": "0x42000000000000000000000000000000000000f0", "l2GenesisBlockGasLimit": "0xE4E1C0", diff --git a/packages/contracts-bedrock/deploy-config/goerli.json b/packages/contracts-bedrock/deploy-config/goerli.json index 0d8a8daf2741..52a72591b63e 100644 --- a/packages/contracts-bedrock/deploy-config/goerli.json +++ b/packages/contracts-bedrock/deploy-config/goerli.json @@ -16,7 +16,7 @@ "l2OutputOracleSubmissionInterval": 6, "l2OutputOracleStartingTimestamp": -1, "l2OutputOracleProposer": "0x6c23a0dcdfc44b7a57bed148de598895e398d984", - "l2OutputOracleOwner": "0x6925b8704ff96dee942623d6fb5e946ef5884b63", + "l2OutputOracleChallenger": "0x6925b8704ff96dee942623d6fb5e946ef5884b63", "baseFeeVaultRecipient": "0xf116a24056b647e3211d095c667e951536cdebaa", "l1FeeVaultRecipient": "0xc731837b696ca3d9720d23336925368ceaa58f83", diff --git a/packages/contracts-bedrock/deploy-config/hardhat.json b/packages/contracts-bedrock/deploy-config/hardhat.json index 06096d2af441..84f31db55285 100644 --- a/packages/contracts-bedrock/deploy-config/hardhat.json +++ b/packages/contracts-bedrock/deploy-config/hardhat.json @@ -18,7 +18,7 @@ "l2OutputOracleSubmissionInterval": 6, "l2OutputOracleStartingTimestamp": -1, "l2OutputOracleProposer": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8", - "l2OutputOracleOwner": "0x6925B8704Ff96DEe942623d6FB5e946EF5884b63", + "l2OutputOracleChallenger": "0x6925B8704Ff96DEe942623d6FB5e946EF5884b63", "baseFeeVaultRecipient": "0xBcd4042DE499D14e55001CcbB24a551F3b954096", "l1FeeVaultRecipient": "0x71bE63f3384f5fb98995898A86B02Fb2426c5788", diff --git a/packages/contracts-bedrock/deploy/011-L2OutputOracleImpl.ts b/packages/contracts-bedrock/deploy/011-L2OutputOracleImpl.ts index 8bd3d7118e8f..7a0879e16533 100644 --- a/packages/contracts-bedrock/deploy/011-L2OutputOracleImpl.ts +++ b/packages/contracts-bedrock/deploy/011-L2OutputOracleImpl.ts @@ -17,7 +17,7 @@ const deployFn: DeployFunction = async (hre) => { 0, 0, hre.deployConfig.l2OutputOracleProposer, - hre.deployConfig.l2OutputOracleOwner, + hre.deployConfig.l2OutputOracleChallenger, ], postDeployAction: async (contract) => { await assertContractVariable( @@ -32,13 +32,13 @@ const deployFn: DeployFunction = async (hre) => { ) await assertContractVariable( contract, - 'proposer', + 'PROPOSER', hre.deployConfig.l2OutputOracleProposer ) await assertContractVariable( contract, - 'owner', - hre.deployConfig.l2OutputOracleOwner + 'CHALLENGER', + hre.deployConfig.l2OutputOracleChallenger ) }, }) diff --git a/packages/contracts-bedrock/deploy/018-MigrationSystemDictatorSteps.ts b/packages/contracts-bedrock/deploy/018-MigrationSystemDictatorSteps.ts index ae01f25ef7e1..68d86f96414a 100644 --- a/packages/contracts-bedrock/deploy/018-MigrationSystemDictatorSteps.ts +++ b/packages/contracts-bedrock/deploy/018-MigrationSystemDictatorSteps.ts @@ -268,16 +268,6 @@ const deployFn: DeployFunction = async (hre) => { 'latestBlockNumber', hre.deployConfig.l2OutputOracleStartingBlockNumber ) - await assertContractVariable( - L2OutputOracle, - 'proposer', - hre.deployConfig.l2OutputOracleProposer - ) - await assertContractVariable( - L2OutputOracle, - 'owner', - hre.deployConfig.l2OutputOracleOwner - ) // Check OptimismPortal was initialized properly. await assertContractVariable( diff --git a/packages/contracts-bedrock/hardhat.config.ts b/packages/contracts-bedrock/hardhat.config.ts index 3f702fd9534c..90752338ef12 100644 --- a/packages/contracts-bedrock/hardhat.config.ts +++ b/packages/contracts-bedrock/hardhat.config.ts @@ -192,7 +192,7 @@ const config: HardhatUserConfig = { type: 'address', }, // address - The address of the owner. - l2OutputOracleOwner: { + l2OutputOracleChallenger: { type: 'address', }, diff --git a/packages/contracts-bedrock/package.json b/packages/contracts-bedrock/package.json index 46ea61795c22..4d8e40be1319 100644 --- a/packages/contracts-bedrock/package.json +++ b/packages/contracts-bedrock/package.json @@ -25,7 +25,7 @@ "test": "yarn build:differential && forge test", "coverage": "yarn build:differential && forge coverage", "coverage:lcov": "yarn build:differential && forge coverage --report lcov", - "gas-snapshot": "forge snapshot --no-match-test 'differential|fuzz'", + "gas-snapshot": "yarn build:differential && forge snapshot --no-match-test 'differential|fuzz'", "storage-snapshot": "./scripts/storage-snapshot.sh", "validate-spacers": "hardhat validate-spacers", "slither": "./scripts/slither.sh", diff --git a/packages/contracts-bedrock/src/deploy-utils.ts b/packages/contracts-bedrock/src/deploy-utils.ts index 95f5625b76b1..345db97801ce 100644 --- a/packages/contracts-bedrock/src/deploy-utils.ts +++ b/packages/contracts-bedrock/src/deploy-utils.ts @@ -31,10 +31,6 @@ export interface DictatorConfig { portalSenderImpl: string systemConfigImpl: string } - l2OutputOracleConfig: { - l2OutputOracleProposer: string - l2OutputOracleOwner: string - } systemConfigConfig: { owner: string overhead: number @@ -350,10 +346,6 @@ export const makeDictatorConfig = async ( portalSenderImpl: await getDeploymentAddress(hre, 'PortalSender'), systemConfigImpl: await getDeploymentAddress(hre, 'SystemConfig'), }, - l2OutputOracleConfig: { - l2OutputOracleProposer: hre.deployConfig.l2OutputOracleProposer, - l2OutputOracleOwner: hre.deployConfig.l2OutputOracleOwner, - }, systemConfigConfig: { owner: hre.deployConfig.systemConfigOwner, overhead: hre.deployConfig.gasPriceOracleOverhead, diff --git a/packages/contracts-bedrock/tasks/rekey.ts b/packages/contracts-bedrock/tasks/rekey.ts index 298e1bbc2ca4..56a88b9244e3 100644 --- a/packages/contracts-bedrock/tasks/rekey.ts +++ b/packages/contracts-bedrock/tasks/rekey.ts @@ -12,7 +12,7 @@ task('rekey', 'Generates a new set of keys for a test network').setAction( 'optimismBaseFeeRecipient', 'optimismL1FeeRecipient', 'p2pSequencerAddress', - 'l2OutputOracleOwner', + 'l2OutputOracleChallenger', 'batchSenderAddress', ]