From 03a16d9840ead4dfaad7c2ab44d73c6d6734f14e Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 4 Sep 2025 15:06:08 -0400 Subject: [PATCH 01/56] min-base-fee solidity diffs --- op-e2e/bindings/systemconfig.go | 586 ++++++++++++++++-- .../interfaces/L1/ISystemConfig.sol | 5 +- .../scripts/deploy/DeployConfig.s.sol | 6 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 23 +- .../test/L1/SystemConfig.t.sol | 20 + 5 files changed, 587 insertions(+), 53 deletions(-) diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 05d74beadbeb5..c0503c0bc0058 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. @@ -43,20 +44,41 @@ type SystemConfigAddresses struct { L1CrossDomainMessenger common.Address L1ERC721Bridge common.Address L1StandardBridge common.Address - DisputeGameFactory common.Address OptimismPortal common.Address OptimismMintableERC20Factory common.Address } // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISPUTE_GAME_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"START_BLOCK_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobbasefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Denominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Elasticity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddresses\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_denominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_elasticity\",\"type\":\"uint32\"}],\"name\":\"setEIP1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"}],\"name\":\"setGasConfigEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\"}],\"name\":\"setOperatorFeeScalars\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startBlock_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isFeatureEnabled\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeature\",\"inputs\":[{\"name\":\"_feature\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_enabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_minBaseFee\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeatureSet\",\"inputs\":[{\"name\":\"feature\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"enabled\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SystemConfig_InvalidFeatureState\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620019941760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612ecc62000185600039600081816104b1015281816109310152610c960152612ecc6000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c8063935f029e116101d3578063d6ae3cd511610104578063f2c4bc9e116100a2578063f68016b71161007c578063f68016b714610903578063f8c68de014610917578063fd32aa0f1461091f578063ffa1ad741461092757600080fd5b8063f2c4bc9e146108d4578063f2fde38b146108e7578063f45e65d8146108fa57600080fd5b8063e0e2016d116100de578063e0e2016d1461089b578063e81b2c6d146108a3578063ec707517146108ac578063f2b4e617146108cc57600080fd5b8063d6ae3cd514610882578063dac6e63a1461088b578063dad544e01461089357600080fd5b8063bfb14fb711610171578063c9b26f611161014b578063c9b26f6114610713578063c9ff2d1614610726578063cc731b021461073e578063d220a9e01461087257600080fd5b8063bfb14fb7146106dc578063c0fd4b41146106f8578063c4e8ddfa1461070b57600080fd5b8063a62611a2116101ad578063a62611a21461068d578063a7119869146106b9578063b40a817c146106c1578063bc49ce5f146106d457600080fd5b8063935f029e1461060e5780639b7d7f0a14610621578063a39fac121461062957600080fd5b806338d38c97116102ad5780634f16540b1161024b5780635d73369c116102255780635d73369c146105cd578063715018a6146105d55780637616f0e8146105dd5780638da5cb5b146105f057600080fd5b80634f16540b1461055f57806354fd4d50146105865780635c975abb146105c557600080fd5b806347af267b1161028757806347af267b146104eb57806348cd4cb11461051e5780634add321d146105265780634d5d9a2a1461052e57600080fd5b806338d38c97146104aa5780633e47158c146104db578063452a9320146104e357600080fd5b8063155b6c6f1161031a57806319f5cea8116102f457806319f5cea8146104675780631fd19ee11461046f57806321d7fde51461047757806335e80ab31461048a57600080fd5b8063155b6c6f1461041d57806316d3bc7f1461043057806318d139181461045457600080fd5b8063078f29cf11610356578063078f29cf146103c05780630a49cb03146103ed5780630ae14b1b146103f55780630c18c1621461041457600080fd5b8063010458291461037d578063028f4e471461039257806306c92657146103a5575b600080fd5b61039061038b366004612a19565b61092f565b005b6103906103a0366004612b89565b610c94565b6103ad610e75565b6040519081526020015b60405180910390f35b6103c8610ea3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103b7565b6103c8610edc565b631dcd65005b60405167ffffffffffffffff90911681526020016103b7565b6103ad60655481565b61039061042b366004612bb9565b610f0c565b606a546103fb906c01000000000000000000000000900467ffffffffffffffff1681565b610390610462366004612bec565b610f22565b6103ad610f36565b6103c8610f61565b610390610485366004612c10565b610f8b565b606c546103c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103b7565b6103c8610f9d565b6103c86111a8565b61050e6104f9366004612c3a565b606d6020526000908152604090205460ff1681565b60405190151581526020016103b7565b6103ad61123c565b6103fb61126c565b606a5461054a9068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103b7565b6103ad7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e30000000000000000000000000000000000000000000000000000000602082015290516103b79190612cbe565b61050e611292565b6103ad611440565b61039061146b565b6103906105eb366004612cd1565b61147f565b60335473ffffffffffffffffffffffffffffffffffffffff166103c8565b61039061061c366004612cec565b611490565b6103c86114a2565b6106316114d2565b6040516103b79190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b606c546103fb9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103c86115b9565b6103906106cf366004612cd1565b6115e9565b6103ad6115fa565b60685461054a9068010000000000000000900463ffffffff1681565b610390610706366004612c10565b611625565b6103c8611637565b610390610721366004612c3a565b611667565b606a5461054a90640100000000900463ffffffff1681565b6108026040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103b79190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a5461054a9063ffffffff1681565b6103ad606b5481565b6103c8611678565b6103c86116a8565b6103ad6116fc565b6103ad60675481565b60685461054a906c01000000000000000000000000900463ffffffff1681565b6103c8611727565b6103906108e2366004612d1c565b6117a3565b6103906108f5366004612bec565b61188a565b6103ad60665481565b6068546103fb9067ffffffffffffffff1681565b6103ad61193e565b6103ad611969565b6103ad600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561096f575060005460ff8083169116105b610a00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610a39611998565b610a41611a19565b610a4a8c61188a565b610a5389611ab8565b610a5d8b8b611b19565b610a6688611c58565b610a8f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610ac2610abd60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d70565b869055565b610af6610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d70565b85519055565b610b2d610b2460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d70565b60208601519055565b610b64610b5b60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d70565b60408601519055565b610b9b610b9260017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d70565b60608601519055565b610bd2610bc960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d70565b60808601519055565b610bda611dae565b610be386611e16565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610cd4575060005460ff8083169116105b610d60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109f7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d99611998565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610e0b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612d70565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610ea060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d70565b81565b6000610ed7610ed360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d70565b5490565b905090565b6000610ed7610ed360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d70565b610f1461228a565b610f1e828261230b565b5050565b610f2a61228a565b610f33816123e1565b50565b610ea060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d70565b6000610ed77f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f9361228a565b610f1e8282611b19565b600080610fc87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610feb57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261102e9190612d87565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611089906060015b604051602081830303815290604052805190602001205490565b146110c0576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906110e29060600161106f565b905073ffffffffffffffffffffffffffffffffffffffff811615611176578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116f9190612dc4565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed79190612dc4565b6000610ed7610ed360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b606954600090610ed79063ffffffff6a0100000000000000000000820481169116612de1565b60008061129d610edc565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130b9190612dc4565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa15801561137d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a19190612e0d565b8061143a5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa158015611416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a9190612e0d565b91505090565b610ea060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d70565b61147361228a565b61147d6000612465565b565b61148761228a565b610f33816124dc565b61149861228a565b610f1e828261254f565b6000610ed7610ed360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d70565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806115106115b9565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533611637565b73ffffffffffffffffffffffffffffffffffffffff168152602001611556610ea3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611579610edc565b73ffffffffffffffffffffffffffffffffffffffff16815260200161159c6114a2565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610ed7610ed360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d70565b6115f161228a565b610f3381611c58565b610ea060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d70565b61162d61228a565b610f1e8282612625565b6000610ed7610ed360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d70565b61166f61228a565b610f3381611ab8565b6000610ed7610ed360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d70565b60006116b2610f9d565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611218573d6000803e3d6000fd5b610ea060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b600080611732610edc565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a9190612dc4565b6117ab611998565b8080156117c657506000828152606d602052604090205460ff165b806117e95750801580156117e957506000828152606d602052604090205460ff16155b15611820576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152606d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091559051909184917fb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c9190a35050565b61189261228a565b73ffffffffffffffffffffffffffffffffffffffff8116611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109f7565b610f3381612465565b610ea060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d70565b610ea060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d70565b9055565b336119a1610f9d565b73ffffffffffffffffffffffffffffffffffffffff16141580156119e25750336119c96116a8565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561147d576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16611ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109f7565b61147d6127f7565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b0d9190612cbe565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611c4b9190612cbe565b60405180910390a3505050565b611c6061126c565b67ffffffffffffffff168167ffffffffffffffff161015611cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109f7565b631dcd650067ffffffffffffffff82161115611d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109f7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611adc565b611ddc610ed360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b60000361147d5761147d611e1160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109f7565b6001816040015160ff1611611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109f7565b6068546080820151825167ffffffffffffffff90921691611f7e9190612e2a565b63ffffffff161115611fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109f7565b6000816020015160ff1611612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109f7565b8051602082015163ffffffff82169160ff909116906120a3908290612e49565b6120ad9190612e93565b63ffffffff1614612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109f7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff16331461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109f7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611c1a565b61240a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003611adc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040805160208082019390935281518082039093018352810190526006611adc565b7fff000000000000000000000000000000000000000000000000000000000000008116156125ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109f7565b606582905560668190556040805160208101849052908101829052600090606001611be7565b60018263ffffffff1610156126bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109f7565b60018163ffffffff161015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109f7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916127c091602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611c1a565b600054610100900460ff1661288e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109f7565b61147d33612465565b73ffffffffffffffffffffffffffffffffffffffff81168114610f3357600080fd5b80356128c481612897565b919050565b803563ffffffff811681146128c457600080fd5b803567ffffffffffffffff811681146128c457600080fd5b60405160c0810167ffffffffffffffff8111828210171561293f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146128c457600080fd5b600060a0828403121561296857600080fd5b60405160a0810181811067ffffffffffffffff821117156129b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508082356129c381612897565b815260208301356129d381612897565b602082015260408301356129e681612897565b604082015260608301356129f981612897565b60608201526080830135612a0c81612897565b6080919091015292915050565b60008060008060008060008060008060008b8d03610280811215612a3c57600080fd5b8c35612a4781612897565b9b50612a5560208e016128c9565b9a50612a6360408e016128c9565b995060608d01359850612a7860808e016128dd565b975060a08d0135612a8881612897565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612aba57600080fd5b50612ac36128f5565b612acf60c08e016128c9565b8152612add60e08e01612945565b6020820152612aef6101008e01612945565b6040820152612b016101208e016128c9565b6060820152612b136101408e016128c9565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612b3c57600080fd5b60a08201529450612b506101808d016128b9565b9350612b608d6101a08e01612956565b92506102408c01359150612b776102608d016128b9565b90509295989b509295989b9093969950565b60008060408385031215612b9c57600080fd5b823591506020830135612bae81612897565b809150509250929050565b60008060408385031215612bcc57600080fd5b612bd5836128c9565b9150612be3602084016128dd565b90509250929050565b600060208284031215612bfe57600080fd5b8135612c0981612897565b9392505050565b60008060408385031215612c2357600080fd5b612c2c836128c9565b9150612be3602084016128c9565b600060208284031215612c4c57600080fd5b5035919050565b6000815180845260005b81811015612c7957602081850181015186830182015201612c5d565b81811115612c8b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612c096020830184612c53565b600060208284031215612ce357600080fd5b612c09826128dd565b60008060408385031215612cff57600080fd5b50508035926020909101359150565b8015158114610f3357600080fd5b60008060408385031215612d2f57600080fd5b823591506020830135612bae81612d0e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d8257612d82612d41565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dbf57612dbf612d41565b500290565b600060208284031215612dd657600080fd5b8151612c0981612897565b600067ffffffffffffffff808316818516808303821115612e0457612e04612d41565b01949350505050565b600060208284031215612e1f57600080fd5b8151612c0981612d0e565b600063ffffffff808316818516808303821115612e0457612e04612d41565b600063ffffffff80841680612e87577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612eb657612eb6612d41565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. // Deprecated: Use SystemConfigMetaData.ABI instead. var SystemConfigABI = SystemConfigMetaData.ABI +// SystemConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SystemConfigMetaData.Bin instead. +var SystemConfigBin = SystemConfigMetaData.Bin + +// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { + parsed, err := SystemConfigMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil +} + // SystemConfig is an auto generated Go binding around an Ethereum contract. type SystemConfig struct { SystemConfigCaller // Read-only binding to the contract @@ -154,11 +176,11 @@ func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilte // bindSystemConfig binds a generic wrapper to an already deployed contract. func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) + parsed, err := SystemConfigMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -230,37 +252,6 @@ func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, erro return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) } -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) DISPUTEGAMEFACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "DISPUTE_GAME_FACTORY_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - // L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. // // Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) @@ -759,7 +750,7 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { var out []interface{} err := _SystemConfig.contract.Call(opts, &out, "getAddresses") @@ -776,18 +767,111 @@ func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (Syst // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "guardian") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigSession) Guardian() (common.Address, error) { + return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) Guardian() (common.Address, error) { + return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) InitVersion(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "initVersion") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigSession) InitVersion() (uint8, error) { + return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) InitVersion() (uint8, error) { + return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) +} + +// IsFeatureEnabled is a free data retrieval call binding the contract method 0x47af267b. +// +// Solidity: function isFeatureEnabled(bytes32 ) view returns(bool) +func (_SystemConfig *SystemConfigCaller) IsFeatureEnabled(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "isFeatureEnabled", arg0) + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// IsFeatureEnabled is a free data retrieval call binding the contract method 0x47af267b. +// +// Solidity: function isFeatureEnabled(bytes32 ) view returns(bool) +func (_SystemConfig *SystemConfigSession) IsFeatureEnabled(arg0 [32]byte) (bool, error) { + return _SystemConfig.Contract.IsFeatureEnabled(&_SystemConfig.CallOpts, arg0) +} + +// IsFeatureEnabled is a free data retrieval call binding the contract method 0x47af267b. +// +// Solidity: function isFeatureEnabled(bytes32 ) view returns(bool) +func (_SystemConfig *SystemConfigCallerSession) IsFeatureEnabled(arg0 [32]byte) (bool, error) { + return _SystemConfig.Contract.IsFeatureEnabled(&_SystemConfig.CallOpts, arg0) +} + // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address addr_) @@ -881,6 +965,37 @@ func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Addre return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) } +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l2ChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigSession) L2ChainId() (*big.Int, error) { + return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) L2ChainId() (*big.Int, error) { + return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) +} + // MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. // // Solidity: function maximumGasLimit() pure returns(uint64) @@ -912,6 +1027,37 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. +// +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) MinBaseFee(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minBaseFee") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. +// +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigSession) MinBaseFee() (uint64, error) { + return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) +} + +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. +// +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MinBaseFee() (uint64, error) { + return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) +} + // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // // Solidity: function minimumGasLimit() view returns(uint64) @@ -1129,6 +1275,99 @@ func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) } +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigSession) Paused() (bool, error) { + return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { + return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigCaller) ProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "proxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigSession) ProxyAdmin() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) ProxyAdmin() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigCaller) ProxyAdminOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "proxyAdminOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigSession) ProxyAdminOwner() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) ProxyAdminOwner() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) +} + // ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. // // Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) @@ -1222,6 +1461,37 @@ func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) } +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "superchainConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigSession) SuperchainConfig() (common.Address, error) { + return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) SuperchainConfig() (common.Address, error) { + return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) +} + // UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // // Solidity: function unsafeBlockSigner() view returns(address addr_) @@ -1284,25 +1554,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1368,6 +1638,27 @@ func (_SystemConfig *SystemConfigTransactorSession) SetEIP1559Params(_denominato return _SystemConfig.Contract.SetEIP1559Params(&_SystemConfig.TransactOpts, _denominator, _elasticity) } +// SetFeature is a paid mutator transaction binding the contract method 0xf2c4bc9e. +// +// Solidity: function setFeature(bytes32 _feature, bool _enabled) returns() +func (_SystemConfig *SystemConfigTransactor) SetFeature(opts *bind.TransactOpts, _feature [32]byte, _enabled bool) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setFeature", _feature, _enabled) +} + +// SetFeature is a paid mutator transaction binding the contract method 0xf2c4bc9e. +// +// Solidity: function setFeature(bytes32 _feature, bool _enabled) returns() +func (_SystemConfig *SystemConfigSession) SetFeature(_feature [32]byte, _enabled bool) (*types.Transaction, error) { + return _SystemConfig.Contract.SetFeature(&_SystemConfig.TransactOpts, _feature, _enabled) +} + +// SetFeature is a paid mutator transaction binding the contract method 0xf2c4bc9e. +// +// Solidity: function setFeature(bytes32 _feature, bool _enabled) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetFeature(_feature [32]byte, _enabled bool) (*types.Transaction, error) { + return _SystemConfig.Contract.SetFeature(&_SystemConfig.TransactOpts, _feature, _enabled) +} + // SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. // // Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() @@ -1431,6 +1722,27 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. +// +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _minBaseFee) +} + +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. +// +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) +} + +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. +// +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) +} + // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. // // Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() @@ -1494,6 +1806,27 @@ func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner c return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) } +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactor) Upgrade(opts *bind.TransactOpts, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "upgrade", _l2ChainId, _superchainConfig) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactorSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) +} + // SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. type SystemConfigConfigUpdateIterator struct { Event *SystemConfigConfigUpdate // Event containing the contract specifics and raw log @@ -1648,6 +1981,159 @@ func (_SystemConfig *SystemConfigFilterer) ParseConfigUpdate(log types.Log) (*Sy return event, nil } +// SystemConfigFeatureSetIterator is returned from FilterFeatureSet and is used to iterate over the raw logs and unpacked data for FeatureSet events raised by the SystemConfig contract. +type SystemConfigFeatureSetIterator struct { + Event *SystemConfigFeatureSet // 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 *SystemConfigFeatureSetIterator) 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(SystemConfigFeatureSet) + 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(SystemConfigFeatureSet) + 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 *SystemConfigFeatureSetIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigFeatureSetIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigFeatureSet represents a FeatureSet event raised by the SystemConfig contract. +type SystemConfigFeatureSet struct { + Feature [32]byte + Enabled bool + Raw types.Log // Blockchain specific contextual infos +} + +// FilterFeatureSet is a free log retrieval operation binding the contract event 0xb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c. +// +// Solidity: event FeatureSet(bytes32 indexed feature, bool indexed enabled) +func (_SystemConfig *SystemConfigFilterer) FilterFeatureSet(opts *bind.FilterOpts, feature [][32]byte, enabled []bool) (*SystemConfigFeatureSetIterator, error) { + + var featureRule []interface{} + for _, featureItem := range feature { + featureRule = append(featureRule, featureItem) + } + var enabledRule []interface{} + for _, enabledItem := range enabled { + enabledRule = append(enabledRule, enabledItem) + } + + logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "FeatureSet", featureRule, enabledRule) + if err != nil { + return nil, err + } + return &SystemConfigFeatureSetIterator{contract: _SystemConfig.contract, event: "FeatureSet", logs: logs, sub: sub}, nil +} + +// WatchFeatureSet is a free log subscription operation binding the contract event 0xb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c. +// +// Solidity: event FeatureSet(bytes32 indexed feature, bool indexed enabled) +func (_SystemConfig *SystemConfigFilterer) WatchFeatureSet(opts *bind.WatchOpts, sink chan<- *SystemConfigFeatureSet, feature [][32]byte, enabled []bool) (event.Subscription, error) { + + var featureRule []interface{} + for _, featureItem := range feature { + featureRule = append(featureRule, featureItem) + } + var enabledRule []interface{} + for _, enabledItem := range enabled { + enabledRule = append(enabledRule, enabledItem) + } + + logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "FeatureSet", featureRule, enabledRule) + 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(SystemConfigFeatureSet) + if err := _SystemConfig.contract.UnpackLog(event, "FeatureSet", 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 +} + +// ParseFeatureSet is a log parse operation binding the contract event 0xb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c. +// +// Solidity: event FeatureSet(bytes32 indexed feature, bool indexed enabled) +func (_SystemConfig *SystemConfigFilterer) ParseFeatureSet(log types.Log) (*SystemConfigFeatureSet, error) { + event := new(SystemConfigFeatureSet) + if err := _SystemConfig.contract.UnpackLog(event, "FeatureSet", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + // SystemConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfig contract. type SystemConfigInitializedIterator struct { Event *SystemConfigInitialized // Event containing the contract specifics and raw log diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 81c5f554f2d8c..1b1acfff48448 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -12,7 +12,8 @@ interface ISystemConfig is IProxyAdminOwnedBase { GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS + OPERATOR_FEE_PARAMS, + MIN_BASE_FEE } struct Addresses { @@ -72,6 +73,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function minimumGasLimit() external view returns (uint64); function operatorFeeConstant() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); + function minBaseFee() external view returns (uint64); function optimismMintableERC20Factory() external view returns (address addr_); function optimismPortal() external view returns (address addr_); function overhead() external view returns (uint256); @@ -86,6 +88,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external; function setUnsafeBlockSigner(address _unsafeBlockSigner) external; function setEIP1559Params(uint32 _denominator, uint32 _elasticity) external; + function setMinBaseFee(uint64 _minBaseFee) external; function startBlock() external view returns (uint256 startBlock_); function transferOwnership(address newOwner) external; // nosemgrep function unsafeBlockSigner() external view returns (address addr_); diff --git a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol index 041dadd898268..4e10b48e37548 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol @@ -29,6 +29,7 @@ contract DeployConfig is Script { uint256 public l2GenesisFjordTimeOffset; uint256 public l2GenesisGraniteTimeOffset; uint256 public l2GenesisHoloceneTimeOffset; + uint256 public l2GenesisJovianTimeOffset; address public p2pSequencerAddress; address public batchInboxAddress; address public batchSenderAddress; @@ -96,6 +97,7 @@ contract DeployConfig is Script { l2GenesisFjordTimeOffset = _readOr(_json, "$.l2GenesisFjordTimeOffset", NULL_OFFSET); l2GenesisGraniteTimeOffset = _readOr(_json, "$.l2GenesisGraniteTimeOffset", NULL_OFFSET); l2GenesisHoloceneTimeOffset = _readOr(_json, "$.l2GenesisHoloceneTimeOffset", NULL_OFFSET); + l2GenesisJovianTimeOffset = _readOr(_json, "$.l2GenesisJovianTimeOffset", NULL_OFFSET); p2pSequencerAddress = stdJson.readAddress(_json, "$.p2pSequencerAddress"); batchInboxAddress = stdJson.readAddress(_json, "$.batchInboxAddress"); @@ -218,7 +220,9 @@ contract DeployConfig is Script { } function latestGenesisFork() internal view returns (Fork) { - if (l2GenesisHoloceneTimeOffset == 0) { + if (l2GenesisJovianTimeOffset == 0) { + return Fork.JOVIAN; + } else if (l2GenesisHoloceneTimeOffset == 0) { return Fork.HOLOCENE; } else if (l2GenesisGraniteTimeOffset == 0) { return Fork.GRANITE; diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 48a9c63f2a719..14d1f7ff5b03e 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -28,13 +28,17 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @custom:value GAS_LIMIT Represents an update to gas limit on L2. /// @custom:value UNSAFE_BLOCK_SIGNER Represents an update to the signer key for unsafe /// block distrubution. + /// @custom:value EIP_1559_PARAMS Represents an update to EIP-1559 parameters. + /// @custom:value OPERATOR_FEE_PARAMS Represents an update to operator fee parameters. + /// @custom:value MIN_BASE_FEE Represents an update to the minimum base fee. enum UpdateType { BATCHER, FEE_SCALARS, GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS + OPERATOR_FEE_PARAMS, + MIN_BASE_FEE } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -135,6 +139,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @notice The SuperchainConfig contract that manages the pause state. ISuperchainConfig public superchainConfig; + /// @notice The minimum base fee, in wei. + uint64 public minBaseFee; + /// @notice Bytes32 feature flag name to boolean enabled value. mapping(bytes32 => bool) public isFeatureEnabled; @@ -431,6 +438,20 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.EIP_1559_PARAMS, data); } + /// @notice Updates the minimum base fee. Can only be called by the owner. + /// @param _minBaseFee New minimum base fee. + function setMinBaseFee(uint64 _minBaseFee) external onlyOwner { + _setMinBaseFee(_minBaseFee); + } + + /// @notice Internal function for updating the minimum base fee. + function _setMinBaseFee(uint64 _minBaseFee) internal { + minBaseFee = _minBaseFee; + + bytes memory data = abi.encode(_minBaseFee); + emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE, data); + } + /// @notice Updates the operator fee parameters. Can only be called by the owner. /// @param _operatorFeeScalar operator fee scalar. /// @param _operatorFeeConstant operator fee constant. diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 92d758db03531..a55ded5b5612f 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -882,3 +882,23 @@ contract SystemConfig_SuperchainConfig_Test is SystemConfig_TestInit { assertEq(address(systemConfig.superchainConfig()), address(superchainConfig)); } } + +/// @title SystemConfig_SetMinBaseFee_Test +/// @notice Test contract for SystemConfig `setMinBaseFee` function. +contract SystemConfig_SetMinBaseFee_Test is SystemConfig_TestInit { + /// @notice Tests that `setMinBaseFee` reverts if the caller is not the owner. + function test_setMinBaseFee_notOwner_reverts() external { + vm.expectRevert("Ownable: caller is not the owner"); + systemConfig.setMinBaseFee(0); + } + + /// @notice Tests that `setMinBaseFee` updates the min base fee successfully. + function testFuzz_setMinBaseFee_succeeds(uint64 newMinBaseFee) external { + vm.expectEmit(address(systemConfig)); + emit ConfigUpdate(0, ISystemConfig.UpdateType.MIN_BASE_FEE, abi.encode(newMinBaseFee)); + + vm.prank(systemConfig.owner()); + systemConfig.setMinBaseFee(newMinBaseFee); + assertEq(systemConfig.minBaseFee(), newMinBaseFee); + } +} From aecffb71a25e67c9ab0e09bd9841a3cbf6028db1 Mon Sep 17 00:00:00 2001 From: George Knee Date: Mon, 8 Sep 2025 10:39:59 +0100 Subject: [PATCH 02/56] Update packages/contracts-bedrock/src/L1/SystemConfig.sol Co-authored-by: Matt Solomon --- packages/contracts-bedrock/src/L1/SystemConfig.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 14d1f7ff5b03e..828e1d25f6bcc 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -439,6 +439,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl } /// @notice Updates the minimum base fee. Can only be called by the owner. + /// Setting this value to 0 is equivalent to disabling the min base fee feature /// @param _minBaseFee New minimum base fee. function setMinBaseFee(uint64 _minBaseFee) external onlyOwner { _setMinBaseFee(_minBaseFee); From 21061999078bfee0bd0194ab8141a491ce183dd6 Mon Sep 17 00:00:00 2001 From: geoknee Date: Mon, 8 Sep 2025 11:21:13 +0100 Subject: [PATCH 03/56] just pre-pr --- .../snapshots/abi/SystemConfig.json | 26 +++++++++++++++++++ .../snapshots/semver-lock.json | 4 +-- .../snapshots/storageLayout/SystemConfig.json | 7 +++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/packages/contracts-bedrock/snapshots/abi/SystemConfig.json b/packages/contracts-bedrock/snapshots/abi/SystemConfig.json index 03f82fcb103f7..5813c6b82332d 100644 --- a/packages/contracts-bedrock/snapshots/abi/SystemConfig.json +++ b/packages/contracts-bedrock/snapshots/abi/SystemConfig.json @@ -497,6 +497,19 @@ "stateMutability": "pure", "type": "function" }, + { + "inputs": [], + "name": "minBaseFee", + "outputs": [ + { + "internalType": "uint64", + "name": "", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "minimumGasLimit", @@ -790,6 +803,19 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "_minBaseFee", + "type": "uint64" + } + ], + "name": "setMinBaseFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/packages/contracts-bedrock/snapshots/semver-lock.json b/packages/contracts-bedrock/snapshots/semver-lock.json index af38b21aaa85d..604ae0f2c19fd 100644 --- a/packages/contracts-bedrock/snapshots/semver-lock.json +++ b/packages/contracts-bedrock/snapshots/semver-lock.json @@ -40,8 +40,8 @@ "sourceCodeHash": "0xad12c20a00dc20683bd3f68e6ee254f968da6cc2d98930be6534107ee5cb11d9" }, "src/L1/SystemConfig.sol:SystemConfig": { - "initCodeHash": "0x8c6a1fb65d650525a3cd3fd617ae923d44da157b2ef928ab8ec39dbf39e25a98", - "sourceCodeHash": "0xdf526027678f23da79a56c1d6127a3ed3fd92927ec8d5541982b6f1c2119f70e" + "initCodeHash": "0x419f2dce311744fa24f4bab95f5181b53bd5a34f39d065d897be9cc16bb9a186", + "sourceCodeHash": "0xb83da3ab0f3a08ca0f87cb2fd6a77ce19e8321e4d0368878ae6e066e4d8d9529" }, "src/L2/BaseFeeVault.sol:BaseFeeVault": { "initCodeHash": "0x9b664e3d84ad510091337b4aacaa494b142512e2f6f7fbcdb6210ed62ca9b885", diff --git a/packages/contracts-bedrock/snapshots/storageLayout/SystemConfig.json b/packages/contracts-bedrock/snapshots/storageLayout/SystemConfig.json index 53d4ca20c467c..3a80e68ed8b92 100644 --- a/packages/contracts-bedrock/snapshots/storageLayout/SystemConfig.json +++ b/packages/contracts-bedrock/snapshots/storageLayout/SystemConfig.json @@ -125,6 +125,13 @@ "slot": "108", "type": "contract ISuperchainConfig" }, + { + "bytes": "8", + "label": "minBaseFee", + "offset": 20, + "slot": "108", + "type": "uint64" + }, { "bytes": "32", "label": "isFeatureEnabled", From 7c6a2cb4b8fc051d43eabc733251135209be39e3 Mon Sep 17 00:00:00 2001 From: geoknee Date: Mon, 8 Sep 2025 11:40:19 +0100 Subject: [PATCH 04/56] just pre-pr --- packages/contracts-bedrock/snapshots/semver-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/contracts-bedrock/snapshots/semver-lock.json b/packages/contracts-bedrock/snapshots/semver-lock.json index bbffb4db91424..64878ce737cfa 100644 --- a/packages/contracts-bedrock/snapshots/semver-lock.json +++ b/packages/contracts-bedrock/snapshots/semver-lock.json @@ -44,8 +44,8 @@ "sourceCodeHash": "0xad12c20a00dc20683bd3f68e6ee254f968da6cc2d98930be6534107ee5cb11d9" }, "src/L1/SystemConfig.sol:SystemConfig": { - "initCodeHash": "0x48070c60dce026f655fbd31c490673657ed0ee48b90ff399aa5bac60abc0b796", - "sourceCodeHash": "0x27101f76d083e0b15e462932f5a3bfad67c10e033eeb670b76e67c370b7f2b07" + "initCodeHash": "0x2c3161c246476d7ddbbdb3efdf56847b4fd8e6c18eb9ef2be32bfb472372ce78", + "sourceCodeHash": "0x625d464056ca902b78bb4aefe92b1deda1cb91fe1c8563b2a81b7d6feb4eda41" }, "src/L2/BaseFeeVault.sol:BaseFeeVault": { "initCodeHash": "0x9b664e3d84ad510091337b4aacaa494b142512e2f6f7fbcdb6210ed62ca9b885", @@ -227,4 +227,4 @@ "initCodeHash": "0x2bfce526f82622288333d53ca3f43a0a94306ba1bab99241daa845f8f4b18bd4", "sourceCodeHash": "0xf49d7b0187912a6bb67926a3222ae51121e9239495213c975b3b4b217ee57a1b" } -} +} \ No newline at end of file From 1fc98bb6f72c27080b09b8240ad1bd7ba8fc8d95 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 8 Sep 2025 09:58:59 -0400 Subject: [PATCH 05/56] remove codegen bin --- op-e2e/bindings/systemconfig.go | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index c0503c0bc0058..88ff3fb5fe1a6 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -51,34 +51,12 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isFeatureEnabled\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeature\",\"inputs\":[{\"name\":\"_feature\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_enabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_minBaseFee\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeatureSet\",\"inputs\":[{\"name\":\"feature\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"enabled\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SystemConfig_InvalidFeatureState\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620019941760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612ecc62000185600039600081816104b1015281816109310152610c960152612ecc6000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c8063935f029e116101d3578063d6ae3cd511610104578063f2c4bc9e116100a2578063f68016b71161007c578063f68016b714610903578063f8c68de014610917578063fd32aa0f1461091f578063ffa1ad741461092757600080fd5b8063f2c4bc9e146108d4578063f2fde38b146108e7578063f45e65d8146108fa57600080fd5b8063e0e2016d116100de578063e0e2016d1461089b578063e81b2c6d146108a3578063ec707517146108ac578063f2b4e617146108cc57600080fd5b8063d6ae3cd514610882578063dac6e63a1461088b578063dad544e01461089357600080fd5b8063bfb14fb711610171578063c9b26f611161014b578063c9b26f6114610713578063c9ff2d1614610726578063cc731b021461073e578063d220a9e01461087257600080fd5b8063bfb14fb7146106dc578063c0fd4b41146106f8578063c4e8ddfa1461070b57600080fd5b8063a62611a2116101ad578063a62611a21461068d578063a7119869146106b9578063b40a817c146106c1578063bc49ce5f146106d457600080fd5b8063935f029e1461060e5780639b7d7f0a14610621578063a39fac121461062957600080fd5b806338d38c97116102ad5780634f16540b1161024b5780635d73369c116102255780635d73369c146105cd578063715018a6146105d55780637616f0e8146105dd5780638da5cb5b146105f057600080fd5b80634f16540b1461055f57806354fd4d50146105865780635c975abb146105c557600080fd5b806347af267b1161028757806347af267b146104eb57806348cd4cb11461051e5780634add321d146105265780634d5d9a2a1461052e57600080fd5b806338d38c97146104aa5780633e47158c146104db578063452a9320146104e357600080fd5b8063155b6c6f1161031a57806319f5cea8116102f457806319f5cea8146104675780631fd19ee11461046f57806321d7fde51461047757806335e80ab31461048a57600080fd5b8063155b6c6f1461041d57806316d3bc7f1461043057806318d139181461045457600080fd5b8063078f29cf11610356578063078f29cf146103c05780630a49cb03146103ed5780630ae14b1b146103f55780630c18c1621461041457600080fd5b8063010458291461037d578063028f4e471461039257806306c92657146103a5575b600080fd5b61039061038b366004612a19565b61092f565b005b6103906103a0366004612b89565b610c94565b6103ad610e75565b6040519081526020015b60405180910390f35b6103c8610ea3565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103b7565b6103c8610edc565b631dcd65005b60405167ffffffffffffffff90911681526020016103b7565b6103ad60655481565b61039061042b366004612bb9565b610f0c565b606a546103fb906c01000000000000000000000000900467ffffffffffffffff1681565b610390610462366004612bec565b610f22565b6103ad610f36565b6103c8610f61565b610390610485366004612c10565b610f8b565b606c546103c89073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103b7565b6103c8610f9d565b6103c86111a8565b61050e6104f9366004612c3a565b606d6020526000908152604090205460ff1681565b60405190151581526020016103b7565b6103ad61123c565b6103fb61126c565b606a5461054a9068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103b7565b6103ad7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e30000000000000000000000000000000000000000000000000000000602082015290516103b79190612cbe565b61050e611292565b6103ad611440565b61039061146b565b6103906105eb366004612cd1565b61147f565b60335473ffffffffffffffffffffffffffffffffffffffff166103c8565b61039061061c366004612cec565b611490565b6103c86114a2565b6106316114d2565b6040516103b79190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b606c546103fb9074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103c86115b9565b6103906106cf366004612cd1565b6115e9565b6103ad6115fa565b60685461054a9068010000000000000000900463ffffffff1681565b610390610706366004612c10565b611625565b6103c8611637565b610390610721366004612c3a565b611667565b606a5461054a90640100000000900463ffffffff1681565b6108026040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103b79190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a5461054a9063ffffffff1681565b6103ad606b5481565b6103c8611678565b6103c86116a8565b6103ad6116fc565b6103ad60675481565b60685461054a906c01000000000000000000000000900463ffffffff1681565b6103c8611727565b6103906108e2366004612d1c565b6117a3565b6103906108f5366004612bec565b61188a565b6103ad60665481565b6068546103fb9067ffffffffffffffff1681565b6103ad61193e565b6103ad611969565b6103ad600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561096f575060005460ff8083169116105b610a00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610a39611998565b610a41611a19565b610a4a8c61188a565b610a5389611ab8565b610a5d8b8b611b19565b610a6688611c58565b610a8f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610ac2610abd60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d70565b869055565b610af6610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d70565b85519055565b610b2d610b2460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d70565b60208601519055565b610b64610b5b60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d70565b60408601519055565b610b9b610b9260017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d70565b60608601519055565b610bd2610bc960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d70565b60808601519055565b610bda611dae565b610be386611e16565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610cd4575060005460ff8083169116105b610d60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109f7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d99611998565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610e0b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612d70565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610ea060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d70565b81565b6000610ed7610ed360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d70565b5490565b905090565b6000610ed7610ed360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d70565b610f1461228a565b610f1e828261230b565b5050565b610f2a61228a565b610f33816123e1565b50565b610ea060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d70565b6000610ed77f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f9361228a565b610f1e8282611b19565b600080610fc87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610feb57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261102e9190612d87565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611089906060015b604051602081830303815290604052805190602001205490565b146110c0576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906110e29060600161106f565b905073ffffffffffffffffffffffffffffffffffffffff811615611176578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561114b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116f9190612dc4565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa158015611218573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed79190612dc4565b6000610ed7610ed360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b606954600090610ed79063ffffffff6a0100000000000000000000820481169116612de1565b60008061129d610edc565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130b9190612dc4565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa15801561137d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a19190612e0d565b8061143a5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa158015611416573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a9190612e0d565b91505090565b610ea060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d70565b61147361228a565b61147d6000612465565b565b61148761228a565b610f33816124dc565b61149861228a565b610f1e828261254f565b6000610ed7610ed360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d70565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806115106115b9565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533611637565b73ffffffffffffffffffffffffffffffffffffffff168152602001611556610ea3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611579610edc565b73ffffffffffffffffffffffffffffffffffffffff16815260200161159c6114a2565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610ed7610ed360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d70565b6115f161228a565b610f3381611c58565b610ea060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d70565b61162d61228a565b610f1e8282612625565b6000610ed7610ed360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d70565b61166f61228a565b610f3381611ab8565b6000610ed7610ed360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d70565b60006116b2610f9d565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611218573d6000803e3d6000fd5b610ea060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b600080611732610edc565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561177f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143a9190612dc4565b6117ab611998565b8080156117c657506000828152606d602052604090205460ff165b806117e95750801580156117e957506000828152606d602052604090205460ff16155b15611820576040517ff5828b0400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000828152606d602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168415159081179091559051909184917fb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c9190a35050565b61189261228a565b73ffffffffffffffffffffffffffffffffffffffff8116611935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109f7565b610f3381612465565b610ea060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d70565b610ea060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d70565b9055565b336119a1610f9d565b73ffffffffffffffffffffffffffffffffffffffff16141580156119e25750336119c96116a8565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561147d576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16611ab0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109f7565b61147d6127f7565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b0d9190612cbe565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611c4b9190612cbe565b60405180910390a3505050565b611c6061126c565b67ffffffffffffffff168167ffffffffffffffff161015611cdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109f7565b631dcd650067ffffffffffffffff82161115611d55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109f7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611adc565b611ddc610ed360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b60000361147d5761147d611e1160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d70565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611ec6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109f7565b6001816040015160ff1611611f5d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109f7565b6068546080820151825167ffffffffffffffff90921691611f7e9190612e2a565b63ffffffff161115611fec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109f7565b6000816020015160ff1611612083576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109f7565b8051602082015163ffffffff82169160ff909116906120a3908290612e49565b6120ad9190612e93565b63ffffffff1614612140576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109f7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff16331461147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109f7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611c1a565b61240a7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506003611adc565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff8416908102919091179091556040805160208082019390935281518082039093018352810190526006611adc565b7fff000000000000000000000000000000000000000000000000000000000000008116156125ff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109f7565b606582905560668190556040805160208101849052908101829052600090606001611be7565b60018263ffffffff1610156126bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109f7565b60018163ffffffff161015612753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109f7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916127c091602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611c1a565b600054610100900460ff1661288e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109f7565b61147d33612465565b73ffffffffffffffffffffffffffffffffffffffff81168114610f3357600080fd5b80356128c481612897565b919050565b803563ffffffff811681146128c457600080fd5b803567ffffffffffffffff811681146128c457600080fd5b60405160c0810167ffffffffffffffff8111828210171561293f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146128c457600080fd5b600060a0828403121561296857600080fd5b60405160a0810181811067ffffffffffffffff821117156129b2577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290508082356129c381612897565b815260208301356129d381612897565b602082015260408301356129e681612897565b604082015260608301356129f981612897565b60608201526080830135612a0c81612897565b6080919091015292915050565b60008060008060008060008060008060008b8d03610280811215612a3c57600080fd5b8c35612a4781612897565b9b50612a5560208e016128c9565b9a50612a6360408e016128c9565b995060608d01359850612a7860808e016128dd565b975060a08d0135612a8881612897565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612aba57600080fd5b50612ac36128f5565b612acf60c08e016128c9565b8152612add60e08e01612945565b6020820152612aef6101008e01612945565b6040820152612b016101208e016128c9565b6060820152612b136101408e016128c9565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612b3c57600080fd5b60a08201529450612b506101808d016128b9565b9350612b608d6101a08e01612956565b92506102408c01359150612b776102608d016128b9565b90509295989b509295989b9093969950565b60008060408385031215612b9c57600080fd5b823591506020830135612bae81612897565b809150509250929050565b60008060408385031215612bcc57600080fd5b612bd5836128c9565b9150612be3602084016128dd565b90509250929050565b600060208284031215612bfe57600080fd5b8135612c0981612897565b9392505050565b60008060408385031215612c2357600080fd5b612c2c836128c9565b9150612be3602084016128c9565b600060208284031215612c4c57600080fd5b5035919050565b6000815180845260005b81811015612c7957602081850181015186830182015201612c5d565b81811115612c8b576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612c096020830184612c53565b600060208284031215612ce357600080fd5b612c09826128dd565b60008060408385031215612cff57600080fd5b50508035926020909101359150565b8015158114610f3357600080fd5b60008060408385031215612d2f57600080fd5b823591506020830135612bae81612d0e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d8257612d82612d41565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612dbf57612dbf612d41565b500290565b600060208284031215612dd657600080fd5b8151612c0981612897565b600067ffffffffffffffff808316818516808303821115612e0457612e04612d41565b01949350505050565b600060208284031215612e1f57600080fd5b8151612c0981612d0e565b600063ffffffff808316818516808303821115612e0457612e04612d41565b600063ffffffff80841680612e87577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612eb657612eb6612d41565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. // Deprecated: Use SystemConfigMetaData.ABI instead. var SystemConfigABI = SystemConfigMetaData.ABI -// SystemConfigBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use SystemConfigMetaData.Bin instead. -var SystemConfigBin = SystemConfigMetaData.Bin - -// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. -func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { - parsed, err := SystemConfigMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil -} - // SystemConfig is an auto generated Go binding around an Ethereum contract. type SystemConfig struct { SystemConfigCaller // Read-only binding to the contract From 0206db0a7a13d737a797565ed50c6a4887305795 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 8 Sep 2025 12:12:28 -0400 Subject: [PATCH 06/56] update semver and remove some more diffs in systemconfig codegen --- op-e2e/bindings/systemconfig.go | 124 ------------------ .../snapshots/semver-lock.json | 4 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 4 +- 3 files changed, 4 insertions(+), 128 deletions(-) diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 88ff3fb5fe1a6..1249bde08c45c 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -757,37 +757,6 @@ func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddr return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "guardian") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigSession) Guardian() (common.Address, error) { - return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) Guardian() (common.Address, error) { - return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) -} - // InitVersion is a free data retrieval call binding the contract method 0x38d38c97. // // Solidity: function initVersion() view returns(uint8) @@ -943,37 +912,6 @@ func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Addre return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) } -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l2ChainId") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigSession) L2ChainId() (*big.Int, error) { - return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) L2ChainId() (*big.Int, error) { - return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) -} - // MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. // // Solidity: function maximumGasLimit() pure returns(uint64) @@ -1284,68 +1222,6 @@ func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) } -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigCaller) ProxyAdmin(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "proxyAdmin") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigSession) ProxyAdmin() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) ProxyAdmin() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigCaller) ProxyAdminOwner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "proxyAdminOwner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigSession) ProxyAdminOwner() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) ProxyAdminOwner() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) -} - // ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. // // Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) diff --git a/packages/contracts-bedrock/snapshots/semver-lock.json b/packages/contracts-bedrock/snapshots/semver-lock.json index 64878ce737cfa..7a654e5065a82 100644 --- a/packages/contracts-bedrock/snapshots/semver-lock.json +++ b/packages/contracts-bedrock/snapshots/semver-lock.json @@ -44,8 +44,8 @@ "sourceCodeHash": "0xad12c20a00dc20683bd3f68e6ee254f968da6cc2d98930be6534107ee5cb11d9" }, "src/L1/SystemConfig.sol:SystemConfig": { - "initCodeHash": "0x2c3161c246476d7ddbbdb3efdf56847b4fd8e6c18eb9ef2be32bfb472372ce78", - "sourceCodeHash": "0x625d464056ca902b78bb4aefe92b1deda1cb91fe1c8563b2a81b7d6feb4eda41" + "initCodeHash": "0x00fecfef7bd1f0fbabd052c2c41ca1a5024bed2b06d6b59c18b43768ea02f9a9", + "sourceCodeHash": "0x024242a9533726dc64477b0360fe47e535b0c0cb26f357d7e519b552dd528af7" }, "src/L2/BaseFeeVault.sol:BaseFeeVault": { "initCodeHash": "0x9b664e3d84ad510091337b4aacaa494b142512e2f6f7fbcdb6210ed62ca9b885", diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 7888de97318db..2d5934551cb53 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -161,9 +161,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl error SystemConfig_InvalidFeatureState(); /// @notice Semantic version. - /// @custom:semver 3.7.0 + /// @custom:semver 3.8.0 function version() public pure virtual returns (string memory) { - return "3.7.0"; + return "3.8.0"; } /// @notice Constructs the SystemConfig contract. From 7e8743cd8700e000fe172a6230b88b27eb6c7398 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 8 Sep 2025 12:23:55 -0400 Subject: [PATCH 07/56] revert bindings/systemconfig --- op-e2e/bindings/systemconfig.go | 440 ++++---------------------------- 1 file changed, 50 insertions(+), 390 deletions(-) diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 1249bde08c45c..05d74beadbeb5 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -26,7 +26,6 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. @@ -44,13 +43,14 @@ type SystemConfigAddresses struct { L1CrossDomainMessenger common.Address L1ERC721Bridge common.Address L1StandardBridge common.Address + DisputeGameFactory common.Address OptimismPortal common.Address OptimismMintableERC20Factory common.Address } // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isFeatureEnabled\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeature\",\"inputs\":[{\"name\":\"_feature\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_enabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_minBaseFee\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeatureSet\",\"inputs\":[{\"name\":\"feature\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"enabled\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SystemConfig_InvalidFeatureState\",\"inputs\":[]}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISPUTE_GAME_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"START_BLOCK_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobbasefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Denominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Elasticity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddresses\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_denominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_elasticity\",\"type\":\"uint32\"}],\"name\":\"setEIP1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"}],\"name\":\"setGasConfigEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\"}],\"name\":\"setOperatorFeeScalars\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startBlock_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -154,11 +154,11 @@ func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilte // bindSystemConfig binds a generic wrapper to an already deployed contract. func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := SystemConfigMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -230,6 +230,37 @@ func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, erro return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) } +// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. +// +// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) DISPUTEGAMEFACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "DISPUTE_GAME_FACTORY_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. +// +// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) +} + +// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. +// +// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) +} + // L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. // // Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) @@ -728,7 +759,7 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { var out []interface{} err := _SystemConfig.contract.Call(opts, &out, "getAddresses") @@ -745,80 +776,18 @@ func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (Syst // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) InitVersion(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "initVersion") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigSession) InitVersion() (uint8, error) { - return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) InitVersion() (uint8, error) { - return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) -} - -// IsFeatureEnabled is a free data retrieval call binding the contract method 0x47af267b. -// -// Solidity: function isFeatureEnabled(bytes32 ) view returns(bool) -func (_SystemConfig *SystemConfigCaller) IsFeatureEnabled(opts *bind.CallOpts, arg0 [32]byte) (bool, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "isFeatureEnabled", arg0) - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// IsFeatureEnabled is a free data retrieval call binding the contract method 0x47af267b. -// -// Solidity: function isFeatureEnabled(bytes32 ) view returns(bool) -func (_SystemConfig *SystemConfigSession) IsFeatureEnabled(arg0 [32]byte) (bool, error) { - return _SystemConfig.Contract.IsFeatureEnabled(&_SystemConfig.CallOpts, arg0) -} - -// IsFeatureEnabled is a free data retrieval call binding the contract method 0x47af267b. -// -// Solidity: function isFeatureEnabled(bytes32 ) view returns(bool) -func (_SystemConfig *SystemConfigCallerSession) IsFeatureEnabled(arg0 [32]byte) (bool, error) { - return _SystemConfig.Contract.IsFeatureEnabled(&_SystemConfig.CallOpts, arg0) -} - // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address addr_) @@ -943,37 +912,6 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } -// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. -// -// Solidity: function minBaseFee() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) MinBaseFee(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBaseFee") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. -// -// Solidity: function minBaseFee() view returns(uint64) -func (_SystemConfig *SystemConfigSession) MinBaseFee() (uint64, error) { - return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) -} - -// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. -// -// Solidity: function minBaseFee() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) MinBaseFee() (uint64, error) { - return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) -} - // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // // Solidity: function minimumGasLimit() view returns(uint64) @@ -1191,37 +1129,6 @@ func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigSession) Paused() (bool, error) { - return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { - return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) -} - // ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. // // Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) @@ -1315,37 +1222,6 @@ func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) } -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigSession) SuperchainConfig() (common.Address, error) { - return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) SuperchainConfig() (common.Address, error) { - return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) -} - // UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // // Solidity: function unsafeBlockSigner() view returns(address addr_) @@ -1408,25 +1284,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x01045829. +// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0x01045829. +// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0x01045829. +// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1492,27 +1368,6 @@ func (_SystemConfig *SystemConfigTransactorSession) SetEIP1559Params(_denominato return _SystemConfig.Contract.SetEIP1559Params(&_SystemConfig.TransactOpts, _denominator, _elasticity) } -// SetFeature is a paid mutator transaction binding the contract method 0xf2c4bc9e. -// -// Solidity: function setFeature(bytes32 _feature, bool _enabled) returns() -func (_SystemConfig *SystemConfigTransactor) SetFeature(opts *bind.TransactOpts, _feature [32]byte, _enabled bool) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setFeature", _feature, _enabled) -} - -// SetFeature is a paid mutator transaction binding the contract method 0xf2c4bc9e. -// -// Solidity: function setFeature(bytes32 _feature, bool _enabled) returns() -func (_SystemConfig *SystemConfigSession) SetFeature(_feature [32]byte, _enabled bool) (*types.Transaction, error) { - return _SystemConfig.Contract.SetFeature(&_SystemConfig.TransactOpts, _feature, _enabled) -} - -// SetFeature is a paid mutator transaction binding the contract method 0xf2c4bc9e. -// -// Solidity: function setFeature(bytes32 _feature, bool _enabled) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetFeature(_feature [32]byte, _enabled bool) (*types.Transaction, error) { - return _SystemConfig.Contract.SetFeature(&_SystemConfig.TransactOpts, _feature, _enabled) -} - // SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. // // Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() @@ -1576,27 +1431,6 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. -// -// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() -func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _minBaseFee uint64) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _minBaseFee) -} - -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. -// -// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() -func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) -} - -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. -// -// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) -} - // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. // // Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() @@ -1660,27 +1494,6 @@ func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner c return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) } -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactor) Upgrade(opts *bind.TransactOpts, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "upgrade", _l2ChainId, _superchainConfig) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactorSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) -} - // SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. type SystemConfigConfigUpdateIterator struct { Event *SystemConfigConfigUpdate // Event containing the contract specifics and raw log @@ -1835,159 +1648,6 @@ func (_SystemConfig *SystemConfigFilterer) ParseConfigUpdate(log types.Log) (*Sy return event, nil } -// SystemConfigFeatureSetIterator is returned from FilterFeatureSet and is used to iterate over the raw logs and unpacked data for FeatureSet events raised by the SystemConfig contract. -type SystemConfigFeatureSetIterator struct { - Event *SystemConfigFeatureSet // 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 *SystemConfigFeatureSetIterator) 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(SystemConfigFeatureSet) - 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(SystemConfigFeatureSet) - 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 *SystemConfigFeatureSetIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigFeatureSetIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigFeatureSet represents a FeatureSet event raised by the SystemConfig contract. -type SystemConfigFeatureSet struct { - Feature [32]byte - Enabled bool - Raw types.Log // Blockchain specific contextual infos -} - -// FilterFeatureSet is a free log retrieval operation binding the contract event 0xb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c. -// -// Solidity: event FeatureSet(bytes32 indexed feature, bool indexed enabled) -func (_SystemConfig *SystemConfigFilterer) FilterFeatureSet(opts *bind.FilterOpts, feature [][32]byte, enabled []bool) (*SystemConfigFeatureSetIterator, error) { - - var featureRule []interface{} - for _, featureItem := range feature { - featureRule = append(featureRule, featureItem) - } - var enabledRule []interface{} - for _, enabledItem := range enabled { - enabledRule = append(enabledRule, enabledItem) - } - - logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "FeatureSet", featureRule, enabledRule) - if err != nil { - return nil, err - } - return &SystemConfigFeatureSetIterator{contract: _SystemConfig.contract, event: "FeatureSet", logs: logs, sub: sub}, nil -} - -// WatchFeatureSet is a free log subscription operation binding the contract event 0xb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c. -// -// Solidity: event FeatureSet(bytes32 indexed feature, bool indexed enabled) -func (_SystemConfig *SystemConfigFilterer) WatchFeatureSet(opts *bind.WatchOpts, sink chan<- *SystemConfigFeatureSet, feature [][32]byte, enabled []bool) (event.Subscription, error) { - - var featureRule []interface{} - for _, featureItem := range feature { - featureRule = append(featureRule, featureItem) - } - var enabledRule []interface{} - for _, enabledItem := range enabled { - enabledRule = append(enabledRule, enabledItem) - } - - logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "FeatureSet", featureRule, enabledRule) - 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(SystemConfigFeatureSet) - if err := _SystemConfig.contract.UnpackLog(event, "FeatureSet", 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 -} - -// ParseFeatureSet is a log parse operation binding the contract event 0xb876f6594132c89891d2fd198e925e999be741ec809abb58bfe9b966876cc06c. -// -// Solidity: event FeatureSet(bytes32 indexed feature, bool indexed enabled) -func (_SystemConfig *SystemConfigFilterer) ParseFeatureSet(log types.Log) (*SystemConfigFeatureSet, error) { - event := new(SystemConfigFeatureSet) - if err := _SystemConfig.contract.UnpackLog(event, "FeatureSet", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - // SystemConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfig contract. type SystemConfigInitializedIterator struct { Event *SystemConfigInitialized // Event containing the contract specifics and raw log From 898a311c0f0edf10bc7d592d06cafbea3c0a37a1 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 8 Sep 2025 13:57:37 -0400 Subject: [PATCH 08/56] bump OPCM systemconfigversion --- .../src/L1/OPContractsManagerStandardValidator.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/src/L1/OPContractsManagerStandardValidator.sol b/packages/contracts-bedrock/src/L1/OPContractsManagerStandardValidator.sol index 226d6c798734e..42467a1dca4a7 100644 --- a/packages/contracts-bedrock/src/L1/OPContractsManagerStandardValidator.sol +++ b/packages/contracts-bedrock/src/L1/OPContractsManagerStandardValidator.sol @@ -188,7 +188,7 @@ contract OPContractsManagerStandardValidator is ISemver { /// @notice Returns the expected SystemConfig version. function systemConfigVersion() public pure returns (string memory) { - return "3.7.0"; + return "3.8.0"; } /// @notice Returns the expected OptimismPortal version. From 1bde28f2e3ea1bd584e26da4f2daafdcf8fa65ae Mon Sep 17 00:00:00 2001 From: William Law Date: Fri, 18 Jul 2025 10:29:08 -0400 Subject: [PATCH 09/56] spike --- op-deployer/pkg/deployer/opcm/opchain.go | 1 + op-deployer/pkg/deployer/pipeline/opchain.go | 1 + .../interfaces/L1/ISystemConfig.sol | 8 ++- .../interfaces/L2/IL1Block.sol | 2 + .../src/L1/OPContractsManager.sol | 4 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 23 ++++++++- packages/contracts-bedrock/src/L2/L1Block.sol | 49 ++++++++++++++++++- .../test/L1/SystemConfig.t.sol | 15 ++++-- .../test/invariants/SystemConfig.t.sol | 3 +- .../test/opcm/SetDisputeGameImpl.t.sol | 3 +- .../test/vendor/Initializable.t.sol | 6 ++- 11 files changed, 100 insertions(+), 15 deletions(-) diff --git a/op-deployer/pkg/deployer/opcm/opchain.go b/op-deployer/pkg/deployer/opcm/opchain.go index 76afa75fca59b..b4abea999b0a5 100644 --- a/op-deployer/pkg/deployer/opcm/opchain.go +++ b/op-deployer/pkg/deployer/opcm/opchain.go @@ -43,6 +43,7 @@ type DeployOPChainInput struct { OperatorFeeScalar uint32 OperatorFeeConstant uint64 + MinBasefeeLog2 uint8 } func (input *DeployOPChainInput) InputSet() bool { diff --git a/op-deployer/pkg/deployer/pipeline/opchain.go b/op-deployer/pkg/deployer/pipeline/opchain.go index b1510a89a2d26..15698dcfc7738 100644 --- a/op-deployer/pkg/deployer/pipeline/opchain.go +++ b/op-deployer/pkg/deployer/pipeline/opchain.go @@ -112,6 +112,7 @@ func makeDCI(intent *state.Intent, thisIntent *state.ChainIntent, chainID common AllowCustomDisputeParameters: proofParams.DangerouslyAllowCustomDisputeParameters, OperatorFeeScalar: thisIntent.OperatorFeeScalar, OperatorFeeConstant: thisIntent.OperatorFeeConstant, + MinBasefeeLog2: thisIntent.MinBasefeeLog2, }, nil } diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 81c5f554f2d8c..9f2f3c6876660 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -12,7 +12,8 @@ interface ISystemConfig is IProxyAdminOwnedBase { GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS + OPERATOR_FEE_PARAMS, + MIN_BASEFEE_LOG2 } struct Addresses { @@ -60,7 +61,8 @@ interface ISystemConfig is IProxyAdminOwnedBase { address _batchInbox, Addresses memory _addresses, uint256 _l2ChainId, - ISuperchainConfig _superchainConfig + ISuperchainConfig _superchainConfig, + uint8 _minBasefeeLog2 ) external; function initVersion() external view returns (uint8); @@ -72,6 +74,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function minimumGasLimit() external view returns (uint64); function operatorFeeConstant() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); + function minBasefeeLog2() external view returns (uint8); function optimismMintableERC20Factory() external view returns (address addr_); function optimismPortal() external view returns (address addr_); function overhead() external view returns (uint256); @@ -86,6 +89,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external; function setUnsafeBlockSigner(address _unsafeBlockSigner) external; function setEIP1559Params(uint32 _denominator, uint32 _elasticity) external; + function setMinBasefeeLog2(uint8 _minBasefeeLog2) external; function startBlock() external view returns (uint256 startBlock_); function transferOwnership(address newOwner) external; // nosemgrep function unsafeBlockSigner() external view returns (address addr_); diff --git a/packages/contracts-bedrock/interfaces/L2/IL1Block.sol b/packages/contracts-bedrock/interfaces/L2/IL1Block.sol index 30c42275adf9a..ab9e23db5ac87 100644 --- a/packages/contracts-bedrock/interfaces/L2/IL1Block.sol +++ b/packages/contracts-bedrock/interfaces/L2/IL1Block.sol @@ -18,6 +18,7 @@ interface IL1Block { function number() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); function operatorFeeConstant() external view returns (uint64); + function minBasefeeLog2() external view returns (uint8); function sequenceNumber() external view returns (uint64); function setL1BlockValues( uint64 _number, @@ -32,6 +33,7 @@ interface IL1Block { external; function setL1BlockValuesEcotone() external; function setL1BlockValuesIsthmus() external; + function setL1BlockValuesJovian() external; function timestamp() external view returns (uint64); function version() external pure returns (string memory); diff --git a/packages/contracts-bedrock/src/L1/OPContractsManager.sol b/packages/contracts-bedrock/src/L1/OPContractsManager.sol index b5007d5aabba6..d7fb7cf44d4eb 100644 --- a/packages/contracts-bedrock/src/L1/OPContractsManager.sol +++ b/packages/contracts-bedrock/src/L1/OPContractsManager.sol @@ -1410,7 +1410,8 @@ contract OPContractsManagerDeployer is OPContractsManagerBase { chainIdToBatchInboxAddress(_input.l2ChainId), opChainAddrs, _input.l2ChainId, - _superchainConfig + _superchainConfig, + _input.minBasefeeLog2 ) ); } @@ -1808,6 +1809,7 @@ contract OPContractsManager is ISemver { uint256 disputeSplitDepth; Duration disputeClockExtension; Duration disputeMaxClockDuration; + uint8 minBasefeeLog2; } /// @notice The full set of outputs from deploying a new OP Stack chain. diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 7910e6f9d073f..ead299cd48e7f 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -28,6 +28,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @custom:value GAS_LIMIT Represents an update to gas limit on L2. /// @custom:value UNSAFE_BLOCK_SIGNER Represents an update to the signer key for unsafe /// block distrubution. + /// @custom:value MIN_BASEFEE_LOG2 Represents an update to the minimum basefee log2. enum UpdateType { BATCHER, FEE_SCALARS, @@ -35,6 +36,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, OPERATOR_FEE_PARAMS + MIN_BASEFEE_LOG2 } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -129,6 +131,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @notice The operator fee constant. uint64 public operatorFeeConstant; + /// @notice The minimum basefee log2. + uint8 public minBasefeeLog2; + /// @notice The L2 chain ID that this SystemConfig configures. uint256 public l2ChainId; @@ -181,6 +186,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @param _addresses Set of L1 contract addresses. These should be the proxies. /// @param _l2ChainId The L2 chain ID that this SystemConfig configures. /// @param _superchainConfig The SuperchainConfig contract address. + /// @param _minBasefeeLog2 The minimum basefee log2. function initialize( address _owner, uint32 _basefeeScalar, @@ -192,7 +198,8 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl address _batchInbox, SystemConfig.Addresses memory _addresses, uint256 _l2ChainId, - ISuperchainConfig _superchainConfig + ISuperchainConfig _superchainConfig, + uint8 _minBasefeeLog2 ) public reinitializer(initVersion()) @@ -208,6 +215,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl _setBatcherHash(_batcherHash); _setGasConfigEcotone({ _basefeeScalar: _basefeeScalar, _blobbasefeeScalar: _blobbasefeeScalar }); _setGasLimit(_gasLimit); + _setMinBasefeeLog2(_minBasefeeLog2); Storage.setAddress(UNSAFE_BLOCK_SIGNER_SLOT, _unsafeBlockSigner); Storage.setAddress(BATCH_INBOX_SLOT, _batchInbox); @@ -447,6 +455,19 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.OPERATOR_FEE_PARAMS, data); } + /// @notice Updates the minimum basefee log2. Can only be called by the owner. + /// @param _minBasefeeLog2 The minimum basefee log2. + function setMinBasefeeLog2(uint8 _minBasefeeLog2) external onlyOwner { + _setMinBasefeeLog2(_minBasefeeLog2); + } + + /// @notice Internal function for updating the minimum basefee log2. + /// @param _minBasefeeLog2 The minimum basefee log2. + function _setMinBasefeeLog2(uint8 _minBasefeeLog2) internal { + minBasefeeLog2 = _minBasefeeLog2; + emit ConfigUpdate(VERSION, UpdateType.MIN_BASEFEE_LOG2, abi.encode(_minBasefeeLog2)); + } + /// @notice Sets the start block in a backwards compatible way. Proxies /// that were initialized before the startBlock existed in storage /// can have their start block set by a user provided override. diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index 31935dfab7eac..1176c110e7583 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -61,9 +61,12 @@ contract L1Block is ISemver { /// @notice The scalar value applied to the operator fee. uint32 public operatorFeeScalar; - /// @custom:semver 1.6.1 + /// @notice The minimum basefee log2. + uint8 public minBasefeeLog2; + + /// @custom:semver 1.7.0 function version() public pure virtual returns (string memory) { - return "1.6.1"; + return "1.7.0"; } /// @notice Returns the gas paying token, its decimals, name and symbol. @@ -212,4 +215,46 @@ contract L1Block is ISemver { sstore(operatorFeeConstant.slot, shr(160, calldataload(164))) } } + + /// @notice Updates the L1 block values for a Jovian upgraded chain. + /// Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. + /// Params are expected to be in the following order: + /// 1. _baseFeeScalar L1 base fee scalar + /// 2. _blobBaseFeeScalar L1 blob base fee scalar + /// 3. _sequenceNumber Number of L2 blocks since epoch start. + /// 4. _timestamp L1 timestamp. + /// 5. _number L1 blocknumber. + /// 6. _basefee L1 base fee. + /// 7. _blobBaseFee L1 blob base fee. + /// 8. _hash L1 blockhash. + /// 9. _batcherHash Versioned hash to authenticate batcher by. + /// 10. _operatorFeeScalar Operator fee scalar. + /// 11. _operatorFeeConstant Operator fee constant. + /// 12. _minBasefeeLog2 Minimum basefee log2. + function setL1BlockValuesJovian() public { + _setL1BlockValuesJovian(); + } + + /// @notice Updates the L1 block values for a Jovian upgraded chain. + /// Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. + /// Params are expected to be in the following order: + /// 1. _baseFeeScalar L1 base fee scalar + /// 2. _blobBaseFeeScalar L1 blob base fee scalar + /// 3. _sequenceNumber Number of L2 blocks since epoch start. + /// 4. _timestamp L1 timestamp. + /// 5. _number L1 blocknumber. + /// 6. _basefee L1 base fee. + /// 7. _blobBaseFee L1 blob base fee. + /// 8. _hash L1 blockhash. + /// 9. _batcherHash Versioned hash to authenticate batcher by. + /// 10. _operatorFeeScalar Operator fee scalar. + /// 11. _operatorFeeConstant Operator fee constant. + /// 12. _minBasefeeLog2 Minimum basefee log2. + function _setL1BlockValuesJovian() internal { + _setL1BlockValuesIsthmus(); + assembly { + // minBasefeeLog2 (uint8) + sstore(minBasefeeLog2.slot, shr(240, calldataload(196))) + } + } } diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 84c56d3597c08..072b8b7578ea1 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -167,7 +167,8 @@ contract SystemConfig_Initialize_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)) + _superchainConfig: ISuperchainConfig(address(0)), + _minBasefeeLog2: 24 }); } @@ -223,7 +224,8 @@ contract SystemConfig_Initialize_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)) + _superchainConfig: ISuperchainConfig(address(0)), + _minBasefeeLog2: 24 }); } } @@ -350,7 +352,8 @@ contract SystemConfig_StartBlock_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)) + _superchainConfig: ISuperchainConfig(address(0)), + _minBasefeeLog2: 24 }); assertEq(systemConfig.startBlock(), block.number); } @@ -381,7 +384,8 @@ contract SystemConfig_StartBlock_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)) + _superchainConfig: ISuperchainConfig(address(0)), + _minBasefeeLog2: 24 }); assertEq(systemConfig.startBlock(), 1); } @@ -678,7 +682,8 @@ contract SystemConfig_SetResourceConfig_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)) + _superchainConfig: ISuperchainConfig(address(0)), + _minBasefeeLog2: 24 }); } } diff --git a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol index ebf75b3280ef6..241177a54d403 100644 --- a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol @@ -47,7 +47,8 @@ contract SystemConfig_GasLimitBoundaries_Invariant is Test { optimismMintableERC20Factory: address(0) }), 1234, // _l2ChainId - ISuperchainConfig(address(0)) // _superchainConfig + ISuperchainConfig(address(0)), // _superchainConfig + 24 // _minBasefeeLog2 ) ) ); diff --git a/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol b/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol index d6e1d08523ca9..376e2abe21402 100644 --- a/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol +++ b/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol @@ -195,7 +195,8 @@ contract SetDisputeGameImpl_Test is Test { optimismMintableERC20Factory: address(7) }), 10, - ISuperchainConfig(address(supConfigProxy)) + ISuperchainConfig(address(supConfigProxy)), + 24 ) ); } diff --git a/packages/contracts-bedrock/test/vendor/Initializable.t.sol b/packages/contracts-bedrock/test/vendor/Initializable.t.sol index 5318d7d15fdca..24c19b1fabd5e 100644 --- a/packages/contracts-bedrock/test/vendor/Initializable.t.sol +++ b/packages/contracts-bedrock/test/vendor/Initializable.t.sol @@ -194,7 +194,8 @@ contract Initializer_Test is CommonTest { optimismMintableERC20Factory: address(0) }), 0, - ISuperchainConfig(address(0)) + ISuperchainConfig(address(0)), + 24 ) ) }) @@ -230,7 +231,8 @@ contract Initializer_Test is CommonTest { optimismMintableERC20Factory: address(0) }), 0, - ISuperchainConfig(address(0)) + ISuperchainConfig(address(0)), + 24 ) ) }) From d72ac6b2edbc39fc942ba0ac381328c390985a6e Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 10:58:10 -0400 Subject: [PATCH 10/56] use my geth --- go.sum | 2 + .../results.html | 821 ++++++++++++++++++ .../static/results.js | 299 +++++++ 3 files changed, 1122 insertions(+) create mode 100644 op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html create mode 100644 op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js diff --git a/go.sum b/go.sum index c315ef604bc20..496e124386770 100644 --- a/go.sum +++ b/go.sum @@ -904,6 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/wlawt/op-geth v0.0.0-20250718183035-a09d9e03fe4f h1:HmWHR9VxSntiG1HfwjcDexkc6DDsgVgzsSxdvgWvqXE= +github.com/wlawt/op-geth v0.0.0-20250718183035-a09d9e03fe4f/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html b/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html new file mode 100644 index 0000000000000..8ab45c0b22f37 --- /dev/null +++ b/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html @@ -0,0 +1,821 @@ + + + + + + Acceptance Test Results + + + +

Acceptance Test Results

+ +
+

Test Results

+

Network: simple-devnet

+

Run ID: e5c29011-c7cd-4080-8c42-b7f2d5b68d8e

+

Total Duration: 3m47.944s

+

Started: 2025-09-02 13:13:56 UTC

+ +
+ pass +
+ +
+
+
10
+
Total Tests
+
+
+
10
+
Passed
+
+
+
0
+
Failed
+
+ +
+
0
+
Errors
+
+
+
100.0%
+
Pass Rate
+
+
+
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: base + + 1m14.022s + #6 + View Log +
+
+ + + + + +
+ pass +
TestCLAdvance
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: base + + 5.799s + #7 + View Log +
+
+ + + + + + +
+ pass +
TestFaucetFund
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: base + + 12.109s + #8 + View Log +
+
+ + + + + + +
+ pass +
TestPublicRpcAdvance
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: base + + 12.756s + #9 + View Log +
+
+ + + + + + +
+ pass +
TestRPCConnectivity
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: base + + 2.662s + #10 + View Log +
+
+ + + + + + +
+ pass +
TestTransfer
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: base + + 15.163s + #11 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain + Gate: base + + 7.658s + #16 + View Log +
+
+ + + + + +
+ pass +
TestChainFork
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain + Gate: base + + 3.313s + #17 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit + Gate: base + + 47.15s + #13 + View Log +
+
+ + + + + +
+ pass +
TestL1ToL2Deposit
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit + Gate: base + + 42.681s + #14 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone + Gate: base + + 17.124s + #19 + View Log +
+
+ + + + + +
+ pass +
TestFees
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone + Gate: base + + 12.595s + #20 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: base + + 1m21.987s + #23 + View Log +
+
+ + + + + +
+ pass +
TestCheckFjordScript
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: base + + 27.801s + #24 + View Log +
+
+ + + + + + +
+ pass +
TestFees
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: base + + 45.107s + #25 + View Log +
+
+ + + + + + + + +
+ + + + \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js b/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js new file mode 100644 index 0000000000000..9d97eaef853fd --- /dev/null +++ b/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js @@ -0,0 +1,299 @@ +function filterTests() { + const query = document.getElementById('searchInput').value.toLowerCase(); + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + const text = item.textContent.toLowerCase(); + if (text.includes(query)) { + item.classList.remove('hidden'); + } else { + item.classList.add('hidden'); + } + }); + + // Show/hide package sections based on whether they have visible tests + packageSections.forEach(section => { + const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); + if (visibleTests.length > 0) { + section.classList.remove('hidden'); + } else { + section.classList.add('hidden'); + } + }); +} + +function showOnlyFailed() { + document.getElementById('searchInput').value = ''; + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + const status = item.dataset.status; + if (status === 'fail' || status === 'error') { + item.classList.remove('hidden'); + } else { + item.classList.add('hidden'); + } + }); + + // Show/hide package sections based on whether they have visible failed tests + packageSections.forEach(section => { + const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); + if (visibleTests.length > 0) { + section.classList.remove('hidden'); + } else { + section.classList.add('hidden'); + } + }); + + // Update button states + document.getElementById('showAllBtn').classList.remove('active'); + document.getElementById('showFailedBtn').classList.add('active'); +} + +function showAll() { + document.getElementById('searchInput').value = ''; + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + item.classList.remove('hidden'); + }); + + packageSections.forEach(section => { + section.classList.remove('hidden'); + }); + + // Update button states + document.getElementById('showFailedBtn').classList.remove('active'); + document.getElementById('showAllBtn').classList.add('active'); +} + +// Organize tests into proper hierarchy after page load +document.addEventListener('DOMContentLoaded', function() { + organizeTestHierarchy(); +}); + +function organizeTestHierarchy() { + const hierarchy = document.getElementById('testHierarchy'); + const testItems = Array.from(hierarchy.querySelectorAll('.test-item')); + + // If no tests, nothing to organize + if (testItems.length === 0) { + return; + } + + // Sort test items by execution order to maintain proper ordering + testItems.sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + + // Group tests by package and organize by type + const packageGroups = {}; + + testItems.forEach(item => { + const packageName = item.dataset.package || 'unknown'; + const isSubTest = item.dataset.isSubtest === 'true'; + const parentTest = item.dataset.parentTest || ''; + const testName = item.dataset.name; + + if (!packageGroups[packageName]) { + packageGroups[packageName] = { + packageTests: [], // Package-level test runners + individualTests: [], // Individual function tests + subtests: {}, // Subtests grouped by parent + orphanSubtests: [] // Subtests without a parent in this package + }; + } + + const group = packageGroups[packageName]; + + if (isSubTest && parentTest) { + // This is a subtest - group under its parent + if (!group.subtests[parentTest]) { + group.subtests[parentTest] = []; + } + group.subtests[parentTest].push(item); + // Add subtest styling + item.classList.add('subtest-item'); + } else if (testName && testName.includes('(package)')) { + // This is a package-level test runner + group.packageTests.push(item); + } else { + // This is an individual test + group.individualTests.push(item); + } + }); + + // Clear hierarchy and rebuild with proper organization + hierarchy.innerHTML = ''; + + // Iterate through packages in a consistent order (alphabetical) + const sortedPackages = Object.keys(packageGroups).sort(); + + sortedPackages.forEach(packageName => { + const group = packageGroups[packageName]; + + // Skip empty groups + if (group.packageTests.length === 0 && group.individualTests.length === 0 && Object.keys(group.subtests).length === 0) { + return; + } + + // Find the package-level test log path for this specific package + let packageLogPath = ''; + group.packageTests.forEach(packageTest => { + const logLink = packageTest.querySelector('.log-link'); + if (logLink) { + packageLogPath = logLink.getAttribute('href'); + } + }); + + // Create package section + const packageSection = document.createElement('div'); + packageSection.className = 'package-section'; + + // Determine package status based on contained tests + let hasFailures = false; + let hasSkipped = false; + [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { + if (item.classList.contains('fail') || item.classList.contains('error')) { + hasFailures = true; + } + if (item.classList.contains('skip')) { + hasSkipped = true; + } + }); + + if (hasFailures) { + packageSection.classList.add('fail'); + } else if (hasSkipped) { + packageSection.classList.add('skip'); + } + + // Create package header + const packageHeader = document.createElement('div'); + packageHeader.className = 'package-header'; + if (hasFailures) { + packageHeader.classList.add('fail'); + } else if (hasSkipped) { + packageHeader.classList.add('skip'); + } + + // Count stats for this package + let totalTests = group.packageTests.length + group.individualTests.length + Object.values(group.subtests).flat().length; + let passedTests = 0; + let failedTests = 0; + let skippedTests = 0; + + [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { + if (item.classList.contains('pass')) passedTests++; + else if (item.classList.contains('fail') || item.classList.contains('error')) failedTests++; + else if (item.classList.contains('skip')) skippedTests++; + }); + + packageHeader.innerHTML = ` +
${packageName}
+
+ ${totalTests} tests • + ${passedTests} passed • + ${failedTests} failed • + ${skippedTests} skipped + ${packageLogPath ? `View Package Log` : ''} +
+ `; + + packageSection.appendChild(packageHeader); + + // Add package-level test runners first + group.packageTests.forEach(test => { + packageSection.appendChild(test); + }); + + // Add individual tests and their subtests + group.individualTests.forEach(test => { + packageSection.appendChild(test); + const testName = test.dataset.name; + + // Add any subtests for this test + if (group.subtests[testName]) { + group.subtests[testName].sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + group.subtests[testName].forEach(subtest => { + packageSection.appendChild(subtest); + }); + // Mark these subtests as processed + delete group.subtests[testName]; + } + }); + + // Handle orphaned subtests (whose parents aren't in the individual tests list) + Object.keys(group.subtests).forEach(parentName => { + const subtests = group.subtests[parentName]; + if (subtests.length === 0) return; + + // Sort subtests by execution order + subtests.sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + + // Create a virtual parent test header for these orphaned subtests + const parentHeader = document.createElement('div'); + parentHeader.className = 'test-item virtual-parent'; + + // Determine the status of the parent based on subtests + let parentHasFailures = false; + let parentHasSkipped = false; + let parentAllPassed = true; + + subtests.forEach(subtest => { + if (subtest.classList.contains('fail') || subtest.classList.contains('error')) { + parentHasFailures = true; + parentAllPassed = false; + } + if (subtest.classList.contains('skip')) { + parentHasSkipped = true; + parentAllPassed = false; + } + }); + + let parentStatusClass = 'pass'; + let parentStatusText = 'PASS'; + if (parentHasFailures) { + parentStatusClass = 'fail'; + parentStatusText = 'FAIL'; + } else if (parentHasSkipped) { + parentStatusClass = 'skip'; + parentStatusText = 'SKIP'; + } + + parentHeader.classList.add(parentStatusClass); + parentHeader.innerHTML = ` + ${parentStatusText} +
${parentName}
+
+ ${packageName} + Gate: ${subtests[0].dataset.gate || ''} + - +
+ `; + + // Add the virtual parent header + packageSection.appendChild(parentHeader); + + // Add all subtests under this parent + subtests.forEach(subtest => { + packageSection.appendChild(subtest); + }); + }); + + hierarchy.appendChild(packageSection); + }); +} \ No newline at end of file From 36b6151f254981cd223d3a324f396e3b98932755 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 12:02:31 -0400 Subject: [PATCH 11/56] claude first pass --- go.sum | 4 +-- op-e2e/opgeth/op_geth.go | 4 +-- .../rollup/attributes/engine_consolidate.go | 12 ++++---- .../attributes/engine_consolidate_test.go | 15 +++++----- op-node/rollup/derive/attributes.go | 4 +-- op-node/rollup/derive/attributes_test.go | 2 +- op-node/rollup/derive/system_config.go | 3 +- op-node/rollup/derive/system_config_test.go | 2 +- .../interop/indexing/attributes_test.go | 3 +- .../client/l2/engineapi/block_processor.go | 20 ++++++++++--- .../client/l2/engineapi/l2_engine_api.go | 10 ++++++- op-program/client/l2/test/miner.go | 4 +-- op-service/eth/types.go | 29 +++++++++++++++++-- 13 files changed, 80 insertions(+), 32 deletions(-) diff --git a/go.sum b/go.sum index 496e124386770..df81b7750bd9b 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250718183035-a09d9e03fe4f h1:HmWHR9VxSntiG1HfwjcDexkc6DDsgVgzsSxdvgWvqXE= -github.com/wlawt/op-geth v0.0.0-20250718183035-a09d9e03fe4f/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= +github.com/wlawt/op-geth v0.0.0-20250721154228-89042ba245f5 h1:IvkDbjOhKY3uq9mXl3Q95gh3EazzEIgTUFtsbED3Gjs= +github.com/wlawt/op-geth v0.0.0-20250721154228-89042ba245f5/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-e2e/opgeth/op_geth.go b/op-e2e/opgeth/op_geth.go index a8b57ff5a093e..e2ea0cc79ea8a 100644 --- a/op-e2e/opgeth/op_geth.go +++ b/op-e2e/opgeth/op_geth.go @@ -239,8 +239,8 @@ func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.Payloa Withdrawals: withdrawals, ParentBeaconBlockRoot: parentBeaconBlockRoot, } - if d.L2ChainConfig.IsHolocene(uint64(timestamp)) { - attrs.EIP1559Params = new(eth.Bytes8) + if d.L2ChainConfig.IsJovian(uint64(timestamp)) || d.L2ChainConfig.IsHolocene(uint64(timestamp)) { + attrs.EIP1559Params = new(eth.Bytes9) *attrs.EIP1559Params = d.SystemConfig.EIP1559Params } return &attrs, nil diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index ce3597461147c..e18b6b754afa7 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -105,14 +105,14 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa // The validity checks are necessary because the Decode functions return 0,0 if the inputs are invalid. // But 0,0 are valid values during derivation, namely, if the SystemConfig doesn't set the parameters yet, // they are set to 0,0 and then the execution layer must translate them to the pre-Holocene constants. - if err := eip1559.ValidateHolocene1559Params(params); err != nil { + if err := eip1559.ValidateJovian1559Params(params); err != nil { // This would be a critical error, because the attributes are generated by derivation and must be valid. return fmt.Errorf("invalid attributes EIP1559 parameters: %w", err) } - ad, ae := eip1559.DecodeHolocene1559Params(params) + ad, ae, am := eip1559.DecodeJovian1559Params(params) var translated bool - // Translate 0,0 to the pre-Holocene protocol constants, like the EL does too. + // Translate 0,0,0 to the pre-Jovian protocol constants, like the EL does too. if ad == 0 { // If attrParams are non-nil, Holocene, and so Canyon, must be active. ad = *cfg.ChainOpConfig.EIP1559DenominatorCanyon @@ -130,15 +130,15 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa if ad != bd || ae != be { extraErr := "" if translated { - extraErr = " (translated from 0,0)" + extraErr = " (translated from 0,0,0)" } - return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d%s, block: %d, %d", ad, ae, extraErr, bd, be) + return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d, %d%s, block: %d, %d, %d", ad, ae, am, extraErr, bd, be, bm) } if bm == nil && attrMinBaseFee != nil || bm != nil && attrMinBaseFee == nil || bm != nil && attrMinBaseFee != nil && *bm != *attrMinBaseFee { return fmt.Errorf("minBaseFee does not match, attributes: %d, block: %d", attrMinBaseFee, bm) } } else if len(blockExtraData) > 0 { - // When deriving pre-Holocene blocks, the extraData must be empty. + // When deriving pre-Jovian blocks, the extraData must be empty. return fmt.Errorf("nil EIP1559Params in attributes but non-nil extraData in block: %v", blockExtraData) } return nil diff --git a/op-node/rollup/attributes/engine_consolidate_test.go b/op-node/rollup/attributes/engine_consolidate_test.go index 2f9cef28a709a..d3b4322589401 100644 --- a/op-node/rollup/attributes/engine_consolidate_test.go +++ b/op-node/rollup/attributes/engine_consolidate_test.go @@ -24,6 +24,7 @@ var defaultOpConfig = ¶ms.OptimismConfig{ EIP1559Elasticity: 6, EIP1559Denominator: 50, EIP1559DenominatorCanyon: ptr(uint64(250)), + EIP1559MinBaseFeeLog2: 20, } func ptr[T any](t T) *T { @@ -212,7 +213,7 @@ func createMismatchedFeeRecipient() matchArgs { } func createMismatchedEIP1559Params() matchArgs { - args := holoceneArgs() + args := jovianArgs() args.attrs.EIP1559Params[0]++ // so denominator is != 0 return args } @@ -545,15 +546,15 @@ func TestWithdrawalsMatch(t *testing.T) { } func TestCheckEIP1559ParamsMatch(t *testing.T) { - params := eth.Bytes8{1, 2, 3, 4, 5, 6, 7, 8} - paramsAlt := eth.Bytes8{1, 2, 3, 4, 5, 6, 7, 9} - paramsInvalid := eth.Bytes8{0, 0, 0, 0, 5, 6, 7, 8} + params := eth.Bytes9{1, 2, 3, 4, 5, 6, 7, 8, 9} + paramsAlt := eth.Bytes9{1, 2, 3, 4, 5, 6, 7, 9, 9} + paramsInvalid := eth.Bytes9{0, 0, 0, 0, 5, 6, 7, 8, 9} defaultExtraData := eth.BytesMax32(eip1559.EncodeHoloceneExtraData( *defaultOpConfig.EIP1559DenominatorCanyon, defaultOpConfig.EIP1559Elasticity)) for _, test := range []struct { desc string - attrParams *eth.Bytes8 + attrParams *eth.Bytes9 blockExtraData eth.BytesMax32 err string }{ @@ -562,7 +563,7 @@ func TestCheckEIP1559ParamsMatch(t *testing.T) { }, { desc: "match-zero-attrs", - attrParams: new(eth.Bytes8), + attrParams: new(eth.Bytes9), blockExtraData: defaultExtraData, }, { @@ -572,7 +573,7 @@ func TestCheckEIP1559ParamsMatch(t *testing.T) { }, { desc: "err-both-zero", - attrParams: new(eth.Bytes8), + attrParams: new(eth.Bytes9), blockExtraData: make(eth.BytesMax32, 9), err: "eip1559 parameters do not match, attributes: 250, 6 (translated from 0,0), block: 0, 0", }, diff --git a/op-node/rollup/derive/attributes.go b/op-node/rollup/derive/attributes.go index ca97fd3021c4f..14bccf2311fd5 100644 --- a/op-node/rollup/derive/attributes.go +++ b/op-node/rollup/derive/attributes.go @@ -194,8 +194,8 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex Withdrawals: withdrawals, ParentBeaconBlockRoot: parentBeaconRoot, } - if ba.rollupCfg.IsHolocene(nextL2Time) { - r.EIP1559Params = new(eth.Bytes8) + if ba.rollupCfg.IsJovian(nextL2Time) || ba.rollupCfg.IsHolocene(nextL2Time) { + r.EIP1559Params = new(eth.Bytes9) *r.EIP1559Params = sysConfig.EIP1559Params } if ba.rollupCfg.IsJovian(nextL2Time) { diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index 3be85d8406741..7a9e88749bfe1 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -302,7 +302,7 @@ func TestPreparePayloadAttributes(t *testing.T) { defer l1Fetcher.AssertExpectations(t) l2Parent := testutils.RandomL2BlockRef(rng) l1CfgFetcher := &testutils.MockL2Client{} - eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) + eip1559Params := eth.Bytes9([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}) testSysCfg := eth.SystemConfig{ BatcherAddr: common.Address{42}, Overhead: [32]byte{}, diff --git a/op-node/rollup/derive/system_config.go b/op-node/rollup/derive/system_config.go index 64e21ff15f33f..888c3f2d7d9a6 100644 --- a/op-node/rollup/derive/system_config.go +++ b/op-node/rollup/derive/system_config.go @@ -156,7 +156,8 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L if !solabi.EmptyReader(reader) { return NewCriticalError(errors.New("too many bytes")) } - copy(destSysCfg.EIP1559Params[:], params[24:32]) + // Copy 9 bytes for Jovian (was 8 bytes for Holocene): params[23:32] contains denominator(4) + elasticity(4) + minBaseFeeLog2(1) + copy(destSysCfg.EIP1559Params[:], params[23:32]) return nil case SystemConfigUpdateOperatorFeeParams: if pointer, err := solabi.ReadUint64(reader); err != nil || pointer != 32 { diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index 5906f26cbea77..129efe6e69c73 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -205,7 +205,7 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { return log }, config: eth.SystemConfig{ - EIP1559Params: eth.Bytes8(eip1559Params), + EIP1559Params: eth.Bytes9(append(eip1559Params, 0)), // Add 1 zero byte for MinBaseFeeLog2 }, err: false, }, diff --git a/op-node/rollup/interop/indexing/attributes_test.go b/op-node/rollup/interop/indexing/attributes_test.go index 69f6572367002..4e82c0731ee6a 100644 --- a/op-node/rollup/interop/indexing/attributes_test.go +++ b/op-node/rollup/interop/indexing/attributes_test.go @@ -85,9 +85,10 @@ func TestAttributesToReplaceInvalidBlock(t *testing.T) { require.Equal(t, uint8(types.DepositTxType), attrs.Transactions[1][0], "remove user tx, add optimistic block system tx") require.True(t, attrs.NoTxPool) require.Equal(t, invalidatedBlock.ExecutionPayload.GasLimit, *attrs.GasLimit) - d, e := eip1559.DecodeHolocene1559Params(attrs.EIP1559Params[:]) + d, e, m := eip1559.DecodeJovian1559Params(attrs.EIP1559Params[:]) require.Equal(t, denominator, d) require.Equal(t, elasticity, e) + require.Equal(t, uint64(0), m) // Should be 0 when converted from Holocene result, err := DecodeInvalidatedBlockTxFromReplacement(attrs.Transactions) require.NoError(t, err) require.Equal(t, invalidatedBlock.ExecutionPayload.BlockHash, result.BlockHash) diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index 26906d970ec42..135f00623cc04 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -56,10 +56,22 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c ParentBeaconRoot: attrs.ParentBeaconBlockRoot, } if attrs.EIP1559Params != nil { - d, e := eip1559.DecodeHolocene1559Params(attrs.EIP1559Params[:]) - if d == 0 { - d = provider.Config().BaseFeeChangeDenominator(header.Time) - e = provider.Config().ElasticityMultiplier() + if provider.Config().IsJovian(header.Time) { + d, e, m := eip1559.DecodeJovian1559Params(attrs.EIP1559Params[:]) + if d == 0 { + d = provider.Config().BaseFeeChangeDenominator(header.Time) + e = provider.Config().ElasticityMultiplier() + m = 20 // Default MinBaseFeeLog2 to 20 when not configured + } + header.Extra = eip1559.EncodeJovianExtraData(d, e, m) + } else { + // Backward compatibility: decode as Jovian but encode as Holocene + d, e, _ := eip1559.DecodeJovian1559Params(attrs.EIP1559Params[:]) + if d == 0 { + d = provider.Config().BaseFeeChangeDenominator(header.Time) + e = provider.Config().ElasticityMultiplier() + } + header.Extra = eip1559.EncodeHoloceneExtraData(d, e) } if provider.Config().IsOptimismHolocene(header.Time) { header.Extra = eip1559.EncodeOptimismExtraData(provider.Config(), header.Time, d, e, attrs.MinBaseFee) diff --git a/op-program/client/l2/engineapi/l2_engine_api.go b/op-program/client/l2/engineapi/l2_engine_api.go index d3a42079391c1..8c9c804fe8f94 100644 --- a/op-program/client/l2/engineapi/l2_engine_api.go +++ b/op-program/client/l2/engineapi/l2_engine_api.go @@ -290,7 +290,15 @@ func (ea *L2EngineAPI) verifyPayloadAttributes(attr *eth.PayloadAttributes) erro return fmt.Errorf("invalid parent beacon block root: %w", err) } // Verify EIP-1559 params for Holocene. - if c.IsHolocene(t) { + if c.IsJovian(t) { + if attr.EIP1559Params == nil { + //nolint:err113 // Do not use non-dynamic errors here to keep this function very similar to op-geth + return errors.New("got nil eip-1559 params while Jovian is active") + } + if err := eip1559.ValidateJovian1559Params(attr.EIP1559Params[:]); err != nil { + return fmt.Errorf("invalid Jovian params: %w", err) + } + } else if c.IsHolocene(t) { if attr.EIP1559Params == nil { //nolint:err113 // Do not use non-dynamic errors here to keep this function very similar to op-geth return errors.New("got nil eip-1559 params while Holocene is active") diff --git a/op-program/client/l2/test/miner.go b/op-program/client/l2/test/miner.go index 7c5247bc7f96e..d060a744d0bef 100644 --- a/op-program/client/l2/test/miner.go +++ b/op-program/client/l2/test/miner.go @@ -111,7 +111,7 @@ func (m *Miner) Fork(t *testing.T, blockNumber uint64, attrs *eth.PayloadAttribu head := m.backend.GetHeaderByNumber(blockNumber) if attrs == nil { gasLimit := eth.Uint64Quantity(head.GasLimit) - eip1559Params := eth.Bytes8([]byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) + eip1559Params := eth.Bytes9([]byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}) attrs = ð.PayloadAttributes{ Timestamp: eth.Uint64Quantity(head.Time + 2), PrevRandao: eth.Bytes32{0x11}, @@ -134,7 +134,7 @@ func (m *Miner) MineAt(t *testing.T, head *types.Header, attrs *eth.PayloadAttri hash := head.Hash() genesis := m.backend.Genesis() if attrs == nil { - eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) + eip1559Params := eth.Bytes9([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}) gasLimit := eth.Uint64Quantity(4712388) attrs = ð.PayloadAttributes{ Timestamp: eth.Uint64Quantity(head.Time + 2), diff --git a/op-service/eth/types.go b/op-service/eth/types.go index 365060132b2d1..98a83b2f60406 100644 --- a/op-service/eth/types.go +++ b/op-service/eth/types.go @@ -145,6 +145,30 @@ func (b Bytes8) TerminalString() string { return fmt.Sprintf("0x%x", b[:]) } +type Bytes9 [9]byte + +func (b *Bytes9) UnmarshalJSON(text []byte) error { + return hexutil.UnmarshalFixedJSON(reflect.TypeOf(b), text, b[:]) +} + +func (b *Bytes9) UnmarshalText(text []byte) error { + return hexutil.UnmarshalFixedText("Bytes9", text, b[:]) +} + +func (b Bytes9) MarshalText() ([]byte, error) { + return hexutil.Bytes(b[:]).MarshalText() +} + +func (b Bytes9) String() string { + return hexutil.Encode(b[:]) +} + +// TerminalString implements log.TerminalStringer, formatting a string for console +// output during logging. +func (b Bytes9) TerminalString() string { + return fmt.Sprintf("0x%x", b[:]) +} + type Bytes96 [96]byte func (b *Bytes96) UnmarshalJSON(text []byte) error { @@ -607,10 +631,11 @@ type SystemConfig struct { Scalar Bytes32 `json:"scalar"` // GasLimit identifies the L2 block gas limit GasLimit uint64 `json:"gasLimit"` - // EIP1559Params contains the Holocene-encoded EIP-1559 parameters. This + // EIP1559Params contains the Holocene/Jovian-encoded EIP-1559 parameters. This // value will be 0 if Holocene is not active, or if derivation has yet to // process any EIP_1559_PARAMS system config update events. - EIP1559Params Bytes8 `json:"eip1559Params"` + // Bytes8 for Holocene, Bytes9 for Jovian+ (with MinBaseFeeLog2). + EIP1559Params Bytes9 `json:"eip1559Params"` // OperatorFeeParams identifies the operator fee parameters. OperatorFeeParams Bytes32 `json:"operatorFeeParams"` // More fields can be added for future SystemConfig versions. From fa7f163dc375b1c9f9ce7f578502a5d9150b3554 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 12:11:40 -0400 Subject: [PATCH 12/56] claude second pass --- go.sum | 4 ++-- op-node/rollup/attributes/engine_consolidate_test.go | 2 +- op-program/client/l2/engineapi/l2_engine_api_test.go | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/go.sum b/go.sum index df81b7750bd9b..adecac2f9a862 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250721154228-89042ba245f5 h1:IvkDbjOhKY3uq9mXl3Q95gh3EazzEIgTUFtsbED3Gjs= -github.com/wlawt/op-geth v0.0.0-20250721154228-89042ba245f5/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= +github.com/wlawt/op-geth v0.0.0-20250721160331-ec364000fb7a h1:2Abx2m0vJUtN3lCWNemvcTaEvVwKBdg0Wry7CSPVpoU= +github.com/wlawt/op-geth v0.0.0-20250721160331-ec364000fb7a/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-node/rollup/attributes/engine_consolidate_test.go b/op-node/rollup/attributes/engine_consolidate_test.go index d3b4322589401..76bb50072e371 100644 --- a/op-node/rollup/attributes/engine_consolidate_test.go +++ b/op-node/rollup/attributes/engine_consolidate_test.go @@ -24,7 +24,7 @@ var defaultOpConfig = ¶ms.OptimismConfig{ EIP1559Elasticity: 6, EIP1559Denominator: 50, EIP1559DenominatorCanyon: ptr(uint64(250)), - EIP1559MinBaseFeeLog2: 20, + EIP1559MinBaseFeeLog2: 20, } func ptr[T any](t T) *T { diff --git a/op-program/client/l2/engineapi/l2_engine_api_test.go b/op-program/client/l2/engineapi/l2_engine_api_test.go index c717917f4f339..29e3ac5de0b1c 100644 --- a/op-program/client/l2/engineapi/l2_engine_api_test.go +++ b/op-program/client/l2/engineapi/l2_engine_api_test.go @@ -11,6 +11,7 @@ import ( "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" From 3deaac77e8ad440ee2157c46280d54665e8d0558 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 13:31:37 -0400 Subject: [PATCH 13/56] op-e2e/bindings abigen l1block and systemconfig --- op- | 2217 +++++++++++++++++ op-e2e/bindings/l1block.go | 61 +- op-e2e/bindings/systemconfig.go | 381 ++- packages/contracts-bedrock/SystemConfig.abi | 993 ++++++++ packages/contracts-bedrock/SystemConfig.bin | 1 + .../contracts-bedrock/src/L1/SystemConfig.sol | 2 +- 6 files changed, 3600 insertions(+), 55 deletions(-) create mode 100644 op- create mode 100644 packages/contracts-bedrock/SystemConfig.abi create mode 100644 packages/contracts-bedrock/SystemConfig.bin diff --git a/op- b/op- new file mode 100644 index 0000000000000..1d8366a76ab3a --- /dev/null +++ b/op- @@ -0,0 +1,2217 @@ +// Code generated - DO NOT EDIT. +// This file is a generated binding and any manual changes will be lost. + +package bindings + +import ( + "errors" + "math/big" + "strings" + + ethereum "github.com/ethereum/go-ethereum" + "github.com/ethereum/go-ethereum/accounts/abi" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/event" +) + +// Reference imports to suppress errors if they are not otherwise used. +var ( + _ = errors.New + _ = big.NewInt + _ = strings.NewReader + _ = ethereum.NotFound + _ = bind.Bind + _ = common.Big1 + _ = types.BloomLookup + _ = event.NewSubscription + _ = abi.ConvertType +) + +// IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. +type IResourceMeteringResourceConfig struct { + MaxResourceLimit uint32 + ElasticityMultiplier uint8 + BaseFeeMaxChangeDenominator uint8 + MinimumBaseFee uint32 + SystemTxMaxGas uint32 + MaximumBaseFee *big.Int +} + +// SystemConfigAddresses is an auto generated low-level Go binding around an user-defined struct. +type SystemConfigAddresses struct { + L1CrossDomainMessenger common.Address + L1ERC721Bridge common.Address + L1StandardBridge common.Address + OptimismPortal common.Address + OptimismMintableERC20Factory common.Address +} + +// SystemConfigMetaData contains all meta data concerning the SystemConfig contract. +var SystemConfigMetaData = &bind.MetaData{ + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"},{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBasefeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBasefeeLog2\",\"inputs\":[{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ce578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bc49ce5f14610697578063bfb14fb71461069f578063c0fd4b41146106bb57600080fd5b8063a7119869116101a2578063a711986914610657578063b3ae5a3f1461065f578063b40a817c1461068457600080fd5b8063935f029e146105d85780639b7d7f0a146105eb578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635c975abb1161021a5780635c975abb146105925780635d73369c146105aa578063715018a6146105b25780638da5cb5b146105ba57600080fd5b80634f16540b1461051957806354fd4d501461054057806357705b3c1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61037a61058d366004612be4565b61124c565b61059a61125d565b604051901515815260200161038e565b61038461140b565b61037a611436565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105e6366004612bff565b61144a565b61039f61145c565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a610692366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106c9366004612898565b6115df565b61039f6115f1565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b6112546118ec565b610b8381611e5c565b600080611268610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612d21565b806114055750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61143e6118ec565b61144860006123f4565b565b6114526118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661145c565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611448576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361144857611448611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b600060208284031215612bf657600080fd5b61289182612912565b60008060408385031215612c1257600080fd5b50508035926020909101359150565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a", +} + +// SystemConfigABI is the input ABI used to generate the binding from. +// Deprecated: Use SystemConfigMetaData.ABI instead. +var SystemConfigABI = SystemConfigMetaData.ABI + +// SystemConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SystemConfigMetaData.Bin instead. +var SystemConfigBin = SystemConfigMetaData.Bin + +// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { + parsed, err := SystemConfigMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil +} + +// SystemConfig is an auto generated Go binding around an Ethereum contract. +type SystemConfig struct { + SystemConfigCaller // Read-only binding to the contract + SystemConfigTransactor // Write-only binding to the contract + SystemConfigFilterer // Log filterer for contract events +} + +// SystemConfigCaller is an auto generated read-only Go binding around an Ethereum contract. +type SystemConfigCaller struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. +type SystemConfigTransactor struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. +type SystemConfigFilterer struct { + contract *bind.BoundContract // Generic contract wrapper for the low level calls +} + +// SystemConfigSession is an auto generated Go binding around an Ethereum contract, +// with pre-set call and transact options. +type SystemConfigSession struct { + Contract *SystemConfig // Generic contract binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, +// with pre-set call options. +type SystemConfigCallerSession struct { + Contract *SystemConfigCaller // Generic contract caller binding to set the session for + CallOpts bind.CallOpts // Call options to use throughout this session +} + +// SystemConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, +// with pre-set transact options. +type SystemConfigTransactorSession struct { + Contract *SystemConfigTransactor // Generic contract transactor binding to set the session for + TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session +} + +// SystemConfigRaw is an auto generated low-level Go binding around an Ethereum contract. +type SystemConfigRaw struct { + Contract *SystemConfig // Generic contract binding to access the raw methods on +} + +// SystemConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. +type SystemConfigCallerRaw struct { + Contract *SystemConfigCaller // Generic read-only contract binding to access the raw methods on +} + +// SystemConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. +type SystemConfigTransactorRaw struct { + Contract *SystemConfigTransactor // Generic write-only contract binding to access the raw methods on +} + +// NewSystemConfig creates a new instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfig(address common.Address, backend bind.ContractBackend) (*SystemConfig, error) { + contract, err := bindSystemConfig(address, backend, backend, backend) + if err != nil { + return nil, err + } + return &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil +} + +// NewSystemConfigCaller creates a new read-only instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfigCaller(address common.Address, caller bind.ContractCaller) (*SystemConfigCaller, error) { + contract, err := bindSystemConfig(address, caller, nil, nil) + if err != nil { + return nil, err + } + return &SystemConfigCaller{contract: contract}, nil +} + +// NewSystemConfigTransactor creates a new write-only instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*SystemConfigTransactor, error) { + contract, err := bindSystemConfig(address, nil, transactor, nil) + if err != nil { + return nil, err + } + return &SystemConfigTransactor{contract: contract}, nil +} + +// NewSystemConfigFilterer creates a new log filterer instance of SystemConfig, bound to a specific deployed contract. +func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*SystemConfigFilterer, error) { + contract, err := bindSystemConfig(address, nil, nil, filterer) + if err != nil { + return nil, err + } + return &SystemConfigFilterer{contract: contract}, nil +} + +// bindSystemConfig binds a generic wrapper to an already deployed contract. +func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { + parsed, err := SystemConfigMetaData.GetAbi() + if err != nil { + return nil, err + } + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemConfig *SystemConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemConfig.Contract.SystemConfigCaller.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemConfig *SystemConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfig.Contract.SystemConfigTransactor.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemConfig *SystemConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemConfig.Contract.SystemConfigTransactor.contract.Transact(opts, method, params...) +} + +// Call invokes the (constant) contract method with params as input values and +// sets the output to result. The result type might be a single field for simple +// returns, a slice of interfaces for anonymous returns and a struct for named +// returns. +func (_SystemConfig *SystemConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { + return _SystemConfig.Contract.contract.Call(opts, result, method, params...) +} + +// Transfer initiates a plain transaction to move funds to the contract, calling +// its default method if one is available. +func (_SystemConfig *SystemConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfig.Contract.contract.Transfer(opts) +} + +// Transact invokes the (paid) contract method with params as input values. +func (_SystemConfig *SystemConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { + return _SystemConfig.Contract.contract.Transact(opts, method, params...) +} + +// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. +// +// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) BATCHINBOXSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "BATCH_INBOX_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. +// +// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) BATCHINBOXSLOT() ([32]byte, error) { + return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) +} + +// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. +// +// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, error) { + return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) +} + +// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. +// +// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L1CROSSDOMAINMESSENGERSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. +// +// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) +} + +// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. +// +// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) +} + +// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. +// +// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L1ERC721BRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L1_ERC_721_BRIDGE_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. +// +// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L1ERC721BRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. +// +// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L1ERC721BRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. +// +// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) L1STANDARDBRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "L1_STANDARD_BRIDGE_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. +// +// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) +} + +// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. +// +// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { + return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. +// +// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) OPTIMISMMINTABLEERC20FACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. +// +// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. +// +// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. +// +// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) OPTIMISMPORTALSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_PORTAL_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. +// +// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) OPTIMISMPORTALSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) +} + +// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. +// +// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) OPTIMISMPORTALSLOT() ([32]byte, error) { + return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) +} + +// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. +// +// Solidity: function START_BLOCK_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) STARTBLOCKSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "START_BLOCK_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. +// +// Solidity: function START_BLOCK_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) STARTBLOCKSLOT() ([32]byte, error) { + return _SystemConfig.Contract.STARTBLOCKSLOT(&_SystemConfig.CallOpts) +} + +// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. +// +// Solidity: function START_BLOCK_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) STARTBLOCKSLOT() ([32]byte, error) { + return _SystemConfig.Contract.STARTBLOCKSLOT(&_SystemConfig.CallOpts) +} + +// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. +// +// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) UNSAFEBLOCKSIGNERSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "UNSAFE_BLOCK_SIGNER_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. +// +// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) +} + +// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. +// +// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { + return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) VERSION(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "VERSION") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_SystemConfig *SystemConfigSession) VERSION() (*big.Int, error) { + return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) +} + +// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. +// +// Solidity: function VERSION() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) VERSION() (*big.Int, error) { + return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) +} + +// BasefeeScalar is a free data retrieval call binding the contract method 0xbfb14fb7. +// +// Solidity: function basefeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigCaller) BasefeeScalar(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "basefeeScalar") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// BasefeeScalar is a free data retrieval call binding the contract method 0xbfb14fb7. +// +// Solidity: function basefeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigSession) BasefeeScalar() (uint32, error) { + return _SystemConfig.Contract.BasefeeScalar(&_SystemConfig.CallOpts) +} + +// BasefeeScalar is a free data retrieval call binding the contract method 0xbfb14fb7. +// +// Solidity: function basefeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigCallerSession) BasefeeScalar() (uint32, error) { + return _SystemConfig.Contract.BasefeeScalar(&_SystemConfig.CallOpts) +} + +// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. +// +// Solidity: function batchInbox() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) BatchInbox(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "batchInbox") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. +// +// Solidity: function batchInbox() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) BatchInbox() (common.Address, error) { + return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) +} + +// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. +// +// Solidity: function batchInbox() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) BatchInbox() (common.Address, error) { + return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) BatcherHash(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "batcherHash") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) BatcherHash() ([32]byte, error) { + return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) +} + +// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. +// +// Solidity: function batcherHash() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) BatcherHash() ([32]byte, error) { + return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) +} + +// BlobbasefeeScalar is a free data retrieval call binding the contract method 0xec707517. +// +// Solidity: function blobbasefeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigCaller) BlobbasefeeScalar(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "blobbasefeeScalar") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// BlobbasefeeScalar is a free data retrieval call binding the contract method 0xec707517. +// +// Solidity: function blobbasefeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigSession) BlobbasefeeScalar() (uint32, error) { + return _SystemConfig.Contract.BlobbasefeeScalar(&_SystemConfig.CallOpts) +} + +// BlobbasefeeScalar is a free data retrieval call binding the contract method 0xec707517. +// +// Solidity: function blobbasefeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigCallerSession) BlobbasefeeScalar() (uint32, error) { + return _SystemConfig.Contract.BlobbasefeeScalar(&_SystemConfig.CallOpts) +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) DisputeGameFactory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "disputeGameFactory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) DisputeGameFactory() (common.Address, error) { + return _SystemConfig.Contract.DisputeGameFactory(&_SystemConfig.CallOpts) +} + +// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. +// +// Solidity: function disputeGameFactory() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) DisputeGameFactory() (common.Address, error) { + return _SystemConfig.Contract.DisputeGameFactory(&_SystemConfig.CallOpts) +} + +// Eip1559Denominator is a free data retrieval call binding the contract method 0xd220a9e0. +// +// Solidity: function eip1559Denominator() view returns(uint32) +func (_SystemConfig *SystemConfigCaller) Eip1559Denominator(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "eip1559Denominator") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// Eip1559Denominator is a free data retrieval call binding the contract method 0xd220a9e0. +// +// Solidity: function eip1559Denominator() view returns(uint32) +func (_SystemConfig *SystemConfigSession) Eip1559Denominator() (uint32, error) { + return _SystemConfig.Contract.Eip1559Denominator(&_SystemConfig.CallOpts) +} + +// Eip1559Denominator is a free data retrieval call binding the contract method 0xd220a9e0. +// +// Solidity: function eip1559Denominator() view returns(uint32) +func (_SystemConfig *SystemConfigCallerSession) Eip1559Denominator() (uint32, error) { + return _SystemConfig.Contract.Eip1559Denominator(&_SystemConfig.CallOpts) +} + +// Eip1559Elasticity is a free data retrieval call binding the contract method 0xc9ff2d16. +// +// Solidity: function eip1559Elasticity() view returns(uint32) +func (_SystemConfig *SystemConfigCaller) Eip1559Elasticity(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "eip1559Elasticity") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// Eip1559Elasticity is a free data retrieval call binding the contract method 0xc9ff2d16. +// +// Solidity: function eip1559Elasticity() view returns(uint32) +func (_SystemConfig *SystemConfigSession) Eip1559Elasticity() (uint32, error) { + return _SystemConfig.Contract.Eip1559Elasticity(&_SystemConfig.CallOpts) +} + +// Eip1559Elasticity is a free data retrieval call binding the contract method 0xc9ff2d16. +// +// Solidity: function eip1559Elasticity() view returns(uint32) +func (_SystemConfig *SystemConfigCallerSession) Eip1559Elasticity() (uint32, error) { + return _SystemConfig.Contract.Eip1559Elasticity(&_SystemConfig.CallOpts) +} + +// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. +// +// Solidity: function gasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) GasLimit(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "gasLimit") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. +// +// Solidity: function gasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigSession) GasLimit() (uint64, error) { + return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) +} + +// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. +// +// Solidity: function gasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { + return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) +} + +// GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. +// +// Solidity: function getAddresses() view returns((address,address,address,address,address)) +func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "getAddresses") + + if err != nil { + return *new(SystemConfigAddresses), err + } + + out0 := *abi.ConvertType(out[0], new(SystemConfigAddresses)).(*SystemConfigAddresses) + + return out0, err + +} + +// GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. +// +// Solidity: function getAddresses() view returns((address,address,address,address,address)) +func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { + return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) +} + +// GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. +// +// Solidity: function getAddresses() view returns((address,address,address,address,address)) +func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { + return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "guardian") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigSession) Guardian() (common.Address, error) { + return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) Guardian() (common.Address, error) { + return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) InitVersion(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "initVersion") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigSession) InitVersion() (uint8, error) { + return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) InitVersion() (uint8, error) { + return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) +} + +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. +// +// Solidity: function l1CrossDomainMessenger() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L1CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l1CrossDomainMessenger") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. +// +// Solidity: function l1CrossDomainMessenger() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L1CrossDomainMessenger() (common.Address, error) { + return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) +} + +// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. +// +// Solidity: function l1CrossDomainMessenger() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L1CrossDomainMessenger() (common.Address, error) { + return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) +} + +// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. +// +// Solidity: function l1ERC721Bridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L1ERC721Bridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l1ERC721Bridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. +// +// Solidity: function l1ERC721Bridge() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L1ERC721Bridge() (common.Address, error) { + return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) +} + +// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. +// +// Solidity: function l1ERC721Bridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L1ERC721Bridge() (common.Address, error) { + return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) +} + +// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. +// +// Solidity: function l1StandardBridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) L1StandardBridge(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l1StandardBridge") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. +// +// Solidity: function l1StandardBridge() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) L1StandardBridge() (common.Address, error) { + return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) +} + +// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. +// +// Solidity: function l1StandardBridge() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Address, error) { + return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l2ChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigSession) L2ChainId() (*big.Int, error) { + return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) L2ChainId() (*big.Int, error) { + return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) +} + +// MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. +// +// Solidity: function maximumGasLimit() pure returns(uint64) +func (_SystemConfig *SystemConfigCaller) MaximumGasLimit(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "maximumGasLimit") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. +// +// Solidity: function maximumGasLimit() pure returns(uint64) +func (_SystemConfig *SystemConfigSession) MaximumGasLimit() (uint64, error) { + return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) +} + +// MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. +// +// Solidity: function maximumGasLimit() pure returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error) { + return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minBasefeeLog2") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigSession) MinBasefeeLog2() (uint8, error) { + return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) MinBasefeeLog2() (uint8, error) { + return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minimumGasLimit") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigSession) MinimumGasLimit() (uint64, error) { + return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) +} + +// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. +// +// Solidity: function minimumGasLimit() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (uint64, error) { + return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) +} + +// OperatorFeeConstant is a free data retrieval call binding the contract method 0x16d3bc7f. +// +// Solidity: function operatorFeeConstant() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) OperatorFeeConstant(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "operatorFeeConstant") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// OperatorFeeConstant is a free data retrieval call binding the contract method 0x16d3bc7f. +// +// Solidity: function operatorFeeConstant() view returns(uint64) +func (_SystemConfig *SystemConfigSession) OperatorFeeConstant() (uint64, error) { + return _SystemConfig.Contract.OperatorFeeConstant(&_SystemConfig.CallOpts) +} + +// OperatorFeeConstant is a free data retrieval call binding the contract method 0x16d3bc7f. +// +// Solidity: function operatorFeeConstant() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) OperatorFeeConstant() (uint64, error) { + return _SystemConfig.Contract.OperatorFeeConstant(&_SystemConfig.CallOpts) +} + +// OperatorFeeScalar is a free data retrieval call binding the contract method 0x4d5d9a2a. +// +// Solidity: function operatorFeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigCaller) OperatorFeeScalar(opts *bind.CallOpts) (uint32, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "operatorFeeScalar") + + if err != nil { + return *new(uint32), err + } + + out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) + + return out0, err + +} + +// OperatorFeeScalar is a free data retrieval call binding the contract method 0x4d5d9a2a. +// +// Solidity: function operatorFeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigSession) OperatorFeeScalar() (uint32, error) { + return _SystemConfig.Contract.OperatorFeeScalar(&_SystemConfig.CallOpts) +} + +// OperatorFeeScalar is a free data retrieval call binding the contract method 0x4d5d9a2a. +// +// Solidity: function operatorFeeScalar() view returns(uint32) +func (_SystemConfig *SystemConfigCallerSession) OperatorFeeScalar() (uint32, error) { + return _SystemConfig.Contract.OperatorFeeScalar(&_SystemConfig.CallOpts) +} + +// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. +// +// Solidity: function optimismMintableERC20Factory() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) OptimismMintableERC20Factory(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "optimismMintableERC20Factory") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. +// +// Solidity: function optimismMintableERC20Factory() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) OptimismMintableERC20Factory() (common.Address, error) { + return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) +} + +// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. +// +// Solidity: function optimismMintableERC20Factory() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) OptimismMintableERC20Factory() (common.Address, error) { + return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) +} + +// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. +// +// Solidity: function optimismPortal() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) OptimismPortal(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "optimismPortal") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. +// +// Solidity: function optimismPortal() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) OptimismPortal() (common.Address, error) { + return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) +} + +// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. +// +// Solidity: function optimismPortal() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) OptimismPortal() (common.Address, error) { + return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) Overhead(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "overhead") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_SystemConfig *SystemConfigSession) Overhead() (*big.Int, error) { + return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) +} + +// Overhead is a free data retrieval call binding the contract method 0x0c18c162. +// +// Solidity: function overhead() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) Overhead() (*big.Int, error) { + return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfig *SystemConfigCaller) Owner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.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 (_SystemConfig *SystemConfigSession) Owner() (common.Address, error) { + return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) +} + +// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. +// +// Solidity: function owner() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) { + return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigSession) Paused() (bool, error) { + return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { + return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigCaller) ProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "proxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigSession) ProxyAdmin() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) ProxyAdmin() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigCaller) ProxyAdminOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "proxyAdminOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigSession) ProxyAdminOwner() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) ProxyAdminOwner() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) +} + +// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. +// +// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) +func (_SystemConfig *SystemConfigCaller) ResourceConfig(opts *bind.CallOpts) (IResourceMeteringResourceConfig, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "resourceConfig") + + if err != nil { + return *new(IResourceMeteringResourceConfig), err + } + + out0 := *abi.ConvertType(out[0], new(IResourceMeteringResourceConfig)).(*IResourceMeteringResourceConfig) + + return out0, err + +} + +// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. +// +// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) +func (_SystemConfig *SystemConfigSession) ResourceConfig() (IResourceMeteringResourceConfig, error) { + return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) +} + +// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. +// +// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) +func (_SystemConfig *SystemConfigCallerSession) ResourceConfig() (IResourceMeteringResourceConfig, error) { + return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) Scalar(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "scalar") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_SystemConfig *SystemConfigSession) Scalar() (*big.Int, error) { + return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) +} + +// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. +// +// Solidity: function scalar() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) Scalar() (*big.Int, error) { + return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) +} + +// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. +// +// Solidity: function startBlock() view returns(uint256 startBlock_) +func (_SystemConfig *SystemConfigCaller) StartBlock(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "startBlock") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. +// +// Solidity: function startBlock() view returns(uint256 startBlock_) +func (_SystemConfig *SystemConfigSession) StartBlock() (*big.Int, error) { + return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) +} + +// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. +// +// Solidity: function startBlock() view returns(uint256 startBlock_) +func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { + return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "superchainConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigSession) SuperchainConfig() (common.Address, error) { + return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) SuperchainConfig() (common.Address, error) { + return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) +} + +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// +// Solidity: function unsafeBlockSigner() view returns(address addr_) +func (_SystemConfig *SystemConfigCaller) UnsafeBlockSigner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "unsafeBlockSigner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// +// Solidity: function unsafeBlockSigner() view returns(address addr_) +func (_SystemConfig *SystemConfigSession) UnsafeBlockSigner() (common.Address, error) { + return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) +} + +// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. +// +// Solidity: function unsafeBlockSigner() view returns(address addr_) +func (_SystemConfig *SystemConfigCallerSession) UnsafeBlockSigner() (common.Address, error) { + return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() pure returns(string) +func (_SystemConfig *SystemConfigCaller) Version(opts *bind.CallOpts) (string, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "version") + + if err != nil { + return *new(string), err + } + + out0 := *abi.ConvertType(out[0], new(string)).(*string) + + return out0, err + +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() pure returns(string) +func (_SystemConfig *SystemConfigSession) Version() (string, error) { + return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) +} + +// Version is a free data retrieval call binding the contract method 0x54fd4d50. +// +// Solidity: function version() pure returns(string) +func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { + return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) +} + +// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. +// +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) +} + +// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. +// +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) +} + +// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. +// +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfig *SystemConfigTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "renounceOwnership") +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfig *SystemConfigSession) RenounceOwnership() (*types.Transaction, error) { + return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) +} + +// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. +// +// Solidity: function renounceOwnership() returns() +func (_SystemConfig *SystemConfigTransactorSession) RenounceOwnership() (*types.Transaction, error) { + return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) +} + +// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. +// +// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() +func (_SystemConfig *SystemConfigTransactor) SetBatcherHash(opts *bind.TransactOpts, _batcherHash [32]byte) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setBatcherHash", _batcherHash) +} + +// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. +// +// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() +func (_SystemConfig *SystemConfigSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { + return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) +} + +// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. +// +// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { + return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) +} + +// SetEIP1559Params is a paid mutator transaction binding the contract method 0xc0fd4b41. +// +// Solidity: function setEIP1559Params(uint32 _denominator, uint32 _elasticity) returns() +func (_SystemConfig *SystemConfigTransactor) SetEIP1559Params(opts *bind.TransactOpts, _denominator uint32, _elasticity uint32) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setEIP1559Params", _denominator, _elasticity) +} + +// SetEIP1559Params is a paid mutator transaction binding the contract method 0xc0fd4b41. +// +// Solidity: function setEIP1559Params(uint32 _denominator, uint32 _elasticity) returns() +func (_SystemConfig *SystemConfigSession) SetEIP1559Params(_denominator uint32, _elasticity uint32) (*types.Transaction, error) { + return _SystemConfig.Contract.SetEIP1559Params(&_SystemConfig.TransactOpts, _denominator, _elasticity) +} + +// SetEIP1559Params is a paid mutator transaction binding the contract method 0xc0fd4b41. +// +// Solidity: function setEIP1559Params(uint32 _denominator, uint32 _elasticity) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetEIP1559Params(_denominator uint32, _elasticity uint32) (*types.Transaction, error) { + return _SystemConfig.Contract.SetEIP1559Params(&_SystemConfig.TransactOpts, _denominator, _elasticity) +} + +// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. +// +// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() +func (_SystemConfig *SystemConfigTransactor) SetGasConfig(opts *bind.TransactOpts, _overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setGasConfig", _overhead, _scalar) +} + +// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. +// +// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() +func (_SystemConfig *SystemConfigSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) +} + +// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. +// +// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) +} + +// SetGasConfigEcotone is a paid mutator transaction binding the contract method 0x21d7fde5. +// +// Solidity: function setGasConfigEcotone(uint32 _basefeeScalar, uint32 _blobbasefeeScalar) returns() +func (_SystemConfig *SystemConfigTransactor) SetGasConfigEcotone(opts *bind.TransactOpts, _basefeeScalar uint32, _blobbasefeeScalar uint32) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setGasConfigEcotone", _basefeeScalar, _blobbasefeeScalar) +} + +// SetGasConfigEcotone is a paid mutator transaction binding the contract method 0x21d7fde5. +// +// Solidity: function setGasConfigEcotone(uint32 _basefeeScalar, uint32 _blobbasefeeScalar) returns() +func (_SystemConfig *SystemConfigSession) SetGasConfigEcotone(_basefeeScalar uint32, _blobbasefeeScalar uint32) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasConfigEcotone(&_SystemConfig.TransactOpts, _basefeeScalar, _blobbasefeeScalar) +} + +// SetGasConfigEcotone is a paid mutator transaction binding the contract method 0x21d7fde5. +// +// Solidity: function setGasConfigEcotone(uint32 _basefeeScalar, uint32 _blobbasefeeScalar) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetGasConfigEcotone(_basefeeScalar uint32, _blobbasefeeScalar uint32) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasConfigEcotone(&_SystemConfig.TransactOpts, _basefeeScalar, _blobbasefeeScalar) +} + +// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. +// +// Solidity: function setGasLimit(uint64 _gasLimit) returns() +func (_SystemConfig *SystemConfigTransactor) SetGasLimit(opts *bind.TransactOpts, _gasLimit uint64) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setGasLimit", _gasLimit) +} + +// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. +// +// Solidity: function setGasLimit(uint64 _gasLimit) returns() +func (_SystemConfig *SystemConfigSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) +} + +// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. +// +// Solidity: function setGasLimit(uint64 _gasLimit) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) +} + +// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// +// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBasefeeLog2(opts *bind.TransactOpts, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBasefeeLog2", _minBasefeeLog2) +} + +// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// +// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) +} + +// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// +// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) +} + +// SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. +// +// Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() +func (_SystemConfig *SystemConfigTransactor) SetOperatorFeeScalars(opts *bind.TransactOpts, _operatorFeeScalar uint32, _operatorFeeConstant uint64) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setOperatorFeeScalars", _operatorFeeScalar, _operatorFeeConstant) +} + +// SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. +// +// Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() +func (_SystemConfig *SystemConfigSession) SetOperatorFeeScalars(_operatorFeeScalar uint32, _operatorFeeConstant uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetOperatorFeeScalars(&_SystemConfig.TransactOpts, _operatorFeeScalar, _operatorFeeConstant) +} + +// SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. +// +// Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetOperatorFeeScalars(_operatorFeeScalar uint32, _operatorFeeConstant uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetOperatorFeeScalars(&_SystemConfig.TransactOpts, _operatorFeeScalar, _operatorFeeConstant) +} + +// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. +// +// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() +func (_SystemConfig *SystemConfigTransactor) SetUnsafeBlockSigner(opts *bind.TransactOpts, _unsafeBlockSigner common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setUnsafeBlockSigner", _unsafeBlockSigner) +} + +// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. +// +// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() +func (_SystemConfig *SystemConfigSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) +} + +// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. +// +// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfig *SystemConfigTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "transferOwnership", newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfig *SystemConfigSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) +} + +// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. +// +// Solidity: function transferOwnership(address newOwner) returns() +func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactor) Upgrade(opts *bind.TransactOpts, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "upgrade", _l2ChainId, _superchainConfig) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactorSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) +} + +// SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. +type SystemConfigConfigUpdateIterator struct { + Event *SystemConfigConfigUpdate // 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 *SystemConfigConfigUpdateIterator) 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(SystemConfigConfigUpdate) + 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(SystemConfigConfigUpdate) + 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 *SystemConfigConfigUpdateIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigConfigUpdateIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigConfigUpdate represents a ConfigUpdate event raised by the SystemConfig contract. +type SystemConfigConfigUpdate struct { + Version *big.Int + UpdateType uint8 + Data []byte + Raw types.Log // Blockchain specific contextual infos +} + +// FilterConfigUpdate is a free log retrieval operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_SystemConfig *SystemConfigFilterer) FilterConfigUpdate(opts *bind.FilterOpts, version []*big.Int, updateType []uint8) (*SystemConfigConfigUpdateIterator, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + var updateTypeRule []interface{} + for _, updateTypeItem := range updateType { + updateTypeRule = append(updateTypeRule, updateTypeItem) + } + + logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) + if err != nil { + return nil, err + } + return &SystemConfigConfigUpdateIterator{contract: _SystemConfig.contract, event: "ConfigUpdate", logs: logs, sub: sub}, nil +} + +// WatchConfigUpdate is a free log subscription operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_SystemConfig *SystemConfigFilterer) WatchConfigUpdate(opts *bind.WatchOpts, sink chan<- *SystemConfigConfigUpdate, version []*big.Int, updateType []uint8) (event.Subscription, error) { + + var versionRule []interface{} + for _, versionItem := range version { + versionRule = append(versionRule, versionItem) + } + var updateTypeRule []interface{} + for _, updateTypeItem := range updateType { + updateTypeRule = append(updateTypeRule, updateTypeItem) + } + + logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) + 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(SystemConfigConfigUpdate) + if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", 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 +} + +// ParseConfigUpdate is a log parse operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. +// +// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) +func (_SystemConfig *SystemConfigFilterer) ParseConfigUpdate(log types.Log) (*SystemConfigConfigUpdate, error) { + event := new(SystemConfigConfigUpdate) + if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SystemConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfig contract. +type SystemConfigInitializedIterator struct { + Event *SystemConfigInitialized // 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 *SystemConfigInitializedIterator) 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(SystemConfigInitialized) + 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(SystemConfigInitialized) + 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 *SystemConfigInitializedIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigInitializedIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigInitialized represents a Initialized event raised by the SystemConfig contract. +type SystemConfigInitialized struct { + Version uint8 + Raw types.Log // Blockchain specific contextual infos +} + +// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfig *SystemConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*SystemConfigInitializedIterator, error) { + + logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "Initialized") + if err != nil { + return nil, err + } + return &SystemConfigInitializedIterator{contract: _SystemConfig.contract, event: "Initialized", logs: logs, sub: sub}, nil +} + +// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfig *SystemConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SystemConfigInitialized) (event.Subscription, error) { + + logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "Initialized") + 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(SystemConfigInitialized) + if err := _SystemConfig.contract.UnpackLog(event, "Initialized", 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 +} + +// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. +// +// Solidity: event Initialized(uint8 version) +func (_SystemConfig *SystemConfigFilterer) ParseInitialized(log types.Log) (*SystemConfigInitialized, error) { + event := new(SystemConfigInitialized) + if err := _SystemConfig.contract.UnpackLog(event, "Initialized", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} + +// SystemConfigOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the SystemConfig contract. +type SystemConfigOwnershipTransferredIterator struct { + Event *SystemConfigOwnershipTransferred // 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 *SystemConfigOwnershipTransferredIterator) 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(SystemConfigOwnershipTransferred) + 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(SystemConfigOwnershipTransferred) + 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 *SystemConfigOwnershipTransferredIterator) Error() error { + return it.fail +} + +// Close terminates the iteration process, releasing any pending underlying +// resources. +func (it *SystemConfigOwnershipTransferredIterator) Close() error { + it.sub.Unsubscribe() + return nil +} + +// SystemConfigOwnershipTransferred represents a OwnershipTransferred event raised by the SystemConfig contract. +type SystemConfigOwnershipTransferred 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 (_SystemConfig *SystemConfigFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SystemConfigOwnershipTransferredIterator, 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 := _SystemConfig.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) + if err != nil { + return nil, err + } + return &SystemConfigOwnershipTransferredIterator{contract: _SystemConfig.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 (_SystemConfig *SystemConfigFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigOwnershipTransferred, 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 := _SystemConfig.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(SystemConfigOwnershipTransferred) + if err := _SystemConfig.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 (_SystemConfig *SystemConfigFilterer) ParseOwnershipTransferred(log types.Log) (*SystemConfigOwnershipTransferred, error) { + event := new(SystemConfigOwnershipTransferred) + if err := _SystemConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { + return nil, err + } + event.Raw = log + return event, nil +} diff --git a/op-e2e/bindings/l1block.go b/op-e2e/bindings/l1block.go index d80a3116ef892..18afc01cebc6f 100644 --- a/op-e2e/bindings/l1block.go +++ b/op-e2e/bindings/l1block.go @@ -26,12 +26,13 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // L1BlockMetaData contains all meta data concerning the L1Block contract. var L1BlockMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"DEPOSITOR_ACCOUNT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingTokenName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCustomGasToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"is_\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"number\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_number\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_basefee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeScalar\",\"type\":\"uint256\"}],\"name\":\"setL1BlockValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setL1BlockValuesEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setL1BlockValuesIsthmus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b506105d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806364ca23ef116100b8578063b80777ea1161007c578063b80777ea146102bb578063c5985918146102d6578063d8444715146102ed578063e591b2821461030e578063e81b2c6d14610330578063f82061401461033957600080fd5b806364ca23ef1461026a57806368d5dca61461027e5780638381f58a146102955780638b239f73146102a95780639e8c4966146102b257600080fd5b80634397dfef1161010a5780634397dfef146101bc578063440a5e20146101e45780634d5d9a2a146101ec57806354fd4d5014610218578063550fcdc9146102425780635cf249691461026157600080fd5b8063015d8eb914610147578063098999be1461015c57806309bd5a601461016457806316d3bc7f1461018057806321326849146101ad575b600080fd5b61015a6101553660046104d5565b610342565b005b61015a61043c565b61016d60025481565b6040519081526020015b60405180910390f35b6008546101949067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610177565b60405160008152602001610177565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81526012602082015201610177565b61015a610446565b60085461020390600160401b900463ffffffff1681565b60405163ffffffff9091168152602001610177565b6040805180820190915260058152640312e362e360dc1b60208201525b6040516101779190610547565b60408051808201909152600381526208aa8960eb1b6020820152610235565b61016d60015481565b6003546101949067ffffffffffffffff1681565b60035461020390600160401b900463ffffffff1681565b6000546101949067ffffffffffffffff1681565b61016d60055481565b61016d60065481565b60005461019490600160401b900467ffffffffffffffff1681565b60035461020390600160601b900463ffffffff1681565b60408051808201909152600581526422ba3432b960d91b6020820152610235565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead00018152602001610177565b61016d60045481565b61016d60075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146103cf5760405162461bcd60e51b815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff988916600160401b026fffffffffffffffffffffffffffffffff199091169989169990991798909817909755600194909455600292909255600380549190941667ffffffffffffffff199190911617909255600491909155600555600655565b61044461044e565b565b610444610461565b610456610461565b60a43560a01c600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead000133811461048b57633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff811681146104d057600080fd5b919050565b600080600080600080600080610100898b0312156104f257600080fd5b6104fb896104b8565b975061050960208a016104b8565b9650604089013595506060890135945061052560808a016104b8565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b8181101561057457858101830151858201604001528201610558565b81811115610586576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220eca04b57c61ec0be345732212fb43059ce1efe385bc7e49f5475b081d066940d64736f6c634300080f0033", + ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"is_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minBasefeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesIsthmus\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesJovian\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"}]", + Bin: "0x608060405234801561001057600080fd5b50610716806100206000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806364ca23ef116100e3578063b80777ea1161008c578063e591b28211610066578063e591b282146103fd578063e81b2c6d1461041f578063f82061401461042857600080fd5b8063b80777ea14610384578063c5985918146103a4578063d8444715146103c457600080fd5b80638b239f73116100bd5780638b239f73146103435780639e8c49661461034c578063b3ae5a3f1461035557600080fd5b806364ca23ef146102ff57806368d5dca6146103135780638381f58a1461032f57600080fd5b80634397dfef1161014557806354fd4d501161011f57806354fd4d501461027b578063550fcdc9146102bd5780635cf24969146102f657600080fd5b80634397dfef1461021a578063440a5e20146102425780634d5d9a2a1461024a57600080fd5b806316d3bc7f1161017657806316d3bc7f146101d657806321326849146102035780633db6be2b1461021257600080fd5b8063015d8eb91461019d578063098999be146101b257806309bd5a60146101ba575b600080fd5b6101b06101ab366004610624565b610431565b005b6101b0610570565b6101c360025481565b6040519081526020015b60405180910390f35b6008546101ea9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101cd565b604051600081526020016101cd565b6101b061057a565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee815260126020820152016101cd565b6101b0610582565b6008546102669068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016101cd565b60408051808201909152600581527f312e372e3000000000000000000000000000000000000000000000000000000060208201525b6040516101cd9190610696565b60408051808201909152600381527f455448000000000000000000000000000000000000000000000000000000000060208201526102b0565b6101c360015481565b6003546101ea9067ffffffffffffffff1681565b6003546102669068010000000000000000900463ffffffff1681565b6000546101ea9067ffffffffffffffff1681565b6101c360055481565b6101c360065481565b600854610372906c01000000000000000000000000900460ff1681565b60405160ff90911681526020016101cd565b6000546101ea9068010000000000000000900467ffffffffffffffff1681565b600354610266906c01000000000000000000000000900463ffffffff1681565b60408051808201909152600581527f457468657200000000000000000000000000000000000000000000000000000060208201526102b0565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead000181526020016101cd565b6101c360045481565b6101c360075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146104d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b61057861058a565b565b61057861059d565b6105786105b0565b6105926105b0565b60a43560a01c600855565b6105a561058a565b60c43560f01c600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead00013381146105da57633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff8116811461061f57600080fd5b919050565b600080600080600080600080610100898b03121561064157600080fd5b61064a89610607565b975061065860208a01610607565b9650604089013595506060890135945061067460808a01610607565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156106c3578581018301518582016040015282016106a7565b818111156106d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", } // L1BlockABI is the input ABI used to generate the binding from. @@ -156,11 +157,11 @@ func NewL1BlockFilterer(address common.Address, filterer bind.ContractFilterer) // bindL1Block binds a generic wrapper to an already deployed contract. func bindL1Block(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(L1BlockABI)) + parsed, err := L1BlockMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -618,6 +619,37 @@ func (_L1Block *L1BlockCallerSession) L1FeeScalar() (*big.Int, error) { return _L1Block.Contract.L1FeeScalar(&_L1Block.CallOpts) } +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_L1Block *L1BlockCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _L1Block.contract.Call(opts, &out, "minBasefeeLog2") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_L1Block *L1BlockSession) MinBasefeeLog2() (uint8, error) { + return _L1Block.Contract.MinBasefeeLog2(&_L1Block.CallOpts) +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_L1Block *L1BlockCallerSession) MinBasefeeLog2() (uint8, error) { + return _L1Block.Contract.MinBasefeeLog2(&_L1Block.CallOpts) +} + // Number is a free data retrieval call binding the contract method 0x8381f58a. // // Solidity: function number() view returns(uint64) @@ -866,3 +898,24 @@ func (_L1Block *L1BlockSession) SetL1BlockValuesIsthmus() (*types.Transaction, e func (_L1Block *L1BlockTransactorSession) SetL1BlockValuesIsthmus() (*types.Transaction, error) { return _L1Block.Contract.SetL1BlockValuesIsthmus(&_L1Block.TransactOpts) } + +// SetL1BlockValuesJovian is a paid mutator transaction binding the contract method 0x3db6be2b. +// +// Solidity: function setL1BlockValuesJovian() returns() +func (_L1Block *L1BlockTransactor) SetL1BlockValuesJovian(opts *bind.TransactOpts) (*types.Transaction, error) { + return _L1Block.contract.Transact(opts, "setL1BlockValuesJovian") +} + +// SetL1BlockValuesJovian is a paid mutator transaction binding the contract method 0x3db6be2b. +// +// Solidity: function setL1BlockValuesJovian() returns() +func (_L1Block *L1BlockSession) SetL1BlockValuesJovian() (*types.Transaction, error) { + return _L1Block.Contract.SetL1BlockValuesJovian(&_L1Block.TransactOpts) +} + +// SetL1BlockValuesJovian is a paid mutator transaction binding the contract method 0x3db6be2b. +// +// Solidity: function setL1BlockValuesJovian() returns() +func (_L1Block *L1BlockTransactorSession) SetL1BlockValuesJovian() (*types.Transaction, error) { + return _L1Block.Contract.SetL1BlockValuesJovian(&_L1Block.TransactOpts) +} diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 05d74beadbeb5..1d8366a76ab3a 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. @@ -43,20 +44,41 @@ type SystemConfigAddresses struct { L1CrossDomainMessenger common.Address L1ERC721Bridge common.Address L1StandardBridge common.Address - DisputeGameFactory common.Address OptimismPortal common.Address OptimismMintableERC20Factory common.Address } // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISPUTE_GAME_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"START_BLOCK_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobbasefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Denominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Elasticity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddresses\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_denominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_elasticity\",\"type\":\"uint32\"}],\"name\":\"setEIP1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"}],\"name\":\"setGasConfigEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\"}],\"name\":\"setOperatorFeeScalars\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startBlock_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"},{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBasefeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBasefeeLog2\",\"inputs\":[{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ce578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bc49ce5f14610697578063bfb14fb71461069f578063c0fd4b41146106bb57600080fd5b8063a7119869116101a2578063a711986914610657578063b3ae5a3f1461065f578063b40a817c1461068457600080fd5b8063935f029e146105d85780639b7d7f0a146105eb578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635c975abb1161021a5780635c975abb146105925780635d73369c146105aa578063715018a6146105b25780638da5cb5b146105ba57600080fd5b80634f16540b1461051957806354fd4d501461054057806357705b3c1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61037a61058d366004612be4565b61124c565b61059a61125d565b604051901515815260200161038e565b61038461140b565b61037a611436565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105e6366004612bff565b61144a565b61039f61145c565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a610692366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106c9366004612898565b6115df565b61039f6115f1565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b6112546118ec565b610b8381611e5c565b600080611268610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612d21565b806114055750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61143e6118ec565b61144860006123f4565b565b6114526118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661145c565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611448576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361144857611448611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b600060208284031215612bf657600080fd5b61289182612912565b60008060408385031215612c1257600080fd5b50508035926020909101359150565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. // Deprecated: Use SystemConfigMetaData.ABI instead. var SystemConfigABI = SystemConfigMetaData.ABI +// SystemConfigBin is the compiled bytecode used for deploying new contracts. +// Deprecated: Use SystemConfigMetaData.Bin instead. +var SystemConfigBin = SystemConfigMetaData.Bin + +// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. +func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { + parsed, err := SystemConfigMetaData.GetAbi() + if err != nil { + return common.Address{}, nil, nil, err + } + if parsed == nil { + return common.Address{}, nil, nil, errors.New("GetABI returned nil") + } + + address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) + if err != nil { + return common.Address{}, nil, nil, err + } + return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil +} + // SystemConfig is an auto generated Go binding around an Ethereum contract. type SystemConfig struct { SystemConfigCaller // Read-only binding to the contract @@ -154,11 +176,11 @@ func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilte // bindSystemConfig binds a generic wrapper to an already deployed contract. func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) + parsed, err := SystemConfigMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -230,37 +252,6 @@ func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, erro return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) } -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) DISPUTEGAMEFACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "DISPUTE_GAME_FACTORY_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - // L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. // // Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) @@ -759,7 +750,7 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { var out []interface{} err := _SystemConfig.contract.Call(opts, &out, "getAddresses") @@ -776,18 +767,80 @@ func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (Syst // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "guardian") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigSession) Guardian() (common.Address, error) { + return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) +} + +// Guardian is a free data retrieval call binding the contract method 0x452a9320. +// +// Solidity: function guardian() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) Guardian() (common.Address, error) { + return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) InitVersion(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "initVersion") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigSession) InitVersion() (uint8, error) { + return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) +} + +// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. +// +// Solidity: function initVersion() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) InitVersion() (uint8, error) { + return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) +} + // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address addr_) @@ -881,6 +934,37 @@ func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Addre return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) } +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "l2ChainId") + + if err != nil { + return *new(*big.Int), err + } + + out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) + + return out0, err + +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigSession) L2ChainId() (*big.Int, error) { + return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) +} + +// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. +// +// Solidity: function l2ChainId() view returns(uint256) +func (_SystemConfig *SystemConfigCallerSession) L2ChainId() (*big.Int, error) { + return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) +} + // MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. // // Solidity: function maximumGasLimit() pure returns(uint64) @@ -912,6 +996,37 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minBasefeeLog2") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigSession) MinBasefeeLog2() (uint8, error) { + return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) +} + +// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// +// Solidity: function minBasefeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) MinBasefeeLog2() (uint8, error) { + return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) +} + // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // // Solidity: function minimumGasLimit() view returns(uint64) @@ -1129,6 +1244,99 @@ func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) } +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigCaller) Paused(opts *bind.CallOpts) (bool, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "paused") + + if err != nil { + return *new(bool), err + } + + out0 := *abi.ConvertType(out[0], new(bool)).(*bool) + + return out0, err + +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigSession) Paused() (bool, error) { + return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) +} + +// Paused is a free data retrieval call binding the contract method 0x5c975abb. +// +// Solidity: function paused() view returns(bool) +func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { + return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigCaller) ProxyAdmin(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "proxyAdmin") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigSession) ProxyAdmin() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) +} + +// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. +// +// Solidity: function proxyAdmin() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) ProxyAdmin() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigCaller) ProxyAdminOwner(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "proxyAdminOwner") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigSession) ProxyAdminOwner() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) +} + +// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. +// +// Solidity: function proxyAdminOwner() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) ProxyAdminOwner() (common.Address, error) { + return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) +} + // ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. // // Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) @@ -1222,6 +1430,37 @@ func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) } +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "superchainConfig") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigSession) SuperchainConfig() (common.Address, error) { + return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) +} + +// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. +// +// Solidity: function superchainConfig() view returns(address) +func (_SystemConfig *SystemConfigCallerSession) SuperchainConfig() (common.Address, error) { + return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) +} + // UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // // Solidity: function unsafeBlockSigner() view returns(address addr_) @@ -1284,25 +1523,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1431,6 +1670,27 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } +// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// +// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBasefeeLog2(opts *bind.TransactOpts, _minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBasefeeLog2", _minBasefeeLog2) +} + +// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// +// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) +} + +// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// +// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) +} + // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. // // Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() @@ -1494,6 +1754,27 @@ func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner c return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) } +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactor) Upgrade(opts *bind.TransactOpts, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "upgrade", _l2ChainId, _superchainConfig) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) +} + +// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. +// +// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactorSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) +} + // SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. type SystemConfigConfigUpdateIterator struct { Event *SystemConfigConfigUpdate // Event containing the contract specifics and raw log diff --git a/packages/contracts-bedrock/SystemConfig.abi b/packages/contracts-bedrock/SystemConfig.abi new file mode 100644 index 0000000000000..db45e51088e3f --- /dev/null +++ b/packages/contracts-bedrock/SystemConfig.abi @@ -0,0 +1,993 @@ +[ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "BATCH_INBOX_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "L1_CROSS_DOMAIN_MESSENGER_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "L1_ERC_721_BRIDGE_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "L1_STANDARD_BRIDGE_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "OPTIMISM_PORTAL_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "START_BLOCK_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "UNSAFE_BLOCK_SIGNER_SLOT", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "VERSION", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "basefeeScalar", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batchInbox", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "batcherHash", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "blobbasefeeScalar", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "disputeGameFactory", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip1559Denominator", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "eip1559Elasticity", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "gasLimit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAddresses", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct SystemConfig.Addresses", + "components": [ + { + "name": "l1CrossDomainMessenger", + "type": "address", + "internalType": "address" + }, + { + "name": "l1ERC721Bridge", + "type": "address", + "internalType": "address" + }, + { + "name": "l1StandardBridge", + "type": "address", + "internalType": "address" + }, + { + "name": "optimismPortal", + "type": "address", + "internalType": "address" + }, + { + "name": "optimismMintableERC20Factory", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "guardian", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initVersion", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + }, + { + "name": "_basefeeScalar", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_blobbasefeeScalar", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_batcherHash", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "_gasLimit", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "_unsafeBlockSigner", + "type": "address", + "internalType": "address" + }, + { + "name": "_config", + "type": "tuple", + "internalType": "struct IResourceMetering.ResourceConfig", + "components": [ + { + "name": "maxResourceLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "elasticityMultiplier", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "baseFeeMaxChangeDenominator", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "minimumBaseFee", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "systemTxMaxGas", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "maximumBaseFee", + "type": "uint128", + "internalType": "uint128" + } + ] + }, + { + "name": "_batchInbox", + "type": "address", + "internalType": "address" + }, + { + "name": "_addresses", + "type": "tuple", + "internalType": "struct SystemConfig.Addresses", + "components": [ + { + "name": "l1CrossDomainMessenger", + "type": "address", + "internalType": "address" + }, + { + "name": "l1ERC721Bridge", + "type": "address", + "internalType": "address" + }, + { + "name": "l1StandardBridge", + "type": "address", + "internalType": "address" + }, + { + "name": "optimismPortal", + "type": "address", + "internalType": "address" + }, + { + "name": "optimismMintableERC20Factory", + "type": "address", + "internalType": "address" + } + ] + }, + { + "name": "_l2ChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_superchainConfig", + "type": "address", + "internalType": "contract ISuperchainConfig" + }, + { + "name": "_minBasefeeLog2", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "l1CrossDomainMessenger", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "l1ERC721Bridge", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "l1StandardBridge", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "l2ChainId", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maximumGasLimit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "minBasefeeLog2", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minimumGasLimit", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorFeeConstant", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint64", + "internalType": "uint64" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "operatorFeeScalar", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint32", + "internalType": "uint32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "optimismMintableERC20Factory", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "optimismPortal", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "overhead", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "paused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxyAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IProxyAdmin" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "proxyAdminOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "resourceConfig", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct IResourceMetering.ResourceConfig", + "components": [ + { + "name": "maxResourceLimit", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "elasticityMultiplier", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "baseFeeMaxChangeDenominator", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "minimumBaseFee", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "systemTxMaxGas", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "maximumBaseFee", + "type": "uint128", + "internalType": "uint128" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "scalar", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setBatcherHash", + "inputs": [ + { + "name": "_batcherHash", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setEIP1559Params", + "inputs": [ + { + "name": "_denominator", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_elasticity", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setGasConfig", + "inputs": [ + { + "name": "_overhead", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_scalar", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setGasConfigEcotone", + "inputs": [ + { + "name": "_basefeeScalar", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_blobbasefeeScalar", + "type": "uint32", + "internalType": "uint32" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setGasLimit", + "inputs": [ + { + "name": "_gasLimit", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setMinBasefeeLog2", + "inputs": [ + { + "name": "_minBasefeeLog2", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setOperatorFeeScalars", + "inputs": [ + { + "name": "_operatorFeeScalar", + "type": "uint32", + "internalType": "uint32" + }, + { + "name": "_operatorFeeConstant", + "type": "uint64", + "internalType": "uint64" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUnsafeBlockSigner", + "inputs": [ + { + "name": "_unsafeBlockSigner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "startBlock", + "inputs": [], + "outputs": [ + { + "name": "startBlock_", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "superchainConfig", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ISuperchainConfig" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "unsafeBlockSigner", + "inputs": [], + "outputs": [ + { + "name": "addr_", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "upgrade", + "inputs": [ + { + "name": "_l2ChainId", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_superchainConfig", + "type": "address", + "internalType": "contract ISuperchainConfig" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "version", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "event", + "name": "ConfigUpdate", + "inputs": [ + { + "name": "version", + "type": "uint256", + "indexed": true, + "internalType": "uint256" + }, + { + "name": "updateType", + "type": "uint8", + "indexed": true, + "internalType": "enum SystemConfig.UpdateType" + }, + { + "name": "data", + "type": "bytes", + "indexed": false, + "internalType": "bytes" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ProxyAdminOwnedBase_NotProxyAdmin", + "inputs": [] + }, + { + "type": "error", + "name": "ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner", + "inputs": [] + }, + { + "type": "error", + "name": "ProxyAdminOwnedBase_NotProxyAdminOwner", + "inputs": [] + }, + { + "type": "error", + "name": "ProxyAdminOwnedBase_NotResolvedDelegateProxy", + "inputs": [] + }, + { + "type": "error", + "name": "ProxyAdminOwnedBase_NotSharedProxyAdminOwner", + "inputs": [] + }, + { + "type": "error", + "name": "ProxyAdminOwnedBase_ProxyAdminNotFound", + "inputs": [] + }, + { + "type": "error", + "name": "ReinitializableBase_ZeroInitVersion", + "inputs": [] + } +] diff --git a/packages/contracts-bedrock/SystemConfig.bin b/packages/contracts-bedrock/SystemConfig.bin new file mode 100644 index 0000000000000..c15dda6afac2c --- /dev/null +++ b/packages/contracts-bedrock/SystemConfig.bin @@ -0,0 +1 @@ +0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ce578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bc49ce5f14610697578063bfb14fb71461069f578063c0fd4b41146106bb57600080fd5b8063a7119869116101a2578063a711986914610657578063b3ae5a3f1461065f578063b40a817c1461068457600080fd5b8063935f029e146105d85780639b7d7f0a146105eb578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635c975abb1161021a5780635c975abb146105925780635d73369c146105aa578063715018a6146105b25780638da5cb5b146105ba57600080fd5b80634f16540b1461051957806354fd4d501461054057806357705b3c1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61037a61058d366004612be4565b61124c565b61059a61125d565b604051901515815260200161038e565b61038461140b565b61037a611436565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105e6366004612bff565b61144a565b61039f61145c565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a610692366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106c9366004612898565b6115df565b61039f6115f1565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b6112546118ec565b610b8381611e5c565b600080611268610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612d21565b806114055750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61143e6118ec565b61144860006123f4565b565b6114526118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661145c565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611448576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361144857611448611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b600060208284031215612bf657600080fd5b61289182612912565b60008060408385031215612c1257600080fd5b50508035926020909101359150565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index ead299cd48e7f..a5491053b401e 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -35,7 +35,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS + OPERATOR_FEE_PARAMS, MIN_BASEFEE_LOG2 } From 7cd0147c62e251ebb4f0800a26d087783f666987 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 15:25:35 -0400 Subject: [PATCH 14/56] update derivation pipeline --- op-node/rollup/derive/system_config.go | 20 ++++++++++++++-- op-node/rollup/derive/system_config_test.go | 26 +++++++++++++++++++++ 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/op-node/rollup/derive/system_config.go b/op-node/rollup/derive/system_config.go index 888c3f2d7d9a6..bc3e5fb9ae139 100644 --- a/op-node/rollup/derive/system_config.go +++ b/op-node/rollup/derive/system_config.go @@ -23,6 +23,7 @@ var ( SystemConfigUpdateUnsafeBlockSigner = common.Hash{31: 3} SystemConfigUpdateEIP1559Params = common.Hash{31: 4} SystemConfigUpdateOperatorFeeParams = common.Hash{31: 5} + SystemConfigUpdateMinBaseFeeLog2 = common.Hash{31: 6} ) var ( @@ -156,8 +157,7 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L if !solabi.EmptyReader(reader) { return NewCriticalError(errors.New("too many bytes")) } - // Copy 9 bytes for Jovian (was 8 bytes for Holocene): params[23:32] contains denominator(4) + elasticity(4) + minBaseFeeLog2(1) - copy(destSysCfg.EIP1559Params[:], params[23:32]) + copy(destSysCfg.EIP1559Params[:], params[24:32]) return nil case SystemConfigUpdateOperatorFeeParams: if pointer, err := solabi.ReadUint64(reader); err != nil || pointer != 32 { @@ -178,6 +178,22 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L case SystemConfigUpdateUnsafeBlockSigner: // Ignored in derivation. This configurable applies to runtime configuration outside of the derivation. return nil + case SystemConfigUpdateMinBaseFeeLog2: + if pointer, err := solabi.ReadUint64(reader); err != nil || pointer != 32 { + return NewCriticalError(errors.New("invalid pointer field")) + } + if length, err := solabi.ReadUint64(reader); err != nil || length != 32 { + return NewCriticalError(errors.New("invalid length field")) + } + minBaseFeeLog2Data, err := solabi.ReadEthBytes32(reader) + if err != nil { + return NewCriticalError(errors.New("could not read minBaseFeeLog2")) + } + if !solabi.EmptyReader(reader) { + return NewCriticalError(errors.New("too many bytes")) + } + destSysCfg.EIP1559Params[8] = minBaseFeeLog2Data[0] + return nil default: return fmt.Errorf("unrecognized L1 sysCfg update type: %s", updateType) } diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index 129efe6e69c73..b3f808ee45c21 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -231,6 +231,32 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { }, err: false, }, + { + name: "SystemConfigUpdateMinBaseFeeLog2", + log: &types.Log{ + Topics: []common.Hash{ + ConfigUpdateEventABIHash, + ConfigUpdateEventVersion0, + SystemConfigUpdateMinBaseFeeLog2, + }, + }, + hook: func(t *testing.T, log *types.Log) *types.Log { + // Set minBaseFeeLog2 to 22 (uint8 value) at the first byte + minBaseFeeLog2Bytes := make([]byte, 32) + minBaseFeeLog2Bytes[0] = 22 // uint8 value at the first byte (matches minBaseFeeLog2Data[0]) + minBaseFeeLog2Value := new(big.Int).SetBytes(minBaseFeeLog2Bytes) + numberData, err := oneUint256.Pack(minBaseFeeLog2Value) + require.NoError(t, err) + data, err := bytesArgs.Pack(numberData) + require.NoError(t, err) + log.Data = data + return log + }, + config: eth.SystemConfig{ + EIP1559Params: eth.Bytes9{0, 0, 0, 0, 0, 0, 0, 0, 22}, // minBaseFeeLog2 = 22 at byte 8 + }, + err: false, + }, } for _, test := range tests { From 12c21ff0d700b04cd9cb0943c0a375f29076cd73 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 15:27:14 -0400 Subject: [PATCH 15/56] rm forge artifacts --- packages/contracts-bedrock/SystemConfig.abi | 993 -------------------- packages/contracts-bedrock/SystemConfig.bin | 1 - 2 files changed, 994 deletions(-) delete mode 100644 packages/contracts-bedrock/SystemConfig.abi delete mode 100644 packages/contracts-bedrock/SystemConfig.bin diff --git a/packages/contracts-bedrock/SystemConfig.abi b/packages/contracts-bedrock/SystemConfig.abi deleted file mode 100644 index db45e51088e3f..0000000000000 --- a/packages/contracts-bedrock/SystemConfig.abi +++ /dev/null @@ -1,993 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "BATCH_INBOX_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "L1_CROSS_DOMAIN_MESSENGER_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "L1_ERC_721_BRIDGE_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "L1_STANDARD_BRIDGE_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "OPTIMISM_PORTAL_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "START_BLOCK_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "UNSAFE_BLOCK_SIGNER_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "VERSION", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "basefeeScalar", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "batchInbox", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "batcherHash", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "blobbasefeeScalar", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "disputeGameFactory", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eip1559Denominator", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "eip1559Elasticity", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "gasLimit", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getAddresses", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct SystemConfig.Addresses", - "components": [ - { - "name": "l1CrossDomainMessenger", - "type": "address", - "internalType": "address" - }, - { - "name": "l1ERC721Bridge", - "type": "address", - "internalType": "address" - }, - { - "name": "l1StandardBridge", - "type": "address", - "internalType": "address" - }, - { - "name": "optimismPortal", - "type": "address", - "internalType": "address" - }, - { - "name": "optimismMintableERC20Factory", - "type": "address", - "internalType": "address" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "guardian", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initVersion", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "_owner", - "type": "address", - "internalType": "address" - }, - { - "name": "_basefeeScalar", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_blobbasefeeScalar", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_batcherHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "_gasLimit", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "_unsafeBlockSigner", - "type": "address", - "internalType": "address" - }, - { - "name": "_config", - "type": "tuple", - "internalType": "struct IResourceMetering.ResourceConfig", - "components": [ - { - "name": "maxResourceLimit", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "elasticityMultiplier", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "baseFeeMaxChangeDenominator", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "minimumBaseFee", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "systemTxMaxGas", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "maximumBaseFee", - "type": "uint128", - "internalType": "uint128" - } - ] - }, - { - "name": "_batchInbox", - "type": "address", - "internalType": "address" - }, - { - "name": "_addresses", - "type": "tuple", - "internalType": "struct SystemConfig.Addresses", - "components": [ - { - "name": "l1CrossDomainMessenger", - "type": "address", - "internalType": "address" - }, - { - "name": "l1ERC721Bridge", - "type": "address", - "internalType": "address" - }, - { - "name": "l1StandardBridge", - "type": "address", - "internalType": "address" - }, - { - "name": "optimismPortal", - "type": "address", - "internalType": "address" - }, - { - "name": "optimismMintableERC20Factory", - "type": "address", - "internalType": "address" - } - ] - }, - { - "name": "_l2ChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_superchainConfig", - "type": "address", - "internalType": "contract ISuperchainConfig" - }, - { - "name": "_minBasefeeLog2", - "type": "uint8", - "internalType": "uint8" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "l1CrossDomainMessenger", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1ERC721Bridge", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l1StandardBridge", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "l2ChainId", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "maximumGasLimit", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "minBasefeeLog2", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint8", - "internalType": "uint8" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "minimumGasLimit", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "operatorFeeConstant", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "operatorFeeScalar", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint32", - "internalType": "uint32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "optimismMintableERC20Factory", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "optimismPortal", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "overhead", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "owner", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "paused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "proxyAdmin", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IProxyAdmin" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "proxyAdminOwner", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "renounceOwnership", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resourceConfig", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct IResourceMetering.ResourceConfig", - "components": [ - { - "name": "maxResourceLimit", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "elasticityMultiplier", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "baseFeeMaxChangeDenominator", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "minimumBaseFee", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "systemTxMaxGas", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "maximumBaseFee", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "scalar", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "setBatcherHash", - "inputs": [ - { - "name": "_batcherHash", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setEIP1559Params", - "inputs": [ - { - "name": "_denominator", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_elasticity", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setGasConfig", - "inputs": [ - { - "name": "_overhead", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_scalar", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setGasConfigEcotone", - "inputs": [ - { - "name": "_basefeeScalar", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_blobbasefeeScalar", - "type": "uint32", - "internalType": "uint32" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setGasLimit", - "inputs": [ - { - "name": "_gasLimit", - "type": "uint64", - "internalType": "uint64" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setMinBasefeeLog2", - "inputs": [ - { - "name": "_minBasefeeLog2", - "type": "uint8", - "internalType": "uint8" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setOperatorFeeScalars", - "inputs": [ - { - "name": "_operatorFeeScalar", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "_operatorFeeConstant", - "type": "uint64", - "internalType": "uint64" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setUnsafeBlockSigner", - "inputs": [ - { - "name": "_unsafeBlockSigner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "startBlock", - "inputs": [], - "outputs": [ - { - "name": "startBlock_", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "superchainConfig", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ISuperchainConfig" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "transferOwnership", - "inputs": [ - { - "name": "newOwner", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "unsafeBlockSigner", - "inputs": [], - "outputs": [ - { - "name": "addr_", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "upgrade", - "inputs": [ - { - "name": "_l2ChainId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_superchainConfig", - "type": "address", - "internalType": "contract ISuperchainConfig" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "version", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "pure" - }, - { - "type": "event", - "name": "ConfigUpdate", - "inputs": [ - { - "name": "version", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "updateType", - "type": "uint8", - "indexed": true, - "internalType": "enum SystemConfig.UpdateType" - }, - { - "name": "data", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint8", - "indexed": false, - "internalType": "uint8" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "OwnershipTransferred", - "inputs": [ - { - "name": "previousOwner", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newOwner", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "ProxyAdminOwnedBase_NotProxyAdmin", - "inputs": [] - }, - { - "type": "error", - "name": "ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner", - "inputs": [] - }, - { - "type": "error", - "name": "ProxyAdminOwnedBase_NotProxyAdminOwner", - "inputs": [] - }, - { - "type": "error", - "name": "ProxyAdminOwnedBase_NotResolvedDelegateProxy", - "inputs": [] - }, - { - "type": "error", - "name": "ProxyAdminOwnedBase_NotSharedProxyAdminOwner", - "inputs": [] - }, - { - "type": "error", - "name": "ProxyAdminOwnedBase_ProxyAdminNotFound", - "inputs": [] - }, - { - "type": "error", - "name": "ReinitializableBase_ZeroInitVersion", - "inputs": [] - } -] diff --git a/packages/contracts-bedrock/SystemConfig.bin b/packages/contracts-bedrock/SystemConfig.bin deleted file mode 100644 index c15dda6afac2c..0000000000000 --- a/packages/contracts-bedrock/SystemConfig.bin +++ /dev/null @@ -1 +0,0 @@ -0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ce578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bc49ce5f14610697578063bfb14fb71461069f578063c0fd4b41146106bb57600080fd5b8063a7119869116101a2578063a711986914610657578063b3ae5a3f1461065f578063b40a817c1461068457600080fd5b8063935f029e146105d85780639b7d7f0a146105eb578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635c975abb1161021a5780635c975abb146105925780635d73369c146105aa578063715018a6146105b25780638da5cb5b146105ba57600080fd5b80634f16540b1461051957806354fd4d501461054057806357705b3c1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61037a61058d366004612be4565b61124c565b61059a61125d565b604051901515815260200161038e565b61038461140b565b61037a611436565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105e6366004612bff565b61144a565b61039f61145c565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a610692366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106c9366004612898565b6115df565b61039f6115f1565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b6112546118ec565b610b8381611e5c565b600080611268610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612d21565b806114055750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61143e6118ec565b61144860006123f4565b565b6114526118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661145c565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611448576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361144857611448611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b600060208284031215612bf657600080fd5b61289182612912565b60008060408385031215612c1257600080fd5b50508035926020909101359150565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a From fb209bb177749377d6b45a972575cd3eb2e08c03 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 21 Jul 2025 15:28:00 -0400 Subject: [PATCH 16/56] cleanup --- op- | 2217 ----------------------------------------------------------- 1 file changed, 2217 deletions(-) delete mode 100644 op- diff --git a/op- b/op- deleted file mode 100644 index 1d8366a76ab3a..0000000000000 --- a/op- +++ /dev/null @@ -1,2217 +0,0 @@ -// Code generated - DO NOT EDIT. -// This file is a generated binding and any manual changes will be lost. - -package bindings - -import ( - "errors" - "math/big" - "strings" - - ethereum "github.com/ethereum/go-ethereum" - "github.com/ethereum/go-ethereum/accounts/abi" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/event" -) - -// Reference imports to suppress errors if they are not otherwise used. -var ( - _ = errors.New - _ = big.NewInt - _ = strings.NewReader - _ = ethereum.NotFound - _ = bind.Bind - _ = common.Big1 - _ = types.BloomLookup - _ = event.NewSubscription - _ = abi.ConvertType -) - -// IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. -type IResourceMeteringResourceConfig struct { - MaxResourceLimit uint32 - ElasticityMultiplier uint8 - BaseFeeMaxChangeDenominator uint8 - MinimumBaseFee uint32 - SystemTxMaxGas uint32 - MaximumBaseFee *big.Int -} - -// SystemConfigAddresses is an auto generated low-level Go binding around an user-defined struct. -type SystemConfigAddresses struct { - L1CrossDomainMessenger common.Address - L1ERC721Bridge common.Address - L1StandardBridge common.Address - OptimismPortal common.Address - OptimismMintableERC20Factory common.Address -} - -// SystemConfigMetaData contains all meta data concerning the SystemConfig contract. -var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"},{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBasefeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBasefeeLog2\",\"inputs\":[{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ce578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bc49ce5f14610697578063bfb14fb71461069f578063c0fd4b41146106bb57600080fd5b8063a7119869116101a2578063a711986914610657578063b3ae5a3f1461065f578063b40a817c1461068457600080fd5b8063935f029e146105d85780639b7d7f0a146105eb578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635c975abb1161021a5780635c975abb146105925780635d73369c146105aa578063715018a6146105b25780638da5cb5b146105ba57600080fd5b80634f16540b1461051957806354fd4d501461054057806357705b3c1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61037a61058d366004612be4565b61124c565b61059a61125d565b604051901515815260200161038e565b61038461140b565b61037a611436565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105e6366004612bff565b61144a565b61039f61145c565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a610692366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106c9366004612898565b6115df565b61039f6115f1565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b6112546118ec565b610b8381611e5c565b600080611268610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612d21565b806114055750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61143e6118ec565b61144860006123f4565b565b6114526118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661145c565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611448576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361144857611448611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b600060208284031215612bf657600080fd5b61289182612912565b60008060408385031215612c1257600080fd5b50508035926020909101359150565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a", -} - -// SystemConfigABI is the input ABI used to generate the binding from. -// Deprecated: Use SystemConfigMetaData.ABI instead. -var SystemConfigABI = SystemConfigMetaData.ABI - -// SystemConfigBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use SystemConfigMetaData.Bin instead. -var SystemConfigBin = SystemConfigMetaData.Bin - -// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. -func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { - parsed, err := SystemConfigMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil -} - -// SystemConfig is an auto generated Go binding around an Ethereum contract. -type SystemConfig struct { - SystemConfigCaller // Read-only binding to the contract - SystemConfigTransactor // Write-only binding to the contract - SystemConfigFilterer // Log filterer for contract events -} - -// SystemConfigCaller is an auto generated read-only Go binding around an Ethereum contract. -type SystemConfigCaller struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SystemConfigTransactor is an auto generated write-only Go binding around an Ethereum contract. -type SystemConfigTransactor struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SystemConfigFilterer is an auto generated log filtering Go binding around an Ethereum contract events. -type SystemConfigFilterer struct { - contract *bind.BoundContract // Generic contract wrapper for the low level calls -} - -// SystemConfigSession is an auto generated Go binding around an Ethereum contract, -// with pre-set call and transact options. -type SystemConfigSession struct { - Contract *SystemConfig // Generic contract binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SystemConfigCallerSession is an auto generated read-only Go binding around an Ethereum contract, -// with pre-set call options. -type SystemConfigCallerSession struct { - Contract *SystemConfigCaller // Generic contract caller binding to set the session for - CallOpts bind.CallOpts // Call options to use throughout this session -} - -// SystemConfigTransactorSession is an auto generated write-only Go binding around an Ethereum contract, -// with pre-set transact options. -type SystemConfigTransactorSession struct { - Contract *SystemConfigTransactor // Generic contract transactor binding to set the session for - TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session -} - -// SystemConfigRaw is an auto generated low-level Go binding around an Ethereum contract. -type SystemConfigRaw struct { - Contract *SystemConfig // Generic contract binding to access the raw methods on -} - -// SystemConfigCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract. -type SystemConfigCallerRaw struct { - Contract *SystemConfigCaller // Generic read-only contract binding to access the raw methods on -} - -// SystemConfigTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract. -type SystemConfigTransactorRaw struct { - Contract *SystemConfigTransactor // Generic write-only contract binding to access the raw methods on -} - -// NewSystemConfig creates a new instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfig(address common.Address, backend bind.ContractBackend) (*SystemConfig, error) { - contract, err := bindSystemConfig(address, backend, backend, backend) - if err != nil { - return nil, err - } - return &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil -} - -// NewSystemConfigCaller creates a new read-only instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfigCaller(address common.Address, caller bind.ContractCaller) (*SystemConfigCaller, error) { - contract, err := bindSystemConfig(address, caller, nil, nil) - if err != nil { - return nil, err - } - return &SystemConfigCaller{contract: contract}, nil -} - -// NewSystemConfigTransactor creates a new write-only instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfigTransactor(address common.Address, transactor bind.ContractTransactor) (*SystemConfigTransactor, error) { - contract, err := bindSystemConfig(address, nil, transactor, nil) - if err != nil { - return nil, err - } - return &SystemConfigTransactor{contract: contract}, nil -} - -// NewSystemConfigFilterer creates a new log filterer instance of SystemConfig, bound to a specific deployed contract. -func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilterer) (*SystemConfigFilterer, error) { - contract, err := bindSystemConfig(address, nil, nil, filterer) - if err != nil { - return nil, err - } - return &SystemConfigFilterer{contract: contract}, nil -} - -// bindSystemConfig binds a generic wrapper to an already deployed contract. -func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := SystemConfigMetaData.GetAbi() - if err != nil { - return nil, err - } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SystemConfig *SystemConfigRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SystemConfig.Contract.SystemConfigCaller.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SystemConfig *SystemConfigRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SystemConfig.Contract.SystemConfigTransactor.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SystemConfig *SystemConfigRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SystemConfig.Contract.SystemConfigTransactor.contract.Transact(opts, method, params...) -} - -// Call invokes the (constant) contract method with params as input values and -// sets the output to result. The result type might be a single field for simple -// returns, a slice of interfaces for anonymous returns and a struct for named -// returns. -func (_SystemConfig *SystemConfigCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error { - return _SystemConfig.Contract.contract.Call(opts, result, method, params...) -} - -// Transfer initiates a plain transaction to move funds to the contract, calling -// its default method if one is available. -func (_SystemConfig *SystemConfigTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SystemConfig.Contract.contract.Transfer(opts) -} - -// Transact invokes the (paid) contract method with params as input values. -func (_SystemConfig *SystemConfigTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) { - return _SystemConfig.Contract.contract.Transact(opts, method, params...) -} - -// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. -// -// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) BATCHINBOXSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "BATCH_INBOX_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. -// -// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) BATCHINBOXSLOT() ([32]byte, error) { - return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) -} - -// BATCHINBOXSLOT is a free data retrieval call binding the contract method 0xbc49ce5f. -// -// Solidity: function BATCH_INBOX_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, error) { - return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) -} - -// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. -// -// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) L1CROSSDOMAINMESSENGERSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "L1_CROSS_DOMAIN_MESSENGER_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. -// -// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) -} - -// L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. -// -// Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) L1CROSSDOMAINMESSENGERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1CROSSDOMAINMESSENGERSLOT(&_SystemConfig.CallOpts) -} - -// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. -// -// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) L1ERC721BRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "L1_ERC_721_BRIDGE_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. -// -// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) L1ERC721BRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) -} - -// L1ERC721BRIDGESLOT is a free data retrieval call binding the contract method 0x19f5cea8. -// -// Solidity: function L1_ERC_721_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) L1ERC721BRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1ERC721BRIDGESLOT(&_SystemConfig.CallOpts) -} - -// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. -// -// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) L1STANDARDBRIDGESLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "L1_STANDARD_BRIDGE_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. -// -// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) -} - -// L1STANDARDBRIDGESLOT is a free data retrieval call binding the contract method 0xf8c68de0. -// -// Solidity: function L1_STANDARD_BRIDGE_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) L1STANDARDBRIDGESLOT() ([32]byte, error) { - return _SystemConfig.Contract.L1STANDARDBRIDGESLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. -// -// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) OPTIMISMMINTABLEERC20FACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. -// -// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMMINTABLEERC20FACTORYSLOT is a free data retrieval call binding the contract method 0x06c92657. -// -// Solidity: function OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) OPTIMISMMINTABLEERC20FACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMMINTABLEERC20FACTORYSLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. -// -// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) OPTIMISMPORTALSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "OPTIMISM_PORTAL_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. -// -// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) OPTIMISMPORTALSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) -} - -// OPTIMISMPORTALSLOT is a free data retrieval call binding the contract method 0xfd32aa0f. -// -// Solidity: function OPTIMISM_PORTAL_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) OPTIMISMPORTALSLOT() ([32]byte, error) { - return _SystemConfig.Contract.OPTIMISMPORTALSLOT(&_SystemConfig.CallOpts) -} - -// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. -// -// Solidity: function START_BLOCK_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) STARTBLOCKSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "START_BLOCK_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. -// -// Solidity: function START_BLOCK_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) STARTBLOCKSLOT() ([32]byte, error) { - return _SystemConfig.Contract.STARTBLOCKSLOT(&_SystemConfig.CallOpts) -} - -// STARTBLOCKSLOT is a free data retrieval call binding the contract method 0xe0e2016d. -// -// Solidity: function START_BLOCK_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) STARTBLOCKSLOT() ([32]byte, error) { - return _SystemConfig.Contract.STARTBLOCKSLOT(&_SystemConfig.CallOpts) -} - -// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. -// -// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) UNSAFEBLOCKSIGNERSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "UNSAFE_BLOCK_SIGNER_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. -// -// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) -} - -// UNSAFEBLOCKSIGNERSLOT is a free data retrieval call binding the contract method 0x4f16540b. -// -// Solidity: function UNSAFE_BLOCK_SIGNER_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) UNSAFEBLOCKSIGNERSLOT() ([32]byte, error) { - return _SystemConfig.Contract.UNSAFEBLOCKSIGNERSLOT(&_SystemConfig.CallOpts) -} - -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. -// -// Solidity: function VERSION() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) VERSION(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "VERSION") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. -// -// Solidity: function VERSION() view returns(uint256) -func (_SystemConfig *SystemConfigSession) VERSION() (*big.Int, error) { - return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) -} - -// VERSION is a free data retrieval call binding the contract method 0xffa1ad74. -// -// Solidity: function VERSION() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) VERSION() (*big.Int, error) { - return _SystemConfig.Contract.VERSION(&_SystemConfig.CallOpts) -} - -// BasefeeScalar is a free data retrieval call binding the contract method 0xbfb14fb7. -// -// Solidity: function basefeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigCaller) BasefeeScalar(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "basefeeScalar") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// BasefeeScalar is a free data retrieval call binding the contract method 0xbfb14fb7. -// -// Solidity: function basefeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigSession) BasefeeScalar() (uint32, error) { - return _SystemConfig.Contract.BasefeeScalar(&_SystemConfig.CallOpts) -} - -// BasefeeScalar is a free data retrieval call binding the contract method 0xbfb14fb7. -// -// Solidity: function basefeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigCallerSession) BasefeeScalar() (uint32, error) { - return _SystemConfig.Contract.BasefeeScalar(&_SystemConfig.CallOpts) -} - -// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. -// -// Solidity: function batchInbox() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) BatchInbox(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "batchInbox") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. -// -// Solidity: function batchInbox() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) BatchInbox() (common.Address, error) { - return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) -} - -// BatchInbox is a free data retrieval call binding the contract method 0xdac6e63a. -// -// Solidity: function batchInbox() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) BatchInbox() (common.Address, error) { - return _SystemConfig.Contract.BatchInbox(&_SystemConfig.CallOpts) -} - -// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. -// -// Solidity: function batcherHash() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) BatcherHash(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "batcherHash") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. -// -// Solidity: function batcherHash() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) BatcherHash() ([32]byte, error) { - return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) -} - -// BatcherHash is a free data retrieval call binding the contract method 0xe81b2c6d. -// -// Solidity: function batcherHash() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) BatcherHash() ([32]byte, error) { - return _SystemConfig.Contract.BatcherHash(&_SystemConfig.CallOpts) -} - -// BlobbasefeeScalar is a free data retrieval call binding the contract method 0xec707517. -// -// Solidity: function blobbasefeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigCaller) BlobbasefeeScalar(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "blobbasefeeScalar") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// BlobbasefeeScalar is a free data retrieval call binding the contract method 0xec707517. -// -// Solidity: function blobbasefeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigSession) BlobbasefeeScalar() (uint32, error) { - return _SystemConfig.Contract.BlobbasefeeScalar(&_SystemConfig.CallOpts) -} - -// BlobbasefeeScalar is a free data retrieval call binding the contract method 0xec707517. -// -// Solidity: function blobbasefeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigCallerSession) BlobbasefeeScalar() (uint32, error) { - return _SystemConfig.Contract.BlobbasefeeScalar(&_SystemConfig.CallOpts) -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) DisputeGameFactory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "disputeGameFactory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) DisputeGameFactory() (common.Address, error) { - return _SystemConfig.Contract.DisputeGameFactory(&_SystemConfig.CallOpts) -} - -// DisputeGameFactory is a free data retrieval call binding the contract method 0xf2b4e617. -// -// Solidity: function disputeGameFactory() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) DisputeGameFactory() (common.Address, error) { - return _SystemConfig.Contract.DisputeGameFactory(&_SystemConfig.CallOpts) -} - -// Eip1559Denominator is a free data retrieval call binding the contract method 0xd220a9e0. -// -// Solidity: function eip1559Denominator() view returns(uint32) -func (_SystemConfig *SystemConfigCaller) Eip1559Denominator(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "eip1559Denominator") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// Eip1559Denominator is a free data retrieval call binding the contract method 0xd220a9e0. -// -// Solidity: function eip1559Denominator() view returns(uint32) -func (_SystemConfig *SystemConfigSession) Eip1559Denominator() (uint32, error) { - return _SystemConfig.Contract.Eip1559Denominator(&_SystemConfig.CallOpts) -} - -// Eip1559Denominator is a free data retrieval call binding the contract method 0xd220a9e0. -// -// Solidity: function eip1559Denominator() view returns(uint32) -func (_SystemConfig *SystemConfigCallerSession) Eip1559Denominator() (uint32, error) { - return _SystemConfig.Contract.Eip1559Denominator(&_SystemConfig.CallOpts) -} - -// Eip1559Elasticity is a free data retrieval call binding the contract method 0xc9ff2d16. -// -// Solidity: function eip1559Elasticity() view returns(uint32) -func (_SystemConfig *SystemConfigCaller) Eip1559Elasticity(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "eip1559Elasticity") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// Eip1559Elasticity is a free data retrieval call binding the contract method 0xc9ff2d16. -// -// Solidity: function eip1559Elasticity() view returns(uint32) -func (_SystemConfig *SystemConfigSession) Eip1559Elasticity() (uint32, error) { - return _SystemConfig.Contract.Eip1559Elasticity(&_SystemConfig.CallOpts) -} - -// Eip1559Elasticity is a free data retrieval call binding the contract method 0xc9ff2d16. -// -// Solidity: function eip1559Elasticity() view returns(uint32) -func (_SystemConfig *SystemConfigCallerSession) Eip1559Elasticity() (uint32, error) { - return _SystemConfig.Contract.Eip1559Elasticity(&_SystemConfig.CallOpts) -} - -// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. -// -// Solidity: function gasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) GasLimit(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "gasLimit") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. -// -// Solidity: function gasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigSession) GasLimit() (uint64, error) { - return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) -} - -// GasLimit is a free data retrieval call binding the contract method 0xf68016b7. -// -// Solidity: function gasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { - return _SystemConfig.Contract.GasLimit(&_SystemConfig.CallOpts) -} - -// GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. -// -// Solidity: function getAddresses() view returns((address,address,address,address,address)) -func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "getAddresses") - - if err != nil { - return *new(SystemConfigAddresses), err - } - - out0 := *abi.ConvertType(out[0], new(SystemConfigAddresses)).(*SystemConfigAddresses) - - return out0, err - -} - -// GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. -// -// Solidity: function getAddresses() view returns((address,address,address,address,address)) -func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { - return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) -} - -// GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. -// -// Solidity: function getAddresses() view returns((address,address,address,address,address)) -func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { - return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "guardian") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigSession) Guardian() (common.Address, error) { - return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) Guardian() (common.Address, error) { - return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) InitVersion(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "initVersion") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigSession) InitVersion() (uint8, error) { - return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) InitVersion() (uint8, error) { - return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) L1CrossDomainMessenger(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l1CrossDomainMessenger") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) L1CrossDomainMessenger() (common.Address, error) { - return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) -} - -// L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. -// -// Solidity: function l1CrossDomainMessenger() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) L1CrossDomainMessenger() (common.Address, error) { - return _SystemConfig.Contract.L1CrossDomainMessenger(&_SystemConfig.CallOpts) -} - -// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. -// -// Solidity: function l1ERC721Bridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) L1ERC721Bridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l1ERC721Bridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. -// -// Solidity: function l1ERC721Bridge() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) L1ERC721Bridge() (common.Address, error) { - return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) -} - -// L1ERC721Bridge is a free data retrieval call binding the contract method 0xc4e8ddfa. -// -// Solidity: function l1ERC721Bridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) L1ERC721Bridge() (common.Address, error) { - return _SystemConfig.Contract.L1ERC721Bridge(&_SystemConfig.CallOpts) -} - -// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. -// -// Solidity: function l1StandardBridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) L1StandardBridge(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l1StandardBridge") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. -// -// Solidity: function l1StandardBridge() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) L1StandardBridge() (common.Address, error) { - return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) -} - -// L1StandardBridge is a free data retrieval call binding the contract method 0x078f29cf. -// -// Solidity: function l1StandardBridge() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Address, error) { - return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l2ChainId") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigSession) L2ChainId() (*big.Int, error) { - return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) L2ChainId() (*big.Int, error) { - return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) -} - -// MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. -// -// Solidity: function maximumGasLimit() pure returns(uint64) -func (_SystemConfig *SystemConfigCaller) MaximumGasLimit(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "maximumGasLimit") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. -// -// Solidity: function maximumGasLimit() pure returns(uint64) -func (_SystemConfig *SystemConfigSession) MaximumGasLimit() (uint64, error) { - return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) -} - -// MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. -// -// Solidity: function maximumGasLimit() pure returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error) { - return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) -} - -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. -// -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBasefeeLog2") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. -// -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigSession) MinBasefeeLog2() (uint8, error) { - return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) -} - -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. -// -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) MinBasefeeLog2() (uint8, error) { - return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. -// -// Solidity: function minimumGasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) MinimumGasLimit(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minimumGasLimit") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. -// -// Solidity: function minimumGasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigSession) MinimumGasLimit() (uint64, error) { - return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) -} - -// MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. -// -// Solidity: function minimumGasLimit() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) MinimumGasLimit() (uint64, error) { - return _SystemConfig.Contract.MinimumGasLimit(&_SystemConfig.CallOpts) -} - -// OperatorFeeConstant is a free data retrieval call binding the contract method 0x16d3bc7f. -// -// Solidity: function operatorFeeConstant() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) OperatorFeeConstant(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "operatorFeeConstant") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// OperatorFeeConstant is a free data retrieval call binding the contract method 0x16d3bc7f. -// -// Solidity: function operatorFeeConstant() view returns(uint64) -func (_SystemConfig *SystemConfigSession) OperatorFeeConstant() (uint64, error) { - return _SystemConfig.Contract.OperatorFeeConstant(&_SystemConfig.CallOpts) -} - -// OperatorFeeConstant is a free data retrieval call binding the contract method 0x16d3bc7f. -// -// Solidity: function operatorFeeConstant() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) OperatorFeeConstant() (uint64, error) { - return _SystemConfig.Contract.OperatorFeeConstant(&_SystemConfig.CallOpts) -} - -// OperatorFeeScalar is a free data retrieval call binding the contract method 0x4d5d9a2a. -// -// Solidity: function operatorFeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigCaller) OperatorFeeScalar(opts *bind.CallOpts) (uint32, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "operatorFeeScalar") - - if err != nil { - return *new(uint32), err - } - - out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32) - - return out0, err - -} - -// OperatorFeeScalar is a free data retrieval call binding the contract method 0x4d5d9a2a. -// -// Solidity: function operatorFeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigSession) OperatorFeeScalar() (uint32, error) { - return _SystemConfig.Contract.OperatorFeeScalar(&_SystemConfig.CallOpts) -} - -// OperatorFeeScalar is a free data retrieval call binding the contract method 0x4d5d9a2a. -// -// Solidity: function operatorFeeScalar() view returns(uint32) -func (_SystemConfig *SystemConfigCallerSession) OperatorFeeScalar() (uint32, error) { - return _SystemConfig.Contract.OperatorFeeScalar(&_SystemConfig.CallOpts) -} - -// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. -// -// Solidity: function optimismMintableERC20Factory() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) OptimismMintableERC20Factory(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "optimismMintableERC20Factory") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. -// -// Solidity: function optimismMintableERC20Factory() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) OptimismMintableERC20Factory() (common.Address, error) { - return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) -} - -// OptimismMintableERC20Factory is a free data retrieval call binding the contract method 0x9b7d7f0a. -// -// Solidity: function optimismMintableERC20Factory() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) OptimismMintableERC20Factory() (common.Address, error) { - return _SystemConfig.Contract.OptimismMintableERC20Factory(&_SystemConfig.CallOpts) -} - -// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. -// -// Solidity: function optimismPortal() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) OptimismPortal(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "optimismPortal") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. -// -// Solidity: function optimismPortal() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) OptimismPortal() (common.Address, error) { - return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) -} - -// OptimismPortal is a free data retrieval call binding the contract method 0x0a49cb03. -// -// Solidity: function optimismPortal() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) OptimismPortal() (common.Address, error) { - return _SystemConfig.Contract.OptimismPortal(&_SystemConfig.CallOpts) -} - -// Overhead is a free data retrieval call binding the contract method 0x0c18c162. -// -// Solidity: function overhead() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) Overhead(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "overhead") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Overhead is a free data retrieval call binding the contract method 0x0c18c162. -// -// Solidity: function overhead() view returns(uint256) -func (_SystemConfig *SystemConfigSession) Overhead() (*big.Int, error) { - return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) -} - -// Overhead is a free data retrieval call binding the contract method 0x0c18c162. -// -// Solidity: function overhead() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) Overhead() (*big.Int, error) { - return _SystemConfig.Contract.Overhead(&_SystemConfig.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_SystemConfig *SystemConfigCaller) Owner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.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 (_SystemConfig *SystemConfigSession) Owner() (common.Address, error) { - return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) -} - -// Owner is a free data retrieval call binding the contract method 0x8da5cb5b. -// -// Solidity: function owner() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) { - return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigSession) Paused() (bool, error) { - return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { - return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigCaller) ProxyAdmin(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "proxyAdmin") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigSession) ProxyAdmin() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) ProxyAdmin() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigCaller) ProxyAdminOwner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "proxyAdminOwner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigSession) ProxyAdminOwner() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) ProxyAdminOwner() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) -} - -// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. -// -// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) -func (_SystemConfig *SystemConfigCaller) ResourceConfig(opts *bind.CallOpts) (IResourceMeteringResourceConfig, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "resourceConfig") - - if err != nil { - return *new(IResourceMeteringResourceConfig), err - } - - out0 := *abi.ConvertType(out[0], new(IResourceMeteringResourceConfig)).(*IResourceMeteringResourceConfig) - - return out0, err - -} - -// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. -// -// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) -func (_SystemConfig *SystemConfigSession) ResourceConfig() (IResourceMeteringResourceConfig, error) { - return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) -} - -// ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. -// -// Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) -func (_SystemConfig *SystemConfigCallerSession) ResourceConfig() (IResourceMeteringResourceConfig, error) { - return _SystemConfig.Contract.ResourceConfig(&_SystemConfig.CallOpts) -} - -// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. -// -// Solidity: function scalar() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) Scalar(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "scalar") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. -// -// Solidity: function scalar() view returns(uint256) -func (_SystemConfig *SystemConfigSession) Scalar() (*big.Int, error) { - return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) -} - -// Scalar is a free data retrieval call binding the contract method 0xf45e65d8. -// -// Solidity: function scalar() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) Scalar() (*big.Int, error) { - return _SystemConfig.Contract.Scalar(&_SystemConfig.CallOpts) -} - -// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. -// -// Solidity: function startBlock() view returns(uint256 startBlock_) -func (_SystemConfig *SystemConfigCaller) StartBlock(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "startBlock") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. -// -// Solidity: function startBlock() view returns(uint256 startBlock_) -func (_SystemConfig *SystemConfigSession) StartBlock() (*big.Int, error) { - return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) -} - -// StartBlock is a free data retrieval call binding the contract method 0x48cd4cb1. -// -// Solidity: function startBlock() view returns(uint256 startBlock_) -func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { - return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigSession) SuperchainConfig() (common.Address, error) { - return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) SuperchainConfig() (common.Address, error) { - return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) -} - -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. -// -// Solidity: function unsafeBlockSigner() view returns(address addr_) -func (_SystemConfig *SystemConfigCaller) UnsafeBlockSigner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "unsafeBlockSigner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. -// -// Solidity: function unsafeBlockSigner() view returns(address addr_) -func (_SystemConfig *SystemConfigSession) UnsafeBlockSigner() (common.Address, error) { - return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) -} - -// UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. -// -// Solidity: function unsafeBlockSigner() view returns(address addr_) -func (_SystemConfig *SystemConfigCallerSession) UnsafeBlockSigner() (common.Address, error) { - return _SystemConfig.Contract.UnsafeBlockSigner(&_SystemConfig.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() pure returns(string) -func (_SystemConfig *SystemConfigCaller) Version(opts *bind.CallOpts) (string, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "version") - - if err != nil { - return *new(string), err - } - - out0 := *abi.ConvertType(out[0], new(string)).(*string) - - return out0, err - -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() pure returns(string) -func (_SystemConfig *SystemConfigSession) Version() (string, error) { - return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) -} - -// Version is a free data retrieval call binding the contract method 0x54fd4d50. -// -// Solidity: function version() pure returns(string) -func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { - return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) -} - -// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. -// -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) -} - -// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. -// -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) -} - -// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. -// -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_SystemConfig *SystemConfigTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "renounceOwnership") -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_SystemConfig *SystemConfigSession) RenounceOwnership() (*types.Transaction, error) { - return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) -} - -// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. -// -// Solidity: function renounceOwnership() returns() -func (_SystemConfig *SystemConfigTransactorSession) RenounceOwnership() (*types.Transaction, error) { - return _SystemConfig.Contract.RenounceOwnership(&_SystemConfig.TransactOpts) -} - -// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. -// -// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() -func (_SystemConfig *SystemConfigTransactor) SetBatcherHash(opts *bind.TransactOpts, _batcherHash [32]byte) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setBatcherHash", _batcherHash) -} - -// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. -// -// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() -func (_SystemConfig *SystemConfigSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { - return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) -} - -// SetBatcherHash is a paid mutator transaction binding the contract method 0xc9b26f61. -// -// Solidity: function setBatcherHash(bytes32 _batcherHash) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetBatcherHash(_batcherHash [32]byte) (*types.Transaction, error) { - return _SystemConfig.Contract.SetBatcherHash(&_SystemConfig.TransactOpts, _batcherHash) -} - -// SetEIP1559Params is a paid mutator transaction binding the contract method 0xc0fd4b41. -// -// Solidity: function setEIP1559Params(uint32 _denominator, uint32 _elasticity) returns() -func (_SystemConfig *SystemConfigTransactor) SetEIP1559Params(opts *bind.TransactOpts, _denominator uint32, _elasticity uint32) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setEIP1559Params", _denominator, _elasticity) -} - -// SetEIP1559Params is a paid mutator transaction binding the contract method 0xc0fd4b41. -// -// Solidity: function setEIP1559Params(uint32 _denominator, uint32 _elasticity) returns() -func (_SystemConfig *SystemConfigSession) SetEIP1559Params(_denominator uint32, _elasticity uint32) (*types.Transaction, error) { - return _SystemConfig.Contract.SetEIP1559Params(&_SystemConfig.TransactOpts, _denominator, _elasticity) -} - -// SetEIP1559Params is a paid mutator transaction binding the contract method 0xc0fd4b41. -// -// Solidity: function setEIP1559Params(uint32 _denominator, uint32 _elasticity) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetEIP1559Params(_denominator uint32, _elasticity uint32) (*types.Transaction, error) { - return _SystemConfig.Contract.SetEIP1559Params(&_SystemConfig.TransactOpts, _denominator, _elasticity) -} - -// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. -// -// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() -func (_SystemConfig *SystemConfigTransactor) SetGasConfig(opts *bind.TransactOpts, _overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setGasConfig", _overhead, _scalar) -} - -// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. -// -// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() -func (_SystemConfig *SystemConfigSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) -} - -// SetGasConfig is a paid mutator transaction binding the contract method 0x935f029e. -// -// Solidity: function setGasConfig(uint256 _overhead, uint256 _scalar) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetGasConfig(_overhead *big.Int, _scalar *big.Int) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasConfig(&_SystemConfig.TransactOpts, _overhead, _scalar) -} - -// SetGasConfigEcotone is a paid mutator transaction binding the contract method 0x21d7fde5. -// -// Solidity: function setGasConfigEcotone(uint32 _basefeeScalar, uint32 _blobbasefeeScalar) returns() -func (_SystemConfig *SystemConfigTransactor) SetGasConfigEcotone(opts *bind.TransactOpts, _basefeeScalar uint32, _blobbasefeeScalar uint32) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setGasConfigEcotone", _basefeeScalar, _blobbasefeeScalar) -} - -// SetGasConfigEcotone is a paid mutator transaction binding the contract method 0x21d7fde5. -// -// Solidity: function setGasConfigEcotone(uint32 _basefeeScalar, uint32 _blobbasefeeScalar) returns() -func (_SystemConfig *SystemConfigSession) SetGasConfigEcotone(_basefeeScalar uint32, _blobbasefeeScalar uint32) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasConfigEcotone(&_SystemConfig.TransactOpts, _basefeeScalar, _blobbasefeeScalar) -} - -// SetGasConfigEcotone is a paid mutator transaction binding the contract method 0x21d7fde5. -// -// Solidity: function setGasConfigEcotone(uint32 _basefeeScalar, uint32 _blobbasefeeScalar) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetGasConfigEcotone(_basefeeScalar uint32, _blobbasefeeScalar uint32) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasConfigEcotone(&_SystemConfig.TransactOpts, _basefeeScalar, _blobbasefeeScalar) -} - -// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. -// -// Solidity: function setGasLimit(uint64 _gasLimit) returns() -func (_SystemConfig *SystemConfigTransactor) SetGasLimit(opts *bind.TransactOpts, _gasLimit uint64) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setGasLimit", _gasLimit) -} - -// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. -// -// Solidity: function setGasLimit(uint64 _gasLimit) returns() -func (_SystemConfig *SystemConfigSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) -} - -// SetGasLimit is a paid mutator transaction binding the contract method 0xb40a817c. -// -// Solidity: function setGasLimit(uint64 _gasLimit) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) -} - -// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. -// -// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactor) SetMinBasefeeLog2(opts *bind.TransactOpts, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setMinBasefeeLog2", _minBasefeeLog2) -} - -// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. -// -// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) -} - -// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. -// -// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) -} - -// SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. -// -// Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() -func (_SystemConfig *SystemConfigTransactor) SetOperatorFeeScalars(opts *bind.TransactOpts, _operatorFeeScalar uint32, _operatorFeeConstant uint64) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setOperatorFeeScalars", _operatorFeeScalar, _operatorFeeConstant) -} - -// SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. -// -// Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() -func (_SystemConfig *SystemConfigSession) SetOperatorFeeScalars(_operatorFeeScalar uint32, _operatorFeeConstant uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetOperatorFeeScalars(&_SystemConfig.TransactOpts, _operatorFeeScalar, _operatorFeeConstant) -} - -// SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. -// -// Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetOperatorFeeScalars(_operatorFeeScalar uint32, _operatorFeeConstant uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetOperatorFeeScalars(&_SystemConfig.TransactOpts, _operatorFeeScalar, _operatorFeeConstant) -} - -// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. -// -// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigTransactor) SetUnsafeBlockSigner(opts *bind.TransactOpts, _unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setUnsafeBlockSigner", _unsafeBlockSigner) -} - -// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. -// -// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) -} - -// SetUnsafeBlockSigner is a paid mutator transaction binding the contract method 0x18d13918. -// -// Solidity: function setUnsafeBlockSigner(address _unsafeBlockSigner) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetUnsafeBlockSigner(_unsafeBlockSigner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.SetUnsafeBlockSigner(&_SystemConfig.TransactOpts, _unsafeBlockSigner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_SystemConfig *SystemConfigTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "transferOwnership", newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_SystemConfig *SystemConfigSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) -} - -// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b. -// -// Solidity: function transferOwnership(address newOwner) returns() -func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactor) Upgrade(opts *bind.TransactOpts, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "upgrade", _l2ChainId, _superchainConfig) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactorSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) -} - -// SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. -type SystemConfigConfigUpdateIterator struct { - Event *SystemConfigConfigUpdate // 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 *SystemConfigConfigUpdateIterator) 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(SystemConfigConfigUpdate) - 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(SystemConfigConfigUpdate) - 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 *SystemConfigConfigUpdateIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigConfigUpdateIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigConfigUpdate represents a ConfigUpdate event raised by the SystemConfig contract. -type SystemConfigConfigUpdate struct { - Version *big.Int - UpdateType uint8 - Data []byte - Raw types.Log // Blockchain specific contextual infos -} - -// FilterConfigUpdate is a free log retrieval operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. -// -// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) -func (_SystemConfig *SystemConfigFilterer) FilterConfigUpdate(opts *bind.FilterOpts, version []*big.Int, updateType []uint8) (*SystemConfigConfigUpdateIterator, error) { - - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - var updateTypeRule []interface{} - for _, updateTypeItem := range updateType { - updateTypeRule = append(updateTypeRule, updateTypeItem) - } - - logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) - if err != nil { - return nil, err - } - return &SystemConfigConfigUpdateIterator{contract: _SystemConfig.contract, event: "ConfigUpdate", logs: logs, sub: sub}, nil -} - -// WatchConfigUpdate is a free log subscription operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. -// -// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) -func (_SystemConfig *SystemConfigFilterer) WatchConfigUpdate(opts *bind.WatchOpts, sink chan<- *SystemConfigConfigUpdate, version []*big.Int, updateType []uint8) (event.Subscription, error) { - - var versionRule []interface{} - for _, versionItem := range version { - versionRule = append(versionRule, versionItem) - } - var updateTypeRule []interface{} - for _, updateTypeItem := range updateType { - updateTypeRule = append(updateTypeRule, updateTypeItem) - } - - logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "ConfigUpdate", versionRule, updateTypeRule) - 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(SystemConfigConfigUpdate) - if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", 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 -} - -// ParseConfigUpdate is a log parse operation binding the contract event 0x1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be. -// -// Solidity: event ConfigUpdate(uint256 indexed version, uint8 indexed updateType, bytes data) -func (_SystemConfig *SystemConfigFilterer) ParseConfigUpdate(log types.Log) (*SystemConfigConfigUpdate, error) { - event := new(SystemConfigConfigUpdate) - if err := _SystemConfig.contract.UnpackLog(event, "ConfigUpdate", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// SystemConfigInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the SystemConfig contract. -type SystemConfigInitializedIterator struct { - Event *SystemConfigInitialized // 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 *SystemConfigInitializedIterator) 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(SystemConfigInitialized) - 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(SystemConfigInitialized) - 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 *SystemConfigInitializedIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigInitializedIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigInitialized represents a Initialized event raised by the SystemConfig contract. -type SystemConfigInitialized struct { - Version uint8 - Raw types.Log // Blockchain specific contextual infos -} - -// FilterInitialized is a free log retrieval operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_SystemConfig *SystemConfigFilterer) FilterInitialized(opts *bind.FilterOpts) (*SystemConfigInitializedIterator, error) { - - logs, sub, err := _SystemConfig.contract.FilterLogs(opts, "Initialized") - if err != nil { - return nil, err - } - return &SystemConfigInitializedIterator{contract: _SystemConfig.contract, event: "Initialized", logs: logs, sub: sub}, nil -} - -// WatchInitialized is a free log subscription operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_SystemConfig *SystemConfigFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *SystemConfigInitialized) (event.Subscription, error) { - - logs, sub, err := _SystemConfig.contract.WatchLogs(opts, "Initialized") - 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(SystemConfigInitialized) - if err := _SystemConfig.contract.UnpackLog(event, "Initialized", 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 -} - -// ParseInitialized is a log parse operation binding the contract event 0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498. -// -// Solidity: event Initialized(uint8 version) -func (_SystemConfig *SystemConfigFilterer) ParseInitialized(log types.Log) (*SystemConfigInitialized, error) { - event := new(SystemConfigInitialized) - if err := _SystemConfig.contract.UnpackLog(event, "Initialized", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} - -// SystemConfigOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the SystemConfig contract. -type SystemConfigOwnershipTransferredIterator struct { - Event *SystemConfigOwnershipTransferred // 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 *SystemConfigOwnershipTransferredIterator) 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(SystemConfigOwnershipTransferred) - 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(SystemConfigOwnershipTransferred) - 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 *SystemConfigOwnershipTransferredIterator) Error() error { - return it.fail -} - -// Close terminates the iteration process, releasing any pending underlying -// resources. -func (it *SystemConfigOwnershipTransferredIterator) Close() error { - it.sub.Unsubscribe() - return nil -} - -// SystemConfigOwnershipTransferred represents a OwnershipTransferred event raised by the SystemConfig contract. -type SystemConfigOwnershipTransferred 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 (_SystemConfig *SystemConfigFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*SystemConfigOwnershipTransferredIterator, 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 := _SystemConfig.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule) - if err != nil { - return nil, err - } - return &SystemConfigOwnershipTransferredIterator{contract: _SystemConfig.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 (_SystemConfig *SystemConfigFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *SystemConfigOwnershipTransferred, 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 := _SystemConfig.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(SystemConfigOwnershipTransferred) - if err := _SystemConfig.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 (_SystemConfig *SystemConfigFilterer) ParseOwnershipTransferred(log types.Log) (*SystemConfigOwnershipTransferred, error) { - event := new(SystemConfigOwnershipTransferred) - if err := _SystemConfig.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil { - return nil, err - } - event.Raw = log - return event, nil -} From 4e675902e844cce4597b609bbf45f2981e5816c9 Mon Sep 17 00:00:00 2001 From: William Law Date: Tue, 22 Jul 2025 10:05:15 -0400 Subject: [PATCH 17/56] fix casing and re-codegen --- op-deployer/pkg/deployer/opcm/opchain.go | 2 +- op-deployer/pkg/deployer/pipeline/opchain.go | 2 +- op-e2e/bindings/l1block.go | 28 ++++---- op-e2e/bindings/systemconfig.go | 70 +++++++++---------- .../interfaces/L1/ISystemConfig.sol | 6 +- .../interfaces/L2/IL1Block.sol | 2 +- .../src/L1/OPContractsManager.sol | 4 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 25 +------ packages/contracts-bedrock/src/L2/L1Block.sol | 10 +-- .../test/L1/SystemConfig.t.sol | 10 +-- .../test/invariants/SystemConfig.t.sol | 2 +- 11 files changed, 70 insertions(+), 91 deletions(-) diff --git a/op-deployer/pkg/deployer/opcm/opchain.go b/op-deployer/pkg/deployer/opcm/opchain.go index b4abea999b0a5..b51767f02ce71 100644 --- a/op-deployer/pkg/deployer/opcm/opchain.go +++ b/op-deployer/pkg/deployer/opcm/opchain.go @@ -43,7 +43,7 @@ type DeployOPChainInput struct { OperatorFeeScalar uint32 OperatorFeeConstant uint64 - MinBasefeeLog2 uint8 + MinBaseFeeLog2 uint8 } func (input *DeployOPChainInput) InputSet() bool { diff --git a/op-deployer/pkg/deployer/pipeline/opchain.go b/op-deployer/pkg/deployer/pipeline/opchain.go index 15698dcfc7738..d2b0689db011f 100644 --- a/op-deployer/pkg/deployer/pipeline/opchain.go +++ b/op-deployer/pkg/deployer/pipeline/opchain.go @@ -112,7 +112,7 @@ func makeDCI(intent *state.Intent, thisIntent *state.ChainIntent, chainID common AllowCustomDisputeParameters: proofParams.DangerouslyAllowCustomDisputeParameters, OperatorFeeScalar: thisIntent.OperatorFeeScalar, OperatorFeeConstant: thisIntent.OperatorFeeConstant, - MinBasefeeLog2: thisIntent.MinBasefeeLog2, + MinBaseFeeLog2: thisIntent.MinBaseFeeLog2, }, nil } diff --git a/op-e2e/bindings/l1block.go b/op-e2e/bindings/l1block.go index 18afc01cebc6f..ba304ebadb726 100644 --- a/op-e2e/bindings/l1block.go +++ b/op-e2e/bindings/l1block.go @@ -31,8 +31,8 @@ var ( // L1BlockMetaData contains all meta data concerning the L1Block contract. var L1BlockMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"is_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minBasefeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesIsthmus\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesJovian\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"}]", - Bin: "0x608060405234801561001057600080fd5b50610716806100206000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806364ca23ef116100e3578063b80777ea1161008c578063e591b28211610066578063e591b282146103fd578063e81b2c6d1461041f578063f82061401461042857600080fd5b8063b80777ea14610384578063c5985918146103a4578063d8444715146103c457600080fd5b80638b239f73116100bd5780638b239f73146103435780639e8c49661461034c578063b3ae5a3f1461035557600080fd5b806364ca23ef146102ff57806368d5dca6146103135780638381f58a1461032f57600080fd5b80634397dfef1161014557806354fd4d501161011f57806354fd4d501461027b578063550fcdc9146102bd5780635cf24969146102f657600080fd5b80634397dfef1461021a578063440a5e20146102425780634d5d9a2a1461024a57600080fd5b806316d3bc7f1161017657806316d3bc7f146101d657806321326849146102035780633db6be2b1461021257600080fd5b8063015d8eb91461019d578063098999be146101b257806309bd5a60146101ba575b600080fd5b6101b06101ab366004610624565b610431565b005b6101b0610570565b6101c360025481565b6040519081526020015b60405180910390f35b6008546101ea9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101cd565b604051600081526020016101cd565b6101b061057a565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee815260126020820152016101cd565b6101b0610582565b6008546102669068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016101cd565b60408051808201909152600581527f312e372e3000000000000000000000000000000000000000000000000000000060208201525b6040516101cd9190610696565b60408051808201909152600381527f455448000000000000000000000000000000000000000000000000000000000060208201526102b0565b6101c360015481565b6003546101ea9067ffffffffffffffff1681565b6003546102669068010000000000000000900463ffffffff1681565b6000546101ea9067ffffffffffffffff1681565b6101c360055481565b6101c360065481565b600854610372906c01000000000000000000000000900460ff1681565b60405160ff90911681526020016101cd565b6000546101ea9068010000000000000000900467ffffffffffffffff1681565b600354610266906c01000000000000000000000000900463ffffffff1681565b60408051808201909152600581527f457468657200000000000000000000000000000000000000000000000000000060208201526102b0565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead000181526020016101cd565b6101c360045481565b6101c360075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146104d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b61057861058a565b565b61057861059d565b6105786105b0565b6105926105b0565b60a43560a01c600855565b6105a561058a565b60c43560f01c600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead00013381146105da57633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff8116811461061f57600080fd5b919050565b600080600080600080600080610100898b03121561064157600080fd5b61064a89610607565b975061065860208a01610607565b9650604089013595506060890135945061067460808a01610607565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156106c3578581018301518582016040015282016106a7565b818111156106d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"is_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesIsthmus\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesJovian\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"}]", + Bin: "0x608060405234801561001057600080fd5b50610716806100206000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806364ca23ef116100e3578063c59859181161008c578063e591b28211610066578063e591b282146103fd578063e81b2c6d1461041f578063f82061401461042857600080fd5b8063c598591814610375578063c932107914610395578063d8444715146103c457600080fd5b80638b239f73116100bd5780638b239f73146103435780639e8c49661461034c578063b80777ea1461035557600080fd5b806364ca23ef146102ff57806368d5dca6146103135780638381f58a1461032f57600080fd5b80634397dfef1161014557806354fd4d501161011f57806354fd4d501461027b578063550fcdc9146102bd5780635cf24969146102f657600080fd5b80634397dfef1461021a578063440a5e20146102425780634d5d9a2a1461024a57600080fd5b806316d3bc7f1161017657806316d3bc7f146101d657806321326849146102035780633db6be2b1461021257600080fd5b8063015d8eb91461019d578063098999be146101b257806309bd5a60146101ba575b600080fd5b6101b06101ab366004610624565b610431565b005b6101b0610570565b6101c360025481565b6040519081526020015b60405180910390f35b6008546101ea9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101cd565b604051600081526020016101cd565b6101b061057a565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee815260126020820152016101cd565b6101b0610582565b6008546102669068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016101cd565b60408051808201909152600581527f312e372e3000000000000000000000000000000000000000000000000000000060208201525b6040516101cd9190610696565b60408051808201909152600381527f455448000000000000000000000000000000000000000000000000000000000060208201526102b0565b6101c360015481565b6003546101ea9067ffffffffffffffff1681565b6003546102669068010000000000000000900463ffffffff1681565b6000546101ea9067ffffffffffffffff1681565b6101c360055481565b6101c360065481565b6000546101ea9068010000000000000000900467ffffffffffffffff1681565b600354610266906c01000000000000000000000000900463ffffffff1681565b6008546103b2906c01000000000000000000000000900460ff1681565b60405160ff90911681526020016101cd565b60408051808201909152600581527f457468657200000000000000000000000000000000000000000000000000000060208201526102b0565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead000181526020016101cd565b6101c360045481565b6101c360075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146104d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b61057861058a565b565b61057861059d565b6105786105b0565b6105926105b0565b60a43560a01c600855565b6105a561058a565b60c43560f01c600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead00013381146105da57633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff8116811461061f57600080fd5b919050565b600080600080600080600080610100898b03121561064157600080fd5b61064a89610607565b975061065860208a01610607565b9650604089013595506060890135945061067460808a01610607565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156106c3578581018301518582016040015282016106a7565b818111156106d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", } // L1BlockABI is the input ABI used to generate the binding from. @@ -619,12 +619,12 @@ func (_L1Block *L1BlockCallerSession) L1FeeScalar() (*big.Int, error) { return _L1Block.Contract.L1FeeScalar(&_L1Block.CallOpts) } -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. // -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_L1Block *L1BlockCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error) { +// Solidity: function minBaseFeeLog2() view returns(uint8) +func (_L1Block *L1BlockCaller) MinBaseFeeLog2(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _L1Block.contract.Call(opts, &out, "minBasefeeLog2") + err := _L1Block.contract.Call(opts, &out, "minBaseFeeLog2") if err != nil { return *new(uint8), err @@ -636,18 +636,18 @@ func (_L1Block *L1BlockCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error } -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. // -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_L1Block *L1BlockSession) MinBasefeeLog2() (uint8, error) { - return _L1Block.Contract.MinBasefeeLog2(&_L1Block.CallOpts) +// Solidity: function minBaseFeeLog2() view returns(uint8) +func (_L1Block *L1BlockSession) MinBaseFeeLog2() (uint8, error) { + return _L1Block.Contract.MinBaseFeeLog2(&_L1Block.CallOpts) } -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. // -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_L1Block *L1BlockCallerSession) MinBasefeeLog2() (uint8, error) { - return _L1Block.Contract.MinBasefeeLog2(&_L1Block.CallOpts) +// Solidity: function minBaseFeeLog2() view returns(uint8) +func (_L1Block *L1BlockCallerSession) MinBaseFeeLog2() (uint8, error) { + return _L1Block.Contract.MinBaseFeeLog2(&_L1Block.CallOpts) } // Number is a free data retrieval call binding the contract method 0x8381f58a. diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 1d8366a76ab3a..5852741ba1da8 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -50,8 +50,8 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"},{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBasefeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBasefeeLog2\",\"inputs\":[{\"name\":\"_minBasefeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ce578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bc49ce5f14610697578063bfb14fb71461069f578063c0fd4b41146106bb57600080fd5b8063a7119869116101a2578063a711986914610657578063b3ae5a3f1461065f578063b40a817c1461068457600080fd5b8063935f029e146105d85780639b7d7f0a146105eb578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635c975abb1161021a5780635c975abb146105925780635d73369c146105aa578063715018a6146105b25780638da5cb5b146105ba57600080fd5b80634f16540b1461051957806354fd4d501461054057806357705b3c1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61037a61058d366004612be4565b61124c565b61059a61125d565b604051901515815260200161038e565b61038461140b565b61037a611436565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105e6366004612bff565b61144a565b61039f61145c565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a610692366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106c9366004612898565b6115df565b61039f6115f1565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b6112546118ec565b610b8381611e5c565b600080611268610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d69190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612d21565b806114055750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61143e6118ec565b61144860006123f4565b565b6114526118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661145c565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611448576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611448576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361144857611448611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611448336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b600060208284031215612bf657600080fd5b61289182612912565b60008060408385031215612c1257600080fd5b50508035926020909101359150565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"},{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFeeLog2\",\"inputs\":[{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639b7d7f0a116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bfb14fb711610171578063c93210791161014b578063c9321079146106b1578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bfb14fb71461067a578063c0fd4b4114610696578063c4e8ddfa146106a957600080fd5b8063a7119869116101a2578063a711986914610657578063b40a817c1461065f578063bc49ce5f1461067257600080fd5b80639b7d7f0a146105d85780639faba4f8146105e0578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610597578063715018a61461059f5780638da5cb5b146105a7578063935f029e146105c557600080fd5b80634f16540b1461051957806354fd4d50146105405780635c975abb1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61058761124c565b604051901515815260200161038e565b6103846113fa565b61037a611425565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105d3366004612be4565b611439565b61039f61144b565b61037a6105ee366004612c06565b61147b565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b61037a61066d366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106a4366004612898565b6115df565b61039f6115f1565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b600080611257610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c59190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135b9190612d21565b806113f45750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61142d6118ec565b61143760006123f4565b565b6114416118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6114836118ec565b610b8381611e5c565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661144b565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611437576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611437612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361143757611437611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611437336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b60008060408385031215612bf757600080fd5b50508035926020909101359150565b600060208284031215612c1857600080fd5b61289182612912565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -996,12 +996,12 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. // -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) MinBasefeeLog2(opts *bind.CallOpts) (uint8, error) { +// Solidity: function minBaseFeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) MinBaseFeeLog2(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBasefeeLog2") + err := _SystemConfig.contract.Call(opts, &out, "minBaseFeeLog2") if err != nil { return *new(uint8), err @@ -1013,18 +1013,18 @@ func (_SystemConfig *SystemConfigCaller) MinBasefeeLog2(opts *bind.CallOpts) (ui } -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. // -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigSession) MinBasefeeLog2() (uint8, error) { - return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) +// Solidity: function minBaseFeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigSession) MinBaseFeeLog2() (uint8, error) { + return _SystemConfig.Contract.MinBaseFeeLog2(&_SystemConfig.CallOpts) } -// MinBasefeeLog2 is a free data retrieval call binding the contract method 0xb3ae5a3f. +// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. // -// Solidity: function minBasefeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) MinBasefeeLog2() (uint8, error) { - return _SystemConfig.Contract.MinBasefeeLog2(&_SystemConfig.CallOpts) +// Solidity: function minBaseFeeLog2() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) MinBaseFeeLog2() (uint8, error) { + return _SystemConfig.Contract.MinBaseFeeLog2(&_SystemConfig.CallOpts) } // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. @@ -1525,23 +1525,23 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { // Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBaseFeeLog2) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBaseFeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBaseFeeLog2) } // Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBaseFeeLog2) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBaseFeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBaseFeeLog2) } // Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBasefeeLog2) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBaseFeeLog2) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBaseFeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBaseFeeLog2) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1670,25 +1670,25 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } -// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// SetMinBaseFeeLog2 is a paid mutator transaction binding the contract method 0x9faba4f8. // -// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactor) SetMinBasefeeLog2(opts *bind.TransactOpts, _minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setMinBasefeeLog2", _minBasefeeLog2) +// Solidity: function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBaseFeeLog2(opts *bind.TransactOpts, _minBaseFeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBaseFeeLog2", _minBaseFeeLog2) } -// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// SetMinBaseFeeLog2 is a paid mutator transaction binding the contract method 0x9faba4f8. // -// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) +// Solidity: function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) returns() +func (_SystemConfig *SystemConfigSession) SetMinBaseFeeLog2(_minBaseFeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFeeLog2(&_SystemConfig.TransactOpts, _minBaseFeeLog2) } -// SetMinBasefeeLog2 is a paid mutator transaction binding the contract method 0x57705b3c. +// SetMinBaseFeeLog2 is a paid mutator transaction binding the contract method 0x9faba4f8. // -// Solidity: function setMinBasefeeLog2(uint8 _minBasefeeLog2) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetMinBasefeeLog2(_minBasefeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBasefeeLog2(&_SystemConfig.TransactOpts, _minBasefeeLog2) +// Solidity: function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFeeLog2(_minBaseFeeLog2 uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFeeLog2(&_SystemConfig.TransactOpts, _minBaseFeeLog2) } // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 9f2f3c6876660..5511a24a10fb6 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -62,7 +62,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { Addresses memory _addresses, uint256 _l2ChainId, ISuperchainConfig _superchainConfig, - uint8 _minBasefeeLog2 + uint8 _minBaseFeeLog2 ) external; function initVersion() external view returns (uint8); @@ -74,7 +74,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function minimumGasLimit() external view returns (uint64); function operatorFeeConstant() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); - function minBasefeeLog2() external view returns (uint8); + function minBaseFeeLog2() external view returns (uint8); function optimismMintableERC20Factory() external view returns (address addr_); function optimismPortal() external view returns (address addr_); function overhead() external view returns (uint256); @@ -89,7 +89,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external; function setUnsafeBlockSigner(address _unsafeBlockSigner) external; function setEIP1559Params(uint32 _denominator, uint32 _elasticity) external; - function setMinBasefeeLog2(uint8 _minBasefeeLog2) external; + function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) external; function startBlock() external view returns (uint256 startBlock_); function transferOwnership(address newOwner) external; // nosemgrep function unsafeBlockSigner() external view returns (address addr_); diff --git a/packages/contracts-bedrock/interfaces/L2/IL1Block.sol b/packages/contracts-bedrock/interfaces/L2/IL1Block.sol index ab9e23db5ac87..91fc0c34d4be8 100644 --- a/packages/contracts-bedrock/interfaces/L2/IL1Block.sol +++ b/packages/contracts-bedrock/interfaces/L2/IL1Block.sol @@ -18,7 +18,7 @@ interface IL1Block { function number() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); function operatorFeeConstant() external view returns (uint64); - function minBasefeeLog2() external view returns (uint8); + function minBaseFeeLog2() external view returns (uint8); function sequenceNumber() external view returns (uint64); function setL1BlockValues( uint64 _number, diff --git a/packages/contracts-bedrock/src/L1/OPContractsManager.sol b/packages/contracts-bedrock/src/L1/OPContractsManager.sol index d7fb7cf44d4eb..356321f7ef9f2 100644 --- a/packages/contracts-bedrock/src/L1/OPContractsManager.sol +++ b/packages/contracts-bedrock/src/L1/OPContractsManager.sol @@ -1411,7 +1411,7 @@ contract OPContractsManagerDeployer is OPContractsManagerBase { opChainAddrs, _input.l2ChainId, _superchainConfig, - _input.minBasefeeLog2 + _input.minBaseFeeLog2 ) ); } @@ -1809,7 +1809,7 @@ contract OPContractsManager is ISemver { uint256 disputeSplitDepth; Duration disputeClockExtension; Duration disputeMaxClockDuration; - uint8 minBasefeeLog2; + uint8 minBaseFeeLog2; } /// @notice The full set of outputs from deploying a new OP Stack chain. diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index a5491053b401e..7910e6f9d073f 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -28,15 +28,13 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @custom:value GAS_LIMIT Represents an update to gas limit on L2. /// @custom:value UNSAFE_BLOCK_SIGNER Represents an update to the signer key for unsafe /// block distrubution. - /// @custom:value MIN_BASEFEE_LOG2 Represents an update to the minimum basefee log2. enum UpdateType { BATCHER, FEE_SCALARS, GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS, - MIN_BASEFEE_LOG2 + OPERATOR_FEE_PARAMS } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -131,9 +129,6 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @notice The operator fee constant. uint64 public operatorFeeConstant; - /// @notice The minimum basefee log2. - uint8 public minBasefeeLog2; - /// @notice The L2 chain ID that this SystemConfig configures. uint256 public l2ChainId; @@ -186,7 +181,6 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @param _addresses Set of L1 contract addresses. These should be the proxies. /// @param _l2ChainId The L2 chain ID that this SystemConfig configures. /// @param _superchainConfig The SuperchainConfig contract address. - /// @param _minBasefeeLog2 The minimum basefee log2. function initialize( address _owner, uint32 _basefeeScalar, @@ -198,8 +192,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl address _batchInbox, SystemConfig.Addresses memory _addresses, uint256 _l2ChainId, - ISuperchainConfig _superchainConfig, - uint8 _minBasefeeLog2 + ISuperchainConfig _superchainConfig ) public reinitializer(initVersion()) @@ -215,7 +208,6 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl _setBatcherHash(_batcherHash); _setGasConfigEcotone({ _basefeeScalar: _basefeeScalar, _blobbasefeeScalar: _blobbasefeeScalar }); _setGasLimit(_gasLimit); - _setMinBasefeeLog2(_minBasefeeLog2); Storage.setAddress(UNSAFE_BLOCK_SIGNER_SLOT, _unsafeBlockSigner); Storage.setAddress(BATCH_INBOX_SLOT, _batchInbox); @@ -455,19 +447,6 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.OPERATOR_FEE_PARAMS, data); } - /// @notice Updates the minimum basefee log2. Can only be called by the owner. - /// @param _minBasefeeLog2 The minimum basefee log2. - function setMinBasefeeLog2(uint8 _minBasefeeLog2) external onlyOwner { - _setMinBasefeeLog2(_minBasefeeLog2); - } - - /// @notice Internal function for updating the minimum basefee log2. - /// @param _minBasefeeLog2 The minimum basefee log2. - function _setMinBasefeeLog2(uint8 _minBasefeeLog2) internal { - minBasefeeLog2 = _minBasefeeLog2; - emit ConfigUpdate(VERSION, UpdateType.MIN_BASEFEE_LOG2, abi.encode(_minBasefeeLog2)); - } - /// @notice Sets the start block in a backwards compatible way. Proxies /// that were initialized before the startBlock existed in storage /// can have their start block set by a user provided override. diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index 1176c110e7583..093c1ce49e9b6 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -62,7 +62,7 @@ contract L1Block is ISemver { uint32 public operatorFeeScalar; /// @notice The minimum basefee log2. - uint8 public minBasefeeLog2; + uint8 public minBaseFeeLog2; /// @custom:semver 1.7.0 function version() public pure virtual returns (string memory) { @@ -230,7 +230,7 @@ contract L1Block is ISemver { /// 9. _batcherHash Versioned hash to authenticate batcher by. /// 10. _operatorFeeScalar Operator fee scalar. /// 11. _operatorFeeConstant Operator fee constant. - /// 12. _minBasefeeLog2 Minimum basefee log2. + /// 12. _minBaseFeeLog2 Minimum basefee log2. function setL1BlockValuesJovian() public { _setL1BlockValuesJovian(); } @@ -249,12 +249,12 @@ contract L1Block is ISemver { /// 9. _batcherHash Versioned hash to authenticate batcher by. /// 10. _operatorFeeScalar Operator fee scalar. /// 11. _operatorFeeConstant Operator fee constant. - /// 12. _minBasefeeLog2 Minimum basefee log2. + /// 12. _minBaseFeeLog2 Minimum basefee log2. function _setL1BlockValuesJovian() internal { _setL1BlockValuesIsthmus(); assembly { - // minBasefeeLog2 (uint8) - sstore(minBasefeeLog2.slot, shr(240, calldataload(196))) + // minBaseFeeLog2 (uint8) + sstore(minBaseFeeLog2.slot, shr(240, calldataload(196))) } } } diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 072b8b7578ea1..c26e72727639d 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -168,7 +168,7 @@ contract SystemConfig_Initialize_Test is SystemConfig_TestInit { }), _l2ChainId: 1234, _superchainConfig: ISuperchainConfig(address(0)), - _minBasefeeLog2: 24 + _minBaseFeeLog2: 24 }); } @@ -225,7 +225,7 @@ contract SystemConfig_Initialize_Test is SystemConfig_TestInit { }), _l2ChainId: 1234, _superchainConfig: ISuperchainConfig(address(0)), - _minBasefeeLog2: 24 + _minBaseFeeLog2: 24 }); } } @@ -353,7 +353,7 @@ contract SystemConfig_StartBlock_Test is SystemConfig_TestInit { }), _l2ChainId: 1234, _superchainConfig: ISuperchainConfig(address(0)), - _minBasefeeLog2: 24 + _minBaseFeeLog2: 24 }); assertEq(systemConfig.startBlock(), block.number); } @@ -385,7 +385,7 @@ contract SystemConfig_StartBlock_Test is SystemConfig_TestInit { }), _l2ChainId: 1234, _superchainConfig: ISuperchainConfig(address(0)), - _minBasefeeLog2: 24 + _minBaseFeeLog2: 24 }); assertEq(systemConfig.startBlock(), 1); } @@ -683,7 +683,7 @@ contract SystemConfig_SetResourceConfig_Test is SystemConfig_TestInit { }), _l2ChainId: 1234, _superchainConfig: ISuperchainConfig(address(0)), - _minBasefeeLog2: 24 + _minBaseFeeLog2: 24 }); } } diff --git a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol index 241177a54d403..6f16d54b5b6b5 100644 --- a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol @@ -48,7 +48,7 @@ contract SystemConfig_GasLimitBoundaries_Invariant is Test { }), 1234, // _l2ChainId ISuperchainConfig(address(0)), // _superchainConfig - 24 // _minBasefeeLog2 + 24 // _minBaseFeeLog2 ) ) ); From 154e8a2b9c3582f76c917f17dfb63635f4298e7c Mon Sep 17 00:00:00 2001 From: William Law Date: Tue, 22 Jul 2025 10:14:58 -0400 Subject: [PATCH 18/56] fix comment --- op-node/rollup/attributes/engine_consolidate.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index e18b6b754afa7..890b728fa56de 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -138,7 +138,7 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa return fmt.Errorf("minBaseFee does not match, attributes: %d, block: %d", attrMinBaseFee, bm) } } else if len(blockExtraData) > 0 { - // When deriving pre-Jovian blocks, the extraData must be empty. + // When deriving pre-Holocene blocks, the extraData must be empty. return fmt.Errorf("nil EIP1559Params in attributes but non-nil extraData in block: %v", blockExtraData) } return nil From 8630d587547d51019cddd37cf5912da42e21a446 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 24 Jul 2025 12:44:23 -0400 Subject: [PATCH 19/56] zero default --- op-program/client/l2/engineapi/block_processor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index 135f00623cc04..de5ab19dbdc0c 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -61,7 +61,7 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c if d == 0 { d = provider.Config().BaseFeeChangeDenominator(header.Time) e = provider.Config().ElasticityMultiplier() - m = 20 // Default MinBaseFeeLog2 to 20 when not configured + m = 0 // Default MinBaseFeeLog2 when not configured } header.Extra = eip1559.EncodeJovianExtraData(d, e, m) } else { From 5ae05bb383af818500d896a7598d72422f522bd2 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 24 Jul 2025 16:26:44 -0400 Subject: [PATCH 20/56] l1block not needed --- packages/contracts-bedrock/src/L2/L1Block.sol | 45 ------------------- 1 file changed, 45 deletions(-) diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index 093c1ce49e9b6..6494a3e8c7dfd 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -61,9 +61,6 @@ contract L1Block is ISemver { /// @notice The scalar value applied to the operator fee. uint32 public operatorFeeScalar; - /// @notice The minimum basefee log2. - uint8 public minBaseFeeLog2; - /// @custom:semver 1.7.0 function version() public pure virtual returns (string memory) { return "1.7.0"; @@ -215,46 +212,4 @@ contract L1Block is ISemver { sstore(operatorFeeConstant.slot, shr(160, calldataload(164))) } } - - /// @notice Updates the L1 block values for a Jovian upgraded chain. - /// Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. - /// Params are expected to be in the following order: - /// 1. _baseFeeScalar L1 base fee scalar - /// 2. _blobBaseFeeScalar L1 blob base fee scalar - /// 3. _sequenceNumber Number of L2 blocks since epoch start. - /// 4. _timestamp L1 timestamp. - /// 5. _number L1 blocknumber. - /// 6. _basefee L1 base fee. - /// 7. _blobBaseFee L1 blob base fee. - /// 8. _hash L1 blockhash. - /// 9. _batcherHash Versioned hash to authenticate batcher by. - /// 10. _operatorFeeScalar Operator fee scalar. - /// 11. _operatorFeeConstant Operator fee constant. - /// 12. _minBaseFeeLog2 Minimum basefee log2. - function setL1BlockValuesJovian() public { - _setL1BlockValuesJovian(); - } - - /// @notice Updates the L1 block values for a Jovian upgraded chain. - /// Params are packed and passed in as raw msg.data instead of ABI to reduce calldata size. - /// Params are expected to be in the following order: - /// 1. _baseFeeScalar L1 base fee scalar - /// 2. _blobBaseFeeScalar L1 blob base fee scalar - /// 3. _sequenceNumber Number of L2 blocks since epoch start. - /// 4. _timestamp L1 timestamp. - /// 5. _number L1 blocknumber. - /// 6. _basefee L1 base fee. - /// 7. _blobBaseFee L1 blob base fee. - /// 8. _hash L1 blockhash. - /// 9. _batcherHash Versioned hash to authenticate batcher by. - /// 10. _operatorFeeScalar Operator fee scalar. - /// 11. _operatorFeeConstant Operator fee constant. - /// 12. _minBaseFeeLog2 Minimum basefee log2. - function _setL1BlockValuesJovian() internal { - _setL1BlockValuesIsthmus(); - assembly { - // minBaseFeeLog2 (uint8) - sstore(minBaseFeeLog2.slot, shr(240, calldataload(196))) - } - } } From 54770f9657f5d310fae9db71a171e9730e8c298c Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 24 Jul 2025 16:37:00 -0400 Subject: [PATCH 21/56] reduce unnecessary usage of minbasefee --- .../interfaces/L1/ISystemConfig.sol | 3 +-- .../contracts-bedrock/interfaces/L2/IL1Block.sol | 2 -- .../src/L1/OPContractsManager.sol | 4 +--- packages/contracts-bedrock/src/L2/L1Block.sol | 4 ++-- .../contracts-bedrock/test/L1/SystemConfig.t.sol | 15 +++++---------- .../test/invariants/SystemConfig.t.sol | 3 +-- .../test/opcm/SetDisputeGameImpl.t.sol | 3 +-- .../test/vendor/Initializable.t.sol | 6 ++---- 8 files changed, 13 insertions(+), 27 deletions(-) diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 5511a24a10fb6..942162b6e2dfe 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -61,8 +61,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { address _batchInbox, Addresses memory _addresses, uint256 _l2ChainId, - ISuperchainConfig _superchainConfig, - uint8 _minBaseFeeLog2 + ISuperchainConfig _superchainConfig ) external; function initVersion() external view returns (uint8); diff --git a/packages/contracts-bedrock/interfaces/L2/IL1Block.sol b/packages/contracts-bedrock/interfaces/L2/IL1Block.sol index 91fc0c34d4be8..30c42275adf9a 100644 --- a/packages/contracts-bedrock/interfaces/L2/IL1Block.sol +++ b/packages/contracts-bedrock/interfaces/L2/IL1Block.sol @@ -18,7 +18,6 @@ interface IL1Block { function number() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); function operatorFeeConstant() external view returns (uint64); - function minBaseFeeLog2() external view returns (uint8); function sequenceNumber() external view returns (uint64); function setL1BlockValues( uint64 _number, @@ -33,7 +32,6 @@ interface IL1Block { external; function setL1BlockValuesEcotone() external; function setL1BlockValuesIsthmus() external; - function setL1BlockValuesJovian() external; function timestamp() external view returns (uint64); function version() external pure returns (string memory); diff --git a/packages/contracts-bedrock/src/L1/OPContractsManager.sol b/packages/contracts-bedrock/src/L1/OPContractsManager.sol index 356321f7ef9f2..b5007d5aabba6 100644 --- a/packages/contracts-bedrock/src/L1/OPContractsManager.sol +++ b/packages/contracts-bedrock/src/L1/OPContractsManager.sol @@ -1410,8 +1410,7 @@ contract OPContractsManagerDeployer is OPContractsManagerBase { chainIdToBatchInboxAddress(_input.l2ChainId), opChainAddrs, _input.l2ChainId, - _superchainConfig, - _input.minBaseFeeLog2 + _superchainConfig ) ); } @@ -1809,7 +1808,6 @@ contract OPContractsManager is ISemver { uint256 disputeSplitDepth; Duration disputeClockExtension; Duration disputeMaxClockDuration; - uint8 minBaseFeeLog2; } /// @notice The full set of outputs from deploying a new OP Stack chain. diff --git a/packages/contracts-bedrock/src/L2/L1Block.sol b/packages/contracts-bedrock/src/L2/L1Block.sol index 6494a3e8c7dfd..31935dfab7eac 100644 --- a/packages/contracts-bedrock/src/L2/L1Block.sol +++ b/packages/contracts-bedrock/src/L2/L1Block.sol @@ -61,9 +61,9 @@ contract L1Block is ISemver { /// @notice The scalar value applied to the operator fee. uint32 public operatorFeeScalar; - /// @custom:semver 1.7.0 + /// @custom:semver 1.6.1 function version() public pure virtual returns (string memory) { - return "1.7.0"; + return "1.6.1"; } /// @notice Returns the gas paying token, its decimals, name and symbol. diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index c26e72727639d..84c56d3597c08 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -167,8 +167,7 @@ contract SystemConfig_Initialize_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)), - _minBaseFeeLog2: 24 + _superchainConfig: ISuperchainConfig(address(0)) }); } @@ -224,8 +223,7 @@ contract SystemConfig_Initialize_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)), - _minBaseFeeLog2: 24 + _superchainConfig: ISuperchainConfig(address(0)) }); } } @@ -352,8 +350,7 @@ contract SystemConfig_StartBlock_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)), - _minBaseFeeLog2: 24 + _superchainConfig: ISuperchainConfig(address(0)) }); assertEq(systemConfig.startBlock(), block.number); } @@ -384,8 +381,7 @@ contract SystemConfig_StartBlock_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)), - _minBaseFeeLog2: 24 + _superchainConfig: ISuperchainConfig(address(0)) }); assertEq(systemConfig.startBlock(), 1); } @@ -682,8 +678,7 @@ contract SystemConfig_SetResourceConfig_Test is SystemConfig_TestInit { optimismMintableERC20Factory: address(0) }), _l2ChainId: 1234, - _superchainConfig: ISuperchainConfig(address(0)), - _minBaseFeeLog2: 24 + _superchainConfig: ISuperchainConfig(address(0)) }); } } diff --git a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol index 6f16d54b5b6b5..ebf75b3280ef6 100644 --- a/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/invariants/SystemConfig.t.sol @@ -47,8 +47,7 @@ contract SystemConfig_GasLimitBoundaries_Invariant is Test { optimismMintableERC20Factory: address(0) }), 1234, // _l2ChainId - ISuperchainConfig(address(0)), // _superchainConfig - 24 // _minBaseFeeLog2 + ISuperchainConfig(address(0)) // _superchainConfig ) ) ); diff --git a/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol b/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol index 376e2abe21402..d6e1d08523ca9 100644 --- a/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol +++ b/packages/contracts-bedrock/test/opcm/SetDisputeGameImpl.t.sol @@ -195,8 +195,7 @@ contract SetDisputeGameImpl_Test is Test { optimismMintableERC20Factory: address(7) }), 10, - ISuperchainConfig(address(supConfigProxy)), - 24 + ISuperchainConfig(address(supConfigProxy)) ) ); } diff --git a/packages/contracts-bedrock/test/vendor/Initializable.t.sol b/packages/contracts-bedrock/test/vendor/Initializable.t.sol index 24c19b1fabd5e..5318d7d15fdca 100644 --- a/packages/contracts-bedrock/test/vendor/Initializable.t.sol +++ b/packages/contracts-bedrock/test/vendor/Initializable.t.sol @@ -194,8 +194,7 @@ contract Initializer_Test is CommonTest { optimismMintableERC20Factory: address(0) }), 0, - ISuperchainConfig(address(0)), - 24 + ISuperchainConfig(address(0)) ) ) }) @@ -231,8 +230,7 @@ contract Initializer_Test is CommonTest { optimismMintableERC20Factory: address(0) }), 0, - ISuperchainConfig(address(0)), - 24 + ISuperchainConfig(address(0)) ) ) }) From 853191349b764dfe6857ceac17e198bcdbed339d Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 24 Jul 2025 16:39:07 -0400 Subject: [PATCH 22/56] add back setMinBaseFeeLog2 --- packages/contracts-bedrock/src/L1/SystemConfig.sol | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 7910e6f9d073f..fe607bd763782 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -123,6 +123,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @notice The EIP-1559 elasticity multiplier. uint32 public eip1559Elasticity; + /// @notice The min base fee log2. + uint8 public minBaseFeeLog2; + /// @notice The operator fee scalar. uint32 public operatorFeeScalar; @@ -431,6 +434,17 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.EIP_1559_PARAMS, data); } + /// @notice Updates the min base fee log2. Can only be called by the owner. + /// @param _minBaseFeeLog2 New min base fee log2. + function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) external onlyOwner { + _setMinBaseFeeLog2(_minBaseFeeLog2); + } + + /// @notice Internal function for updating the min base fee log2. + function _setMinBaseFeeLog2(uint8 _minBaseFeeLog2) internal { + minBaseFeeLog2 = _minBaseFeeLog2; + } + /// @notice Updates the operator fee parameters. Can only be called by the owner. /// @param _operatorFeeScalar operator fee scalar. /// @param _operatorFeeConstant operator fee constant. From 241f2585dd79d09e5bf205233d354179fef75729 Mon Sep 17 00:00:00 2001 From: William Law Date: Fri, 25 Jul 2025 10:58:36 -0400 Subject: [PATCH 23/56] undo codegen for l1block --- go.sum | 4 +-- op-e2e/bindings/l1block.go | 61 +++----------------------------------- 2 files changed, 6 insertions(+), 59 deletions(-) diff --git a/go.sum b/go.sum index adecac2f9a862..b72fa41c77dcf 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250721160331-ec364000fb7a h1:2Abx2m0vJUtN3lCWNemvcTaEvVwKBdg0Wry7CSPVpoU= -github.com/wlawt/op-geth v0.0.0-20250721160331-ec364000fb7a/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= +github.com/wlawt/op-geth v0.0.0-20250725142620-592ece93719c h1:p4VVAE9XSzZ/j0310o4GgOqkH+fO6f2asQFHUIF+Nvk= +github.com/wlawt/op-geth v0.0.0-20250725142620-592ece93719c/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-e2e/bindings/l1block.go b/op-e2e/bindings/l1block.go index ba304ebadb726..d80a3116ef892 100644 --- a/op-e2e/bindings/l1block.go +++ b/op-e2e/bindings/l1block.go @@ -26,13 +26,12 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // L1BlockMetaData contains all meta data concerning the L1Block contract. var L1BlockMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"function\",\"name\":\"DEPOSITOR_ACCOUNT\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"baseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobBaseFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasPayingToken\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"decimals_\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenName\",\"inputs\":[],\"outputs\":[{\"name\":\"name_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"gasPayingTokenSymbol\",\"inputs\":[],\"outputs\":[{\"name\":\"symbol_\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"hash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"isCustomGasToken\",\"inputs\":[],\"outputs\":[{\"name\":\"is_\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"l1FeeOverhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1FeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"number\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"sequenceNumber\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setL1BlockValues\",\"inputs\":[{\"name\":\"_number\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_timestamp\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_basefee\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_hash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_sequenceNumber\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_l1FeeScalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesEcotone\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesIsthmus\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setL1BlockValuesJovian\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"timestamp\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"}]", - Bin: "0x608060405234801561001057600080fd5b50610716806100206000396000f3fe608060405234801561001057600080fd5b50600436106101985760003560e01c806364ca23ef116100e3578063c59859181161008c578063e591b28211610066578063e591b282146103fd578063e81b2c6d1461041f578063f82061401461042857600080fd5b8063c598591814610375578063c932107914610395578063d8444715146103c457600080fd5b80638b239f73116100bd5780638b239f73146103435780639e8c49661461034c578063b80777ea1461035557600080fd5b806364ca23ef146102ff57806368d5dca6146103135780638381f58a1461032f57600080fd5b80634397dfef1161014557806354fd4d501161011f57806354fd4d501461027b578063550fcdc9146102bd5780635cf24969146102f657600080fd5b80634397dfef1461021a578063440a5e20146102425780634d5d9a2a1461024a57600080fd5b806316d3bc7f1161017657806316d3bc7f146101d657806321326849146102035780633db6be2b1461021257600080fd5b8063015d8eb91461019d578063098999be146101b257806309bd5a60146101ba575b600080fd5b6101b06101ab366004610624565b610431565b005b6101b0610570565b6101c360025481565b6040519081526020015b60405180910390f35b6008546101ea9067ffffffffffffffff1681565b60405167ffffffffffffffff90911681526020016101cd565b604051600081526020016101cd565b6101b061057a565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee815260126020820152016101cd565b6101b0610582565b6008546102669068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016101cd565b60408051808201909152600581527f312e372e3000000000000000000000000000000000000000000000000000000060208201525b6040516101cd9190610696565b60408051808201909152600381527f455448000000000000000000000000000000000000000000000000000000000060208201526102b0565b6101c360015481565b6003546101ea9067ffffffffffffffff1681565b6003546102669068010000000000000000900463ffffffff1681565b6000546101ea9067ffffffffffffffff1681565b6101c360055481565b6101c360065481565b6000546101ea9068010000000000000000900467ffffffffffffffff1681565b600354610266906c01000000000000000000000000900463ffffffff1681565b6008546103b2906c01000000000000000000000000900460ff1681565b60405160ff90911681526020016101cd565b60408051808201909152600581527f457468657200000000000000000000000000000000000000000000000000000060208201526102b0565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead000181526020016101cd565b6101c360045481565b6101c360075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146104d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff98891668010000000000000000027fffffffffffffffffffffffffffffffff00000000000000000000000000000000909116998916999099179890981790975560019490945560029290925560038054919094167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000009190911617909255600491909155600555600655565b61057861058a565b565b61057861059d565b6105786105b0565b6105926105b0565b60a43560a01c600855565b6105a561058a565b60c43560f01c600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead00013381146105da57633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff8116811461061f57600080fd5b919050565b600080600080600080600080610100898b03121561064157600080fd5b61064a89610607565b975061065860208a01610607565b9650604089013595506060890135945061067460808a01610607565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b818110156106c3578581018301518582016040015282016106a7565b818111156106d5576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01692909201604001939250505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"name\":\"DEPOSITOR_ACCOUNT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"baseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobBaseFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"decimals_\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingTokenName\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"name_\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasPayingTokenSymbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"symbol_\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCustomGasToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"is_\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeOverhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1FeeScalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"number\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"sequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_number\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"_timestamp\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"_basefee\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"_hash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeOverhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_l1FeeScalar\",\"type\":\"uint256\"}],\"name\":\"setL1BlockValues\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setL1BlockValuesEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setL1BlockValuesIsthmus\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"timestamp\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", + Bin: "0x608060405234801561001057600080fd5b506105d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c806364ca23ef116100b8578063b80777ea1161007c578063b80777ea146102bb578063c5985918146102d6578063d8444715146102ed578063e591b2821461030e578063e81b2c6d14610330578063f82061401461033957600080fd5b806364ca23ef1461026a57806368d5dca61461027e5780638381f58a146102955780638b239f73146102a95780639e8c4966146102b257600080fd5b80634397dfef1161010a5780634397dfef146101bc578063440a5e20146101e45780634d5d9a2a146101ec57806354fd4d5014610218578063550fcdc9146102425780635cf249691461026157600080fd5b8063015d8eb914610147578063098999be1461015c57806309bd5a601461016457806316d3bc7f1461018057806321326849146101ad575b600080fd5b61015a6101553660046104d5565b610342565b005b61015a61043c565b61016d60025481565b6040519081526020015b60405180910390f35b6008546101949067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610177565b60405160008152602001610177565b6040805173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81526012602082015201610177565b61015a610446565b60085461020390600160401b900463ffffffff1681565b60405163ffffffff9091168152602001610177565b6040805180820190915260058152640312e362e360dc1b60208201525b6040516101779190610547565b60408051808201909152600381526208aa8960eb1b6020820152610235565b61016d60015481565b6003546101949067ffffffffffffffff1681565b60035461020390600160401b900463ffffffff1681565b6000546101949067ffffffffffffffff1681565b61016d60055481565b61016d60065481565b60005461019490600160401b900467ffffffffffffffff1681565b60035461020390600160601b900463ffffffff1681565b60408051808201909152600581526422ba3432b960d91b6020820152610235565b60405173deaddeaddeaddeaddeaddeaddeaddeaddead00018152602001610177565b61016d60045481565b61016d60075481565b3373deaddeaddeaddeaddeaddeaddeaddeaddead0001146103cf5760405162461bcd60e51b815260206004820152603b60248201527f4c31426c6f636b3a206f6e6c7920746865206465706f7369746f72206163636f60448201527f756e742063616e20736574204c3120626c6f636b2076616c7565730000000000606482015260840160405180910390fd5b6000805467ffffffffffffffff988916600160401b026fffffffffffffffffffffffffffffffff199091169989169990991798909817909755600194909455600292909255600380549190941667ffffffffffffffff199190911617909255600491909155600555600655565b61044461044e565b565b610444610461565b610456610461565b60a43560a01c600855565b73deaddeaddeaddeaddeaddeaddeaddeaddead000133811461048b57633cc50b456000526004601cfd5b60043560801c60035560143560801c60005560243560015560443560075560643560025560843560045550565b803567ffffffffffffffff811681146104d057600080fd5b919050565b600080600080600080600080610100898b0312156104f257600080fd5b6104fb896104b8565b975061050960208a016104b8565b9650604089013595506060890135945061052560808a016104b8565b979a969950949793969560a0850135955060c08501359460e001359350915050565b600060208083528351808285015260005b8181101561057457858101830151858201604001528201610558565b81811115610586576000604083870101525b50601f01601f191692909201604001939250505056fea2646970667358221220eca04b57c61ec0be345732212fb43059ce1efe385bc7e49f5475b081d066940d64736f6c634300080f0033", } // L1BlockABI is the input ABI used to generate the binding from. @@ -157,11 +156,11 @@ func NewL1BlockFilterer(address common.Address, filterer bind.ContractFilterer) // bindL1Block binds a generic wrapper to an already deployed contract. func bindL1Block(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := L1BlockMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(L1BlockABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -619,37 +618,6 @@ func (_L1Block *L1BlockCallerSession) L1FeeScalar() (*big.Int, error) { return _L1Block.Contract.L1FeeScalar(&_L1Block.CallOpts) } -// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. -// -// Solidity: function minBaseFeeLog2() view returns(uint8) -func (_L1Block *L1BlockCaller) MinBaseFeeLog2(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _L1Block.contract.Call(opts, &out, "minBaseFeeLog2") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. -// -// Solidity: function minBaseFeeLog2() view returns(uint8) -func (_L1Block *L1BlockSession) MinBaseFeeLog2() (uint8, error) { - return _L1Block.Contract.MinBaseFeeLog2(&_L1Block.CallOpts) -} - -// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. -// -// Solidity: function minBaseFeeLog2() view returns(uint8) -func (_L1Block *L1BlockCallerSession) MinBaseFeeLog2() (uint8, error) { - return _L1Block.Contract.MinBaseFeeLog2(&_L1Block.CallOpts) -} - // Number is a free data retrieval call binding the contract method 0x8381f58a. // // Solidity: function number() view returns(uint64) @@ -898,24 +866,3 @@ func (_L1Block *L1BlockSession) SetL1BlockValuesIsthmus() (*types.Transaction, e func (_L1Block *L1BlockTransactorSession) SetL1BlockValuesIsthmus() (*types.Transaction, error) { return _L1Block.Contract.SetL1BlockValuesIsthmus(&_L1Block.TransactOpts) } - -// SetL1BlockValuesJovian is a paid mutator transaction binding the contract method 0x3db6be2b. -// -// Solidity: function setL1BlockValuesJovian() returns() -func (_L1Block *L1BlockTransactor) SetL1BlockValuesJovian(opts *bind.TransactOpts) (*types.Transaction, error) { - return _L1Block.contract.Transact(opts, "setL1BlockValuesJovian") -} - -// SetL1BlockValuesJovian is a paid mutator transaction binding the contract method 0x3db6be2b. -// -// Solidity: function setL1BlockValuesJovian() returns() -func (_L1Block *L1BlockSession) SetL1BlockValuesJovian() (*types.Transaction, error) { - return _L1Block.Contract.SetL1BlockValuesJovian(&_L1Block.TransactOpts) -} - -// SetL1BlockValuesJovian is a paid mutator transaction binding the contract method 0x3db6be2b. -// -// Solidity: function setL1BlockValuesJovian() returns() -func (_L1Block *L1BlockTransactorSession) SetL1BlockValuesJovian() (*types.Transaction, error) { - return _L1Block.Contract.SetL1BlockValuesJovian(&_L1Block.TransactOpts) -} From 136294ab2e4821fe521fcefa5acfd78130dbfa9a Mon Sep 17 00:00:00 2001 From: William Law Date: Fri, 25 Jul 2025 12:02:52 -0400 Subject: [PATCH 24/56] use 8bytes --- op-e2e/opgeth/op_geth.go | 7 ++-- .../rollup/attributes/engine_consolidate.go | 32 +++++++++++++++--- .../attributes/engine_consolidate_test.go | 21 +++++------- op-node/rollup/derive/attributes.go | 4 +-- op-node/rollup/derive/attributes_test.go | 2 +- op-node/rollup/derive/system_config.go | 2 +- op-node/rollup/derive/system_config_test.go | 6 ++-- .../interop/indexing/attributes_test.go | 3 +- .../client/l2/engineapi/block_processor.go | 19 ++++------- .../client/l2/engineapi/l2_engine_api.go | 10 +----- op-program/client/l2/test/miner.go | 6 ++-- op-service/eth/types.go | 33 +++---------------- 12 files changed, 65 insertions(+), 80 deletions(-) diff --git a/op-e2e/opgeth/op_geth.go b/op-e2e/opgeth/op_geth.go index e2ea0cc79ea8a..0162b248ca198 100644 --- a/op-e2e/opgeth/op_geth.go +++ b/op-e2e/opgeth/op_geth.go @@ -239,8 +239,11 @@ func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.Payloa Withdrawals: withdrawals, ParentBeaconBlockRoot: parentBeaconBlockRoot, } - if d.L2ChainConfig.IsJovian(uint64(timestamp)) || d.L2ChainConfig.IsHolocene(uint64(timestamp)) { - attrs.EIP1559Params = new(eth.Bytes9) + if d.L2ChainConfig.IsJovian(uint64(timestamp)) { + attrs.MinBaseFeeLog2 = d.SystemConfig.MinBaseFeeLog2 + } + if d.L2ChainConfig.IsHolocene(uint64(timestamp)) { + attrs.EIP1559Params = new(eth.Bytes8) *attrs.EIP1559Params = d.SystemConfig.EIP1559Params } return &attrs, nil diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index 890b728fa56de..0514d526f5cc1 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -105,14 +105,27 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa // The validity checks are necessary because the Decode functions return 0,0 if the inputs are invalid. // But 0,0 are valid values during derivation, namely, if the SystemConfig doesn't set the parameters yet, // they are set to 0,0 and then the execution layer must translate them to the pre-Holocene constants. - if err := eip1559.ValidateJovian1559Params(params); err != nil { + if err := eip1559.ValidateHolocene1559Params(params); err != nil { // This would be a critical error, because the attributes are generated by derivation and must be valid. return fmt.Errorf("invalid attributes EIP1559 parameters: %w", err) } - ad, ae, am := eip1559.DecodeJovian1559Params(params) + // Validate block extraData based on fork + if isJovian { + if err := eip1559.ValidateMinBaseFeeExtraData(blockExtraData); err != nil { + return fmt.Errorf("invalid block extraData: %w", err) + } + } else { + if err := eip1559.ValidateHoloceneExtraData(blockExtraData); err != nil { + // This can happen if the unsafe chain contains invalid (in particular, empty) extraData while Holocene + // is active. The extraData field of blocks from sequencer gossip isn't currently checked during import. + return fmt.Errorf("invalid block extraData: %w", err) + } + } + + ad, ae := eip1559.DecodeHolocene1559Params(params) var translated bool - // Translate 0,0,0 to the pre-Jovian protocol constants, like the EL does too. + // Translate 0,0,0 to the pre-Holocene protocol constants, like the EL does too. if ad == 0 { // If attrParams are non-nil, Holocene, and so Canyon, must be active. ad = *cfg.ChainOpConfig.EIP1559DenominatorCanyon @@ -130,9 +143,18 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa if ad != bd || ae != be { extraErr := "" if translated { - extraErr = " (translated from 0,0,0)" + if isJovian { + extraErr = " (translated from 0,0,0)" + } else { + extraErr = " (translated from 0,0)" + } + } + + if isJovian { + return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d%s, block: %d, %d, %d", ad, ae, extraErr, bd, be, bm) + } else { + return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d%s, block: %d, %d", ad, ae, extraErr, bd, be) } - return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d, %d%s, block: %d, %d, %d", ad, ae, am, extraErr, bd, be, bm) } if bm == nil && attrMinBaseFee != nil || bm != nil && attrMinBaseFee == nil || bm != nil && attrMinBaseFee != nil && *bm != *attrMinBaseFee { return fmt.Errorf("minBaseFee does not match, attributes: %d, block: %d", attrMinBaseFee, bm) diff --git a/op-node/rollup/attributes/engine_consolidate_test.go b/op-node/rollup/attributes/engine_consolidate_test.go index 76bb50072e371..0b541d01c7c67 100644 --- a/op-node/rollup/attributes/engine_consolidate_test.go +++ b/op-node/rollup/attributes/engine_consolidate_test.go @@ -24,7 +24,6 @@ var defaultOpConfig = ¶ms.OptimismConfig{ EIP1559Elasticity: 6, EIP1559Denominator: 50, EIP1559DenominatorCanyon: ptr(uint64(250)), - EIP1559MinBaseFeeLog2: 20, } func ptr[T any](t T) *T { @@ -40,7 +39,7 @@ type matchArgs struct { func jovianArgs() matchArgs { var ( validParentHash = common.HexToHash("0x123") - validTimestamp = eth.Uint64Quantity(50) + validTimestamp = eth.Uint64Quantity(150) validParentBeaconRoot = common.HexToHash("0x456") validPrevRandao = eth.Bytes32(common.HexToHash("0x789")) validGasLimit = eth.Uint64Quantity(1000) @@ -84,11 +83,7 @@ func jovianArgs() matchArgs { MinBaseFee: &minBaseFee, }, parentHash: validParentHash, - } } - -func jovianArgsMinBaseFeeMissingFromAttributes() matchArgs { - args := jovianArgs() args.attrs.MinBaseFee = nil return args } @@ -213,7 +208,7 @@ func createMismatchedFeeRecipient() matchArgs { } func createMismatchedEIP1559Params() matchArgs { - args := jovianArgs() + args := holoceneArgs() args.attrs.EIP1559Params[0]++ // so denominator is != 0 return args } @@ -546,15 +541,15 @@ func TestWithdrawalsMatch(t *testing.T) { } func TestCheckEIP1559ParamsMatch(t *testing.T) { - params := eth.Bytes9{1, 2, 3, 4, 5, 6, 7, 8, 9} - paramsAlt := eth.Bytes9{1, 2, 3, 4, 5, 6, 7, 9, 9} - paramsInvalid := eth.Bytes9{0, 0, 0, 0, 5, 6, 7, 8, 9} + params := eth.Bytes8{1, 2, 3, 4, 5, 6, 7, 8} + paramsAlt := eth.Bytes8{1, 2, 3, 4, 5, 6, 7, 9} + paramsInvalid := eth.Bytes8{0, 0, 0, 0, 5, 6, 7, 8} defaultExtraData := eth.BytesMax32(eip1559.EncodeHoloceneExtraData( *defaultOpConfig.EIP1559DenominatorCanyon, defaultOpConfig.EIP1559Elasticity)) for _, test := range []struct { desc string - attrParams *eth.Bytes9 + attrParams *eth.Bytes8 blockExtraData eth.BytesMax32 err string }{ @@ -563,7 +558,7 @@ func TestCheckEIP1559ParamsMatch(t *testing.T) { }, { desc: "match-zero-attrs", - attrParams: new(eth.Bytes9), + attrParams: new(eth.Bytes8), blockExtraData: defaultExtraData, }, { @@ -573,7 +568,7 @@ func TestCheckEIP1559ParamsMatch(t *testing.T) { }, { desc: "err-both-zero", - attrParams: new(eth.Bytes9), + attrParams: new(eth.Bytes8), blockExtraData: make(eth.BytesMax32, 9), err: "eip1559 parameters do not match, attributes: 250, 6 (translated from 0,0), block: 0, 0", }, diff --git a/op-node/rollup/derive/attributes.go b/op-node/rollup/derive/attributes.go index 14bccf2311fd5..ca97fd3021c4f 100644 --- a/op-node/rollup/derive/attributes.go +++ b/op-node/rollup/derive/attributes.go @@ -194,8 +194,8 @@ func (ba *FetchingAttributesBuilder) PreparePayloadAttributes(ctx context.Contex Withdrawals: withdrawals, ParentBeaconBlockRoot: parentBeaconRoot, } - if ba.rollupCfg.IsJovian(nextL2Time) || ba.rollupCfg.IsHolocene(nextL2Time) { - r.EIP1559Params = new(eth.Bytes9) + if ba.rollupCfg.IsHolocene(nextL2Time) { + r.EIP1559Params = new(eth.Bytes8) *r.EIP1559Params = sysConfig.EIP1559Params } if ba.rollupCfg.IsJovian(nextL2Time) { diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index 7a9e88749bfe1..3be85d8406741 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -302,7 +302,7 @@ func TestPreparePayloadAttributes(t *testing.T) { defer l1Fetcher.AssertExpectations(t) l2Parent := testutils.RandomL2BlockRef(rng) l1CfgFetcher := &testutils.MockL2Client{} - eip1559Params := eth.Bytes9([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}) + eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) testSysCfg := eth.SystemConfig{ BatcherAddr: common.Address{42}, Overhead: [32]byte{}, diff --git a/op-node/rollup/derive/system_config.go b/op-node/rollup/derive/system_config.go index bc3e5fb9ae139..c3c7a52320730 100644 --- a/op-node/rollup/derive/system_config.go +++ b/op-node/rollup/derive/system_config.go @@ -192,7 +192,7 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L if !solabi.EmptyReader(reader) { return NewCriticalError(errors.New("too many bytes")) } - destSysCfg.EIP1559Params[8] = minBaseFeeLog2Data[0] + destSysCfg.MinBaseFeeLog2 = minBaseFeeLog2Data[0] return nil default: return fmt.Errorf("unrecognized L1 sysCfg update type: %s", updateType) diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index b3f808ee45c21..a2ef80c4cb0ac 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -205,7 +205,8 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { return log }, config: eth.SystemConfig{ - EIP1559Params: eth.Bytes9(append(eip1559Params, 0)), // Add 1 zero byte for MinBaseFeeLog2 + EIP1559Params: eth.Bytes8(eip1559Params), + MinBaseFeeLog2: 0, }, err: false, }, @@ -253,7 +254,8 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { return log }, config: eth.SystemConfig{ - EIP1559Params: eth.Bytes9{0, 0, 0, 0, 0, 0, 0, 0, 22}, // minBaseFeeLog2 = 22 at byte 8 + EIP1559Params: eth.Bytes8{0, 0, 0, 0, 0, 0, 0, 0}, + MinBaseFeeLog2: 22, }, err: false, }, diff --git a/op-node/rollup/interop/indexing/attributes_test.go b/op-node/rollup/interop/indexing/attributes_test.go index 4e82c0731ee6a..69f6572367002 100644 --- a/op-node/rollup/interop/indexing/attributes_test.go +++ b/op-node/rollup/interop/indexing/attributes_test.go @@ -85,10 +85,9 @@ func TestAttributesToReplaceInvalidBlock(t *testing.T) { require.Equal(t, uint8(types.DepositTxType), attrs.Transactions[1][0], "remove user tx, add optimistic block system tx") require.True(t, attrs.NoTxPool) require.Equal(t, invalidatedBlock.ExecutionPayload.GasLimit, *attrs.GasLimit) - d, e, m := eip1559.DecodeJovian1559Params(attrs.EIP1559Params[:]) + d, e := eip1559.DecodeHolocene1559Params(attrs.EIP1559Params[:]) require.Equal(t, denominator, d) require.Equal(t, elasticity, e) - require.Equal(t, uint64(0), m) // Should be 0 when converted from Holocene result, err := DecodeInvalidatedBlockTxFromReplacement(attrs.Transactions) require.NoError(t, err) require.Equal(t, invalidatedBlock.ExecutionPayload.BlockHash, result.BlockHash) diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index de5ab19dbdc0c..aa7b73cc2ff36 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -56,21 +56,14 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c ParentBeaconRoot: attrs.ParentBeaconBlockRoot, } if attrs.EIP1559Params != nil { + d, e := eip1559.DecodeHolocene1559Params(attrs.EIP1559Params[:]) + if d == 0 { + d = provider.Config().BaseFeeChangeDenominator(header.Time) + e = provider.Config().ElasticityMultiplier() + } if provider.Config().IsJovian(header.Time) { - d, e, m := eip1559.DecodeJovian1559Params(attrs.EIP1559Params[:]) - if d == 0 { - d = provider.Config().BaseFeeChangeDenominator(header.Time) - e = provider.Config().ElasticityMultiplier() - m = 0 // Default MinBaseFeeLog2 when not configured - } - header.Extra = eip1559.EncodeJovianExtraData(d, e, m) + header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFeeLog2) } else { - // Backward compatibility: decode as Jovian but encode as Holocene - d, e, _ := eip1559.DecodeJovian1559Params(attrs.EIP1559Params[:]) - if d == 0 { - d = provider.Config().BaseFeeChangeDenominator(header.Time) - e = provider.Config().ElasticityMultiplier() - } header.Extra = eip1559.EncodeHoloceneExtraData(d, e) } if provider.Config().IsOptimismHolocene(header.Time) { diff --git a/op-program/client/l2/engineapi/l2_engine_api.go b/op-program/client/l2/engineapi/l2_engine_api.go index 8c9c804fe8f94..d3a42079391c1 100644 --- a/op-program/client/l2/engineapi/l2_engine_api.go +++ b/op-program/client/l2/engineapi/l2_engine_api.go @@ -290,15 +290,7 @@ func (ea *L2EngineAPI) verifyPayloadAttributes(attr *eth.PayloadAttributes) erro return fmt.Errorf("invalid parent beacon block root: %w", err) } // Verify EIP-1559 params for Holocene. - if c.IsJovian(t) { - if attr.EIP1559Params == nil { - //nolint:err113 // Do not use non-dynamic errors here to keep this function very similar to op-geth - return errors.New("got nil eip-1559 params while Jovian is active") - } - if err := eip1559.ValidateJovian1559Params(attr.EIP1559Params[:]); err != nil { - return fmt.Errorf("invalid Jovian params: %w", err) - } - } else if c.IsHolocene(t) { + if c.IsHolocene(t) { if attr.EIP1559Params == nil { //nolint:err113 // Do not use non-dynamic errors here to keep this function very similar to op-geth return errors.New("got nil eip-1559 params while Holocene is active") diff --git a/op-program/client/l2/test/miner.go b/op-program/client/l2/test/miner.go index d060a744d0bef..144d3cda86548 100644 --- a/op-program/client/l2/test/miner.go +++ b/op-program/client/l2/test/miner.go @@ -111,7 +111,7 @@ func (m *Miner) Fork(t *testing.T, blockNumber uint64, attrs *eth.PayloadAttribu head := m.backend.GetHeaderByNumber(blockNumber) if attrs == nil { gasLimit := eth.Uint64Quantity(head.GasLimit) - eip1559Params := eth.Bytes9([]byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99}) + eip1559Params := eth.Bytes8([]byte{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}) attrs = ð.PayloadAttributes{ Timestamp: eth.Uint64Quantity(head.Time + 2), PrevRandao: eth.Bytes32{0x11}, @@ -121,6 +121,7 @@ func (m *Miner) Fork(t *testing.T, blockNumber uint64, attrs *eth.PayloadAttribu NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, + MinBaseFeeLog2: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) @@ -134,7 +135,7 @@ func (m *Miner) MineAt(t *testing.T, head *types.Header, attrs *eth.PayloadAttri hash := head.Hash() genesis := m.backend.Genesis() if attrs == nil { - eip1559Params := eth.Bytes9([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9}) + eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) gasLimit := eth.Uint64Quantity(4712388) attrs = ð.PayloadAttributes{ Timestamp: eth.Uint64Quantity(head.Time + 2), @@ -145,6 +146,7 @@ func (m *Miner) MineAt(t *testing.T, head *types.Header, attrs *eth.PayloadAttri NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, + MinBaseFeeLog2: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) diff --git a/op-service/eth/types.go b/op-service/eth/types.go index 98a83b2f60406..a950f8a162b7e 100644 --- a/op-service/eth/types.go +++ b/op-service/eth/types.go @@ -145,30 +145,6 @@ func (b Bytes8) TerminalString() string { return fmt.Sprintf("0x%x", b[:]) } -type Bytes9 [9]byte - -func (b *Bytes9) UnmarshalJSON(text []byte) error { - return hexutil.UnmarshalFixedJSON(reflect.TypeOf(b), text, b[:]) -} - -func (b *Bytes9) UnmarshalText(text []byte) error { - return hexutil.UnmarshalFixedText("Bytes9", text, b[:]) -} - -func (b Bytes9) MarshalText() ([]byte, error) { - return hexutil.Bytes(b[:]).MarshalText() -} - -func (b Bytes9) String() string { - return hexutil.Encode(b[:]) -} - -// TerminalString implements log.TerminalStringer, formatting a string for console -// output during logging. -func (b Bytes9) TerminalString() string { - return fmt.Sprintf("0x%x", b[:]) -} - type Bytes96 [96]byte func (b *Bytes96) UnmarshalJSON(text []byte) error { @@ -631,11 +607,12 @@ type SystemConfig struct { Scalar Bytes32 `json:"scalar"` // GasLimit identifies the L2 block gas limit GasLimit uint64 `json:"gasLimit"` - // EIP1559Params contains the Holocene/Jovian-encoded EIP-1559 parameters. This - // value will be 0 if Holocene is not active, or if derivation has yet to + // EIP1559Params contains the Holocene-encoded EIP-1559 parameters. + // This value will be 0 if Holocene is not active, or if derivation has yet to // process any EIP_1559_PARAMS system config update events. - // Bytes8 for Holocene, Bytes9 for Jovian+ (with MinBaseFeeLog2). - EIP1559Params Bytes9 `json:"eip1559Params"` + EIP1559Params Bytes8 `json:"eip1559Params"` + // MinBaseFeeLog2 is the minimum base fee log2. + MinBaseFeeLog2 uint8 `json:"minBaseFeeLog2"` // OperatorFeeParams identifies the operator fee parameters. OperatorFeeParams Bytes32 `json:"operatorFeeParams"` // More fields can be added for future SystemConfig versions. From 609aaedcf4d43e22ee9c3413ddd32eb55c57751a Mon Sep 17 00:00:00 2001 From: William Law Date: Fri, 25 Jul 2025 12:09:58 -0400 Subject: [PATCH 25/56] update bindings/systemconfig and nits --- op-e2e/bindings/systemconfig.go | 28 +++++++++---------- .../rollup/attributes/engine_consolidate.go | 2 +- .../client/l2/engineapi/l2_engine_api_test.go | 1 - op-service/eth/types.go | 4 +-- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 5852741ba1da8..930842e76c8e7 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -50,8 +50,8 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"},{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFeeLog2\",\"inputs\":[{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018671760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612de56200018560003960008181610496015281816108e10152610bef0152612de56000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639b7d7f0a116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bfb14fb711610171578063c93210791161014b578063c9321079146106b1578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bfb14fb71461067a578063c0fd4b4114610696578063c4e8ddfa146106a957600080fd5b8063a7119869116101a2578063a711986914610657578063b40a817c1461065f578063bc49ce5f1461067257600080fd5b80639b7d7f0a146105d85780639faba4f8146105e0578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610597578063715018a61461059f5780638da5cb5b146105a7578063935f029e146105c557600080fd5b80634f16540b1461051957806354fd4d50146105405780635c975abb1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b8063155b6c6f1161030f57806319f5cea8116102e957806319f5cea81461043e5780631fd19ee11461044657806321d7fde51461044e5780632f76cfa31461046157600080fd5b8063155b6c6f146103f457806316d3bc7f1461040757806318d139181461042b57600080fd5b80630a49cb03116103405780630a49cb03146103c45780630ae14b1b146103cc5780630c18c162146103eb57600080fd5b8063028f4e471461036757806306c926571461037c578063078f29cf14610397575b600080fd5b61037a6103753660046127e5565b6108df565b005b610384610ac5565b6040519081526020015b60405180910390f35b61039f610af3565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161038e565b61039f610b2c565b631dcd65005b60405167ffffffffffffffff909116815260200161038e565b61038460655481565b61037a610402366004612841565b610b5c565b606a546103d2906c01000000000000000000000000900467ffffffffffffffff1681565b61037a610439366004612874565b610b72565b610384610b86565b61039f610bb1565b61037a61045c366004612898565b610bdb565b61037a61046f3660046129e6565b610bed565b606c5461039f9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff909116815260200161038e565b61039f610f57565b61039f611162565b6103846111f6565b6103d2611226565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff909116815260200161038e565b6103847f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e352e300000000000000000000000000000000000000000000000000000006020820152905161038e9190612bd1565b61058761124c565b604051901515815260200161038e565b6103846113fa565b61037a611425565b60335473ffffffffffffffffffffffffffffffffffffffff1661039f565b61037a6105d3366004612be4565b611439565b61039f61144b565b61037a6105ee366004612c06565b61147b565b6105fb61148c565b60405161038e9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b61039f611573565b61037a61066d366004612c21565b6115a3565b6103846115b4565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106a4366004612898565b6115df565b61039f6115f1565b606a546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a6106e4366004612c3c565b611621565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b60405161038e9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610384606b5481565b61039f611632565b61039f611662565b6103846116b6565b61038460675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b61039f6116e1565b61037a6108a5366004612874565b61175d565b61038460665481565b6068546103d29067ffffffffffffffff1681565b610384611811565b61038461183c565b610384600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e961186b565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610a5b60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c84565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610af060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b81565b6000610b27610b2360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b5490565b905090565b6000610b27610b2360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b610b646118ec565b610b6e828261196d565b5050565b610b7a6118ec565b610b8381611a7d565b50565b610af060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6000610b277f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610be36118ec565b610b6e8282611b3a565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c2d575060005460ff8083169116105b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610cf261186b565b610cfa611c3f565b610d038d61175d565b610d0c8a611cde565b610d168c8c611b3a565b610d1f89611d06565b610d2882611e5c565b610d517f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08899055565b610d84610d7f60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b879055565b610db8610db260017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b86519055565b610def610de660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b60208701519055565b610e26610e1d60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b60408701519055565b610e5d610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b60608701519055565b610e94610e8b60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b60808701519055565b610e9c611f18565b610ea587611f80565b606b849055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a150505050505050505050505050565b600080610f827fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fa557919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe89190612c9b565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611043906060015b604051602081830303815290604052805190602001205490565b1461107a576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109c90606001611029565b905073ffffffffffffffffffffffffffffffffffffffff811615611130578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111299190612cd8565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b279190612cd8565b6000610b27610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b606954600090610b279063ffffffff6a0100000000000000000000820481169116612cf5565b600080611257610b2c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c59190612cd8565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611337573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135b9190612d21565b806113f45750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190612d21565b91505090565b610af060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b61142d6118ec565b61143760006123f4565b565b6114416118ec565b610b6e828261246b565b6000610b27610b2360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c84565b6114836118ec565b610b8381611e5c565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114ca611573565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114ed6115f1565b73ffffffffffffffffffffffffffffffffffffffff168152602001611510610af3565b73ffffffffffffffffffffffffffffffffffffffff168152602001611533610b2c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155661144b565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610b27610b2360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c84565b6115ab6118ec565b610b8381611d06565b610af060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b6115e76118ec565b610b6e8282612541565b6000610b27610b2360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c84565b6116296118ec565b610b8381611cde565b6000610b27610b2360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c84565b600061166c610f57565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111d2573d6000803e3d6000fd5b610af060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b6000806116ec610b2c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611739573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f49190612cd8565b6117656118ec565b73ffffffffffffffffffffffffffffffffffffffff8116611808576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610b83816123f4565b610af060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c84565b610af060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c84565b9055565b33611874610f57565b73ffffffffffffffffffffffffffffffffffffffff16141580156118b557503361189c611662565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611437576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60335473ffffffffffffffffffffffffffffffffffffffff163314611437576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060055b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a709190612bd1565b60405180910390a3505050565b611aa67f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060035b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b2e9190612bd1565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506001611a3f565b600054610100900460ff16611cd6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611437612713565b6067819055604080516020808201849052825180830390910181529082019091526000611afd565b611d0e611226565b67ffffffffffffffff168167ffffffffffffffff161015611d8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff83169081179091556040805160208082019390935281518082039093018352810190526002611afd565b606a80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84160217905560066040805160ff841660208201526000917f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052611f0d91612bd1565b60405180910390a350565b611f46610b2360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b60000361143757611437611f7b60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c84565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115612030576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff16116120c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff909216916120e89190612d43565b63ffffffff161115612156576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff16116121ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff9091169061220d908290612d62565b6122179190612dac565b63ffffffff16146122aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561251b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611c08565b60018263ffffffff1610156125d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff16101561266f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931691861691909117919091179091556040516000916126dc91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611a3f565b600054610100900460ff166127aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b611437336123f4565b73ffffffffffffffffffffffffffffffffffffffff81168114610b8357600080fd5b80356127e0816127b3565b919050565b600080604083850312156127f857600080fd5b82359150602083013561280a816127b3565b809150509250929050565b803563ffffffff811681146127e057600080fd5b803567ffffffffffffffff811681146127e057600080fd5b6000806040838503121561285457600080fd5b61285d83612815565b915061286b60208401612829565b90509250929050565b60006020828403121561288657600080fd5b8135612891816127b3565b9392505050565b600080604083850312156128ab57600080fd5b6128b483612815565b915061286b60208401612815565b60405160c0810167ffffffffffffffff8111828210171561290c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff811681146127e057600080fd5b600060a0828403121561293557600080fd5b60405160a0810181811067ffffffffffffffff8211171561297f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040529050808235612990816127b3565b815260208301356129a0816127b3565b602082015260408301356129b3816127b3565b604082015260608301356129c6816127b3565b606082015260808301356129d9816127b3565b6080919091015292915050565b6000806000806000806000806000806000808c8e036102a0811215612a0a57600080fd5b8d35612a15816127b3565b9c50612a2360208f01612815565b9b50612a3160408f01612815565b9a5060608e01359950612a4660808f01612829565b985060a08e0135612a56816127b3565b975060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a8857600080fd5b50612a916128c2565b612a9d60c08f01612815565b8152612aab60e08f01612912565b6020820152612abd6101008f01612912565b6040820152612acf6101208f01612815565b6060820152612ae16101408f01612815565b60808201526101608e01356fffffffffffffffffffffffffffffffff81168114612b0a57600080fd5b60a08201529550612b1e6101808e016127d5565b9450612b2e8e6101a08f01612923565b93506102408d01359250612b456102608e016127d5565b9150612b546102808e01612912565b90509295989b509295989b509295989b565b6000815180845260005b81811015612b8c57602081850181015186830182015201612b70565b81811115612b9e576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006128916020830184612b66565b60008060408385031215612bf757600080fd5b50508035926020909101359150565b600060208284031215612c1857600080fd5b61289182612912565b600060208284031215612c3357600080fd5b61289182612829565b600060208284031215612c4e57600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c9657612c96612c55565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612cd357612cd3612c55565b500290565b600060208284031215612cea57600080fd5b8151612891816127b3565b600067ffffffffffffffff808316818516808303821115612d1857612d18612c55565b01949350505050565b600060208284031215612d3357600080fd5b8151801515811461289157600080fd5b600063ffffffff808316818516808303821115612d1857612d18612c55565b600063ffffffff80841680612da0577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612dcf57612dcf612c55565b0294935050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFeeLog2\",\"inputs\":[{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018851760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612d396200018560003960008181610497015281816108d70152610c3c0152612d396000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639b7d7f0a116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108a9578063f8c68de0146108bd578063fd32aa0f146108c5578063ffa1ad74146108cd57600080fd5b8063f2b4e61714610885578063f2fde38b1461088d578063f45e65d8146108a057600080fd5b8063dad544e0116100de578063dad544e01461084c578063e0e2016d14610854578063e81b2c6d1461085c578063ec7075171461086557600080fd5b8063d220a9e01461082b578063d6ae3cd51461083b578063dac6e63a1461084457600080fd5b8063bfb14fb711610171578063c93210791161014b578063c9321079146106b3578063c9b26f61146106cc578063c9ff2d16146106df578063cc731b02146106f757600080fd5b8063bfb14fb71461067c578063c0fd4b4114610698578063c4e8ddfa146106ab57600080fd5b8063a7119869116101a2578063a711986914610659578063b40a817c14610661578063bc49ce5f1461067457600080fd5b80639b7d7f0a146105da5780639faba4f8146105e2578063a39fac12146105f557600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610599578063715018a6146105a15780638da5cb5b146105a9578063935f029e146105c757600080fd5b80634f16540b1461051b57806354fd4d50146105425780635c975abb1461058157600080fd5b8063452a93201161027c578063452a9320146104d157806348cd4cb1146104d95780634add321d146104e15780634d5d9a2a146104e957600080fd5b806335e80ab31461047557806338d38c97146104955780633e47158c146104c957600080fd5b80630c18c1621161030f57806318d13918116102e957806318d139181461043f57806319f5cea8146104525780631fd19ee11461045a57806321d7fde51461046257600080fd5b80630c18c162146103fe578063155b6c6f1461040757806316d3bc7f1461041a57600080fd5b8063078f29cf11610340578063078f29cf146103aa5780630a49cb03146103d75780630ae14b1b146103df57600080fd5b80630104582914610367578063028f4e471461037c57806306c926571461038f575b600080fd5b61037a610375366004612899565b6108d5565b005b61037a61038a366004612a09565b610c3a565b610397610e1b565b6040519081526020015b60405180910390f35b6103b2610e49565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a1565b6103b2610e82565b631dcd65005b60405167ffffffffffffffff90911681526020016103a1565b61039760655481565b61037a610415366004612a39565b610eb2565b606a546103e5906d0100000000000000000000000000900467ffffffffffffffff1681565b61037a61044d366004612a6c565b610ec8565b610397610edc565b6103b2610f07565b61037a610470366004612a90565b610f31565b606c546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff90911681526020016103a1565b6103b2610f43565b6103b261114e565b6103976111e2565b6103e5611212565b606a54610506906901000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a1565b6103977f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103a19190612b25565b610589611238565b60405190151581526020016103a1565b6103976113e6565b61037a611411565b60335473ffffffffffffffffffffffffffffffffffffffff166103b2565b61037a6105d5366004612b38565b611425565b6103b2611437565b61037a6105f0366004612b5a565b611467565b6105fd6114aa565b6040516103a19190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6103b2611591565b61037a61066f366004612b75565b6115c1565b6103976115d2565b6068546105069068010000000000000000900463ffffffff1681565b61037a6106a6366004612a90565b6115fd565b6103b261160f565b606a546104b79068010000000000000000900460ff1681565b61037a6106da366004612b90565b61163f565b606a5461050690640100000000900463ffffffff1681565b6107bb6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103a19190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105069063ffffffff1681565b610397606b5481565b6103b2611650565b6103b2611680565b6103976116d4565b61039760675481565b606854610506906c01000000000000000000000000900463ffffffff1681565b6103b26116ff565b61037a61089b366004612a6c565b61177b565b61039760665481565b6068546103e59067ffffffffffffffff1681565b61039761182f565b61039761185a565b610397600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610915575060005460ff8083169116105b6109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109df611889565b6109e761190a565b6109f08c61177b565b6109f9896119a9565b610a038b8b611a0a565b610a0c88611b49565b610a357f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610a68610a6360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612bd8565b869055565b610a9c610a9660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612bd8565b85519055565b610ad3610aca60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612bd8565b60208601519055565b610b0a610b0160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612bd8565b60408601519055565b610b41610b3860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612bd8565b60608601519055565b610b78610b6f60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612bd8565b60808601519055565b610b80611c9f565b610b8986611d07565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c7a575060005460ff8083169116105b610d06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161099d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d3f611889565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610db160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612bd8565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e4660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612bd8565b81565b6000610e7d610e7960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612bd8565b5490565b905090565b6000610e7d610e7960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612bd8565b610eba61217b565b610ec482826121fc565b5050565b610ed061217b565b610ed9816122d4565b50565b610e4660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612bd8565b6000610e7d7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f3961217b565b610ec48282611a0a565b600080610f6e7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610f9157919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fd49190612bef565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061102f906060015b604051602081830303815290604052805190602001205490565b14611066576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061108890606001611015565b905073ffffffffffffffffffffffffffffffffffffffff81161561111c578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111159190612c2c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190612c2c565b6000610e7d610e7960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b606954600090610e7d9063ffffffff6a0100000000000000000000820481169116612c49565b600080611243610e82565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612c2c565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113479190612c75565b806113e05750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190612c75565b91505090565b610e4660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612bd8565b61141961217b565b6114236000612358565b565b61142d61217b565b610ec482826123cf565b6000610e7d610e7960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612bd8565b61146f61217b565b606a80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000060ff84160217905550565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114e8611591565b73ffffffffffffffffffffffffffffffffffffffff16815260200161150b61160f565b73ffffffffffffffffffffffffffffffffffffffff16815260200161152e610e49565b73ffffffffffffffffffffffffffffffffffffffff168152602001611551610e82565b73ffffffffffffffffffffffffffffffffffffffff168152602001611574611437565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610e7d610e7960017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612bd8565b6115c961217b565b610ed981611b49565b610e4660017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612bd8565b61160561217b565b610ec482826124a5565b6000610e7d610e7960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612bd8565b61164761217b565b610ed9816119a9565b6000610e7d610e7960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612bd8565b600061168a610f43565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111be573d6000803e3d6000fd5b610e4660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b60008061170a610e82565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190612c2c565b61178361217b565b73ffffffffffffffffffffffffffffffffffffffff8116611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161099d565b610ed981612358565b610e4660017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612bd8565b610e4660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612bd8565b9055565b33611892610f43565b73ffffffffffffffffffffffffffffffffffffffff16141580156118d35750336118ba611680565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611423576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161099d565b611423612677565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516119fe9190612b25565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b3c9190612b25565b60405180910390a3505050565b611b51611212565b67ffffffffffffffff168167ffffffffffffffff161015611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161099d565b631dcd650067ffffffffffffffff82161115611c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f2068696768604482015260640161099d565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119cd565b611ccd610e7960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b60000361142357611423611d0260017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611db7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840161099d565b6001816040015160ff1611611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e20310000000000000000000000000000000000606482015260840161099d565b6068546080820151825167ffffffffffffffff90921691611e6f9190612c97565b63ffffffff161115611edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161099d565b6000816020015160ff1611611f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f7420626520300000000000000000000000000000000000606482015260840161099d565b8051602082015163ffffffff82169160ff90911690611f94908290612cb6565b611f9e9190612d00565b63ffffffff1614612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840161099d565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099d565b606a80547fffffffffffffffffffffff000000000000000000000000ffffffffffffffffff16690100000000000000000063ffffffff8516027fffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffff16176d010000000000000000000000000067ffffffffffffffff8416908102919091179091556040805184821b6bffffffff000000000000000016909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611b0b565b6122fd7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119cd565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161099d565b606582905560668190556040805160208101849052908101829052600090606001611ad8565b60018263ffffffff16101561253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d20310000000000000000000000000000000000000000000000000000606482015260840161099d565b60018163ffffffff1610156125d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d2031000000000000000000000000000000000000000000000000000000606482015260840161099d565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161264091602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611b0b565b600054610100900460ff1661270e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161099d565b61142333612358565b73ffffffffffffffffffffffffffffffffffffffff81168114610ed957600080fd5b803561274481612717565b919050565b803563ffffffff8116811461274457600080fd5b803567ffffffffffffffff8116811461274457600080fd5b60405160c0810167ffffffffffffffff811182821017156127bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461274457600080fd5b600060a082840312156127e857600080fd5b60405160a0810181811067ffffffffffffffff82111715612832577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561284381612717565b8152602083013561285381612717565b6020820152604083013561286681612717565b6040820152606083013561287981612717565b6060820152608083013561288c81612717565b6080919091015292915050565b60008060008060008060008060008060008b8d036102808112156128bc57600080fd5b8c356128c781612717565b9b506128d560208e01612749565b9a506128e360408e01612749565b995060608d013598506128f860808e0161275d565b975060a08d013561290881612717565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561293a57600080fd5b50612943612775565b61294f60c08e01612749565b815261295d60e08e016127c5565b602082015261296f6101008e016127c5565b60408201526129816101208e01612749565b60608201526129936101408e01612749565b60808201526101608d01356fffffffffffffffffffffffffffffffff811681146129bc57600080fd5b60a082015294506129d06101808d01612739565b93506129e08d6101a08e016127d6565b92506102408c013591506129f76102608d01612739565b90509295989b509295989b9093969950565b60008060408385031215612a1c57600080fd5b823591506020830135612a2e81612717565b809150509250929050565b60008060408385031215612a4c57600080fd5b612a5583612749565b9150612a636020840161275d565b90509250929050565b600060208284031215612a7e57600080fd5b8135612a8981612717565b9392505050565b60008060408385031215612aa357600080fd5b612aac83612749565b9150612a6360208401612749565b6000815180845260005b81811015612ae057602081850181015186830182015201612ac4565b81811115612af2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a896020830184612aba565b60008060408385031215612b4b57600080fd5b50508035926020909101359150565b600060208284031215612b6c57600080fd5b612a89826127c5565b600060208284031215612b8757600080fd5b612a898261275d565b600060208284031215612ba257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612bea57612bea612ba9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c2757612c27612ba9565b500290565b600060208284031215612c3e57600080fd5b8151612a8981612717565b600067ffffffffffffffff808316818516808303821115612c6c57612c6c612ba9565b01949350505050565b600060208284031215612c8757600080fd5b81518015158114612a8957600080fd5b600063ffffffff808316818516808303821115612c6c57612c6c612ba9565b600063ffffffff80841680612cf4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612d2357612d23612ba9565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -1523,25 +1523,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBaseFeeLog2) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBaseFeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBaseFeeLog2) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } -// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBaseFeeLog2) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBaseFeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBaseFeeLog2) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } -// Initialize is a paid mutator transaction binding the contract method 0x2f76cfa3. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig, uint8 _minBaseFeeLog2) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address, _minBaseFeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig, _minBaseFeeLog2) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index 0514d526f5cc1..af6df9bc28abb 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -125,7 +125,7 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa ad, ae := eip1559.DecodeHolocene1559Params(params) var translated bool - // Translate 0,0,0 to the pre-Holocene protocol constants, like the EL does too. + // Translate 0,0 to the pre-Holocene protocol constants, like the EL does too. if ad == 0 { // If attrParams are non-nil, Holocene, and so Canyon, must be active. ad = *cfg.ChainOpConfig.EIP1559DenominatorCanyon diff --git a/op-program/client/l2/engineapi/l2_engine_api_test.go b/op-program/client/l2/engineapi/l2_engine_api_test.go index 29e3ac5de0b1c..c717917f4f339 100644 --- a/op-program/client/l2/engineapi/l2_engine_api_test.go +++ b/op-program/client/l2/engineapi/l2_engine_api_test.go @@ -11,7 +11,6 @@ import ( "github.com/ethereum/go-ethereum/beacon/engine" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/consensus/misc/eip1559" "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/rawdb" "github.com/ethereum/go-ethereum/core/types" diff --git a/op-service/eth/types.go b/op-service/eth/types.go index a950f8a162b7e..baeb589859ea3 100644 --- a/op-service/eth/types.go +++ b/op-service/eth/types.go @@ -607,8 +607,8 @@ type SystemConfig struct { Scalar Bytes32 `json:"scalar"` // GasLimit identifies the L2 block gas limit GasLimit uint64 `json:"gasLimit"` - // EIP1559Params contains the Holocene-encoded EIP-1559 parameters. - // This value will be 0 if Holocene is not active, or if derivation has yet to + // EIP1559Params contains the Holocene-encoded EIP-1559 parameters. This + // value will be 0 if Holocene is not active, or if derivation has yet to // process any EIP_1559_PARAMS system config update events. EIP1559Params Bytes8 `json:"eip1559Params"` // MinBaseFeeLog2 is the minimum base fee log2. From ca0f1f7ce557514c69bf1d28bad70e81b240e12d Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 28 Jul 2025 10:44:39 -0400 Subject: [PATCH 26/56] nits --- go.sum | 4 ++-- op-node/rollup/attributes/engine_consolidate.go | 13 ++----------- packages/contracts-bedrock/src/L1/SystemConfig.sol | 3 --- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/go.sum b/go.sum index b72fa41c77dcf..abaac8e07d37a 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250725142620-592ece93719c h1:p4VVAE9XSzZ/j0310o4GgOqkH+fO6f2asQFHUIF+Nvk= -github.com/wlawt/op-geth v0.0.0-20250725142620-592ece93719c/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= +github.com/wlawt/op-geth v0.0.0-20250728135307-33619dca5538 h1:zT+tpZS8yypWaN6gXVYlsToGAhLT2EOHBCawhasKeQQ= +github.com/wlawt/op-geth v0.0.0-20250728135307-33619dca5538/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index af6df9bc28abb..dd72f24c38a5d 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -143,18 +143,9 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa if ad != bd || ae != be { extraErr := "" if translated { - if isJovian { - extraErr = " (translated from 0,0,0)" - } else { - extraErr = " (translated from 0,0)" - } - } - - if isJovian { - return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d%s, block: %d, %d, %d", ad, ae, extraErr, bd, be, bm) - } else { - return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d%s, block: %d, %d", ad, ae, extraErr, bd, be) + extraErr = " (translated from 0,0)" } + return fmt.Errorf("eip1559 parameters do not match, attributes: %d, %d%s, block: %d, %d", ad, ae, extraErr, bd, be) } if bm == nil && attrMinBaseFee != nil || bm != nil && attrMinBaseFee == nil || bm != nil && attrMinBaseFee != nil && *bm != *attrMinBaseFee { return fmt.Errorf("minBaseFee does not match, attributes: %d, block: %d", attrMinBaseFee, bm) diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index fe607bd763782..15be3cc0b242e 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -123,9 +123,6 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @notice The EIP-1559 elasticity multiplier. uint32 public eip1559Elasticity; - /// @notice The min base fee log2. - uint8 public minBaseFeeLog2; - /// @notice The operator fee scalar. uint32 public operatorFeeScalar; From ba2fa4243a618e17cb5168712f809906fffd8fdc Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 28 Jul 2025 10:54:55 -0400 Subject: [PATCH 27/56] best effort decode + nits --- op-node/rollup/attributes/engine_consolidate.go | 2 +- op-node/rollup/types.go | 5 +++++ op-program/client/l2/engineapi/block_processor.go | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index dd72f24c38a5d..0109a903fe4da 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -111,7 +111,7 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa } // Validate block extraData based on fork - if isJovian { + if isConfigurableMinBaseFee { if err := eip1559.ValidateMinBaseFeeExtraData(blockExtraData); err != nil { return fmt.Errorf("invalid block extraData: %w", err) } diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index 484f032f0b77d..6d2a84da03466 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -480,6 +480,11 @@ func (c *Config) IsInterop(timestamp uint64) bool { return c.IsForkActive(Interop, timestamp) } +// IsConfigurableMinBaseFeeEnabled returns true if the configurable minBaseFee feature is enabled. +func (c *Config) IsConfigurableMinBaseFeeEnabled(timestamp uint64) bool { + return c.IsJovian(timestamp) +} + func (c *Config) IsRegolithActivationBlock(l2BlockTime uint64) bool { return c.IsRegolith(l2BlockTime) && l2BlockTime >= c.BlockTime && diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index aa7b73cc2ff36..be76578ef8b8a 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -61,7 +61,7 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c d = provider.Config().BaseFeeChangeDenominator(header.Time) e = provider.Config().ElasticityMultiplier() } - if provider.Config().IsJovian(header.Time) { + if provider.Config().IsConfigurableMinBaseFeeEnabled(header.Time) { header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFeeLog2) } else { header.Extra = eip1559.EncodeHoloceneExtraData(d, e) From 2e17defbdf72ecc63eaf45b9f00b823315315ac7 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 31 Jul 2025 14:00:51 -0400 Subject: [PATCH 28/56] spike for more jovian --- .../testing/testlib/validators/forks.go | 2 + op-deployer/pkg/deployer/opcm/opchain.go | 1 - op-deployer/pkg/deployer/pipeline/opchain.go | 1 - op-devstack/dsl/validators.go | 2 + .../actions/derivation/system_config_test.go | 3 ++ op-e2e/actions/helpers/env.go | 4 +- op-e2e/actions/helpers/l2_sequencer.go | 7 ++++ op-e2e/actions/proofs/helpers/matrix.go | 3 +- op-e2e/actions/upgrades/span_batch_test.go | 2 + op-e2e/config/init.go | 1 + op-node/rollup/derive/attributes_test.go | 38 +++++++++++++++++++ op-node/rollup/derive/system_config_test.go | 1 - op-node/service.go | 4 ++ .../client/l2/engineapi/l2_engine_api.go | 6 +++ .../scripts/deploy/DeployConfig.s.sol | 6 ++- 15 files changed, 74 insertions(+), 7 deletions(-) diff --git a/devnet-sdk/testing/testlib/validators/forks.go b/devnet-sdk/testing/testlib/validators/forks.go index f60dcaa2e73e9..b0c6ba1aafd6c 100644 --- a/devnet-sdk/testing/testlib/validators/forks.go +++ b/devnet-sdk/testing/testlib/validators/forks.go @@ -66,6 +66,8 @@ func IsForkActivated(c *params.ChainConfig, forkName rollup.ForkName, timestamp return c.IsOptimismJovian(timestamp), nil case rollup.Interop: return c.IsInterop(timestamp), nil + case rollup.Jovian: + return c.IsJovian(timestamp), nil default: return false, fmt.Errorf("unknown fork name: %s", forkName) } diff --git a/op-deployer/pkg/deployer/opcm/opchain.go b/op-deployer/pkg/deployer/opcm/opchain.go index b51767f02ce71..76afa75fca59b 100644 --- a/op-deployer/pkg/deployer/opcm/opchain.go +++ b/op-deployer/pkg/deployer/opcm/opchain.go @@ -43,7 +43,6 @@ type DeployOPChainInput struct { OperatorFeeScalar uint32 OperatorFeeConstant uint64 - MinBaseFeeLog2 uint8 } func (input *DeployOPChainInput) InputSet() bool { diff --git a/op-deployer/pkg/deployer/pipeline/opchain.go b/op-deployer/pkg/deployer/pipeline/opchain.go index d2b0689db011f..b1510a89a2d26 100644 --- a/op-deployer/pkg/deployer/pipeline/opchain.go +++ b/op-deployer/pkg/deployer/pipeline/opchain.go @@ -112,7 +112,6 @@ func makeDCI(intent *state.Intent, thisIntent *state.ChainIntent, chainID common AllowCustomDisputeParameters: proofParams.DangerouslyAllowCustomDisputeParameters, OperatorFeeScalar: thisIntent.OperatorFeeScalar, OperatorFeeConstant: thisIntent.OperatorFeeConstant, - MinBaseFeeLog2: thisIntent.MinBaseFeeLog2, }, nil } diff --git a/op-devstack/dsl/validators.go b/op-devstack/dsl/validators.go index 94328e4333670..9e2ce7d2899fd 100644 --- a/op-devstack/dsl/validators.go +++ b/op-devstack/dsl/validators.go @@ -43,6 +43,8 @@ func IsForkActivated(c *params.ChainConfig, forkName rollup.ForkName, timestamp return c.IsOptimismJovian(timestamp), nil case rollup.Interop: return c.IsInterop(timestamp), nil + case rollup.Jovian: + return c.IsJovian(timestamp), nil default: return false, fmt.Errorf("unknown fork name: %s", forkName) } diff --git a/op-e2e/actions/derivation/system_config_test.go b/op-e2e/actions/derivation/system_config_test.go index d2753ff6bb5eb..00f2c2d13264f 100644 --- a/op-e2e/actions/derivation/system_config_test.go +++ b/op-e2e/actions/derivation/system_config_test.go @@ -238,6 +238,9 @@ func GPOParamsChange(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { dp.DeployConfig.L2GenesisFjordTimeOffset = nil dp.DeployConfig.L2GenesisGraniteTimeOffset = nil dp.DeployConfig.L2GenesisHoloceneTimeOffset = nil + dp.DeployConfig.L2GenesisIsthmusTimeOffset = nil + dp.DeployConfig.L2GenesisInteropTimeOffset = nil + dp.DeployConfig.L2GenesisJovianTimeOffset = nil sd := e2eutils.Setup(t, dp, actionsHelpers.DefaultAlloc) log := testlog.Logger(t, log.LevelDebug) diff --git a/op-e2e/actions/helpers/env.go b/op-e2e/actions/helpers/env.go index 7aca1228a1d9d..49a0eb6998d6c 100644 --- a/op-e2e/actions/helpers/env.go +++ b/op-e2e/actions/helpers/env.go @@ -50,9 +50,9 @@ func WithActiveGenesisFork(fork rollup.ForkName) EnvOpt { } // DefaultFork specifies the default fork to use when setting up the action test environment. -// Currently manually set to Holocene. +// Currently manually set to Jovian. // Replace with `var DefaultFork = func() rollup.ForkName { return rollup.AllForks[len(rollup.AllForks)-1] }()` after Interop launch. -const DefaultFork = rollup.Holocene +const DefaultFork = rollup.Jovian // SetupEnv sets up a default action test environment. If no fork is specified, the default fork as // specified by the package variable [defaultFork] is used. diff --git a/op-e2e/actions/helpers/l2_sequencer.go b/op-e2e/actions/helpers/l2_sequencer.go index 23be8eaf8c940..2e504f81dd3ab 100644 --- a/op-e2e/actions/helpers/l2_sequencer.go +++ b/op-e2e/actions/helpers/l2_sequencer.go @@ -256,3 +256,10 @@ func (s *L2Sequencer) ActBuildL2ToInterop(t Testing) { s.ActL2EmptyBlock(t) } } + +func (s *L2Sequencer) ActBuildL2ToJovian(t Testing) { + require.NotNil(t, s.RollupCfg.JovianTime, "cannot activate JovianTime when it is not scheduled") + for s.L2Unsafe().Time < *s.RollupCfg.JovianTime { + s.ActL2EmptyBlock(t) + } +} diff --git a/op-e2e/actions/proofs/helpers/matrix.go b/op-e2e/actions/proofs/helpers/matrix.go index b13588d1954e5..025d8a96c4504 100644 --- a/op-e2e/actions/proofs/helpers/matrix.go +++ b/op-e2e/actions/proofs/helpers/matrix.go @@ -125,10 +125,11 @@ var ( Granite = &Hardfork{Name: string(rollup.Granite), Precedence: 6} Holocene = &Hardfork{Name: string(rollup.Holocene), Precedence: 7} Isthmus = &Hardfork{Name: string(rollup.Isthmus), Precedence: 8} + Jovian = &Hardfork{Name: string(rollup.Jovian), Precedence: 9} ) var ( - Hardforks = ForkMatrix{Regolith, Canyon, Delta, Ecotone, Fjord, Granite, Holocene, Isthmus} + Hardforks = ForkMatrix{Regolith, Canyon, Delta, Ecotone, Fjord, Granite, Holocene, Isthmus, Jovian} LatestFork = Hardforks[len(Hardforks)-1] LatestForkOnly = ForkMatrix{LatestFork} ) diff --git a/op-e2e/actions/upgrades/span_batch_test.go b/op-e2e/actions/upgrades/span_batch_test.go index f512e7e01db3d..2c9bf39ac8f6c 100644 --- a/op-e2e/actions/upgrades/span_batch_test.go +++ b/op-e2e/actions/upgrades/span_batch_test.go @@ -143,6 +143,8 @@ func TestHardforkMiddleOfSpanBatch(gt *testing.T) { dp.DeployConfig.L2GenesisFjordTimeOffset = nil dp.DeployConfig.L2GenesisGraniteTimeOffset = nil dp.DeployConfig.L2GenesisHoloceneTimeOffset = nil + dp.DeployConfig.L2GenesisIsthmusTimeOffset = nil + dp.DeployConfig.L2GenesisJovianTimeOffset = nil sd := e2eutils.Setup(t, dp, actionsHelpers.DefaultAlloc) log := testlog.Logger(t, log.LevelError) diff --git a/op-e2e/config/init.go b/op-e2e/config/init.go index c2b4c8b508685..c8d2aecbf56cc 100644 --- a/op-e2e/config/init.go +++ b/op-e2e/config/init.go @@ -209,6 +209,7 @@ func initAllocType(root string, allocType AllocType) { lgr := log.New() allocModes := []genesis.L2AllocsMode{ + genesis.L2AllocsJovian, genesis.L2AllocsInterop, genesis.L2AllocsJovian, genesis.L2AllocsIsthmus, diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index 3be85d8406741..20e66f7256576 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -441,6 +441,44 @@ func TestPreparePayloadAttributes(t *testing.T) { } }) }) + + t.Run("minimum base fee param", func(t *testing.T) { + cfg := mkCfg() + cfg.ActivateAtGenesis(rollup.Jovian) + rng := rand.New(rand.NewSource(1234)) + l1Fetcher := &testutils.MockL1Source{} + defer l1Fetcher.AssertExpectations(t) + l2Parent := testutils.RandomL2BlockRef(rng) + l1CfgFetcher := &testutils.MockL2Client{} + eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) + minBaseFeeLog2 := uint8(20) + testSysCfg := eth.SystemConfig{ + BatcherAddr: common.Address{42}, + Overhead: [32]byte{}, + Scalar: [32]byte{}, + EIP1559Params: eip1559Params, + MinBaseFeeLog2: minBaseFeeLog2, + } + l1CfgFetcher.ExpectSystemConfigByL2Hash(l2Parent.Hash, testSysCfg, nil) + defer l1CfgFetcher.AssertExpectations(t) + l1Info := testutils.RandomBlockInfo(rng) + l1Info.InfoParentHash = l2Parent.L1Origin.Hash + l1Info.InfoNum = l2Parent.L1Origin.Number + 1 + epoch := l1Info.ID() + l1InfoTx, err := L1InfoDepositBytes(cfg, testSysCfg, 0, l1Info, 0) + require.NoError(t, err) + l1Fetcher.ExpectFetchReceipts(epoch.Hash, l1Info, nil, nil) + depSet, err := depset.NewStaticConfigDependencySet(map[eth.ChainID]*depset.StaticConfigDependency{ + eth.ChainIDFromUInt64(42): {}, + }) + require.NoError(t, err) + attrBuilder := NewFetchingAttributesBuilder(cfg, depSet, l1Fetcher, l1CfgFetcher) + attrs, err := attrBuilder.PreparePayloadAttributes(context.Background(), l2Parent, epoch) + require.NoError(t, err) + require.Equal(t, eip1559Params, *attrs.EIP1559Params) + require.Equal(t, minBaseFeeLog2, attrs.MinBaseFeeLog2) + require.Equal(t, l1InfoTx, []byte(attrs.Transactions[0])) + }) } func encodeDeposits(deposits []*types.DepositTx) (out []eth.Data, err error) { diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index a2ef80c4cb0ac..4bdadad84a34c 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -206,7 +206,6 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { }, config: eth.SystemConfig{ EIP1559Params: eth.Bytes8(eip1559Params), - MinBaseFeeLog2: 0, }, err: false, }, diff --git a/op-node/service.go b/op-node/service.go index b27503f33a7d2..51faa36e0f6f0 100644 --- a/op-node/service.go +++ b/op-node/service.go @@ -288,6 +288,10 @@ func applyOverrides(ctx *cli.Context, rollupConfig *rollup.Config) { interop := ctx.Uint64(opflags.InteropOverrideFlagName) rollupConfig.InteropTime = &interop } + if ctx.IsSet(opflags.JovianOverrideFlagName) { + jovian := ctx.Uint64(opflags.JovianOverrideFlagName) + rollupConfig.JovianTime = &jovian + } } func NewDependencySetFromCLI(ctx *cli.Context) (depset.DependencySet, error) { diff --git a/op-program/client/l2/engineapi/l2_engine_api.go b/op-program/client/l2/engineapi/l2_engine_api.go index d3a42079391c1..ea5ef1df9c0b1 100644 --- a/op-program/client/l2/engineapi/l2_engine_api.go +++ b/op-program/client/l2/engineapi/l2_engine_api.go @@ -410,6 +410,12 @@ func (ea *L2EngineAPI) NewPayloadV4(ctx context.Context, params *eth.ExecutionPa return ð.PayloadStatusV1{Status: eth.ExecutionInvalid}, engine.InvalidParams.With(errors.New("nil withdrawalsRoot post-isthmus")) } + if ea.config().IsJovian(uint64(params.Timestamp)) { + if err := eip1559.ValidateMinBaseFeeExtraData(params.ExtraData); err != nil { + return ð.PayloadStatusV1{Status: eth.ExecutionInvalid}, engine.UnsupportedFork.With(errors.New("invalid jovian extraData post-jovian")) + } + } + requests := convertRequests(executionRequests) return ea.newPayload(ctx, params, versionedHashes, beaconRoot, requests) } diff --git a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol index 4588b60cf65fd..0a35c6ddff841 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol @@ -29,6 +29,7 @@ contract DeployConfig is Script { uint256 public l2GenesisFjordTimeOffset; uint256 public l2GenesisGraniteTimeOffset; uint256 public l2GenesisHoloceneTimeOffset; + uint256 public l2GenesisJovianTimeOffset; address public p2pSequencerAddress; address public batchInboxAddress; address public batchSenderAddress; @@ -97,6 +98,7 @@ contract DeployConfig is Script { l2GenesisFjordTimeOffset = _readOr(_json, "$.l2GenesisFjordTimeOffset", NULL_OFFSET); l2GenesisGraniteTimeOffset = _readOr(_json, "$.l2GenesisGraniteTimeOffset", NULL_OFFSET); l2GenesisHoloceneTimeOffset = _readOr(_json, "$.l2GenesisHoloceneTimeOffset", NULL_OFFSET); + l2GenesisJovianTimeOffset = _readOr(_json, "$.l2GenesisJovianTimeOffset", NULL_OFFSET); p2pSequencerAddress = stdJson.readAddress(_json, "$.p2pSequencerAddress"); batchInboxAddress = stdJson.readAddress(_json, "$.batchInboxAddress"); @@ -225,7 +227,9 @@ contract DeployConfig is Script { } function latestGenesisFork() internal view returns (Fork) { - if (l2GenesisHoloceneTimeOffset == 0) { + if (l2GenesisJovianTimeOffset == 0) { + return Fork.JOVIAN; + } else if (l2GenesisHoloceneTimeOffset == 0) { return Fork.HOLOCENE; } else if (l2GenesisGraniteTimeOffset == 0) { return Fork.GRANITE; From eb9f15604de74dbd0363cceb859e402c3a788815 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 4 Aug 2025 12:03:21 -0400 Subject: [PATCH 29/56] fix user_test --- op-e2e/actions/derivation/system_config_test.go | 1 - op-e2e/actions/helpers/l2_verifier.go | 5 ++++- op-e2e/e2eutils/setup.go | 14 ++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/op-e2e/actions/derivation/system_config_test.go b/op-e2e/actions/derivation/system_config_test.go index 00f2c2d13264f..d78ae0e481f4d 100644 --- a/op-e2e/actions/derivation/system_config_test.go +++ b/op-e2e/actions/derivation/system_config_test.go @@ -239,7 +239,6 @@ func GPOParamsChange(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { dp.DeployConfig.L2GenesisGraniteTimeOffset = nil dp.DeployConfig.L2GenesisHoloceneTimeOffset = nil dp.DeployConfig.L2GenesisIsthmusTimeOffset = nil - dp.DeployConfig.L2GenesisInteropTimeOffset = nil dp.DeployConfig.L2GenesisJovianTimeOffset = nil sd := e2eutils.Setup(t, dp, actionsHelpers.DefaultAlloc) diff --git a/op-e2e/actions/helpers/l2_verifier.go b/op-e2e/actions/helpers/l2_verifier.go index 82a125932ec56..fe08e8b798c07 100644 --- a/op-e2e/actions/helpers/l2_verifier.go +++ b/op-e2e/actions/helpers/l2_verifier.go @@ -133,7 +133,10 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, ) var interopSys interop.SubSystem - if cfg.InteropTime != nil { + // Only enable supervisor management for multi-chain setups + // For single-chain tests with interop/jovian, we provide the depSet but don't use supervisor management + enableSupervisorManagement := cfg.InteropTime != nil && depSet != nil && len(depSet.Chains()) > 1 + if enableSupervisorManagement { mm := indexing.NewIndexingMode(log, cfg, "127.0.0.1", 0, interopJWTSecret, l1, eng, &opmetrics.NoopRPCMetrics{}) mm.TestDisableEventDeduplication() interopSys = mm diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index bfd1d123b4841..7b0aac3c89fd2 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -235,10 +235,24 @@ func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) * require.Equal(t, deployParams.Secrets.Addresses().SequencerP2P, deployParams.DeployConfig.P2PSequencerAddress) require.Equal(t, deployParams.Secrets.Addresses().Proposer, deployParams.DeployConfig.L2OutputOracleProposer) + // Create a dependency set when interop or jovian fork is scheduled + var dependencySet depset.DependencySet + isInteropScheduled := rollupCfg.InteropTime != nil + isJovianScheduled := rollupCfg.JovianTime != nil + if isInteropScheduled || isJovianScheduled { + depSetConfig := map[eth.ChainID]*depset.StaticConfigDependency{ + eth.ChainIDFromBig(rollupCfg.L2ChainID): {}, + } + var err error + dependencySet, err = depset.NewStaticConfigDependencySet(depSetConfig) + require.NoError(t, err) + } + return &SetupData{ L1Cfg: l1Genesis, L2Cfg: l2Genesis, RollupCfg: rollupCfg, + DependencySet: dependencySet, ChainSpec: rollup.NewChainSpec(rollupCfg), DeploymentsL1: l1Deployments, } From ee8762c56b16e2b6491ed079c77abc6063cad976 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 4 Aug 2025 12:35:27 -0400 Subject: [PATCH 30/56] add jovian fork and activation test --- .../actions/proofs/jovian_activation_test.go | 130 +++++++++++++++++ op-e2e/actions/upgrades/jovian_fork_test.go | 133 ++++++++++++++++++ op-node/rollup/derive/batch_mux.go | 34 ++++- op-node/rollup/derive/channel_mux.go | 28 +++- op-node/rollup/derive/frame_queue.go | 4 + op-node/rollup/types.go | 3 + 6 files changed, 324 insertions(+), 8 deletions(-) create mode 100644 op-e2e/actions/proofs/jovian_activation_test.go create mode 100644 op-e2e/actions/upgrades/jovian_fork_test.go diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go new file mode 100644 index 0000000000000..090047fdb1285 --- /dev/null +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -0,0 +1,130 @@ +package proofs + +import ( + "testing" + + "github.com/ethereum-optimism/optimism/op-chain-ops/genesis" + actionsHelpers "github.com/ethereum-optimism/optimism/op-e2e/actions/helpers" + "github.com/ethereum-optimism/optimism/op-e2e/actions/proofs/helpers" + "github.com/ethereum-optimism/optimism/op-program/client/claim" + "github.com/ethereum-optimism/optimism/op-service/testlog" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/stretchr/testify/require" +) + +func Test_ProgramAction_JovianActivation(gt *testing.T) { + + runJovianDerivationTest := func(gt *testing.T, testCfg *helpers.TestCfg[any]) { + t := actionsHelpers.NewDefaultTesting(gt) + + // Define override to activate Jovian 14 seconds after genesis + var setJovianTime = func(dc *genesis.DeployConfig) { + // Set all predecessor forks at genesis (0 offset) + zero := hexutil.Uint64(0) + dc.L2GenesisHoloceneTimeOffset = &zero + // Set Isthmus at 10s (required predecessor fork for Jovian) + ten := hexutil.Uint64(10) + dc.L2GenesisIsthmusTimeOffset = &ten + // Then set Jovian at 14s + fourteen := hexutil.Uint64(14) + dc.L2GenesisJovianTimeOffset = &fourteen + } + + env := helpers.NewL2FaultProofEnv(t, testCfg, helpers.NewTestParams(), helpers.NewBatcherCfg(), setJovianTime) + + t.Logf("L2 Genesis Time: %d, JovianTime: %d ", env.Sequencer.RollupCfg.Genesis.L2Time, *env.Sequencer.RollupCfg.JovianTime) + + // Build the L2 chain until the Jovian activation time, + // which for the Execution Engine is an L2 block timestamp + for env.Engine.L2Chain().CurrentBlock().Time < *env.Sequencer.RollupCfg.JovianTime { + b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) + // Since Holocene is active at genesis, extra data is already 9 bytes + require.Len(t, b.Extra(), 9, "extra data should be 9 bytes (Holocene active)") + env.Sequencer.ActL2StartBlock(t) + // Send an L2 tx + env.Alice.L2.ActResetTxOpts(t) + env.Alice.L2.ActSetTxToAddr(&env.Dp.Addresses.Bob) + env.Alice.L2.ActMakeTx(t) + env.Engine.ActL2IncludeTx(env.Alice.Address())(t) + env.Sequencer.ActL2EndBlock(t) + t.Log("Unsafe block with timestamp %d", b.Time) + } + b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) + require.Len(t, b.Extra(), 10, "extra data should be 10 bytes after Jovian activation (adds minBaseFee)") + + // Build up a local list of frames + orderedFrames := make([][]byte, 0, 1) + // Submit the first two blocks, this will be enough to trigger Jovian _derivation_ + // which is activated by the L1 inclusion block timestamp + // block 1 will be 12 seconds after genesis, and 2 seconds before Jovian activation + // block 2 will be 24 seconds after genesis, and 10 seconds after Jovian activation + blocksToSubmit := []uint{1, 2} + // Buffer the blocks in the batcher and populate orderedFrames list + env.Batcher.ActCreateChannel(t, false) + for i, blockNum := range blocksToSubmit { + env.Batcher.ActAddBlockByNumber(t, int64(blockNum), actionsHelpers.BlockLogger(t)) + if i == len(blocksToSubmit)-1 { + env.Batcher.ActL2ChannelClose(t) + } + frame := env.Batcher.ReadNextOutputFrame(t) + require.NotEmpty(t, frame, "frame %d", i) + orderedFrames = append(orderedFrames, frame) + } + + includeBatchTx := func() { + // Include the last transaction submitted by the batcher. + env.Miner.ActL1StartBlock(12)(t) + env.Miner.ActL1IncludeTxByHash(env.Batcher.LastSubmitted.Hash())(t) + env.Miner.ActL1EndBlock(t) + } + + // Submit first frame + env.Batcher.ActL2BatchSubmitRaw(t, orderedFrames[0]) + includeBatchTx() // L1 block should have a timestamp of 12s after genesis + + // Jovian should activate 14s after genesis, so that the previous l1 block + // was before JovianTime and the next l1 block is after it + + // Submit final frame + env.Batcher.ActL2BatchSubmitRaw(t, orderedFrames[1]) + includeBatchTx() // block should have a timestamp of 24s after genesis + + // Instruct the sequencer to derive the L2 chain from the data on L1 that the batcher just posted. + env.Sequencer.ActL1HeadSignal(t) + env.Sequencer.ActL2PipelineFull(t) + + l2SafeHead := env.Sequencer.L2Safe() + t.Logf("Safe head block number: %d, timestamp: %d", l2SafeHead.Number, l2SafeHead.Time) + // For Jovian, we expect the safe head to progress (different from Holocene behavior) + require.True(t, l2SafeHead.Number >= uint64(0), "safe head should progress") + + // Verify Jovian fork activation occurred by checking for the activation log + jovianRecs := env.Logs.FindLogs( + testlog.NewMessageContainsFilter("Detected hardfork activation block"), + testlog.NewAttributesFilter("role", "sequencer"), + testlog.NewAttributesFilter("forkName", "jovian"), + ) + require.Len(t, jovianRecs, 1, "Jovian fork should be detected and activated exactly once") + env.RunFaultProofProgramFromGenesis(t, l2SafeHead.Number, testCfg.CheckResult, testCfg.InputParams...) + } + + matrix := helpers.NewMatrix[any]() + defer matrix.Run(gt) + + matrix.AddTestCase( + "HonestClaim-JovianActivation", + nil, + helpers.NewForkMatrix(helpers.Granite), + runJovianDerivationTest, + helpers.ExpectNoError(), + ) + matrix.AddTestCase( + "JunkClaim-JovianActivation", + nil, + helpers.NewForkMatrix(helpers.Granite), + runJovianDerivationTest, + helpers.ExpectError(claim.ErrClaimNotValid), + helpers.WithL2Claim(common.HexToHash("0xdeadbeef")), + ) +} \ No newline at end of file diff --git a/op-e2e/actions/upgrades/jovian_fork_test.go b/op-e2e/actions/upgrades/jovian_fork_test.go new file mode 100644 index 0000000000000..7aefafce8c173 --- /dev/null +++ b/op-e2e/actions/upgrades/jovian_fork_test.go @@ -0,0 +1,133 @@ +package upgrades + +import ( + "context" + "math/big" + "testing" + + "github.com/stretchr/testify/require" + + "github.com/ethereum/go-ethereum/core/types" + + "github.com/ethereum-optimism/optimism/op-e2e/actions/helpers" + "github.com/ethereum-optimism/optimism/op-e2e/system/e2esys" + "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum-optimism/optimism/op-service/testlog" +) + +func TestJovianActivationAtGenesis(gt *testing.T) { + t := helpers.NewDefaultTesting(gt) + env := helpers.SetupEnv(t, helpers.WithActiveGenesisFork(rollup.Jovian)) + + // Start op-nodes + env.Seq.ActL2PipelineFull(t) + env.Verifier.ActL2PipelineFull(t) + + // Verify Jovian is active at genesis + l2Head := env.Seq.L2Unsafe() + require.NotZero(t, l2Head.Hash) + require.True(t, env.SetupData.RollupCfg.IsJovian(l2Head.Time), "Jovian should be active at genesis") + + // build empty L1 block + env.Miner.ActEmptyBlock(t) + + // Build L2 chain and advance safe head + env.Seq.ActL1HeadSignal(t) + env.Seq.ActBuildToL1Head(t) + + // verify in logs that correct stage got activated + recs := env.Logs.FindLogs(testlog.NewMessageContainsFilter("activating Jovian stage during reset"), testlog.NewAttributesFilter("role", e2esys.RoleSeq)) + require.Len(t, recs, 2) + recs = env.Logs.FindLogs(testlog.NewMessageContainsFilter("activating Jovian stage during reset"), testlog.NewAttributesFilter("role", e2esys.RoleVerif)) + require.Len(t, recs, 2) + + env.ActBatchSubmitAllAndMine(t) + + // verifier picks up the L2 chain that was submitted + env.Verifier.ActL1HeadSignal(t) + env.Verifier.ActL2PipelineFull(t) + require.Equal(t, env.Verifier.L2Safe(), env.Seq.L2Unsafe(), "verifier syncs from sequencer via L1") + require.NotEqual(t, env.Seq.L2Safe(), env.Seq.L2Unsafe(), "sequencer has not processed L1 yet") +} + +func TestJovianInvalidPayload(gt *testing.T) { + t := helpers.NewDefaultTesting(gt) + env := helpers.SetupEnv(t, helpers.WithActiveGenesisFork(rollup.Jovian)) + ctx := context.Background() + + requireDepositOnlyLogs := func(role string, expNumLogs int) { + t.Helper() + recs := env.Logs.FindLogs(testlog.NewMessageContainsFilter("deposits-only attributes"), testlog.NewAttributesFilter("role", role)) + require.Len(t, recs, expNumLogs) + } + + // Start op-nodes + env.Seq.ActL2PipelineFull(t) + + // generate and batch buffer two empty blocks + env.Seq.ActL2EmptyBlock(t) // 1 - genesis is 0 + env.Batcher.ActL2BatchBuffer(t) + env.Seq.ActL2EmptyBlock(t) // 2 + env.Batcher.ActL2BatchBuffer(t) + + // send and include a single transaction + env.Alice.L2.ActResetTxOpts(t) + env.Alice.L2.ActSetTxToAddr(&env.DeployParams.Addresses.Bob) + env.Alice.L2.ActMakeTx(t) + + env.Seq.ActL2StartBlock(t) + env.SeqEngine.ActL2IncludeTx(env.Alice.Address())(t) + env.Seq.ActL2EndBlock(t) // 3 + env.Alice.L2.ActCheckReceiptStatusOfLastTx(true)(t) + l2Unsafe := env.Seq.L2Unsafe() + const invalidNum = 3 + require.EqualValues(t, invalidNum, l2Unsafe.Number) + b, err := env.SeqEngine.EthClient().BlockByNumber(ctx, big.NewInt(invalidNum)) + require.NoError(t, err) + require.Len(t, b.Transactions(), 2) + + // buffer into the batcher, invalidating the tx via signature zeroing + env.Batcher.ActL2BatchBuffer(t, helpers.WithBlockModifier(func(block *types.Block) *types.Block { + // Replace the tx with one that has a bad signature. + txs := block.Transactions() + newTx, err := txs[1].WithSignature(env.Alice.L2.Signer(), make([]byte, 65)) + require.NoError(t, err) + txs[1] = newTx + return block + })) + + // generate two more empty blocks + env.Seq.ActL2EmptyBlock(t) // 4 + env.Seq.ActL2EmptyBlock(t) // 5 + require.EqualValues(t, 5, env.Seq.L2Unsafe().Number) + + // submit it all + env.ActBatchSubmitAllAndMine(t) + + // derive chain on sequencer + env.Seq.ActL1HeadSignal(t) + env.Seq.ActL2PipelineFull(t) + + l2Safe := env.Seq.L2Safe() + require.EqualValues(t, invalidNum, l2Safe.Number) + require.NotEqual(t, l2Safe.Hash, l2Unsafe.Hash, // old L2Unsafe above + "block-3 should have been replaced by deposit-only version") + requireDepositOnlyLogs(e2esys.RoleSeq, 2) + require.Equal(t, l2Safe, env.Seq.L2Unsafe(), "unsafe chain should have reorg'd") + b, err = env.SeqEngine.EthClient().BlockByNumber(ctx, big.NewInt(invalidNum)) + require.NoError(t, err) + require.Len(t, b.Transactions(), 1) + + // test that building on top of reorg'd chain and deriving further works + + env.Seq.ActL2EmptyBlock(t) // 4 + env.Seq.ActL2EmptyBlock(t) // 5 + l2Unsafe = env.Seq.L2Unsafe() + require.EqualValues(t, 5, l2Unsafe.Number) + + env.Batcher.Reset() // need to reset batcher to become aware of reorg + env.ActBatchSubmitAllAndMine(t) + env.Seq.ActL1HeadSignal(t) + env.Seq.ActL2PipelineFull(t) + require.Equal(t, l2Unsafe, env.Seq.L2Safe()) +} diff --git a/op-node/rollup/derive/batch_mux.go b/op-node/rollup/derive/batch_mux.go index f5eeb95613ce9..f2229e9041644 100644 --- a/op-node/rollup/derive/batch_mux.go +++ b/op-node/rollup/derive/batch_mux.go @@ -34,16 +34,21 @@ func NewBatchMux(lgr log.Logger, cfg *rollup.Config, prev NextBatchProvider, l2 func (b *BatchMux) Reset(ctx context.Context, base eth.L1BlockRef, sysCfg eth.SystemConfig) error { // TODO(12490): change to a switch over b.cfg.ActiveFork(base.Time) switch { - default: - if _, ok := b.SingularBatchProvider.(*BatchQueue); !ok { - b.log.Info("BatchMux: activating pre-Holocene stage during reset", "origin", base) - b.SingularBatchProvider = NewBatchQueue(b.log, b.cfg, b.prev, b.l2) + case b.cfg.IsJovian(base.Time): + if _, ok := b.SingularBatchProvider.(*BatchStage); !ok { + b.log.Info("BatchMux: activating Jovian stage during reset", "origin", base) + b.SingularBatchProvider = NewBatchStage(b.log, b.cfg, b.prev, b.l2) } case b.cfg.IsHolocene(base.Time): if _, ok := b.SingularBatchProvider.(*BatchStage); !ok { b.log.Info("BatchMux: activating Holocene stage during reset", "origin", base) b.SingularBatchProvider = NewBatchStage(b.log, b.cfg, b.prev, b.l2) } + default: + if _, ok := b.SingularBatchProvider.(*BatchQueue); !ok { + b.log.Info("BatchMux: activating pre-Holocene stage during reset", "origin", base) + b.SingularBatchProvider = NewBatchQueue(b.log, b.cfg, b.prev, b.l2) + } } return b.SingularBatchProvider.Reset(ctx, base, sysCfg) } @@ -52,6 +57,8 @@ func (b *BatchMux) Transform(f rollup.ForkName) { switch f { case rollup.Holocene: b.TransformHolocene() + case rollup.Jovian: + b.TransformJovian() } } @@ -74,3 +81,22 @@ func (b *BatchMux) TransformHolocene() { panic(fmt.Sprintf("unknown batch stage type: %T", bp)) } } + +func (b *BatchMux) TransformJovian() { + switch bp := b.SingularBatchProvider.(type) { + case *BatchQueue: + b.log.Info("BatchMux: transforming to Jovian stage") + bs := NewBatchStage(b.log, b.cfg, b.prev, b.l2) + // Even though any ongoing span batch or queued batches are dropped at Jovian activation, the + // post-Jovian batch stage still needs access to the collected l1Blocks pre-Jovian because + // the first Jovian channel will contain pre-Jovian batches. + bs.l1Blocks = slices.Clone(bp.l1Blocks) + bs.origin = bp.origin + b.SingularBatchProvider = bs + case *BatchStage: + // Jovian BatchStage already active - this can happen during reorgs or multiple pipeline steps + b.log.Debug("BatchMux: Jovian BatchStage already active", "origin", bp.Origin()) + default: + panic(fmt.Sprintf("unknown batch stage type: %T", bp)) + } +} diff --git a/op-node/rollup/derive/channel_mux.go b/op-node/rollup/derive/channel_mux.go index 44246eeae397d..69ae26e5acc08 100644 --- a/op-node/rollup/derive/channel_mux.go +++ b/op-node/rollup/derive/channel_mux.go @@ -38,16 +38,21 @@ func NewChannelMux(log log.Logger, spec *rollup.ChainSpec, prev NextFrameProvide func (c *ChannelMux) Reset(ctx context.Context, base eth.L1BlockRef, sysCfg eth.SystemConfig) error { // TODO(12490): change to a switch over c.cfg.ActiveFork(base.Time) switch { - default: - if _, ok := c.RawChannelProvider.(*ChannelBank); !ok { - c.log.Info("ChannelMux: activating pre-Holocene stage during reset", "origin", base) - c.RawChannelProvider = NewChannelBank(c.log, c.spec, c.prev, c.m) + case c.spec.IsJovian(base.Time): + if _, ok := c.RawChannelProvider.(*ChannelAssembler); !ok { + c.log.Info("ChannelMux: activating Jovian stage during reset", "origin", base) + c.RawChannelProvider = NewChannelAssembler(c.log, c.spec, c.prev, c.m) } case c.spec.IsHolocene(base.Time): if _, ok := c.RawChannelProvider.(*ChannelAssembler); !ok { c.log.Info("ChannelMux: activating Holocene stage during reset", "origin", base) c.RawChannelProvider = NewChannelAssembler(c.log, c.spec, c.prev, c.m) } + default: + if _, ok := c.RawChannelProvider.(*ChannelBank); !ok { + c.log.Info("ChannelMux: activating pre-Holocene stage during reset", "origin", base) + c.RawChannelProvider = NewChannelBank(c.log, c.spec, c.prev, c.m) + } } return c.RawChannelProvider.Reset(ctx, base, sysCfg) } @@ -56,6 +61,8 @@ func (c *ChannelMux) Transform(f rollup.ForkName) { switch f { case rollup.Holocene: c.TransformHolocene() + case rollup.Jovian: + c.TransformJovian() } } @@ -72,3 +79,16 @@ func (c *ChannelMux) TransformHolocene() { panic(fmt.Sprintf("unknown channel stage type: %T", cp)) } } + +func (c *ChannelMux) TransformJovian() { + switch cp := c.RawChannelProvider.(type) { + case *ChannelBank: + c.log.Info("ChannelMux: transforming to Jovian stage") + c.RawChannelProvider = NewChannelAssembler(c.log, c.spec, c.prev, c.m) + case *ChannelAssembler: + // Jovian ChannelAssembler already active - this can happen during reorgs or multiple pipeline steps + c.log.Debug("ChannelMux: Jovian ChannelAssembler already active", "origin", cp.Origin()) + default: + panic(fmt.Sprintf("unknown channel stage type: %T", cp)) + } +} diff --git a/op-node/rollup/derive/frame_queue.go b/op-node/rollup/derive/frame_queue.go index 361f1cfda886b..88a35fb54d7d4 100644 --- a/op-node/rollup/derive/frame_queue.go +++ b/op-node/rollup/derive/frame_queue.go @@ -42,6 +42,10 @@ func (fq *FrameQueue) Transform(f rollup.ForkName) { fq.log.Info("FrameQueue: resetting with Holocene activation") // With Holocene activation, the frame queue is simply reset fq.reset() + case rollup.Jovian: + fq.log.Info("FrameQueue: resetting with Jovian activation") + // With Jovian activation, the frame queue is simply reset + fq.reset() } } diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index 6d2a84da03466..4bfd2fe940ac8 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -588,6 +588,9 @@ func (c *Config) ActivationTimeFor(fork ForkName) *uint64 { // block's time is oldTime. It return an empty ForkName if no fork activation takes place between // those timestamps. It can be used for both, L1 and L2 blocks. func (c *Config) IsActivationBlock(oldTime, newTime uint64) ForkName { + if c.IsJovian(newTime) && !c.IsJovian(oldTime) { + return Jovian + } if c.IsInterop(newTime) && !c.IsInterop(oldTime) { return Interop } From 0827e8667182ca65eee06e811b14e61fc11440d8 Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 4 Aug 2025 15:26:55 -0400 Subject: [PATCH 31/56] wip - add acceptance test --- op-acceptance-tests/acceptance-tests.yaml | 2 +- op-acceptance-tests/justfile | 3 + op-acceptance-tests/tests/jovian/init_test.go | 11 ++ .../tests/jovian/min_base_fee_test.go | 120 ++++++++++++++++++ 4 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 op-acceptance-tests/tests/jovian/init_test.go create mode 100644 op-acceptance-tests/tests/jovian/min_base_fee_test.go diff --git a/op-acceptance-tests/acceptance-tests.yaml b/op-acceptance-tests/acceptance-tests.yaml index a0d677689bbdc..425214a9cb9fd 100644 --- a/op-acceptance-tests/acceptance-tests.yaml +++ b/op-acceptance-tests/acceptance-tests.yaml @@ -78,7 +78,7 @@ gates: tests: - package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/flashblocks timeout: 5m - + - id: flashblocks-with-isthmus inherits: - isthmus diff --git a/op-acceptance-tests/justfile b/op-acceptance-tests/justfile index 53a19bfdacd56..36e41a5daa315 100644 --- a/op-acceptance-tests/justfile +++ b/op-acceptance-tests/justfile @@ -17,6 +17,9 @@ isthmus: interop: @just acceptance-test "" interop +jovian: + @just acceptance-test jovian jovian + # Run acceptance tests with mise-managed binary # Usage: just acceptance-test [devnet] [gate] diff --git a/op-acceptance-tests/tests/jovian/init_test.go b/op-acceptance-tests/tests/jovian/init_test.go new file mode 100644 index 0000000000000..1e36baa52d448 --- /dev/null +++ b/op-acceptance-tests/tests/jovian/init_test.go @@ -0,0 +1,11 @@ +package jovian + +import ( + "testing" + + "github.com/ethereum-optimism/optimism/op-devstack/presets" +) + +func TestMain(m *testing.M) { + presets.DoMain(m, presets.WithMinimal()) +} \ No newline at end of file diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go new file mode 100644 index 0000000000000..04846162f3542 --- /dev/null +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -0,0 +1,120 @@ +package jovian + +import ( + "math/big" + "testing" + "time" + + "github.com/ethereum-optimism/optimism/devnet-sdk/system" + "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" + "github.com/ethereum-optimism/optimism/devnet-sdk/testing/testlib/validators" + "github.com/ethereum-optimism/optimism/devnet-sdk/types" + "github.com/ethereum-optimism/optimism/op-node/rollup" + gethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/params" + "github.com/stretchr/testify/require" +) + +// TestConfigurableMinBaseFee verifies that the configurable minimum base fee feature works correctly +func TestConfigurableMinBaseFee(t *testing.T) { + // Define which L2 chain we'll test + chainIdx := uint64(0) + + // Get validators and getters for accessing the system and wallets + walletGetter, walletValidator := validators.AcquireL2WalletWithFunds(chainIdx, types.NewBalance(big.NewInt(params.Ether))) + + // Run jovian test - require Jovian fork to be active + _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) + + systest.SystemTest(t, + configurableMinBaseFeeTestScenario(walletGetter, chainIdx), + walletValidator, + forkValidator, + ) +} + +// configurableMinBaseFeeTestScenario creates a test scenario for verifying configurable minimum base fee +func configurableMinBaseFeeTestScenario( + walletGetter validators.WalletGetter, + chainIdx uint64, +) systest.SystemTestFunc { + return func(t systest.T, sys system.System) { + ctx := t.Context() + + // Get the L2 client + l2Chain := sys.L2s()[chainIdx] + l2Client, err := l2Chain.Nodes()[0].GethClient() + require.NoError(t, err) + + // Get the genesis config to ensure Jovian is active + chainConfig, err := l2Chain.Config() + require.NoError(t, err) + require.NotNil(t, chainConfig.JovianTime, "Jovian fork must be configured") + + // Wait for at least block 1 to avoid genesis block edge cases + header, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) + require.NoError(t, err) + + // Verify that we're on Jovian fork + require.True(t, chainConfig.IsJovian(header.Time), "Chain must be running on Jovian fork for this test") + + // For Jovian, the minimum base fee is encoded in the extra data (last byte) + // Extract minBaseFeeLog2 from block extra data + require.Len(t, header.Extra, 10, "Jovian blocks should have 10 bytes of extra data") + minBaseFeeLog2 := uint8(header.Extra[9]) + + // Convert log2 value to actual minimum base fee (2^minBaseFeeLog2) + minBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(minBaseFeeLog2)), nil) + require.Greater(t, minBaseFee.Uint64(), uint64(0), "Minimum base fee should be greater than 0") + + // Verify the minimum base fee is properly enforced + // The base fee should never go below the minimum + currentBaseFee := header.BaseFee + require.True(t, currentBaseFee.Cmp(minBaseFee) >= 0, + "Current base fee (%s) should be >= minimum base fee (%s)", + currentBaseFee.String(), minBaseFee.String()) + + // Wait for a few more blocks and verify base fee constraint is maintained + for i := 0; i < 5; i++ { + // Wait for next block + nextBlockNum := new(big.Int).Add(header.Number, big.NewInt(1)) + + // Poll for the next block (simple polling) + var nextHeader *gethTypes.Header + for attempts := 0; attempts < 20; attempts++ { // Wait up to 20 seconds + nextHeader, err = l2Client.HeaderByNumber(ctx, nextBlockNum) + if err == nil { + break + } + // Wait 1 second before trying again + select { + case <-ctx.Done(): + require.NoError(t, ctx.Err()) + case <-time.After(time.Second): + } + } + require.NoError(t, err, "Should be able to get next block header") + + // Verify base fee constraint + require.True(t, nextHeader.BaseFee.Cmp(minBaseFee) >= 0, + "Block %d base fee (%s) should be >= minimum base fee (%s)", + nextHeader.Number.Uint64(), nextHeader.BaseFee.String(), minBaseFee.String()) + + header = nextHeader + } + + // Test that the minBaseFee value is encoded in the block extra data + // Jovian blocks should have 10 bytes of extra data (9 from Holocene + 1 for minBaseFee) + require.Len(t, header.Extra, 10, "Jovian blocks should have 10 bytes of extra data") + + // The last byte should encode the minBaseFee parameter + minBaseFeeExtraData := header.Extra[9] + require.NotEqual(t, byte(0), minBaseFeeExtraData, "MinBaseFee extra data should be non-zero") + + t.Logf("Successfully verified configurable minimum base fee feature:") + t.Logf(" - Minimum base fee: %s", minBaseFee.String()) + t.Logf(" - Current base fee: %s", header.BaseFee.String()) + t.Logf(" - Extra data length: %d bytes", len(header.Extra)) + t.Logf(" - MinBaseFee extra data: 0x%02x", minBaseFeeExtraData) + } +} \ No newline at end of file From ea0f7e943a3ead0ca7c0e5c701bad0497cd98be1 Mon Sep 17 00:00:00 2001 From: William Law Date: Tue, 5 Aug 2025 11:54:58 -0400 Subject: [PATCH 32/56] gofmt + add op-e2e for minBaseFee + emit update for SystemConfig + fix right-pad of uint8 in abi-encode --- go.sum | 4 +- kurtosis-devnet/jovian.yaml | 100 ++++++++++++++ op-acceptance-tests/tests/jovian/init_test.go | 2 +- .../tests/jovian/min_base_fee_test.go | 14 +- .../actions/proofs/jovian_activation_test.go | 2 +- op-e2e/bindings/systemconfig.go | 2 +- op-e2e/system/e2esys/setup.go | 3 +- op-e2e/system/fees/minbasefeelog2_test.go | 126 ++++++++++++++++++ op-node/rollup/derive/attributes_test.go | 8 +- op-node/rollup/derive/system_config.go | 3 +- op-node/rollup/derive/system_config_test.go | 4 +- op-node/rollup/types.go | 4 +- .../client/l2/engineapi/block_processor.go | 2 +- .../client/l2/engineapi/l2_engine_api_test.go | 10 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 6 +- 15 files changed, 260 insertions(+), 30 deletions(-) create mode 100644 kurtosis-devnet/jovian.yaml create mode 100644 op-e2e/system/fees/minbasefeelog2_test.go diff --git a/go.sum b/go.sum index abaac8e07d37a..b0ac064b429d9 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250728135307-33619dca5538 h1:zT+tpZS8yypWaN6gXVYlsToGAhLT2EOHBCawhasKeQQ= -github.com/wlawt/op-geth v0.0.0-20250728135307-33619dca5538/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= +github.com/wlawt/op-geth v0.0.0-20250805142921-f05d71e98a29 h1:XdVGwxa337i6ZDtVC9eqllWKr8o9Mybt74Fgpr7cxyE= +github.com/wlawt/op-geth v0.0.0-20250805142921-f05d71e98a29/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/kurtosis-devnet/jovian.yaml b/kurtosis-devnet/jovian.yaml new file mode 100644 index 0000000000000..0adc5ef23c702 --- /dev/null +++ b/kurtosis-devnet/jovian.yaml @@ -0,0 +1,100 @@ +optimism_package: + faucet: + enabled: true + image: {{ localDockerImage "op-faucet" }} + chains: + op-kurtosis: + participants: + node0: + el: + type: op-geth + image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101503.2-rc.3" + log_level: "" + extra_env_vars: {} + extra_labels: {} + extra_params: [] + tolerations: [] + volume_size: 0 + min_cpu: 0 + max_cpu: 0 + min_mem: 0 + max_mem: 0 + cl: &x-node-cl + type: op-node + image: {{ localDockerImage "op-node" }} + log_level: "" + extra_env_vars: {} + extra_labels: {} + extra_params: [] + tolerations: [] + volume_size: 0 + min_cpu: 0 + max_cpu: 0 + min_mem: 0 + max_mem: 0 + node1: + el: + type: op-reth + image: "ghcr.io/paradigmxyz/op-reth@sha256:7d83174c900a623897d5cf3a42764f19047ca47034f9726f5a9fad2c7ed32fee" + log_level: "" + extra_env_vars: {} + extra_labels: {} + extra_params: [] + tolerations: [] + volume_size: 0 + min_cpu: 0 + max_cpu: 0 + min_mem: 0 + max_mem: 0 + cl: *x-node-cl + network_params: + network: "kurtosis" + network_id: "2151908" + seconds_per_slot: 2 + fjord_time_offset: 0 + granite_time_offset: 0 + holocene_time_offset: 0 + isthmus_time_offset: 0 + jovian_time_offset: 0 + fund_dev_accounts: true + batcher_params: + image: {{ localDockerImage "op-batcher" }} + extra_params: [] + proposer_params: + image: {{ localDockerImage "op-proposer" }} + extra_params: [] + game_type: 1 + proposal_interval: 10m + challengers: + challenger: + enabled: true + image: {{ localDockerImage "op-challenger" }} + participants: "*" + cannon_prestates_url: {{ localPrestate.URL }} + cannon_trace_types: ["cannon", "permissioned"] + op_contract_deployer_params: + image: {{ localDockerImage "op-deployer" }} + l1_artifacts_locator: {{ localContractArtifacts "l1" }} + l2_artifacts_locator: {{ localContractArtifacts "l2" }} + overrides: + faultGameAbsolutePrestate: {{ localPrestate.Hashes.prestate_mt64 }} + global_log_level: "info" + global_node_selectors: {} + global_tolerations: [] + persistent: false +ethereum_package: + participants: + - el_type: geth + cl_type: teku + network_params: + preset: minimal + genesis_delay: 5 + additional_preloaded_contracts: | + { + "0x4e59b44847b379578588920cA78FbF26c0B4956C": { + "balance": "0ETH", + "code": "0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe03601600081602082378035828234f58015156039578182fd5b8082525050506014600cf3", + "storage": {}, + "nonce": "1" + } + } \ No newline at end of file diff --git a/op-acceptance-tests/tests/jovian/init_test.go b/op-acceptance-tests/tests/jovian/init_test.go index 1e36baa52d448..a760b7e537383 100644 --- a/op-acceptance-tests/tests/jovian/init_test.go +++ b/op-acceptance-tests/tests/jovian/init_test.go @@ -8,4 +8,4 @@ import ( func TestMain(m *testing.M) { presets.DoMain(m, presets.WithMinimal()) -} \ No newline at end of file +} diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 04846162f3542..10d5ba37d74d8 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -25,7 +25,7 @@ func TestConfigurableMinBaseFee(t *testing.T) { // Run jovian test - require Jovian fork to be active _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) - + systest.SystemTest(t, configurableMinBaseFeeTestScenario(walletGetter, chainIdx), walletValidator, @@ -62,7 +62,7 @@ func configurableMinBaseFeeTestScenario( // Extract minBaseFeeLog2 from block extra data require.Len(t, header.Extra, 10, "Jovian blocks should have 10 bytes of extra data") minBaseFeeLog2 := uint8(header.Extra[9]) - + // Convert log2 value to actual minimum base fee (2^minBaseFeeLog2) minBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(minBaseFeeLog2)), nil) require.Greater(t, minBaseFee.Uint64(), uint64(0), "Minimum base fee should be greater than 0") @@ -70,15 +70,15 @@ func configurableMinBaseFeeTestScenario( // Verify the minimum base fee is properly enforced // The base fee should never go below the minimum currentBaseFee := header.BaseFee - require.True(t, currentBaseFee.Cmp(minBaseFee) >= 0, - "Current base fee (%s) should be >= minimum base fee (%s)", + require.True(t, currentBaseFee.Cmp(minBaseFee) >= 0, + "Current base fee (%s) should be >= minimum base fee (%s)", currentBaseFee.String(), minBaseFee.String()) // Wait for a few more blocks and verify base fee constraint is maintained for i := 0; i < 5; i++ { // Wait for next block nextBlockNum := new(big.Int).Add(header.Number, big.NewInt(1)) - + // Poll for the next block (simple polling) var nextHeader *gethTypes.Header for attempts := 0; attempts < 20; attempts++ { // Wait up to 20 seconds @@ -106,7 +106,7 @@ func configurableMinBaseFeeTestScenario( // Test that the minBaseFee value is encoded in the block extra data // Jovian blocks should have 10 bytes of extra data (9 from Holocene + 1 for minBaseFee) require.Len(t, header.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - + // The last byte should encode the minBaseFee parameter minBaseFeeExtraData := header.Extra[9] require.NotEqual(t, byte(0), minBaseFeeExtraData, "MinBaseFee extra data should be non-zero") @@ -117,4 +117,4 @@ func configurableMinBaseFeeTestScenario( t.Logf(" - Extra data length: %d bytes", len(header.Extra)) t.Logf(" - MinBaseFee extra data: 0x%02x", minBaseFeeExtraData) } -} \ No newline at end of file +} diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go index 090047fdb1285..b9befa52af172 100644 --- a/op-e2e/actions/proofs/jovian_activation_test.go +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -127,4 +127,4 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { helpers.ExpectError(claim.ErrClaimNotValid), helpers.WithL2Claim(common.HexToHash("0xdeadbeef")), ) -} \ No newline at end of file +} diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 930842e76c8e7..347f639032e91 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -51,7 +51,7 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFeeLog2\",\"inputs\":[{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018851760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612d396200018560003960008181610497015281816108d70152610c3c0152612d396000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639b7d7f0a116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108a9578063f8c68de0146108bd578063fd32aa0f146108c5578063ffa1ad74146108cd57600080fd5b8063f2b4e61714610885578063f2fde38b1461088d578063f45e65d8146108a057600080fd5b8063dad544e0116100de578063dad544e01461084c578063e0e2016d14610854578063e81b2c6d1461085c578063ec7075171461086557600080fd5b8063d220a9e01461082b578063d6ae3cd51461083b578063dac6e63a1461084457600080fd5b8063bfb14fb711610171578063c93210791161014b578063c9321079146106b3578063c9b26f61146106cc578063c9ff2d16146106df578063cc731b02146106f757600080fd5b8063bfb14fb71461067c578063c0fd4b4114610698578063c4e8ddfa146106ab57600080fd5b8063a7119869116101a2578063a711986914610659578063b40a817c14610661578063bc49ce5f1461067457600080fd5b80639b7d7f0a146105da5780639faba4f8146105e2578063a39fac12146105f557600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610599578063715018a6146105a15780638da5cb5b146105a9578063935f029e146105c757600080fd5b80634f16540b1461051b57806354fd4d50146105425780635c975abb1461058157600080fd5b8063452a93201161027c578063452a9320146104d157806348cd4cb1146104d95780634add321d146104e15780634d5d9a2a146104e957600080fd5b806335e80ab31461047557806338d38c97146104955780633e47158c146104c957600080fd5b80630c18c1621161030f57806318d13918116102e957806318d139181461043f57806319f5cea8146104525780631fd19ee11461045a57806321d7fde51461046257600080fd5b80630c18c162146103fe578063155b6c6f1461040757806316d3bc7f1461041a57600080fd5b8063078f29cf11610340578063078f29cf146103aa5780630a49cb03146103d75780630ae14b1b146103df57600080fd5b80630104582914610367578063028f4e471461037c57806306c926571461038f575b600080fd5b61037a610375366004612899565b6108d5565b005b61037a61038a366004612a09565b610c3a565b610397610e1b565b6040519081526020015b60405180910390f35b6103b2610e49565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a1565b6103b2610e82565b631dcd65005b60405167ffffffffffffffff90911681526020016103a1565b61039760655481565b61037a610415366004612a39565b610eb2565b606a546103e5906d0100000000000000000000000000900467ffffffffffffffff1681565b61037a61044d366004612a6c565b610ec8565b610397610edc565b6103b2610f07565b61037a610470366004612a90565b610f31565b606c546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff90911681526020016103a1565b6103b2610f43565b6103b261114e565b6103976111e2565b6103e5611212565b606a54610506906901000000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a1565b6103977f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103a19190612b25565b610589611238565b60405190151581526020016103a1565b6103976113e6565b61037a611411565b60335473ffffffffffffffffffffffffffffffffffffffff166103b2565b61037a6105d5366004612b38565b611425565b6103b2611437565b61037a6105f0366004612b5a565b611467565b6105fd6114aa565b6040516103a19190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6103b2611591565b61037a61066f366004612b75565b6115c1565b6103976115d2565b6068546105069068010000000000000000900463ffffffff1681565b61037a6106a6366004612a90565b6115fd565b6103b261160f565b606a546104b79068010000000000000000900460ff1681565b61037a6106da366004612b90565b61163f565b606a5461050690640100000000900463ffffffff1681565b6107bb6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103a19190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105069063ffffffff1681565b610397606b5481565b6103b2611650565b6103b2611680565b6103976116d4565b61039760675481565b606854610506906c01000000000000000000000000900463ffffffff1681565b6103b26116ff565b61037a61089b366004612a6c565b61177b565b61039760665481565b6068546103e59067ffffffffffffffff1681565b61039761182f565b61039761185a565b610397600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610915575060005460ff8083169116105b6109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109df611889565b6109e761190a565b6109f08c61177b565b6109f9896119a9565b610a038b8b611a0a565b610a0c88611b49565b610a357f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610a68610a6360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612bd8565b869055565b610a9c610a9660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612bd8565b85519055565b610ad3610aca60017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612bd8565b60208601519055565b610b0a610b0160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612bd8565b60408601519055565b610b41610b3860017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612bd8565b60608601519055565b610b78610b6f60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612bd8565b60808601519055565b610b80611c9f565b610b8986611d07565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c7a575060005460ff8083169116105b610d06576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a6564000000000000000000000000000000000000606482015260840161099d565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d3f611889565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610db160017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612bd8565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e4660017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612bd8565b81565b6000610e7d610e7960017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612bd8565b5490565b905090565b6000610e7d610e7960017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612bd8565b610eba61217b565b610ec482826121fc565b5050565b610ed061217b565b610ed9816122d4565b50565b610e4660017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612bd8565b6000610e7d7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f3961217b565b610ec48282611a0a565b600080610f6e7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610f9157919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fd49190612bef565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061102f906060015b604051602081830303815290604052805190602001205490565b14611066576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061108890606001611015565b905073ffffffffffffffffffffffffffffffffffffffff81161561111c578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111159190612c2c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7d9190612c2c565b6000610e7d610e7960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b606954600090610e7d9063ffffffff6a0100000000000000000000820481169116612c49565b600080611243610e82565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa15801561128d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112b19190612c2c565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611323573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113479190612c75565b806113e05750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190612c75565b91505090565b610e4660017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612bd8565b61141961217b565b6114236000612358565b565b61142d61217b565b610ec482826123cf565b6000610e7d610e7960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612bd8565b61146f61217b565b606a80547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff166801000000000000000060ff84160217905550565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114e8611591565b73ffffffffffffffffffffffffffffffffffffffff16815260200161150b61160f565b73ffffffffffffffffffffffffffffffffffffffff16815260200161152e610e49565b73ffffffffffffffffffffffffffffffffffffffff168152602001611551610e82565b73ffffffffffffffffffffffffffffffffffffffff168152602001611574611437565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610e7d610e7960017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612bd8565b6115c961217b565b610ed981611b49565b610e4660017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612bd8565b61160561217b565b610ec482826124a5565b6000610e7d610e7960017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612bd8565b61164761217b565b610ed9816119a9565b6000610e7d610e7960017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612bd8565b600061168a610f43565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111be573d6000803e3d6000fd5b610e4660017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b60008061170a610e82565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611757573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e09190612c2c565b61178361217b565b73ffffffffffffffffffffffffffffffffffffffff8116611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161099d565b610ed981612358565b610e4660017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612bd8565b610e4660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612bd8565b9055565b33611892610f43565b73ffffffffffffffffffffffffffffffffffffffff16141580156118d35750336118ba611680565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611423576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166119a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161099d565b611423612677565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516119fe9190612b25565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b3c9190612b25565b60405180910390a3505050565b611b51611212565b67ffffffffffffffff168167ffffffffffffffff161015611bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161099d565b631dcd650067ffffffffffffffff82161115611c46576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f2068696768604482015260640161099d565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119cd565b611ccd610e7960017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b60000361142357611423611d0260017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612bd8565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611db7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d617820626173650000000000000000000000606482015260840161099d565b6001816040015160ff1611611e4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e20310000000000000000000000000000000000606482015260840161099d565b6068546080820151825167ffffffffffffffff90921691611e6f9190612c97565b63ffffffff161115611edd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f7700604482015260640161099d565b6000816020015160ff1611611f74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f7420626520300000000000000000000000000000000000606482015260840161099d565b8051602082015163ffffffff82169160ff90911690611f94908290612cb6565b611f9e9190612d00565b63ffffffff1614612031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d6974000000000000000000606482015260840161099d565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161099d565b606a80547fffffffffffffffffffffff000000000000000000000000ffffffffffffffffff16690100000000000000000063ffffffff8516027fffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffff16176d010000000000000000000000000067ffffffffffffffff8416908102919091179091556040805184821b6bffffffff000000000000000016909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611b0b565b6122fd7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119cd565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff0000000000000000000000000000000000000000000000000000000000000081161561247f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e00000000000000000000000000000000000000000000000000000000000000606482015260840161099d565b606582905560668190556040805160208101849052908101829052600090606001611ad8565b60018263ffffffff16101561253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d20310000000000000000000000000000000000000000000000000000606482015260840161099d565b60018163ffffffff1610156125d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d2031000000000000000000000000000000000000000000000000000000606482015260840161099d565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161264091602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611b0b565b600054610100900460ff1661270e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e67000000000000000000000000000000000000000000606482015260840161099d565b61142333612358565b73ffffffffffffffffffffffffffffffffffffffff81168114610ed957600080fd5b803561274481612717565b919050565b803563ffffffff8116811461274457600080fd5b803567ffffffffffffffff8116811461274457600080fd5b60405160c0810167ffffffffffffffff811182821017156127bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461274457600080fd5b600060a082840312156127e857600080fd5b60405160a0810181811067ffffffffffffffff82111715612832577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561284381612717565b8152602083013561285381612717565b6020820152604083013561286681612717565b6040820152606083013561287981612717565b6060820152608083013561288c81612717565b6080919091015292915050565b60008060008060008060008060008060008b8d036102808112156128bc57600080fd5b8c356128c781612717565b9b506128d560208e01612749565b9a506128e360408e01612749565b995060608d013598506128f860808e0161275d565b975060a08d013561290881612717565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561293a57600080fd5b50612943612775565b61294f60c08e01612749565b815261295d60e08e016127c5565b602082015261296f6101008e016127c5565b60408201526129816101208e01612749565b60608201526129936101408e01612749565b60808201526101608d01356fffffffffffffffffffffffffffffffff811681146129bc57600080fd5b60a082015294506129d06101808d01612739565b93506129e08d6101a08e016127d6565b92506102408c013591506129f76102608d01612739565b90509295989b509295989b9093969950565b60008060408385031215612a1c57600080fd5b823591506020830135612a2e81612717565b809150509250929050565b60008060408385031215612a4c57600080fd5b612a5583612749565b9150612a636020840161275d565b90509250929050565b600060208284031215612a7e57600080fd5b8135612a8981612717565b9392505050565b60008060408385031215612aa357600080fd5b612aac83612749565b9150612a6360208401612749565b6000815180845260005b81811015612ae057602081850181015186830182015201612ac4565b81811115612af2576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612a896020830184612aba565b60008060408385031215612b4b57600080fd5b50508035926020909101359150565b600060208284031215612b6c57600080fd5b612a89826127c5565b600060208284031215612b8757600080fd5b612a898261275d565b600060208284031215612ba257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612bea57612bea612ba9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c2757612c27612ba9565b500290565b600060208284031215612c3e57600080fd5b8151612a8981612717565b600067ffffffffffffffff808316818516808303821115612c6c57612c6c612ba9565b01949350505050565b600060208284031215612c8757600080fd5b81518015158114612a8957600080fd5b600063ffffffff808316818516808303821115612c6c57612c6c612ba9565b600063ffffffff80841680612cf4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612d2357612d23612ba9565b0294935050505056fea164736f6c634300080f000a", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b6200185d1760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612d7b6200018560003960008181610496015281816108e10152610c460152612d7b6000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639b7d7f0a116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bfb14fb711610171578063c93210791161014b578063c9321079146106b1578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bfb14fb71461067a578063c0fd4b4114610696578063c4e8ddfa146106a957600080fd5b8063a7119869116101a2578063a711986914610657578063b40a817c1461065f578063bc49ce5f1461067257600080fd5b80639b7d7f0a146105d85780639faba4f8146105e0578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610597578063715018a61461059f5780638da5cb5b146105a7578063935f029e146105c557600080fd5b80634f16540b1461051957806354fd4d50146105405780635c975abb1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b80630c18c1621161030f57806318d13918116102e957806318d139181461043e57806319f5cea8146104515780631fd19ee11461045957806321d7fde51461046157600080fd5b80630c18c162146103fe578063155b6c6f1461040757806316d3bc7f1461041a57600080fd5b8063078f29cf11610340578063078f29cf146103aa5780630a49cb03146103d75780630ae14b1b146103df57600080fd5b80630104582914610367578063028f4e471461037c57806306c926571461038f575b600080fd5b61037a6103753660046128db565b6108df565b005b61037a61038a366004612a4b565b610c44565b610397610e25565b6040519081526020015b60405180910390f35b6103b2610e53565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a1565b6103b2610e8c565b631dcd65005b60405167ffffffffffffffff90911681526020016103a1565b61039760655481565b61037a610415366004612a7b565b610ebc565b606a546103e5906c01000000000000000000000000900467ffffffffffffffff1681565b61037a61044c366004612aae565b610ed2565b610397610ee6565b6103b2610f11565b61037a61046f366004612ad2565b610f3b565b606c546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff90911681526020016103a1565b6103b2610f4d565b6103b2611158565b6103976111ec565b6103e561121c565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a1565b6103977f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103a19190612b67565b610587611242565b60405190151581526020016103a1565b6103976113f0565b61037a61141b565b60335473ffffffffffffffffffffffffffffffffffffffff166103b2565b61037a6105d3366004612b7a565b61142f565b6103b2611441565b61037a6105ee366004612b9c565b611471565b6105fb611482565b6040516103a19190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6103b2611569565b61037a61066d366004612bb7565b611599565b6103976115aa565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106a4366004612ad2565b6115d5565b6103b26115e7565b606c546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a6106e4366004612bd2565b611617565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103a19190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610397606b5481565b6103b2611628565b6103b2611658565b6103976116ac565b61039760675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b6103b26116d7565b61037a6108a5366004612aae565b611753565b61039760665481565b6068546103e59067ffffffffffffffff1681565b610397611807565b610397611832565b610397600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e9611861565b6109f16118e2565b6109fa8c611753565b610a0389611981565b610a0d8b8b6119e2565b610a1688611b21565b610a3f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610a72610a6d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c1a565b869055565b610aa6610aa060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c1a565b85519055565b610add610ad460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c1a565b60208601519055565b610b14610b0b60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c1a565b60408601519055565b610b4b610b4260017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c1a565b60608601519055565b610b82610b7960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c1a565b60808601519055565b610b8a611c77565b610b9386611cdf565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c84575060005460ff8083169116105b610d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d49611861565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610dbb60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c1a565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e5060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c1a565b81565b6000610e87610e8360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c1a565b5490565b905090565b6000610e87610e8360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c1a565b610ec4612153565b610ece82826121d4565b5050565b610eda612153565b610ee3816122aa565b50565b610e5060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c1a565b6000610e877f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f43612153565b610ece82826119e2565b600080610f787fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610f9b57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fde9190612c31565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611039906060015b604051602081830303815290604052805190602001205490565b14611070576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906110929060600161101f565b905073ffffffffffffffffffffffffffffffffffffffff811615611126578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111f9190612c6e565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e879190612c6e565b6000610e87610e8360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b606954600090610e879063ffffffff6a0100000000000000000000820481169116612c8b565b60008061124d610e8c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611297573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bb9190612c6e565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa15801561132d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113519190612cb7565b806113ea5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612cb7565b91505090565b610e5060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c1a565b611423612153565b61142d600061232e565b565b611437612153565b610ece82826123a5565b6000610e87610e8360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c1a565b611479612153565b610ee38161247b565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114c0611569565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114e36115e7565b73ffffffffffffffffffffffffffffffffffffffff168152602001611506610e53565b73ffffffffffffffffffffffffffffffffffffffff168152602001611529610e8c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161154c611441565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610e87610e8360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c1a565b6115a1612153565b610ee381611b21565b610e5060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c1a565b6115dd612153565b610ece82826124e7565b6000610e87610e8360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c1a565b61161f612153565b610ee381611981565b6000610e87610e8360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c1a565b6000611662610f4d565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c8573d6000803e3d6000fd5b610e5060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b6000806116e2610e8c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612c6e565b61175b612153565b73ffffffffffffffffffffffffffffffffffffffff81166117fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610ee38161232e565b610e5060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c1a565b610e5060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c1a565b9055565b3361186a610f4d565b73ffffffffffffffffffffffffffffffffffffffff16141580156118ab575033611892611658565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561142d576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b61142d6126b9565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516119d69190612b67565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b149190612b67565b60405180910390a3505050565b611b2961121c565b67ffffffffffffffff168167ffffffffffffffff161015611ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119a5565b611ca5610e8360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b60000361142d5761142d611cda60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff1611611e26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff90921691611e479190612cd9565b63ffffffff161115611eb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff1611611f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff90911690611f6c908290612cf8565b611f769190612d42565b63ffffffff1614612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff16331461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611ae3565b6122d37f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff00000000000000000000000000000000000000000000000000000000000000811615612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611ab0565b606c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84169081029190911790915560408051602080820193909352815180820390930183528101905260066119a5565b60018263ffffffff16101561257e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff161015612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161268291602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611ae3565b600054610100900460ff16612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b61142d3361232e565b73ffffffffffffffffffffffffffffffffffffffff81168114610ee357600080fd5b803561278681612759565b919050565b803563ffffffff8116811461278657600080fd5b803567ffffffffffffffff8116811461278657600080fd5b60405160c0810167ffffffffffffffff81118282101715612801577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461278657600080fd5b600060a0828403121561282a57600080fd5b60405160a0810181811067ffffffffffffffff82111715612874577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561288581612759565b8152602083013561289581612759565b602082015260408301356128a881612759565b604082015260608301356128bb81612759565b606082015260808301356128ce81612759565b6080919091015292915050565b60008060008060008060008060008060008b8d036102808112156128fe57600080fd5b8c3561290981612759565b9b5061291760208e0161278b565b9a5061292560408e0161278b565b995060608d0135985061293a60808e0161279f565b975060a08d013561294a81612759565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561297c57600080fd5b506129856127b7565b61299160c08e0161278b565b815261299f60e08e01612807565b60208201526129b16101008e01612807565b60408201526129c36101208e0161278b565b60608201526129d56101408e0161278b565b60808201526101608d01356fffffffffffffffffffffffffffffffff811681146129fe57600080fd5b60a08201529450612a126101808d0161277b565b9350612a228d6101a08e01612818565b92506102408c01359150612a396102608d0161277b565b90509295989b509295989b9093969950565b60008060408385031215612a5e57600080fd5b823591506020830135612a7081612759565b809150509250929050565b60008060408385031215612a8e57600080fd5b612a978361278b565b9150612aa56020840161279f565b90509250929050565b600060208284031215612ac057600080fd5b8135612acb81612759565b9392505050565b60008060408385031215612ae557600080fd5b612aee8361278b565b9150612aa56020840161278b565b6000815180845260005b81811015612b2257602081850181015186830182015201612b06565b81811115612b34576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612acb6020830184612afc565b60008060408385031215612b8d57600080fd5b50508035926020909101359150565b600060208284031215612bae57600080fd5b612acb82612807565b600060208284031215612bc957600080fd5b612acb8261279f565b600060208284031215612be457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c2c57612c2c612beb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c6957612c69612beb565b500290565b600060208284031215612c8057600080fd5b8151612acb81612759565b600067ffffffffffffffff808316818516808303821115612cae57612cae612beb565b01949350505050565b600060208284031215612cc957600080fd5b81518015158114612acb57600080fd5b600063ffffffff808316818516808303821115612cae57612cae612beb565b600063ffffffff80841680612d36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612d6557612d65612beb565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. diff --git a/op-e2e/system/e2esys/setup.go b/op-e2e/system/e2esys/setup.go index 3b4588065b3e6..bd45299c4a982 100644 --- a/op-e2e/system/e2esys/setup.go +++ b/op-e2e/system/e2esys/setup.go @@ -115,7 +115,7 @@ func DefaultSystemConfig(t testing.TB, opts ...SystemConfigOpt) SystemConfig { secrets := secrets.DefaultSecrets deployConfig := config.DeployConfig(sco.AllocType) - require.Nil(t, deployConfig.L2GenesisJovianTimeOffset, "jovian not supported yet") + deployConfig.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix()) e2eutils.ApplyDeployConfigForks(deployConfig) require.NoError(t, deployConfig.Check(testlog.Logger(t, log.LevelInfo)), @@ -614,7 +614,6 @@ func (cfg SystemConfig) Start(t *testing.T, startOpts ...StartOption) (*System, } // sanity-check the deploy config - require.Nil(t, cfg.DeployConfig.L2GenesisJovianTimeOffset, "Jovian is not supported in op-e2e tests yet") if err := cfg.DeployConfig.Check(testlog.Logger(t, log.LevelInfo)); err != nil { return nil, err diff --git a/op-e2e/system/fees/minbasefeelog2_test.go b/op-e2e/system/fees/minbasefeelog2_test.go new file mode 100644 index 0000000000000..07e0ddbbf4488 --- /dev/null +++ b/op-e2e/system/fees/minbasefeelog2_test.go @@ -0,0 +1,126 @@ +package fees + +import ( + "context" + "math/big" + "testing" + "time" + + op_e2e "github.com/ethereum-optimism/optimism/op-e2e" + + legacybindings "github.com/ethereum-optimism/optimism/op-e2e/bindings" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" + "github.com/ethereum-optimism/optimism/op-e2e/system/e2esys" + "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" + "github.com/stretchr/testify/require" +) + +// TestMinBaseFeeLog2 checks that we can successfully change minBaseFeeLog2 parameter via SystemConfig +// with the Jovian upgrade and that it's properly encoded in block extra data. +func TestMinBaseFeeLog2(t *testing.T) { + op_e2e.InitParallel(t) + + ctx, ctxCancel := context.WithCancel(context.Background()) + defer ctxCancel() + + // Create our system configuration for L1/L2 and start it + cfg := e2esys.JovianSystemConfig(t, new(hexutil.Uint64)) + cfg.DeployConfig.L2GenesisBlockBaseFeePerGas = (*hexutil.Big)(big.NewInt(100_000_000)) + sys, err := cfg.Start(t) + require.NoError(t, err, "Error starting up system") + + // Obtain our sequencer, verifier, and transactor keypair. + l1Client := sys.NodeClient("l1") + l2Seq := sys.NodeClient("sequencer") + ethPrivKey := cfg.Secrets.Deployer + + _, err = l2Seq.HeaderByNumber(context.Background(), big.NewInt(0)) + require.NoError(t, err) + + // Bind to the SystemConfig contract + sysconfig, err := legacybindings.NewSystemConfig(cfg.L1Deployments.SystemConfigProxy, l1Client) + require.NoError(t, err) + + // Obtain our signer. + opts, err := bind.NewKeyedTransactorWithChainID(ethPrivKey, cfg.L1ChainIDBig()) + require.NoError(t, err) + + // Define our L1 transaction timeout duration. + txTimeoutDuration := 10 * time.Duration(cfg.DeployConfig.L1BlockTime) * time.Second + + var cancel context.CancelFunc + + // Confirm minBaseFeeLog2 is initialized to 0 + minBaseFeeLog2, err := sysconfig.MinBaseFeeLog2(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFeeLog2") + require.Equal(t, uint8(0), minBaseFeeLog2) + + // Set both EIP-1559 parameters and minBaseFeeLog2 in a single transaction sequence + // This matches how they would be used in production + expectedDenom := uint32(10) + expectedElasticity := uint32(2) + expectedMinBaseFeeLog2 := uint8(10) // This means minimum base fee = 2^10 = 1024 wei + + // Set EIP-1559 parameters first + opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) + tx, err := sysconfig.SetEIP1559Params(opts, expectedDenom, expectedElasticity) + cancel() + require.NoError(t, err, "SetEIP1559Params update tx") + + _, err = wait.ForReceiptOK(ctx, l1Client, tx.Hash()) + require.NoError(t, err, "Waiting for sysconfig set EIP1559Params update tx") + + // Then set MinBaseFeeLog2 + opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) + tx, err = sysconfig.SetMinBaseFeeLog2(opts, expectedMinBaseFeeLog2) + cancel() + require.NoError(t, err, "SetMinBaseFeeLog2 update tx") + + receipt, err := wait.ForReceiptOK(ctx, l1Client, tx.Hash()) + require.NoError(t, err, "Waiting for sysconfig set minBaseFeeLog2 update tx") + + minBaseFeeLog2, err = sysconfig.MinBaseFeeLog2(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFeeLog2") + require.Equal(t, expectedMinBaseFeeLog2, minBaseFeeLog2) + + _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) + require.NoError(t, err, "waiting for L2 block to include the sysconfig update") + + h, err := l2Seq.HeaderByNumber(context.Background(), nil) + require.NoError(t, err) + + // Debug: print the actual ExtraData + t.Logf("Actual ExtraData: %x", h.Extra) + t.Logf("Expected MinBaseFeeLog2: %d", expectedMinBaseFeeLog2) + + // Decode and check what we actually got + if len(h.Extra) == 10 { + actualDenom, actualElasticity, actualMinBaseFeeLog2 := eip1559.DecodeMinBaseFeeExtraData(h.Extra) + t.Logf("Decoded - Denom: %d, Elasticity: %d, MinBaseFeeLog2: %d", actualDenom, actualElasticity, actualMinBaseFeeLog2) + } + + // Confirm the extraData is being set as expected with Jovian encoding + expectedExtraData := eip1559.EncodeMinBaseFeeExtraData(uint64(expectedDenom), uint64(expectedElasticity), expectedMinBaseFeeLog2) + require.Equal(t, expectedExtraData, h.Extra, "Extra data should match Jovian encoding with minBaseFeeLog2") + + // Verify the minimum base fee is enforced + expectedMinBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(expectedMinBaseFeeLog2)), nil) + require.True(t, h.BaseFee.Cmp(expectedMinBaseFee) >= 0, + "Current base fee (%s) should be >= minimum base fee (%s)", + h.BaseFee.String(), expectedMinBaseFee.String()) + + // Wait for the next block to confirm the constraint is maintained + b, err := geth.WaitForBlock(big.NewInt(h.Number.Int64()+1), l2Seq) + require.NoError(t, err, "waiting for next L2 block") + + // Confirm the extraData is still being set as expected in the next block + require.Equal(t, expectedExtraData, b.Header().Extra, "Extra data should still match Jovian encoding with minBaseFeeLog2") + + // Verify the minimum base fee constraint is still enforced + require.True(t, b.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, + "Next block base fee (%s) should be >= minimum base fee (%s)", + b.Header().BaseFee.String(), expectedMinBaseFee.String()) +} diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index 20e66f7256576..62437f4a2e035 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -453,10 +453,10 @@ func TestPreparePayloadAttributes(t *testing.T) { eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) minBaseFeeLog2 := uint8(20) testSysCfg := eth.SystemConfig{ - BatcherAddr: common.Address{42}, - Overhead: [32]byte{}, - Scalar: [32]byte{}, - EIP1559Params: eip1559Params, + BatcherAddr: common.Address{42}, + Overhead: [32]byte{}, + Scalar: [32]byte{}, + EIP1559Params: eip1559Params, MinBaseFeeLog2: minBaseFeeLog2, } l1CfgFetcher.ExpectSystemConfigByL2Hash(l2Parent.Hash, testSysCfg, nil) diff --git a/op-node/rollup/derive/system_config.go b/op-node/rollup/derive/system_config.go index c3c7a52320730..338331b8f70d3 100644 --- a/op-node/rollup/derive/system_config.go +++ b/op-node/rollup/derive/system_config.go @@ -192,7 +192,8 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L if !solabi.EmptyReader(reader) { return NewCriticalError(errors.New("too many bytes")) } - destSysCfg.MinBaseFeeLog2 = minBaseFeeLog2Data[0] + // abi.encode(uint8) right-pads the value, so we need the last byte + destSysCfg.MinBaseFeeLog2 = minBaseFeeLog2Data[31] return nil default: return fmt.Errorf("unrecognized L1 sysCfg update type: %s", updateType) diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index 4bdadad84a34c..5610429caf055 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -205,7 +205,7 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { return log }, config: eth.SystemConfig{ - EIP1559Params: eth.Bytes8(eip1559Params), + EIP1559Params: eth.Bytes8(eip1559Params), }, err: false, }, @@ -243,7 +243,7 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { hook: func(t *testing.T, log *types.Log) *types.Log { // Set minBaseFeeLog2 to 22 (uint8 value) at the first byte minBaseFeeLog2Bytes := make([]byte, 32) - minBaseFeeLog2Bytes[0] = 22 // uint8 value at the first byte (matches minBaseFeeLog2Data[0]) + minBaseFeeLog2Bytes[31] = 22 // uint8 value at the last byte minBaseFeeLog2Value := new(big.Int).SetBytes(minBaseFeeLog2Bytes) numberData, err := oneUint256.Pack(minBaseFeeLog2Value) require.NoError(t, err) diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index 4bfd2fe940ac8..483c5f7f4ccf5 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -480,8 +480,8 @@ func (c *Config) IsInterop(timestamp uint64) bool { return c.IsForkActive(Interop, timestamp) } -// IsConfigurableMinBaseFeeEnabled returns true if the configurable minBaseFee feature is enabled. -func (c *Config) IsConfigurableMinBaseFeeEnabled(timestamp uint64) bool { +// IsConfigurableMinBaseFee returns true if the configurable minBaseFee feature is enabled. +func (c *Config) IsConfigurableMinBaseFee(timestamp uint64) bool { return c.IsJovian(timestamp) } diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index be76578ef8b8a..8bf8139f67904 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -61,7 +61,7 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c d = provider.Config().BaseFeeChangeDenominator(header.Time) e = provider.Config().ElasticityMultiplier() } - if provider.Config().IsConfigurableMinBaseFeeEnabled(header.Time) { + if provider.Config().IsConfigurableMinBaseFee(header.Time) { header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFeeLog2) } else { header.Extra = eip1559.EncodeHoloceneExtraData(d, e) diff --git a/op-program/client/l2/engineapi/l2_engine_api_test.go b/op-program/client/l2/engineapi/l2_engine_api_test.go index c717917f4f339..b0020463cbc51 100644 --- a/op-program/client/l2/engineapi/l2_engine_api_test.go +++ b/op-program/client/l2/engineapi/l2_engine_api_test.go @@ -199,15 +199,15 @@ func createGenesisWithForkTimeOffset(forkTimeOffset uint64) *core.Genesis { deployConfig.L2GenesisGraniteTimeOffset = &ts deployConfig.L2GenesisHoloceneTimeOffset = &ts +<<<<<<< HEAD // Set fork time for latest forks offset := hexutil.Uint64(forkTimeOffset) deployConfig.L2GenesisIsthmusTimeOffset = &offset - deployConfig.L2GenesisInteropTimeOffset = &offset deployConfig.L2GenesisJovianTimeOffset = &offset - - l1Genesis, err := genesis.NewL1Genesis(deployConfig) - if err != nil { - panic(err) +======= + // Set isthmus time and subsequent forks + isthmusTimeOffset := hexutil.Uint64(isthmusTime) + deployConfig.L2GenesisIsthmusTimeOffset = &isthmusTimeOffset } l2Genesis, err := genesis.NewL2Genesis(deployConfig, eth.BlockRefFromHeader(l1Genesis.ToBlock().Header())) if err != nil { diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 15be3cc0b242e..6b8e1e52464ce 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -34,7 +34,8 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS + OPERATOR_FEE_PARAMS, + MIN_BASE_FEE_LOG2 } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -440,6 +441,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @notice Internal function for updating the min base fee log2. function _setMinBaseFeeLog2(uint8 _minBaseFeeLog2) internal { minBaseFeeLog2 = _minBaseFeeLog2; + + bytes memory data = abi.encode(_minBaseFeeLog2); + emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE_LOG2, data); } /// @notice Updates the operator fee parameters. Can only be called by the owner. From 0b573ddf4546fa937d695f357f60975213d8c8a9 Mon Sep 17 00:00:00 2001 From: William Law Date: Fri, 8 Aug 2025 10:27:26 -0400 Subject: [PATCH 33/56] use feature flags --- op-e2e/opgeth/op_geth.go | 2 +- op-program/client/l2/engineapi/l2_engine_api.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/op-e2e/opgeth/op_geth.go b/op-e2e/opgeth/op_geth.go index 0162b248ca198..f3ae6a6a9cef0 100644 --- a/op-e2e/opgeth/op_geth.go +++ b/op-e2e/opgeth/op_geth.go @@ -239,7 +239,7 @@ func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.Payloa Withdrawals: withdrawals, ParentBeaconBlockRoot: parentBeaconBlockRoot, } - if d.L2ChainConfig.IsJovian(uint64(timestamp)) { + if d.L2ChainConfig.IsConfigurableMinBaseFee(uint64(timestamp)) { attrs.MinBaseFeeLog2 = d.SystemConfig.MinBaseFeeLog2 } if d.L2ChainConfig.IsHolocene(uint64(timestamp)) { diff --git a/op-program/client/l2/engineapi/l2_engine_api.go b/op-program/client/l2/engineapi/l2_engine_api.go index ea5ef1df9c0b1..da4374ec3d45e 100644 --- a/op-program/client/l2/engineapi/l2_engine_api.go +++ b/op-program/client/l2/engineapi/l2_engine_api.go @@ -410,7 +410,7 @@ func (ea *L2EngineAPI) NewPayloadV4(ctx context.Context, params *eth.ExecutionPa return ð.PayloadStatusV1{Status: eth.ExecutionInvalid}, engine.InvalidParams.With(errors.New("nil withdrawalsRoot post-isthmus")) } - if ea.config().IsJovian(uint64(params.Timestamp)) { + if ea.config().IsConfigurableMinBaseFee(uint64(params.Timestamp)) { if err := eip1559.ValidateMinBaseFeeExtraData(params.ExtraData); err != nil { return ð.PayloadStatusV1{Status: eth.ExecutionInvalid}, engine.UnsupportedFork.With(errors.New("invalid jovian extraData post-jovian")) } From 6a647cbe9dec970d3238fb31b95332b0e2c6236c Mon Sep 17 00:00:00 2001 From: William Law Date: Mon, 11 Aug 2025 11:32:54 -0400 Subject: [PATCH 34/56] feedback on e2e and acceptance tests --- .../tests/jovian/min_base_fee_test.go | 239 +++++++++++++----- .../actions/proofs/jovian_activation_test.go | 41 +-- op-e2e/e2eutils/setup.go | 14 - .../client/l2/engineapi/l2_engine_api_test.go | 12 + 4 files changed, 184 insertions(+), 122 deletions(-) diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 10d5ba37d74d8..338e9fb87ec03 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -1,6 +1,7 @@ package jovian import ( + "context" "math/big" "testing" "time" @@ -11,110 +12,212 @@ import ( "github.com/ethereum-optimism/optimism/devnet-sdk/types" "github.com/ethereum-optimism/optimism/op-node/rollup" gethTypes "github.com/ethereum/go-ethereum/core/types" + "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/params" "github.com/stretchr/testify/require" ) // TestConfigurableMinBaseFee verifies that the configurable minimum base fee feature works correctly func TestConfigurableMinBaseFee(t *testing.T) { + t.Run("JovianOff", func(t *testing.T) { + testConfigurableMinBaseFeeJovianOff(t) + }) + + t.Run("JovianOn", func(t *testing.T) { + testConfigurableMinBaseFeeJovianOn(t) + }) +} + +// testConfigurableMinBaseFeeJovianOff tests that when Jovian is off, base fees can drop normally +func testConfigurableMinBaseFeeJovianOff(t *testing.T) { + runMinBaseFeeTest(t, false, configurableMinBaseFeeJovianOffTestScenario) +} + +// testConfigurableMinBaseFeeJovianOn tests the minBaseFee feature when Jovian is enabled +func testConfigurableMinBaseFeeJovianOn(t *testing.T) { + runMinBaseFeeTest(t, true, configurableMinBaseFeeTestScenario) +} + +// runMinBaseFeeTest runs a min base fee test with common setup +func runMinBaseFeeTest(t *testing.T, jovianEnabled bool, scenario func(validators.WalletGetter, uint64) systest.SystemTestFunc) { // Define which L2 chain we'll test chainIdx := uint64(0) // Get validators and getters for accessing the system and wallets walletGetter, walletValidator := validators.AcquireL2WalletWithFunds(chainIdx, types.NewBalance(big.NewInt(params.Ether))) - // Run jovian test - require Jovian fork to be active - _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) - - systest.SystemTest(t, - configurableMinBaseFeeTestScenario(walletGetter, chainIdx), - walletValidator, - forkValidator, - ) + // Configure fork validator based on Jovian requirement + if jovianEnabled { + _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) + systest.SystemTest(t, + scenario(walletGetter, chainIdx), + walletValidator, + forkValidator, + ) + } else { + _, forkValidator := validators.AcquireL2WithoutFork(chainIdx, rollup.Jovian) + systest.SystemTest(t, + scenario(walletGetter, chainIdx), + walletValidator, + forkValidator, + ) + } } -// configurableMinBaseFeeTestScenario creates a test scenario for verifying configurable minimum base fee -func configurableMinBaseFeeTestScenario( +// configurableMinBaseFeeJovianOffTestScenario creates a test scenario for when Jovian is off +func configurableMinBaseFeeJovianOffTestScenario( walletGetter validators.WalletGetter, chainIdx uint64, ) systest.SystemTestFunc { return func(t systest.T, sys system.System) { ctx := t.Context() + l2Client, chainConfig := getL2ClientAndConfig(t, sys, chainIdx) - // Get the L2 client - l2Chain := sys.L2s()[chainIdx] - l2Client, err := l2Chain.Nodes()[0].GethClient() + // Wait for at least block 1 to avoid genesis block edge cases + initialHeader, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) require.NoError(t, err) - // Get the genesis config to ensure Jovian is active - chainConfig, err := l2Chain.Config() - require.NoError(t, err) + // Verify that we're NOT on Jovian fork + if chainConfig.JovianTime != nil { + require.False(t, chainConfig.IsJovian(initialHeader.Time), "Chain must NOT be running on Jovian fork for this test") + } + + // Verify no Jovian extra data encoding (should not be 10 bytes) + require.NotEqual(t, 10, len(initialHeader.Extra), "Should not have Jovian extra data encoding when Jovian is off") + + // Collect headers from multiple blocks + headers := collectBlockHeaders(t, ctx, l2Client, initialHeader, 5) + + // With low gas usage and no minimum enforced, base fees should decrease + foundDecrease := checkForBaseFeeDecrease(t, headers) + require.True(t, foundDecrease, "Expected base fee to decrease when Jovian is off and no minimum is enforced") + + // Verify no Jovian extra data encoding in any block + for _, h := range headers { + require.NotEqual(t, 10, len(h.Extra), "Should not have Jovian extra data encoding when Jovian is off") + } + + t.Logf("Successfully verified that base fees can decrease when Jovian is off:") + t.Logf(" - Initial base fee: %s", headers[0].BaseFee.String()) + t.Logf(" - Final base fee: %s", headers[len(headers)-1].BaseFee.String()) + t.Logf(" - Found decreasing base fee trend") + } +} + +// configurableMinBaseFeeTestScenario creates a test scenario for verifying configurable minimum base fee +func configurableMinBaseFeeTestScenario( + walletGetter validators.WalletGetter, + chainIdx uint64, +) systest.SystemTestFunc { + return func(t systest.T, sys system.System) { + ctx := t.Context() + l2Client, chainConfig := getL2ClientAndConfig(t, sys, chainIdx) require.NotNil(t, chainConfig.JovianTime, "Jovian fork must be configured") // Wait for at least block 1 to avoid genesis block edge cases - header, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) + initialHeader, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) require.NoError(t, err) // Verify that we're on Jovian fork - require.True(t, chainConfig.IsJovian(header.Time), "Chain must be running on Jovian fork for this test") - - // For Jovian, the minimum base fee is encoded in the extra data (last byte) - // Extract minBaseFeeLog2 from block extra data - require.Len(t, header.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - minBaseFeeLog2 := uint8(header.Extra[9]) - - // Convert log2 value to actual minimum base fee (2^minBaseFeeLog2) - minBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(minBaseFeeLog2)), nil) - require.Greater(t, minBaseFee.Uint64(), uint64(0), "Minimum base fee should be greater than 0") - - // Verify the minimum base fee is properly enforced - // The base fee should never go below the minimum - currentBaseFee := header.BaseFee - require.True(t, currentBaseFee.Cmp(minBaseFee) >= 0, - "Current base fee (%s) should be >= minimum base fee (%s)", - currentBaseFee.String(), minBaseFee.String()) - - // Wait for a few more blocks and verify base fee constraint is maintained - for i := 0; i < 5; i++ { - // Wait for next block - nextBlockNum := new(big.Int).Add(header.Number, big.NewInt(1)) - - // Poll for the next block (simple polling) - var nextHeader *gethTypes.Header - for attempts := 0; attempts < 20; attempts++ { // Wait up to 20 seconds - nextHeader, err = l2Client.HeaderByNumber(ctx, nextBlockNum) - if err == nil { + require.True(t, chainConfig.IsJovian(initialHeader.Time), "Chain must be running on Jovian fork for this test") + + // Verify initial state: minBaseFeeLog2 default value is zero + require.Len(t, initialHeader.Extra, 10, "Jovian blocks should have 10 bytes of extra data") + initialMinBaseFeeLog2 := uint8(initialHeader.Extra[9]) + require.Equal(t, uint8(0), initialMinBaseFeeLog2, "MinBaseFee should initially be zero") + + // Wait for more blocks to see if minBaseFeeLog2 gets configured to a non-zero value + // In a real deployment, this would happen via SystemConfig updates + headers := collectBlockHeaders(t, ctx, l2Client, initialHeader, 10) + + // Find the first block where minBaseFeeLog2 is set to non-zero + var nonZeroHeader *gethTypes.Header + var minBaseFeeLog2 uint8 + for _, h := range headers { + if chainConfig.IsConfigurableMinBaseFee(h.Time) { + log2Value := uint8(h.Extra[9]) + if log2Value > 0 { + nonZeroHeader = h + minBaseFeeLog2 = log2Value + t.Logf("Found non-zero minBaseFeeLog2: %d at block %d", log2Value, h.Number.Uint64()) break } - // Wait 1 second before trying again - select { - case <-ctx.Done(): - require.NoError(t, ctx.Err()) - case <-time.After(time.Second): - } } - require.NoError(t, err, "Should be able to get next block header") - - // Verify base fee constraint - require.True(t, nextHeader.BaseFee.Cmp(minBaseFee) >= 0, - "Block %d base fee (%s) should be >= minimum base fee (%s)", - nextHeader.Number.Uint64(), nextHeader.BaseFee.String(), minBaseFee.String()) - - header = nextHeader } - // Test that the minBaseFee value is encoded in the block extra data - // Jovian blocks should have 10 bytes of extra data (9 from Holocene + 1 for minBaseFee) - require.Len(t, header.Extra, 10, "Jovian blocks should have 10 bytes of extra data") + // Convert log2 value to actual minimum base fee (2^minBaseFeeLog2) + minBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(minBaseFeeLog2)), nil) - // The last byte should encode the minBaseFee parameter - minBaseFeeExtraData := header.Extra[9] - require.NotEqual(t, byte(0), minBaseFeeExtraData, "MinBaseFee extra data should be non-zero") + // Verify the minimum base fee constraint is enforced from this point forward + remainingHeaders := collectBlockHeaders(t, ctx, l2Client, nonZeroHeader, 5) + for _, h := range remainingHeaders { + require.True(t, h.BaseFee.Cmp(minBaseFee) >= 0, + "Block %d base fee (%s) should be >= minimum base fee (%s)", + h.Number.Uint64(), h.BaseFee.String(), minBaseFee.String()) + } + finalHeader := remainingHeaders[len(remainingHeaders)-1] t.Logf("Successfully verified configurable minimum base fee feature:") + t.Logf(" - Initial minBaseFeeLog2: %d", initialMinBaseFeeLog2) + t.Logf(" - Configured minBaseFeeLog2: %d", minBaseFeeLog2) t.Logf(" - Minimum base fee: %s", minBaseFee.String()) - t.Logf(" - Current base fee: %s", header.BaseFee.String()) - t.Logf(" - Extra data length: %d bytes", len(header.Extra)) - t.Logf(" - MinBaseFee extra data: 0x%02x", minBaseFeeExtraData) + t.Logf(" - Final base fee: %s", finalHeader.BaseFee.String()) + } +} + +// Helper functions + +// getL2ClientAndConfig returns the L2 client and chain config for the specified chain +func getL2ClientAndConfig(t systest.T, sys system.System, chainIdx uint64) (*ethclient.Client, *params.ChainConfig) { + l2Chain := sys.L2s()[chainIdx] + l2Client, err := l2Chain.Nodes()[0].GethClient() + require.NoError(t, err) + + chainConfig, err := l2Chain.Config() + require.NoError(t, err) + + return l2Client, chainConfig +} + +// collectBlockHeaders collects headers from multiple consecutive blocks +func collectBlockHeaders(t systest.T, ctx context.Context, l2Client *ethclient.Client, initialHeader *gethTypes.Header, numBlocks int) []*gethTypes.Header { + var headers []*gethTypes.Header + headers = append(headers, initialHeader) + + for i := 0; i < numBlocks; i++ { + nextBlockNum := new(big.Int).Add(headers[len(headers)-1].Number, big.NewInt(1)) + + // Poll for the next block (simple polling) + var nextHeader *gethTypes.Header + var err error + for attempts := 0; attempts < 20; attempts++ { // Wait up to 20 seconds + nextHeader, err = l2Client.HeaderByNumber(ctx, nextBlockNum) + if err == nil { + break + } + // Wait 1 second before trying again + select { + case <-ctx.Done(): + require.NoError(t, ctx.Err()) + case <-time.After(time.Second): + } + } + require.NoError(t, err, "Should be able to get next block header") + headers = append(headers, nextHeader) + } + + return headers +} + +// checkForBaseFeeDecrease checks if any base fee decreased between consecutive blocks +func checkForBaseFeeDecrease(t systest.T, headers []*gethTypes.Header) bool { + for i := 1; i < len(headers); i++ { + if headers[i].BaseFee.Cmp(headers[i-1].BaseFee) < 0 { + t.Logf("Base fee decreased from %s to %s between blocks %d and %d", + headers[i-1].BaseFee.String(), headers[i].BaseFee.String(), + headers[i-1].Number.Uint64(), headers[i].Number.Uint64()) + return true + } } + return false } diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go index b9befa52af172..36bdefc45f0f2 100644 --- a/op-e2e/actions/proofs/jovian_activation_test.go +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -53,46 +53,7 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) require.Len(t, b.Extra(), 10, "extra data should be 10 bytes after Jovian activation (adds minBaseFee)") - // Build up a local list of frames - orderedFrames := make([][]byte, 0, 1) - // Submit the first two blocks, this will be enough to trigger Jovian _derivation_ - // which is activated by the L1 inclusion block timestamp - // block 1 will be 12 seconds after genesis, and 2 seconds before Jovian activation - // block 2 will be 24 seconds after genesis, and 10 seconds after Jovian activation - blocksToSubmit := []uint{1, 2} - // Buffer the blocks in the batcher and populate orderedFrames list - env.Batcher.ActCreateChannel(t, false) - for i, blockNum := range blocksToSubmit { - env.Batcher.ActAddBlockByNumber(t, int64(blockNum), actionsHelpers.BlockLogger(t)) - if i == len(blocksToSubmit)-1 { - env.Batcher.ActL2ChannelClose(t) - } - frame := env.Batcher.ReadNextOutputFrame(t) - require.NotEmpty(t, frame, "frame %d", i) - orderedFrames = append(orderedFrames, frame) - } - - includeBatchTx := func() { - // Include the last transaction submitted by the batcher. - env.Miner.ActL1StartBlock(12)(t) - env.Miner.ActL1IncludeTxByHash(env.Batcher.LastSubmitted.Hash())(t) - env.Miner.ActL1EndBlock(t) - } - - // Submit first frame - env.Batcher.ActL2BatchSubmitRaw(t, orderedFrames[0]) - includeBatchTx() // L1 block should have a timestamp of 12s after genesis - - // Jovian should activate 14s after genesis, so that the previous l1 block - // was before JovianTime and the next l1 block is after it - - // Submit final frame - env.Batcher.ActL2BatchSubmitRaw(t, orderedFrames[1]) - includeBatchTx() // block should have a timestamp of 24s after genesis - - // Instruct the sequencer to derive the L2 chain from the data on L1 that the batcher just posted. - env.Sequencer.ActL1HeadSignal(t) - env.Sequencer.ActL2PipelineFull(t) + env.BatchMineAndSync(t) l2SafeHead := env.Sequencer.L2Safe() t.Logf("Safe head block number: %d, timestamp: %d", l2SafeHead.Number, l2SafeHead.Time) diff --git a/op-e2e/e2eutils/setup.go b/op-e2e/e2eutils/setup.go index 7b0aac3c89fd2..bfd1d123b4841 100644 --- a/op-e2e/e2eutils/setup.go +++ b/op-e2e/e2eutils/setup.go @@ -235,24 +235,10 @@ func Setup(t require.TestingT, deployParams *DeployParams, alloc *AllocParams) * require.Equal(t, deployParams.Secrets.Addresses().SequencerP2P, deployParams.DeployConfig.P2PSequencerAddress) require.Equal(t, deployParams.Secrets.Addresses().Proposer, deployParams.DeployConfig.L2OutputOracleProposer) - // Create a dependency set when interop or jovian fork is scheduled - var dependencySet depset.DependencySet - isInteropScheduled := rollupCfg.InteropTime != nil - isJovianScheduled := rollupCfg.JovianTime != nil - if isInteropScheduled || isJovianScheduled { - depSetConfig := map[eth.ChainID]*depset.StaticConfigDependency{ - eth.ChainIDFromBig(rollupCfg.L2ChainID): {}, - } - var err error - dependencySet, err = depset.NewStaticConfigDependencySet(depSetConfig) - require.NoError(t, err) - } - return &SetupData{ L1Cfg: l1Genesis, L2Cfg: l2Genesis, RollupCfg: rollupCfg, - DependencySet: dependencySet, ChainSpec: rollup.NewChainSpec(rollupCfg), DeploymentsL1: l1Deployments, } diff --git a/op-program/client/l2/engineapi/l2_engine_api_test.go b/op-program/client/l2/engineapi/l2_engine_api_test.go index b0020463cbc51..ab0f4a53b6e93 100644 --- a/op-program/client/l2/engineapi/l2_engine_api_test.go +++ b/op-program/client/l2/engineapi/l2_engine_api_test.go @@ -199,6 +199,7 @@ func createGenesisWithForkTimeOffset(forkTimeOffset uint64) *core.Genesis { deployConfig.L2GenesisGraniteTimeOffset = &ts deployConfig.L2GenesisHoloceneTimeOffset = &ts +<<<<<<< HEAD <<<<<<< HEAD // Set fork time for latest forks offset := hexutil.Uint64(forkTimeOffset) @@ -208,6 +209,17 @@ func createGenesisWithForkTimeOffset(forkTimeOffset uint64) *core.Genesis { // Set isthmus time and subsequent forks isthmusTimeOffset := hexutil.Uint64(isthmusTime) deployConfig.L2GenesisIsthmusTimeOffset = &isthmusTimeOffset +======= + // Set fork time for latest forks + forkTimeOffset := hexutil.Uint64(forkTime) + deployConfig.L2GenesisIsthmusTimeOffset = &forkTimeOffset + deployConfig.L2GenesisInteropTimeOffset = &forkTimeOffset + deployConfig.L2GenesisJovianTimeOffset = &forkTimeOffset + + l1Genesis, err := genesis.NewL1Genesis(deployConfig) + if err != nil { + panic(err) +>>>>>>> 7bbf76e6f6 (feedback on e2e and acceptance tests) } l2Genesis, err := genesis.NewL2Genesis(deployConfig, eth.BlockRefFromHeader(l1Genesis.ToBlock().Header())) if err != nil { From 1ad26f1937fc191f3bf29c0870cf6ce7956c6be7 Mon Sep 17 00:00:00 2001 From: William Law Date: Tue, 12 Aug 2025 15:50:31 -0400 Subject: [PATCH 35/56] kurtosis fix test --- kurtosis-devnet/jovian.yaml | 2 +- kurtosis-devnet/justfile | 3 + kurtosis-devnet/simple.yaml | 4 +- .../tests/jovian/min_base_fee_test.go | 175 +++++++++++------- 4 files changed, 118 insertions(+), 66 deletions(-) diff --git a/kurtosis-devnet/jovian.yaml b/kurtosis-devnet/jovian.yaml index 0adc5ef23c702..b73e3fd860dfb 100644 --- a/kurtosis-devnet/jovian.yaml +++ b/kurtosis-devnet/jovian.yaml @@ -55,7 +55,7 @@ optimism_package: granite_time_offset: 0 holocene_time_offset: 0 isthmus_time_offset: 0 - jovian_time_offset: 0 + jovian_time_offset: 60 fund_dev_accounts: true batcher_params: image: {{ localDockerImage "op-batcher" }} diff --git a/kurtosis-devnet/justfile b/kurtosis-devnet/justfile index c2ff0f3bd2e4f..cd403f9ba294a 100644 --- a/kurtosis-devnet/justfile +++ b/kurtosis-devnet/justfile @@ -99,6 +99,9 @@ pectra-devnet: (devnet "pectra.yaml") # Isthmus devnet isthmus-devnet: (devnet "isthmus.yaml") +# Jovian devnet +jovian-devnet: (devnet "jovian.yaml") + # Flashblocks devnet flash-devnet: (devnet "flash.yaml") diff --git a/kurtosis-devnet/simple.yaml b/kurtosis-devnet/simple.yaml index bc88d0eac52d4..96aef9c35742e 100644 --- a/kurtosis-devnet/simple.yaml +++ b/kurtosis-devnet/simple.yaml @@ -8,7 +8,7 @@ optimism_package: node0: el: type: op-geth - image: "" + image: "op-geth:local" log_level: "" extra_env_vars: {} extra_labels: {} @@ -43,6 +43,8 @@ optimism_package: fjord_time_offset: 0 granite_time_offset: 0 holocene_time_offset: 0 + isthmus_time_offset: 0 + jovian_time_offset: 0 fund_dev_accounts: true batcher_params: image: {{ localDockerImage "op-batcher" }} diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 338e9fb87ec03..1fe55dffc2da2 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -2,6 +2,7 @@ package jovian import ( "context" + "crypto/ecdsa" "math/big" "testing" "time" @@ -10,7 +11,9 @@ import ( "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" "github.com/ethereum-optimism/optimism/devnet-sdk/testing/testlib/validators" "github.com/ethereum-optimism/optimism/devnet-sdk/types" + "github.com/ethereum-optimism/optimism/op-e2e/bindings" "github.com/ethereum-optimism/optimism/op-node/rollup" + "github.com/ethereum/go-ethereum/accounts/abi/bind" gethTypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/params" @@ -19,53 +22,35 @@ import ( // TestConfigurableMinBaseFee verifies that the configurable minimum base fee feature works correctly func TestConfigurableMinBaseFee(t *testing.T) { - t.Run("JovianOff", func(t *testing.T) { - testConfigurableMinBaseFeeJovianOff(t) + t.Run("MinBaseFeeOff", func(t *testing.T) { + // when minBaseFee is 0, base fees can drop normally + runMinBaseFeeTest(t, configurableMinBaseFeeOffTestScenario) }) - t.Run("JovianOn", func(t *testing.T) { - testConfigurableMinBaseFeeJovianOn(t) + t.Run("MinBaseFeeOn", func(t *testing.T) { + // when it's enabled with a non-zero value + runMinBaseFeeTest(t, configurableMinBaseFeeOnTestScenario) }) } -// testConfigurableMinBaseFeeJovianOff tests that when Jovian is off, base fees can drop normally -func testConfigurableMinBaseFeeJovianOff(t *testing.T) { - runMinBaseFeeTest(t, false, configurableMinBaseFeeJovianOffTestScenario) -} - -// testConfigurableMinBaseFeeJovianOn tests the minBaseFee feature when Jovian is enabled -func testConfigurableMinBaseFeeJovianOn(t *testing.T) { - runMinBaseFeeTest(t, true, configurableMinBaseFeeTestScenario) -} - // runMinBaseFeeTest runs a min base fee test with common setup -func runMinBaseFeeTest(t *testing.T, jovianEnabled bool, scenario func(validators.WalletGetter, uint64) systest.SystemTestFunc) { +func runMinBaseFeeTest(t *testing.T, scenario func(validators.WalletGetter, uint64) systest.SystemTestFunc) { // Define which L2 chain we'll test chainIdx := uint64(0) // Get validators and getters for accessing the system and wallets walletGetter, walletValidator := validators.AcquireL2WalletWithFunds(chainIdx, types.NewBalance(big.NewInt(params.Ether))) - // Configure fork validator based on Jovian requirement - if jovianEnabled { - _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) - systest.SystemTest(t, - scenario(walletGetter, chainIdx), - walletValidator, - forkValidator, - ) - } else { - _, forkValidator := validators.AcquireL2WithoutFork(chainIdx, rollup.Jovian) - systest.SystemTest(t, - scenario(walletGetter, chainIdx), - walletValidator, - forkValidator, - ) - } + _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) + systest.SystemTest(t, + scenario(walletGetter, chainIdx), + walletValidator, + forkValidator, + ) } -// configurableMinBaseFeeJovianOffTestScenario creates a test scenario for when Jovian is off -func configurableMinBaseFeeJovianOffTestScenario( +// configurableMinBaseFeeOffTestScenario creates a test scenario for when minBaseFee is 0 (disabled) +func configurableMinBaseFeeOffTestScenario( walletGetter validators.WalletGetter, chainIdx uint64, ) systest.SystemTestFunc { @@ -77,35 +62,43 @@ func configurableMinBaseFeeJovianOffTestScenario( initialHeader, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) require.NoError(t, err) - // Verify that we're NOT on Jovian fork - if chainConfig.JovianTime != nil { - require.False(t, chainConfig.IsJovian(initialHeader.Time), "Chain must NOT be running on Jovian fork for this test") - } + // Verify that we're on Jovian fork + require.True(t, chainConfig.IsJovian(initialHeader.Time), "Chain must be running on Jovian fork for this test") - // Verify no Jovian extra data encoding (should not be 10 bytes) - require.NotEqual(t, 10, len(initialHeader.Extra), "Should not have Jovian extra data encoding when Jovian is off") + // Verify Jovian extra data encoding (should be 10 bytes) + require.Len(t, initialHeader.Extra, 10, "Jovian blocks should have 10 bytes of extra data") + + // Ensure minBaseFeeLog2 is 0 (disabled) + initialMinBaseFeeLog2 := uint8(initialHeader.Extra[9]) + if initialMinBaseFeeLog2 != 0 { + // Set it to 0 to test the "off" state + setMinBaseFeeLog2(t, ctx, sys, chainIdx, 0) + time.Sleep(3 * time.Second) + } // Collect headers from multiple blocks headers := collectBlockHeaders(t, ctx, l2Client, initialHeader, 5) - // With low gas usage and no minimum enforced, base fees should decrease + // With minBaseFee disabled (0), base fees should be able to decrease foundDecrease := checkForBaseFeeDecrease(t, headers) - require.True(t, foundDecrease, "Expected base fee to decrease when Jovian is off and no minimum is enforced") + require.True(t, foundDecrease, "Expected base fee to decrease when minBaseFee is disabled") - // Verify no Jovian extra data encoding in any block + // Verify minBaseFeeLog2 remains 0 in all blocks for _, h := range headers { - require.NotEqual(t, 10, len(h.Extra), "Should not have Jovian extra data encoding when Jovian is off") + require.Len(t, h.Extra, 10, "Jovian blocks should have 10 bytes of extra data") + minBaseFeeLog2 := uint8(h.Extra[9]) + require.Equal(t, uint8(0), minBaseFeeLog2, "MinBaseFeeLog2 should be 0 when disabled") } - t.Logf("Successfully verified that base fees can decrease when Jovian is off:") + t.Logf("Successfully verified that base fees can decrease when minBaseFee is disabled:") t.Logf(" - Initial base fee: %s", headers[0].BaseFee.String()) t.Logf(" - Final base fee: %s", headers[len(headers)-1].BaseFee.String()) t.Logf(" - Found decreasing base fee trend") } } -// configurableMinBaseFeeTestScenario creates a test scenario for verifying configurable minimum base fee -func configurableMinBaseFeeTestScenario( +// configurableMinBaseFeeOnTestScenario creates a test scenario for verifying configurable minimum base fee when enabled +func configurableMinBaseFeeOnTestScenario( walletGetter validators.WalletGetter, chainIdx uint64, ) systest.SystemTestFunc { @@ -126,30 +119,22 @@ func configurableMinBaseFeeTestScenario( initialMinBaseFeeLog2 := uint8(initialHeader.Extra[9]) require.Equal(t, uint8(0), initialMinBaseFeeLog2, "MinBaseFee should initially be zero") - // Wait for more blocks to see if minBaseFeeLog2 gets configured to a non-zero value - // In a real deployment, this would happen via SystemConfig updates - headers := collectBlockHeaders(t, ctx, l2Client, initialHeader, 10) + // Set minBaseFeeLog2 via SystemConfig contract + minBaseFeeLog2 := uint8(20) // 2^20 = 1048576 wei minimum base fee + setMinBaseFeeLog2(t, ctx, sys, chainIdx, minBaseFeeLog2) - // Find the first block where minBaseFeeLog2 is set to non-zero - var nonZeroHeader *gethTypes.Header - var minBaseFeeLog2 uint8 - for _, h := range headers { - if chainConfig.IsConfigurableMinBaseFee(h.Time) { - log2Value := uint8(h.Extra[9]) - if log2Value > 0 { - nonZeroHeader = h - minBaseFeeLog2 = log2Value - t.Logf("Found non-zero minBaseFeeLog2: %d at block %d", log2Value, h.Number.Uint64()) - break - } - } - } + // Wait a bit for the L2 to process the L1 change + time.Sleep(3 * time.Second) + + // Get a header after the configuration + configuredHeader, err := l2Client.HeaderByNumber(ctx, nil) + require.NoError(t, err) // Convert log2 value to actual minimum base fee (2^minBaseFeeLog2) minBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(minBaseFeeLog2)), nil) // Verify the minimum base fee constraint is enforced from this point forward - remainingHeaders := collectBlockHeaders(t, ctx, l2Client, nonZeroHeader, 5) + remainingHeaders := collectBlockHeaders(t, ctx, l2Client, configuredHeader, 5) for _, h := range remainingHeaders { require.True(t, h.BaseFee.Cmp(minBaseFee) >= 0, "Block %d base fee (%s) should be >= minimum base fee (%s)", @@ -181,10 +166,19 @@ func getL2ClientAndConfig(t systest.T, sys system.System, chainIdx uint64) (*eth // collectBlockHeaders collects headers from multiple consecutive blocks func collectBlockHeaders(t systest.T, ctx context.Context, l2Client *ethclient.Client, initialHeader *gethTypes.Header, numBlocks int) []*gethTypes.Header { + if initialHeader == nil { + require.Fail(t, "initialHeader cannot be nil") + return nil + } + var headers []*gethTypes.Header headers = append(headers, initialHeader) for i := 0; i < numBlocks; i++ { + if len(headers) == 0 { + require.Fail(t, "headers slice is empty, cannot continue") + return nil + } nextBlockNum := new(big.Int).Add(headers[len(headers)-1].Number, big.NewInt(1)) // Poll for the next block (simple polling) @@ -221,3 +215,56 @@ func checkForBaseFeeDecrease(t systest.T, headers []*gethTypes.Header) bool { } return false } + +// setMinBaseFeeLog2 configures the minimum base fee via SystemConfig contract +func setMinBaseFeeLog2(t systest.T, ctx context.Context, sys system.System, chainIdx uint64, minBaseFeeLog2 uint8) { + // Get L1 client + l1Client, err := sys.L1().Nodes()[0].GethClient() + require.NoError(t, err) + + // Get L2 chain for L1 addresses + l2Chain := sys.L2s()[chainIdx] + l1Addresses := l2Chain.L1Addresses() + + // Get SystemConfig proxy address + systemConfigAddr, exists := l1Addresses["SystemConfigProxy"] + require.True(t, exists, "SystemConfigProxy address must exist") + + // Get L1 wallet for transactions + l1Wallets := l2Chain.L1Wallets() + + // Try different wallet names + var wallet system.Wallet + for name, w := range l1Wallets { + wallet = w + t.Logf("Found L1 wallet: %s", name) + break + } + require.NotNil(t, wallet, "Must have at least one L1 wallet") + + // Get chain ID + chainID, err := l1Client.ChainID(ctx) + require.NoError(t, err) + + // Create transactor using the wallet's private key + privKey := wallet.PrivateKey() + // types.Key is actually *ecdsa.PrivateKey + ecdsaKey := (*ecdsa.PrivateKey)(privKey) + opts, err := bind.NewKeyedTransactorWithChainID(ecdsaKey, chainID) + require.NoError(t, err) + + // Bind to SystemConfig contract + sysconfig, err := bindings.NewSystemConfig(systemConfigAddr, l1Client) + require.NoError(t, err) + + // Set the minBaseFeeLog2 value + tx, err := sysconfig.SetMinBaseFeeLog2(opts, minBaseFeeLog2) + require.NoError(t, err, "SetMinBaseFeeLog2 transaction") + + // Wait for transaction to be mined + receipt, err := bind.WaitMined(ctx, l1Client, tx) + require.NoError(t, err, "waiting for SetMinBaseFeeLog2 transaction") + require.Equal(t, uint64(1), receipt.Status, "SetMinBaseFeeLog2 transaction should succeed") + + t.Logf("Successfully set minBaseFeeLog2 to %d in tx %s", minBaseFeeLog2, tx.Hash().Hex()) +} From 8d1cbe25be864a7fda61381ad4029dff47077b89 Mon Sep 17 00:00:00 2001 From: Niran Babalola Date: Thu, 14 Aug 2025 02:30:22 -0500 Subject: [PATCH 36/56] Switch from log2 to significand + exponent for min base fee --- go.sum | 4 +- .../tests/jovian/min_base_fee_test.go | 54 ++++++------ op-e2e/bindings/systemconfig.go | 83 +++++++++++++------ op-e2e/opgeth/op_geth.go | 2 +- op-e2e/system/fees/minbasefeelog2_test.go | 53 +++++++----- op-node/rollup/derive/attributes_test.go | 14 ++-- op-node/rollup/derive/system_config.go | 12 +-- op-node/rollup/derive/system_config_test.go | 20 +++-- op-node/rollup/interop/indexing/attributes.go | 1 + .../client/l2/engineapi/block_processor.go | 2 +- .../client/l2/engineapi/l2_engine_api_test.go | 27 ------ op-program/client/l2/test/miner.go | 4 +- op-service/eth/types.go | 4 +- .../interfaces/L1/ISystemConfig.sol | 7 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 23 ++--- 15 files changed, 167 insertions(+), 143 deletions(-) diff --git a/go.sum b/go.sum index b0ac064b429d9..0efbc88dd5d24 100644 --- a/go.sum +++ b/go.sum @@ -648,6 +648,8 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcou github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= +github.com/niran/op-geth v0.0.0-20250814071708-b7e36e810609 h1:pcEJy0+vTPH2HboasU/BVkMQfV3rUS1WBp0/Dtr5Grc= +github.com/niran/op-geth v0.0.0-20250814071708-b7e36e810609/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -904,8 +906,6 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250805142921-f05d71e98a29 h1:XdVGwxa337i6ZDtVC9eqllWKr8o9Mybt74Fgpr7cxyE= -github.com/wlawt/op-geth v0.0.0-20250805142921-f05d71e98a29/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 1fe55dffc2da2..48400f2d0e735 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -14,6 +14,7 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/bindings" "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" gethTypes "github.com/ethereum/go-ethereum/core/types" "github.com/ethereum/go-ethereum/ethclient" "github.com/ethereum/go-ethereum/params" @@ -68,11 +69,11 @@ func configurableMinBaseFeeOffTestScenario( // Verify Jovian extra data encoding (should be 10 bytes) require.Len(t, initialHeader.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - // Ensure minBaseFeeLog2 is 0 (disabled) - initialMinBaseFeeLog2 := uint8(initialHeader.Extra[9]) - if initialMinBaseFeeLog2 != 0 { + // Ensure minBaseFeeFactors is 0 (disabled) + initialMinBaseFeeFactors := uint8(initialHeader.Extra[9]) + if initialMinBaseFeeFactors != 0 { // Set it to 0 to test the "off" state - setMinBaseFeeLog2(t, ctx, sys, chainIdx, 0) + setMinBaseFeeFactors(t, ctx, sys, chainIdx, 0) time.Sleep(3 * time.Second) } @@ -83,11 +84,11 @@ func configurableMinBaseFeeOffTestScenario( foundDecrease := checkForBaseFeeDecrease(t, headers) require.True(t, foundDecrease, "Expected base fee to decrease when minBaseFee is disabled") - // Verify minBaseFeeLog2 remains 0 in all blocks + // Verify minBaseFeeFactors remains 0 in all blocks for _, h := range headers { require.Len(t, h.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - minBaseFeeLog2 := uint8(h.Extra[9]) - require.Equal(t, uint8(0), minBaseFeeLog2, "MinBaseFeeLog2 should be 0 when disabled") + minBaseFeeFactors := uint8(h.Extra[9]) + require.Equal(t, uint8(0), minBaseFeeFactors, "MinBaseFeeFactors should be 0 when disabled") } t.Logf("Successfully verified that base fees can decrease when minBaseFee is disabled:") @@ -114,14 +115,14 @@ func configurableMinBaseFeeOnTestScenario( // Verify that we're on Jovian fork require.True(t, chainConfig.IsJovian(initialHeader.Time), "Chain must be running on Jovian fork for this test") - // Verify initial state: minBaseFeeLog2 default value is zero + // Verify initial state: minBaseFeeFactors default value is zero require.Len(t, initialHeader.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - initialMinBaseFeeLog2 := uint8(initialHeader.Extra[9]) - require.Equal(t, uint8(0), initialMinBaseFeeLog2, "MinBaseFee should initially be zero") + initialMinBaseFeeFactors := uint8(initialHeader.Extra[9]) + require.Equal(t, uint8(0), initialMinBaseFeeFactors, "MinBaseFee should initially be zero") - // Set minBaseFeeLog2 via SystemConfig contract - minBaseFeeLog2 := uint8(20) // 2^20 = 1048576 wei minimum base fee - setMinBaseFeeLog2(t, ctx, sys, chainIdx, minBaseFeeLog2) + // Set minBaseFeeFactors via SystemConfig contract + minBaseFeeFactors := eip1559.EncodeMinBaseFeeFactors(1, 9) // 1 * 10^9 = 1 gwei minimum base fee + setMinBaseFeeFactors(t, ctx, sys, chainIdx, minBaseFeeFactors) // Wait a bit for the L2 to process the L1 change time.Sleep(3 * time.Second) @@ -130,8 +131,10 @@ func configurableMinBaseFeeOnTestScenario( configuredHeader, err := l2Client.HeaderByNumber(ctx, nil) require.NoError(t, err) - // Convert log2 value to actual minimum base fee (2^minBaseFeeLog2) - minBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(minBaseFeeLog2)), nil) + // Convert significand and exponent to actual minimum base fee (significand * 10^exponent) + significand, exponent := eip1559.DecodeMinBaseFeeFactors(minBaseFeeFactors) + minBaseFee := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(exponent)), nil) + minBaseFee.Mul(minBaseFee, big.NewInt(int64(significand))) // Verify the minimum base fee constraint is enforced from this point forward remainingHeaders := collectBlockHeaders(t, ctx, l2Client, configuredHeader, 5) @@ -143,8 +146,8 @@ func configurableMinBaseFeeOnTestScenario( finalHeader := remainingHeaders[len(remainingHeaders)-1] t.Logf("Successfully verified configurable minimum base fee feature:") - t.Logf(" - Initial minBaseFeeLog2: %d", initialMinBaseFeeLog2) - t.Logf(" - Configured minBaseFeeLog2: %d", minBaseFeeLog2) + t.Logf(" - Initial minBaseFeeFactors: 0x%02x", initialMinBaseFeeFactors) + t.Logf(" - Configured minBaseFeeFactors: 0x%02x", minBaseFeeFactors) t.Logf(" - Minimum base fee: %s", minBaseFee.String()) t.Logf(" - Final base fee: %s", finalHeader.BaseFee.String()) } @@ -216,8 +219,8 @@ func checkForBaseFeeDecrease(t systest.T, headers []*gethTypes.Header) bool { return false } -// setMinBaseFeeLog2 configures the minimum base fee via SystemConfig contract -func setMinBaseFeeLog2(t systest.T, ctx context.Context, sys system.System, chainIdx uint64, minBaseFeeLog2 uint8) { +// setMinBaseFeeFactors configures the minimum base fee via SystemConfig contract +func setMinBaseFeeFactors(t systest.T, ctx context.Context, sys system.System, chainIdx uint64, minBaseFeeFactors uint8) { // Get L1 client l1Client, err := sys.L1().Nodes()[0].GethClient() require.NoError(t, err) @@ -257,14 +260,15 @@ func setMinBaseFeeLog2(t systest.T, ctx context.Context, sys system.System, chai sysconfig, err := bindings.NewSystemConfig(systemConfigAddr, l1Client) require.NoError(t, err) - // Set the minBaseFeeLog2 value - tx, err := sysconfig.SetMinBaseFeeLog2(opts, minBaseFeeLog2) - require.NoError(t, err, "SetMinBaseFeeLog2 transaction") + // Set the minBaseFeeFactors value + significand, exponent := eip1559.DecodeMinBaseFeeFactors(minBaseFeeFactors) + tx, err := sysconfig.SetMinBaseFee(opts, significand, exponent) + require.NoError(t, err, "SetMinBaseFee transaction") // Wait for transaction to be mined receipt, err := bind.WaitMined(ctx, l1Client, tx) - require.NoError(t, err, "waiting for SetMinBaseFeeLog2 transaction") - require.Equal(t, uint64(1), receipt.Status, "SetMinBaseFeeLog2 transaction should succeed") + require.NoError(t, err, "waiting for SetMinBaseFee transaction") + require.Equal(t, uint64(1), receipt.Status, "SetMinBaseFee transaction should succeed") - t.Logf("Successfully set minBaseFeeLog2 to %d in tx %s", minBaseFeeLog2, tx.Hash().Hex()) + t.Logf("Successfully set minBaseFee to %d * 10^%d in tx %s", significand, exponent, tx.Hash().Hex()) } diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 347f639032e91..6e98aea26628f 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -50,8 +50,8 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeLog2\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFeeLog2\",\"inputs\":[{\"name\":\"_minBaseFeeLog2\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b6200185d1760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612d7b6200018560003960008181610496015281816108e10152610c460152612d7b6000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c80639b7d7f0a116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b3578063f8c68de0146108c7578063fd32aa0f146108cf578063ffa1ad74146108d757600080fd5b8063f2b4e6171461088f578063f2fde38b14610897578063f45e65d8146108aa57600080fd5b8063dad544e0116100de578063dad544e014610856578063e0e2016d1461085e578063e81b2c6d14610866578063ec7075171461086f57600080fd5b8063d220a9e014610835578063d6ae3cd514610845578063dac6e63a1461084e57600080fd5b8063bfb14fb711610171578063c93210791161014b578063c9321079146106b1578063c9b26f61146106d6578063c9ff2d16146106e9578063cc731b021461070157600080fd5b8063bfb14fb71461067a578063c0fd4b4114610696578063c4e8ddfa146106a957600080fd5b8063a7119869116101a2578063a711986914610657578063b40a817c1461065f578063bc49ce5f1461067257600080fd5b80639b7d7f0a146105d85780639faba4f8146105e0578063a39fac12146105f357600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610597578063715018a61461059f5780638da5cb5b146105a7578063935f029e146105c557600080fd5b80634f16540b1461051957806354fd4d50146105405780635c975abb1461057f57600080fd5b8063452a93201161027c578063452a9320146104d057806348cd4cb1146104d85780634add321d146104e05780634d5d9a2a146104e857600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c857600080fd5b80630c18c1621161030f57806318d13918116102e957806318d139181461043e57806319f5cea8146104515780631fd19ee11461045957806321d7fde51461046157600080fd5b80630c18c162146103fe578063155b6c6f1461040757806316d3bc7f1461041a57600080fd5b8063078f29cf11610340578063078f29cf146103aa5780630a49cb03146103d75780630ae14b1b146103df57600080fd5b80630104582914610367578063028f4e471461037c57806306c926571461038f575b600080fd5b61037a6103753660046128db565b6108df565b005b61037a61038a366004612a4b565b610c44565b610397610e25565b6040519081526020015b60405180910390f35b6103b2610e53565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a1565b6103b2610e8c565b631dcd65005b60405167ffffffffffffffff90911681526020016103a1565b61039760655481565b61037a610415366004612a7b565b610ebc565b606a546103e5906c01000000000000000000000000900467ffffffffffffffff1681565b61037a61044c366004612aae565b610ed2565b610397610ee6565b6103b2610f11565b61037a61046f366004612ad2565b610f3b565b606c546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff90911681526020016103a1565b6103b2610f4d565b6103b2611158565b6103976111ec565b6103e561121c565b606a546105049068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a1565b6103977f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103a19190612b67565b610587611242565b60405190151581526020016103a1565b6103976113f0565b61037a61141b565b60335473ffffffffffffffffffffffffffffffffffffffff166103b2565b61037a6105d3366004612b7a565b61142f565b6103b2611441565b61037a6105ee366004612b9c565b611471565b6105fb611482565b6040516103a19190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6103b2611569565b61037a61066d366004612bb7565b611599565b6103976115aa565b6068546105049068010000000000000000900463ffffffff1681565b61037a6106a4366004612ad2565b6115d5565b6103b26115e7565b606c546104b69074010000000000000000000000000000000000000000900460ff1681565b61037a6106e4366004612bd2565b611617565b606a5461050490640100000000900463ffffffff1681565b6107c56040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103a19190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105049063ffffffff1681565b610397606b5481565b6103b2611628565b6103b2611658565b6103976116ac565b61039760675481565b606854610504906c01000000000000000000000000900463ffffffff1681565b6103b26116d7565b61037a6108a5366004612aae565b611753565b61039760665481565b6068546103e59067ffffffffffffffff1681565b610397611807565b610397611832565b610397600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff1615801561091f575060005460ff8083169116105b6109b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109e9611861565b6109f16118e2565b6109fa8c611753565b610a0389611981565b610a0d8b8b6119e2565b610a1688611b21565b610a3f7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610a72610a6d60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c1a565b869055565b610aa6610aa060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c1a565b85519055565b610add610ad460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c1a565b60208601519055565b610b14610b0b60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c1a565b60408601519055565b610b4b610b4260017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c1a565b60608601519055565b610b82610b7960017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c1a565b60808601519055565b610b8a611c77565b610b9386611cdf565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c84575060005460ff8083169116105b610d10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109a7565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d49611861565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610dbb60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c1a565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e5060017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c1a565b81565b6000610e87610e8360017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c1a565b5490565b905090565b6000610e87610e8360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c1a565b610ec4612153565b610ece82826121d4565b5050565b610eda612153565b610ee3816122aa565b50565b610e5060017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c1a565b6000610e877f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f43612153565b610ece82826119e2565b600080610f787fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610f9b57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fde9190612c31565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e6765720000000000009190911790611039906060015b604051602081830303815290604052805190602001205490565b14611070576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906110929060600161101f565b905073ffffffffffffffffffffffffffffffffffffffff811615611126578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061111f9190612c6e565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e879190612c6e565b6000610e87610e8360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b606954600090610e879063ffffffff6a0100000000000000000000820481169116612c8b565b60008061124d610e8c565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa158015611297573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bb9190612c6e565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa15801561132d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113519190612cb7565b806113ea5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612cb7565b91505090565b610e5060017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c1a565b611423612153565b61142d600061232e565b565b611437612153565b610ece82826123a5565b6000610e87610e8360017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c1a565b611479612153565b610ee38161247b565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114c0611569565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114e36115e7565b73ffffffffffffffffffffffffffffffffffffffff168152602001611506610e53565b73ffffffffffffffffffffffffffffffffffffffff168152602001611529610e8c565b73ffffffffffffffffffffffffffffffffffffffff16815260200161154c611441565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610e87610e8360017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c1a565b6115a1612153565b610ee381611b21565b610e5060017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c1a565b6115dd612153565b610ece82826124e7565b6000610e87610e8360017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c1a565b61161f612153565b610ee381611981565b6000610e87610e8360017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c1a565b6000611662610f4d565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111c8573d6000803e3d6000fd5b610e5060017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b6000806116e2610e8c565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ea9190612c6e565b61175b612153565b73ffffffffffffffffffffffffffffffffffffffff81166117fe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109a7565b610ee38161232e565b610e5060017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c1a565b610e5060017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c1a565b9055565b3361186a610f4d565b73ffffffffffffffffffffffffffffffffffffffff16141580156118ab575033611892611658565b73ffffffffffffffffffffffffffffffffffffffff1614155b1561142d576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff16611979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b61142d6126b9565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516119d69190612b67565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b149190612b67565b60405180910390a3505050565b611b2961121c565b67ffffffffffffffff168167ffffffffffffffff161015611ba6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b631dcd650067ffffffffffffffff82161115611c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109a7565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119a5565b611ca5610e8360017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b60000361142d5761142d611cda60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c1a565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611d8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109a7565b6001816040015160ff1611611e26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109a7565b6068546080820151825167ffffffffffffffff90921691611e479190612cd9565b63ffffffff161115611eb5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109a7565b6000816020015160ff1611611f4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109a7565b8051602082015163ffffffff82169160ff90911690611f6c908290612cf8565b611f769190612d42565b63ffffffff1614612009576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109a7565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff16331461142d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109a7565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611ae3565b6122d37f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119a5565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff00000000000000000000000000000000000000000000000000000000000000811615612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109a7565b606582905560668190556040805160208101849052908101829052600090606001611ab0565b606c80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000060ff84169081029190911790915560408051602080820193909352815180820390930183528101905260066119a5565b60018263ffffffff16101561257e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109a7565b60018163ffffffff161015612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109a7565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161268291602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611ae3565b600054610100900460ff16612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109a7565b61142d3361232e565b73ffffffffffffffffffffffffffffffffffffffff81168114610ee357600080fd5b803561278681612759565b919050565b803563ffffffff8116811461278657600080fd5b803567ffffffffffffffff8116811461278657600080fd5b60405160c0810167ffffffffffffffff81118282101715612801577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461278657600080fd5b600060a0828403121561282a57600080fd5b60405160a0810181811067ffffffffffffffff82111715612874577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561288581612759565b8152602083013561289581612759565b602082015260408301356128a881612759565b604082015260608301356128bb81612759565b606082015260808301356128ce81612759565b6080919091015292915050565b60008060008060008060008060008060008b8d036102808112156128fe57600080fd5b8c3561290981612759565b9b5061291760208e0161278b565b9a5061292560408e0161278b565b995060608d0135985061293a60808e0161279f565b975060a08d013561294a81612759565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561297c57600080fd5b506129856127b7565b61299160c08e0161278b565b815261299f60e08e01612807565b60208201526129b16101008e01612807565b60408201526129c36101208e0161278b565b60608201526129d56101408e0161278b565b60808201526101608d01356fffffffffffffffffffffffffffffffff811681146129fe57600080fd5b60a08201529450612a126101808d0161277b565b9350612a228d6101a08e01612818565b92506102408c01359150612a396102608d0161277b565b90509295989b509295989b9093969950565b60008060408385031215612a5e57600080fd5b823591506020830135612a7081612759565b809150509250929050565b60008060408385031215612a8e57600080fd5b612a978361278b565b9150612aa56020840161279f565b90509250929050565b600060208284031215612ac057600080fd5b8135612acb81612759565b9392505050565b60008060408385031215612ae557600080fd5b612aee8361278b565b9150612aa56020840161278b565b6000815180845260005b81811015612b2257602081850181015186830182015201612b06565b81811115612b34576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612acb6020830184612afc565b60008060408385031215612b8d57600080fd5b50508035926020909101359150565b600060208284031215612bae57600080fd5b612acb82612807565b600060208284031215612bc957600080fd5b612acb8261279f565b600060208284031215612be457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c2c57612c2c612beb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c6957612c69612beb565b500290565b600060208284031215612c8057600080fd5b8151612acb81612759565b600067ffffffffffffffff808316818516808303821115612cae57612cae612beb565b01949350505050565b600060208284031215612cc957600080fd5b81518015158114612acb57600080fd5b600063ffffffff808316818516808303821115612cae57612cae612beb565b600063ffffffff80841680612d36577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612d6557612d65612beb565b0294935050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeExponent\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minBaseFeeSignificand\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_significand\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_exponent\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b6200188f1760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612e6962000185600039600081816104a1015281816109120152610c770152612e696000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c8063798d2635116101d3578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108e4578063f8c68de0146108f8578063fd32aa0f14610900578063ffa1ad741461090857600080fd5b8063f2b4e617146108c0578063f2fde38b146108c8578063f45e65d8146108db57600080fd5b8063dad544e0116100de578063dad544e014610887578063e0e2016d1461088f578063e81b2c6d14610897578063ec707517146108a057600080fd5b8063d220a9e014610866578063d6ae3cd514610876578063dac6e63a1461087f57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ff578063c9b26f6114610707578063c9ff2d161461071a578063cc731b021461073257600080fd5b8063bc49ce5f146106c8578063bfb14fb7146106d0578063c0fd4b41146106ec57600080fd5b80639b7d7f0a116101ad5780639b7d7f0a14610641578063a39fac1214610649578063a7119869146106ad578063b40a817c146106b557600080fd5b8063798d2635146105eb5780638da5cb5b14610610578063935f029e1461062e57600080fd5b806335e80ab3116102ad5780634f16540b1161024b5780635d73369c116102255780635d73369c146105a257806360c9e576146105aa5780636e89a6ac146105d0578063715018a6146105e357600080fd5b80634f16540b1461052457806354fd4d501461054b5780635c975abb1461058a57600080fd5b8063452a932011610287578063452a9320146104db57806348cd4cb1146104e35780634add321d146104eb5780634d5d9a2a146104f357600080fd5b806335e80ab31461047f57806338d38c971461049f5780633e47158c146104d357600080fd5b80630c18c1621161031a57806318d13918116102f457806318d139181461044957806319f5cea81461045c5780631fd19ee11461046457806321d7fde51461046c57600080fd5b80630c18c16214610409578063155b6c6f1461041257806316d3bc7f1461042557600080fd5b8063078f29cf1161034b578063078f29cf146103b55780630a49cb03146103e25780630ae14b1b146103ea57600080fd5b80630104582914610372578063028f4e471461038757806306c926571461039a575b600080fd5b6103856103803660046129ba565b610910565b005b610385610395366004612b2a565b610c75565b6103a2610e56565b6040519081526020015b60405180910390f35b6103bd610e84565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ac565b6103bd610ebd565b631dcd65005b60405167ffffffffffffffff90911681526020016103ac565b6103a260655481565b610385610420366004612b5a565b610eed565b606a546103f0906c01000000000000000000000000900467ffffffffffffffff1681565b610385610457366004612b8d565b610f03565b6103a2610f17565b6103bd610f42565b61038561047a366004612bb1565b610f6c565b606c546103bd9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff90911681526020016103ac565b6103bd610f7e565b6103bd611189565b6103a261121d565b6103f061124d565b606a5461050f9068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103ac565b6103a27f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103ac9190612c46565b610592611273565b60405190151581526020016103ac565b6103a2611421565b606c546104c1907501000000000000000000000000000000000000000000900460ff1681565b6103856105de366004612c59565b61144c565b61038561145e565b606c546104c19074010000000000000000000000000000000000000000900460ff1681565b60335473ffffffffffffffffffffffffffffffffffffffff166103bd565b61038561063c366004612c83565b611472565b6103bd611484565b6106516114b4565b6040516103ac9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6103bd61159b565b6103856106c3366004612ca5565b6115cb565b6103a26115dc565b60685461050f9068010000000000000000900463ffffffff1681565b6103856106fa366004612bb1565b611607565b6103bd611619565b610385610715366004612cc0565b611649565b606a5461050f90640100000000900463ffffffff1681565b6107f66040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103ac9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a5461050f9063ffffffff1681565b6103a2606b5481565b6103bd61165a565b6103bd61168a565b6103a26116de565b6103a260675481565b60685461050f906c01000000000000000000000000900463ffffffff1681565b6103bd611709565b6103856108d6366004612b8d565b611785565b6103a260665481565b6068546103f09067ffffffffffffffff1681565b6103a2611839565b6103a2611864565b6103a2600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610950575060005460ff8083169116105b6109e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610a1a611893565b610a22611914565b610a2b8c611785565b610a34896119b3565b610a3e8b8b611a14565b610a4788611b53565b610a707f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610aa3610a9e60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d08565b869055565b610ad7610ad160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d08565b85519055565b610b0e610b0560017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d08565b60208601519055565b610b45610b3c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d08565b60408601519055565b610b7c610b7360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d08565b60608601519055565b610bb3610baa60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d08565b60808601519055565b610bbb611ca9565b610bc486611d11565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610cb5575060005460ff8083169116105b610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d7a611893565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610dec60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612d08565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e8160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d08565b81565b6000610eb8610eb460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d08565b5490565b905090565b6000610eb8610eb460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d08565b610ef5612185565b610eff8282612206565b5050565b610f0b612185565b610f14816122dc565b50565b610e8160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d08565b6000610eb87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f74612185565b610eff8282611a14565b600080610fa97fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fcc57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261100f9190612d1f565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061106a906060015b604051602081830303815290604052805190602001205490565b146110a1576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906110c390606001611050565b905073ffffffffffffffffffffffffffffffffffffffff811615611157578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190612d5c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb89190612d5c565b6000610eb8610eb460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b606954600090610eb89063ffffffff6a0100000000000000000000820481169116612d79565b60008061127e610ebd565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190612d5c565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa15801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190612da5565b8061141b5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190612da5565b91505090565b610e8160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d08565b611454612185565b610eff8282612360565b611466612185565b6114706000612479565b565b61147a612185565b610eff82826124f0565b6000610eb8610eb460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d08565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114f261159b565b73ffffffffffffffffffffffffffffffffffffffff168152602001611515611619565b73ffffffffffffffffffffffffffffffffffffffff168152602001611538610e84565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155b610ebd565b73ffffffffffffffffffffffffffffffffffffffff16815260200161157e611484565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610eb8610eb460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d08565b6115d3612185565b610f1481611b53565b610e8160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d08565b61160f612185565b610eff82826125c6565b6000610eb8610eb460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d08565b611651612185565b610f14816119b3565b6000610eb8610eb460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d08565b6000611694610f7e565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f9573d6000803e3d6000fd5b610e8160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b600080611714610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190612d5c565b61178d612185565b73ffffffffffffffffffffffffffffffffffffffff8116611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109d8565b610f1481612479565b610e8160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d08565b610e8160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d08565b9055565b3361189c610f7e565b73ffffffffffffffffffffffffffffffffffffffff16141580156118dd5750336118c461168a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611470576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166119ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109d8565b611470612798565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a089190612c46565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b469190612c46565b60405180910390a3505050565b611b5b61124d565b67ffffffffffffffff168167ffffffffffffffff161015611bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109d8565b631dcd650067ffffffffffffffff82161115611c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109d8565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119d7565b611cd7610eb460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b60000361147057611470611d0c60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109d8565b6001816040015160ff1611611e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109d8565b6068546080820151825167ffffffffffffffff90921691611e799190612dc7565b63ffffffff161115611ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109d8565b6000816020015160ff1611611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109d8565b8051602082015163ffffffff82169160ff90911690611f9e908290612de6565b611fa89190612e30565b63ffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109d8565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d8565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611b15565b6123057f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119d7565b606c805460ff8381167501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9186167401000000000000000000000000000000000000000002919091167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091171790556040805160f0600485901b16600f841617602082018190529160009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600660007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161246b9190612c46565b60405180910390a350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff000000000000000000000000000000000000000000000000000000000000008116156125a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109d8565b606582905560668190556040805160208101849052908101829052600090606001611ae2565b60018263ffffffff16101561265d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109d8565b60018163ffffffff1610156126f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109d8565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161276191602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611b15565b600054610100900460ff1661282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109d8565b61147033612479565b73ffffffffffffffffffffffffffffffffffffffff81168114610f1457600080fd5b803561286581612838565b919050565b803563ffffffff8116811461286557600080fd5b803567ffffffffffffffff8116811461286557600080fd5b60405160c0810167ffffffffffffffff811182821017156128e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461286557600080fd5b600060a0828403121561290957600080fd5b60405160a0810181811067ffffffffffffffff82111715612953577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561296481612838565b8152602083013561297481612838565b6020820152604083013561298781612838565b6040820152606083013561299a81612838565b606082015260808301356129ad81612838565b6080919091015292915050565b60008060008060008060008060008060008b8d036102808112156129dd57600080fd5b8c356129e881612838565b9b506129f660208e0161286a565b9a50612a0460408e0161286a565b995060608d01359850612a1960808e0161287e565b975060a08d0135612a2981612838565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a5b57600080fd5b50612a64612896565b612a7060c08e0161286a565b8152612a7e60e08e016128e6565b6020820152612a906101008e016128e6565b6040820152612aa26101208e0161286a565b6060820152612ab46101408e0161286a565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612add57600080fd5b60a08201529450612af16101808d0161285a565b9350612b018d6101a08e016128f7565b92506102408c01359150612b186102608d0161285a565b90509295989b509295989b9093969950565b60008060408385031215612b3d57600080fd5b823591506020830135612b4f81612838565b809150509250929050565b60008060408385031215612b6d57600080fd5b612b768361286a565b9150612b846020840161287e565b90509250929050565b600060208284031215612b9f57600080fd5b8135612baa81612838565b9392505050565b60008060408385031215612bc457600080fd5b612bcd8361286a565b9150612b846020840161286a565b6000815180845260005b81811015612c0157602081850181015186830182015201612be5565b81811115612c13576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612baa6020830184612bdb565b60008060408385031215612c6c57600080fd5b612c75836128e6565b9150612b84602084016128e6565b60008060408385031215612c9657600080fd5b50508035926020909101359150565b600060208284031215612cb757600080fd5b612baa8261287e565b600060208284031215612cd257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d1a57612d1a612cd9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d5757612d57612cd9565b500290565b600060208284031215612d6e57600080fd5b8151612baa81612838565b600067ffffffffffffffff808316818516808303821115612d9c57612d9c612cd9565b01949350505050565b600060208284031215612db757600080fd5b81518015158114612baa57600080fd5b600063ffffffff808316818516808303821115612d9c57612d9c612cd9565b600063ffffffff80841680612e24577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612e5357612e53612cd9565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -996,12 +996,12 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } -// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. +// MinBaseFeeExponent is a free data retrieval call binding the contract method 0x60c9e576. // -// Solidity: function minBaseFeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) MinBaseFeeLog2(opts *bind.CallOpts) (uint8, error) { +// Solidity: function minBaseFeeExponent() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) MinBaseFeeExponent(opts *bind.CallOpts) (uint8, error) { var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBaseFeeLog2") + err := _SystemConfig.contract.Call(opts, &out, "minBaseFeeExponent") if err != nil { return *new(uint8), err @@ -1013,18 +1013,49 @@ func (_SystemConfig *SystemConfigCaller) MinBaseFeeLog2(opts *bind.CallOpts) (ui } -// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. +// MinBaseFeeExponent is a free data retrieval call binding the contract method 0x60c9e576. // -// Solidity: function minBaseFeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigSession) MinBaseFeeLog2() (uint8, error) { - return _SystemConfig.Contract.MinBaseFeeLog2(&_SystemConfig.CallOpts) +// Solidity: function minBaseFeeExponent() view returns(uint8) +func (_SystemConfig *SystemConfigSession) MinBaseFeeExponent() (uint8, error) { + return _SystemConfig.Contract.MinBaseFeeExponent(&_SystemConfig.CallOpts) } -// MinBaseFeeLog2 is a free data retrieval call binding the contract method 0xc9321079. +// MinBaseFeeExponent is a free data retrieval call binding the contract method 0x60c9e576. // -// Solidity: function minBaseFeeLog2() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) MinBaseFeeLog2() (uint8, error) { - return _SystemConfig.Contract.MinBaseFeeLog2(&_SystemConfig.CallOpts) +// Solidity: function minBaseFeeExponent() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) MinBaseFeeExponent() (uint8, error) { + return _SystemConfig.Contract.MinBaseFeeExponent(&_SystemConfig.CallOpts) +} + +// MinBaseFeeSignificand is a free data retrieval call binding the contract method 0x798d2635. +// +// Solidity: function minBaseFeeSignificand() view returns(uint8) +func (_SystemConfig *SystemConfigCaller) MinBaseFeeSignificand(opts *bind.CallOpts) (uint8, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minBaseFeeSignificand") + + if err != nil { + return *new(uint8), err + } + + out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + + return out0, err + +} + +// MinBaseFeeSignificand is a free data retrieval call binding the contract method 0x798d2635. +// +// Solidity: function minBaseFeeSignificand() view returns(uint8) +func (_SystemConfig *SystemConfigSession) MinBaseFeeSignificand() (uint8, error) { + return _SystemConfig.Contract.MinBaseFeeSignificand(&_SystemConfig.CallOpts) +} + +// MinBaseFeeSignificand is a free data retrieval call binding the contract method 0x798d2635. +// +// Solidity: function minBaseFeeSignificand() view returns(uint8) +func (_SystemConfig *SystemConfigCallerSession) MinBaseFeeSignificand() (uint8, error) { + return _SystemConfig.Contract.MinBaseFeeSignificand(&_SystemConfig.CallOpts) } // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. @@ -1670,25 +1701,25 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } -// SetMinBaseFeeLog2 is a paid mutator transaction binding the contract method 0x9faba4f8. +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x6e89a6ac. // -// Solidity: function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) returns() -func (_SystemConfig *SystemConfigTransactor) SetMinBaseFeeLog2(opts *bind.TransactOpts, _minBaseFeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setMinBaseFeeLog2", _minBaseFeeLog2) +// Solidity: function setMinBaseFee(uint8 _significand, uint8 _exponent) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _significand uint8, _exponent uint8) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _significand, _exponent) } -// SetMinBaseFeeLog2 is a paid mutator transaction binding the contract method 0x9faba4f8. +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x6e89a6ac. // -// Solidity: function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) returns() -func (_SystemConfig *SystemConfigSession) SetMinBaseFeeLog2(_minBaseFeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFeeLog2(&_SystemConfig.TransactOpts, _minBaseFeeLog2) +// Solidity: function setMinBaseFee(uint8 _significand, uint8 _exponent) returns() +func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_significand uint8, _exponent uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _significand, _exponent) } -// SetMinBaseFeeLog2 is a paid mutator transaction binding the contract method 0x9faba4f8. +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x6e89a6ac. // -// Solidity: function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFeeLog2(_minBaseFeeLog2 uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFeeLog2(&_SystemConfig.TransactOpts, _minBaseFeeLog2) +// Solidity: function setMinBaseFee(uint8 _significand, uint8 _exponent) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_significand uint8, _exponent uint8) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _significand, _exponent) } // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. diff --git a/op-e2e/opgeth/op_geth.go b/op-e2e/opgeth/op_geth.go index f3ae6a6a9cef0..a941740f5c6fb 100644 --- a/op-e2e/opgeth/op_geth.go +++ b/op-e2e/opgeth/op_geth.go @@ -240,7 +240,7 @@ func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.Payloa ParentBeaconBlockRoot: parentBeaconBlockRoot, } if d.L2ChainConfig.IsConfigurableMinBaseFee(uint64(timestamp)) { - attrs.MinBaseFeeLog2 = d.SystemConfig.MinBaseFeeLog2 + attrs.MinBaseFeeFactors = d.SystemConfig.MinBaseFeeFactors } if d.L2ChainConfig.IsHolocene(uint64(timestamp)) { attrs.EIP1559Params = new(eth.Bytes8) diff --git a/op-e2e/system/fees/minbasefeelog2_test.go b/op-e2e/system/fees/minbasefeelog2_test.go index 07e0ddbbf4488..0650fa5d5fc23 100644 --- a/op-e2e/system/fees/minbasefeelog2_test.go +++ b/op-e2e/system/fees/minbasefeelog2_test.go @@ -18,9 +18,9 @@ import ( "github.com/stretchr/testify/require" ) -// TestMinBaseFeeLog2 checks that we can successfully change minBaseFeeLog2 parameter via SystemConfig +// TestMinBaseFeeFactors checks that we can successfully change minBaseFeeFactors parameter via SystemConfig // with the Jovian upgrade and that it's properly encoded in block extra data. -func TestMinBaseFeeLog2(t *testing.T) { +func TestMinBaseFeeFactors(t *testing.T) { op_e2e.InitParallel(t) ctx, ctxCancel := context.WithCancel(context.Background()) @@ -53,16 +53,23 @@ func TestMinBaseFeeLog2(t *testing.T) { var cancel context.CancelFunc - // Confirm minBaseFeeLog2 is initialized to 0 - minBaseFeeLog2, err := sysconfig.MinBaseFeeLog2(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFeeLog2") - require.Equal(t, uint8(0), minBaseFeeLog2) + // Confirm minBaseFeeSignificand and minBaseFeeExponent are initialized to 0 + minBaseFeeSignificand, err := sysconfig.MinBaseFeeSignificand(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFeeSignificand") + require.Equal(t, uint8(0), minBaseFeeSignificand) + minBaseFeeExponent, err := sysconfig.MinBaseFeeExponent(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFeeExponent") + require.Equal(t, uint8(0), minBaseFeeExponent) - // Set both EIP-1559 parameters and minBaseFeeLog2 in a single transaction sequence + // Set both EIP-1559 parameters and minBaseFeeFactors in a single transaction sequence // This matches how they would be used in production expectedDenom := uint32(10) expectedElasticity := uint32(2) - expectedMinBaseFeeLog2 := uint8(10) // This means minimum base fee = 2^10 = 1024 wei + // Set the minimum base fee to 1 gwei. + expectedMinBaseFeeSignificand := uint8(1) + expectedMinBaseFeeExponent := uint8(9) + expectedMinBaseFeeFactors := eip1559.EncodeMinBaseFeeFactors(expectedMinBaseFeeSignificand, expectedMinBaseFeeExponent) + expectedMinBaseFee := big.NewInt(1_000_000_000) // Set EIP-1559 parameters first opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) @@ -73,18 +80,21 @@ func TestMinBaseFeeLog2(t *testing.T) { _, err = wait.ForReceiptOK(ctx, l1Client, tx.Hash()) require.NoError(t, err, "Waiting for sysconfig set EIP1559Params update tx") - // Then set MinBaseFeeLog2 + // Then set MinBaseFeeFactors opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) - tx, err = sysconfig.SetMinBaseFeeLog2(opts, expectedMinBaseFeeLog2) + tx, err = sysconfig.SetMinBaseFee(opts, expectedMinBaseFeeSignificand, expectedMinBaseFeeExponent) cancel() - require.NoError(t, err, "SetMinBaseFeeLog2 update tx") + require.NoError(t, err, "SetMinBaseFee update tx") receipt, err := wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.NoError(t, err, "Waiting for sysconfig set minBaseFeeLog2 update tx") + require.NoError(t, err, "Waiting for sysconfig set minBaseFee update tx") - minBaseFeeLog2, err = sysconfig.MinBaseFeeLog2(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFeeLog2") - require.Equal(t, expectedMinBaseFeeLog2, minBaseFeeLog2) + minBaseFeeSignificand, err = sysconfig.MinBaseFeeSignificand(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFeeSignificand") + require.Equal(t, expectedMinBaseFeeSignificand, minBaseFeeSignificand) + minBaseFeeExponent, err = sysconfig.MinBaseFeeExponent(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFeeExponent") + require.Equal(t, expectedMinBaseFeeExponent, minBaseFeeExponent) _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) require.NoError(t, err, "waiting for L2 block to include the sysconfig update") @@ -94,20 +104,19 @@ func TestMinBaseFeeLog2(t *testing.T) { // Debug: print the actual ExtraData t.Logf("Actual ExtraData: %x", h.Extra) - t.Logf("Expected MinBaseFeeLog2: %d", expectedMinBaseFeeLog2) + t.Logf("Expected MinBaseFee: %d * 10^%d = %d", expectedMinBaseFeeSignificand, expectedMinBaseFeeExponent, expectedMinBaseFee) // Decode and check what we actually got if len(h.Extra) == 10 { - actualDenom, actualElasticity, actualMinBaseFeeLog2 := eip1559.DecodeMinBaseFeeExtraData(h.Extra) - t.Logf("Decoded - Denom: %d, Elasticity: %d, MinBaseFeeLog2: %d", actualDenom, actualElasticity, actualMinBaseFeeLog2) + actualDenom, actualElasticity, actualMinBaseFeeSignificand, actualMinBaseFeeExponent := eip1559.DecodeMinBaseFeeExtraData(h.Extra) + t.Logf("Decoded - Denom: %d, Elasticity: %d, MinBaseFee: %d * 10^%d", actualDenom, actualElasticity, actualMinBaseFeeSignificand, actualMinBaseFeeExponent) } // Confirm the extraData is being set as expected with Jovian encoding - expectedExtraData := eip1559.EncodeMinBaseFeeExtraData(uint64(expectedDenom), uint64(expectedElasticity), expectedMinBaseFeeLog2) - require.Equal(t, expectedExtraData, h.Extra, "Extra data should match Jovian encoding with minBaseFeeLog2") + expectedExtraData := eip1559.EncodeMinBaseFeeExtraData(uint64(expectedDenom), uint64(expectedElasticity), expectedMinBaseFeeFactors) + require.Equal(t, expectedExtraData, h.Extra, "Extra data should match Jovian encoding with minBaseFeeFactors") // Verify the minimum base fee is enforced - expectedMinBaseFee := new(big.Int).Exp(big.NewInt(2), big.NewInt(int64(expectedMinBaseFeeLog2)), nil) require.True(t, h.BaseFee.Cmp(expectedMinBaseFee) >= 0, "Current base fee (%s) should be >= minimum base fee (%s)", h.BaseFee.String(), expectedMinBaseFee.String()) @@ -117,7 +126,7 @@ func TestMinBaseFeeLog2(t *testing.T) { require.NoError(t, err, "waiting for next L2 block") // Confirm the extraData is still being set as expected in the next block - require.Equal(t, expectedExtraData, b.Header().Extra, "Extra data should still match Jovian encoding with minBaseFeeLog2") + require.Equal(t, expectedExtraData, b.Header().Extra, "Extra data should still match Jovian encoding with minBaseFeeFactors") // Verify the minimum base fee constraint is still enforced require.True(t, b.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index 62437f4a2e035..4e379d0ad16e2 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -451,13 +451,13 @@ func TestPreparePayloadAttributes(t *testing.T) { l2Parent := testutils.RandomL2BlockRef(rng) l1CfgFetcher := &testutils.MockL2Client{} eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) - minBaseFeeLog2 := uint8(20) + minBaseFeeFactors := uint8(1<<4 | 9) testSysCfg := eth.SystemConfig{ - BatcherAddr: common.Address{42}, - Overhead: [32]byte{}, - Scalar: [32]byte{}, - EIP1559Params: eip1559Params, - MinBaseFeeLog2: minBaseFeeLog2, + BatcherAddr: common.Address{42}, + Overhead: [32]byte{}, + Scalar: [32]byte{}, + EIP1559Params: eip1559Params, + MinBaseFeeFactors: minBaseFeeFactors, } l1CfgFetcher.ExpectSystemConfigByL2Hash(l2Parent.Hash, testSysCfg, nil) defer l1CfgFetcher.AssertExpectations(t) @@ -476,7 +476,7 @@ func TestPreparePayloadAttributes(t *testing.T) { attrs, err := attrBuilder.PreparePayloadAttributes(context.Background(), l2Parent, epoch) require.NoError(t, err) require.Equal(t, eip1559Params, *attrs.EIP1559Params) - require.Equal(t, minBaseFeeLog2, attrs.MinBaseFeeLog2) + require.Equal(t, minBaseFeeFactors, attrs.MinBaseFeeFactors) require.Equal(t, l1InfoTx, []byte(attrs.Transactions[0])) }) } diff --git a/op-node/rollup/derive/system_config.go b/op-node/rollup/derive/system_config.go index 338331b8f70d3..3655ae954c327 100644 --- a/op-node/rollup/derive/system_config.go +++ b/op-node/rollup/derive/system_config.go @@ -23,7 +23,7 @@ var ( SystemConfigUpdateUnsafeBlockSigner = common.Hash{31: 3} SystemConfigUpdateEIP1559Params = common.Hash{31: 4} SystemConfigUpdateOperatorFeeParams = common.Hash{31: 5} - SystemConfigUpdateMinBaseFeeLog2 = common.Hash{31: 6} + SystemConfigUpdateMinBaseFeeFactors = common.Hash{31: 6} ) var ( @@ -178,22 +178,22 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L case SystemConfigUpdateUnsafeBlockSigner: // Ignored in derivation. This configurable applies to runtime configuration outside of the derivation. return nil - case SystemConfigUpdateMinBaseFeeLog2: + case SystemConfigUpdateMinBaseFeeFactors: if pointer, err := solabi.ReadUint64(reader); err != nil || pointer != 32 { return NewCriticalError(errors.New("invalid pointer field")) } if length, err := solabi.ReadUint64(reader); err != nil || length != 32 { return NewCriticalError(errors.New("invalid length field")) } - minBaseFeeLog2Data, err := solabi.ReadEthBytes32(reader) + minBaseFeeFactorsData, err := solabi.ReadEthBytes32(reader) if err != nil { - return NewCriticalError(errors.New("could not read minBaseFeeLog2")) + return NewCriticalError(errors.New("could not read minBaseFeeFactors")) } if !solabi.EmptyReader(reader) { return NewCriticalError(errors.New("too many bytes")) } - // abi.encode(uint8) right-pads the value, so we need the last byte - destSysCfg.MinBaseFeeLog2 = minBaseFeeLog2Data[31] + // abi.encode(uint256(factors)) left-pads the value, so we need the last byte + destSysCfg.MinBaseFeeFactors = minBaseFeeFactorsData[31] return nil default: return fmt.Errorf("unrecognized L1 sysCfg update type: %s", updateType) diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index 5610429caf055..cc28c12b89e50 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -232,20 +232,22 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { err: false, }, { - name: "SystemConfigUpdateMinBaseFeeLog2", + name: "SystemConfigUpdateMinBaseFeeFactors", log: &types.Log{ Topics: []common.Hash{ ConfigUpdateEventABIHash, ConfigUpdateEventVersion0, - SystemConfigUpdateMinBaseFeeLog2, + SystemConfigUpdateMinBaseFeeFactors, }, }, hook: func(t *testing.T, log *types.Log) *types.Log { - // Set minBaseFeeLog2 to 22 (uint8 value) at the first byte - minBaseFeeLog2Bytes := make([]byte, 32) - minBaseFeeLog2Bytes[31] = 22 // uint8 value at the last byte - minBaseFeeLog2Value := new(big.Int).SetBytes(minBaseFeeLog2Bytes) - numberData, err := oneUint256.Pack(minBaseFeeLog2Value) + // Set minBaseFeeFactors to 1e9 (uint8 value) at the first byte + significand := uint8(1) + exponent := uint8(9) + minBaseFeeFactorsBytes := make([]byte, 32) + minBaseFeeFactorsBytes[31] = significand<<4 | exponent + minBaseFeeFactorsValue := new(big.Int).SetBytes(minBaseFeeFactorsBytes) + numberData, err := oneUint256.Pack(minBaseFeeFactorsValue) require.NoError(t, err) data, err := bytesArgs.Pack(numberData) require.NoError(t, err) @@ -253,8 +255,8 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { return log }, config: eth.SystemConfig{ - EIP1559Params: eth.Bytes8{0, 0, 0, 0, 0, 0, 0, 0}, - MinBaseFeeLog2: 22, + EIP1559Params: eth.Bytes8{0, 0, 0, 0, 0, 0, 0, 0}, + MinBaseFeeFactors: uint8(1)<<4 | uint8(9), }, err: false, }, diff --git a/op-node/rollup/interop/indexing/attributes.go b/op-node/rollup/interop/indexing/attributes.go index b0feb4348963d..9dbeb373b2148 100644 --- a/op-node/rollup/interop/indexing/attributes.go +++ b/op-node/rollup/interop/indexing/attributes.go @@ -56,6 +56,7 @@ func AttributesToReplaceInvalidBlock(invalidatedBlock *eth.ExecutionPayloadEnvel extraData := invalidatedBlock.ExecutionPayload.ExtraData denominator, elasticity, minBaseFee := eip1559.DecodeJovianExtraData(extraData) eip1559Params := eth.Bytes8(eip1559.EncodeHolocene1559Params(denominator, elasticity)) + minBaseFeeFactors := eip1559.EncodeMinBaseFeeFactors(significand, exponent) attrs := ð.PayloadAttributes{ Timestamp: invalidatedBlock.ExecutionPayload.Timestamp, diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index 8bf8139f67904..4d321820d708a 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -62,7 +62,7 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c e = provider.Config().ElasticityMultiplier() } if provider.Config().IsConfigurableMinBaseFee(header.Time) { - header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFeeLog2) + header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFeeFactors) } else { header.Extra = eip1559.EncodeHoloceneExtraData(d, e) } diff --git a/op-program/client/l2/engineapi/l2_engine_api_test.go b/op-program/client/l2/engineapi/l2_engine_api_test.go index ab0f4a53b6e93..339382a4d1f33 100644 --- a/op-program/client/l2/engineapi/l2_engine_api_test.go +++ b/op-program/client/l2/engineapi/l2_engine_api_test.go @@ -199,33 +199,6 @@ func createGenesisWithForkTimeOffset(forkTimeOffset uint64) *core.Genesis { deployConfig.L2GenesisGraniteTimeOffset = &ts deployConfig.L2GenesisHoloceneTimeOffset = &ts -<<<<<<< HEAD -<<<<<<< HEAD - // Set fork time for latest forks - offset := hexutil.Uint64(forkTimeOffset) - deployConfig.L2GenesisIsthmusTimeOffset = &offset - deployConfig.L2GenesisJovianTimeOffset = &offset -======= - // Set isthmus time and subsequent forks - isthmusTimeOffset := hexutil.Uint64(isthmusTime) - deployConfig.L2GenesisIsthmusTimeOffset = &isthmusTimeOffset -======= - // Set fork time for latest forks - forkTimeOffset := hexutil.Uint64(forkTime) - deployConfig.L2GenesisIsthmusTimeOffset = &forkTimeOffset - deployConfig.L2GenesisInteropTimeOffset = &forkTimeOffset - deployConfig.L2GenesisJovianTimeOffset = &forkTimeOffset - - l1Genesis, err := genesis.NewL1Genesis(deployConfig) - if err != nil { - panic(err) ->>>>>>> 7bbf76e6f6 (feedback on e2e and acceptance tests) - } - l2Genesis, err := genesis.NewL2Genesis(deployConfig, eth.BlockRefFromHeader(l1Genesis.ToBlock().Header())) - if err != nil { - panic(err) - } - return l2Genesis } diff --git a/op-program/client/l2/test/miner.go b/op-program/client/l2/test/miner.go index 144d3cda86548..3cdb5765e5a50 100644 --- a/op-program/client/l2/test/miner.go +++ b/op-program/client/l2/test/miner.go @@ -121,7 +121,7 @@ func (m *Miner) Fork(t *testing.T, blockNumber uint64, attrs *eth.PayloadAttribu NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, - MinBaseFeeLog2: 0, + MinBaseFeeFactors: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) @@ -146,7 +146,7 @@ func (m *Miner) MineAt(t *testing.T, head *types.Header, attrs *eth.PayloadAttri NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, - MinBaseFeeLog2: 0, + MinBaseFeeFactors: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) diff --git a/op-service/eth/types.go b/op-service/eth/types.go index baeb589859ea3..8a85d977d0ad2 100644 --- a/op-service/eth/types.go +++ b/op-service/eth/types.go @@ -611,8 +611,8 @@ type SystemConfig struct { // value will be 0 if Holocene is not active, or if derivation has yet to // process any EIP_1559_PARAMS system config update events. EIP1559Params Bytes8 `json:"eip1559Params"` - // MinBaseFeeLog2 is the minimum base fee log2. - MinBaseFeeLog2 uint8 `json:"minBaseFeeLog2"` + // MinBaseFeeFactors is the minimum base fee significand and exponent. + MinBaseFeeFactors uint8 `json:"minBaseFeeFactors"` // OperatorFeeParams identifies the operator fee parameters. OperatorFeeParams Bytes32 `json:"operatorFeeParams"` // More fields can be added for future SystemConfig versions. diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 942162b6e2dfe..6cd2ca39c0310 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -13,7 +13,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, OPERATOR_FEE_PARAMS, - MIN_BASEFEE_LOG2 + MIN_BASE_FEE_FACTORS } struct Addresses { @@ -73,7 +73,8 @@ interface ISystemConfig is IProxyAdminOwnedBase { function minimumGasLimit() external view returns (uint64); function operatorFeeConstant() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); - function minBaseFeeLog2() external view returns (uint8); + function minBaseFeeSignificand() external view returns (uint8); + function minBaseFeeExponent() external view returns (uint8); function optimismMintableERC20Factory() external view returns (address addr_); function optimismPortal() external view returns (address addr_); function overhead() external view returns (uint256); @@ -88,7 +89,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external; function setUnsafeBlockSigner(address _unsafeBlockSigner) external; function setEIP1559Params(uint32 _denominator, uint32 _elasticity) external; - function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) external; + function setMinBaseFee(uint8 _significand, uint8 _exponent) external; function startBlock() external view returns (uint256 startBlock_); function transferOwnership(address newOwner) external; // nosemgrep function unsafeBlockSigner() external view returns (address addr_); diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 6b8e1e52464ce..6c02538937702 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -35,7 +35,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, OPERATOR_FEE_PARAMS, - MIN_BASE_FEE_LOG2 + MIN_BASE_FEE_FACTORS } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -432,18 +432,21 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.EIP_1559_PARAMS, data); } - /// @notice Updates the min base fee log2. Can only be called by the owner. - /// @param _minBaseFeeLog2 New min base fee log2. - function setMinBaseFeeLog2(uint8 _minBaseFeeLog2) external onlyOwner { - _setMinBaseFeeLog2(_minBaseFeeLog2); + /// @notice Updates the minimum base fee significand and exponent. Can only be called by the owner. + /// @param _significand New significand. + /// @param _exponent New exponent. + function setMinBaseFee(uint8 _significand, uint8 _exponent) external onlyOwner { + _setMinBaseFee(_significand, _exponent); } - /// @notice Internal function for updating the min base fee log2. - function _setMinBaseFeeLog2(uint8 _minBaseFeeLog2) internal { - minBaseFeeLog2 = _minBaseFeeLog2; + /// @notice Internal function for updating the minimum base fee significand and exponent. + function _setMinBaseFee(uint8 _significand, uint8 _exponent) internal { + minBaseFeeSignificand = _significand; + minBaseFeeExponent = _exponent; - bytes memory data = abi.encode(_minBaseFeeLog2); - emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE_LOG2, data); + uint8 packed = (_significand & 0x0f) << 4 | (_exponent & 0x0f); + bytes memory data = abi.encode(uint256(packed)); + emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE_FACTORS, data); } /// @notice Updates the operator fee parameters. Can only be called by the owner. From ed282833271ecec1b7e9c0e6cb45f79bdc3fab27 Mon Sep 17 00:00:00 2001 From: Niran Babalola Date: Thu, 14 Aug 2025 22:55:50 -0500 Subject: [PATCH 37/56] Remove unnecessary type cast --- packages/contracts-bedrock/src/L1/SystemConfig.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 6c02538937702..7d53bb46fb5ac 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -445,7 +445,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl minBaseFeeExponent = _exponent; uint8 packed = (_significand & 0x0f) << 4 | (_exponent & 0x0f); - bytes memory data = abi.encode(uint256(packed)); + bytes memory data = abi.encode(packed); emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE_FACTORS, data); } From 4226742441be7bc7e21c7722f6f32434d197e166 Mon Sep 17 00:00:00 2001 From: Niran Babalola Date: Fri, 15 Aug 2025 00:35:15 -0500 Subject: [PATCH 38/56] Rewrite tests to work with sysgo and correct the logic for testing w/ minimum enabled --- op-acceptance-tests/tests/jovian/init_test.go | 2 +- .../tests/jovian/min_base_fee_test.go | 354 ++++++------------ op-devstack/presets/jovian.go | 21 ++ 3 files changed, 137 insertions(+), 240 deletions(-) create mode 100644 op-devstack/presets/jovian.go diff --git a/op-acceptance-tests/tests/jovian/init_test.go b/op-acceptance-tests/tests/jovian/init_test.go index a760b7e537383..6ff65ffe07f71 100644 --- a/op-acceptance-tests/tests/jovian/init_test.go +++ b/op-acceptance-tests/tests/jovian/init_test.go @@ -7,5 +7,5 @@ import ( ) func TestMain(m *testing.M) { - presets.DoMain(m, presets.WithMinimal()) + presets.DoMain(m, presets.WithMinimal(), presets.WithJovianAtGenesis()) } diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 48400f2d0e735..bef967e07ec45 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -1,274 +1,150 @@ package jovian import ( - "context" - "crypto/ecdsa" "math/big" "testing" "time" - "github.com/ethereum-optimism/optimism/devnet-sdk/system" - "github.com/ethereum-optimism/optimism/devnet-sdk/testing/systest" - "github.com/ethereum-optimism/optimism/devnet-sdk/testing/testlib/validators" - "github.com/ethereum-optimism/optimism/devnet-sdk/types" - "github.com/ethereum-optimism/optimism/op-e2e/bindings" + "github.com/ethereum-optimism/optimism/op-chain-ops/devkeys" + "github.com/ethereum-optimism/optimism/op-devstack/devtest" + "github.com/ethereum-optimism/optimism/op-devstack/dsl" + "github.com/ethereum-optimism/optimism/op-devstack/presets" "github.com/ethereum-optimism/optimism/op-node/rollup" - "github.com/ethereum/go-ethereum/accounts/abi/bind" + "github.com/ethereum-optimism/optimism/op-service/apis" + "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" + "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" "github.com/ethereum/go-ethereum/consensus/misc/eip1559" - gethTypes "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum/go-ethereum/ethclient" - "github.com/ethereum/go-ethereum/params" - "github.com/stretchr/testify/require" ) -// TestConfigurableMinBaseFee verifies that the configurable minimum base fee feature works correctly -func TestConfigurableMinBaseFee(t *testing.T) { - t.Run("MinBaseFeeOff", func(t *testing.T) { - // when minBaseFee is 0, base fees can drop normally - runMinBaseFeeTest(t, configurableMinBaseFeeOffTestScenario) +// TestConfigurableMinBaseFee verifies configurable minimum base fee using devstack presets (sysgo). +func TestConfigurableMinBaseFee(gt *testing.T) { + t := devtest.SerialT(gt) + sys := presets.NewMinimal(t) + if err := dsl.RequiresL2Fork(t.Ctx(), sys, 0, rollup.Jovian); err != nil { + t.Skipf("precondition not met: %v", err) + } + + t.Run("MinBaseFeeOff", func(tt devtest.T) { + // Ensure minBaseFee factors are 0 and base-fee can decrease. + ensureMinBaseFeeFactors(tt, sys, 0, 0) + // Wait for L2 to reflect factors=0 + waitForMinBaseFeeFactors(tt, sys, eip1559.EncodeMinBaseFeeFactors(0, 0), 1*time.Minute) + checkBaseFeeCanDecrease(tt, sys) }) - t.Run("MinBaseFeeOn", func(t *testing.T) { - // when it's enabled with a non-zero value - runMinBaseFeeTest(t, configurableMinBaseFeeOnTestScenario) + t.Run("MinBaseFeeOn", func(tt devtest.T) { + // Configure 1 gwei minimum base fee and verify it clamps base-fee + significand := uint8(1) + exponent := uint8(9) + minBase := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(exponent)), nil) + minBase.Mul(minBase, big.NewInt(int64(significand))) + + ensureMinBaseFeeFactors(tt, sys, significand, exponent) + // Wait until extra-data reflects new factors + waitForMinBaseFeeFactors(tt, sys, eip1559.EncodeMinBaseFeeFactors(significand, exponent), 2*time.Minute) + // Verify subsequent blocks respect the minimum + verifyMinBaseFeeClamp(tt, sys, minBase) }) } -// runMinBaseFeeTest runs a min base fee test with common setup -func runMinBaseFeeTest(t *testing.T, scenario func(validators.WalletGetter, uint64) systest.SystemTestFunc) { - // Define which L2 chain we'll test - chainIdx := uint64(0) - - // Get validators and getters for accessing the system and wallets - walletGetter, walletValidator := validators.AcquireL2WalletWithFunds(chainIdx, types.NewBalance(big.NewInt(params.Ether))) - - _, forkValidator := validators.AcquireL2WithFork(chainIdx, rollup.Jovian) - systest.SystemTest(t, - scenario(walletGetter, chainIdx), - walletValidator, - forkValidator, +// ensureMinBaseFeeFactors sets the minBaseFee factors via SystemConfig on L1. +func ensureMinBaseFeeFactors(t devtest.T, sys *presets.Minimal, significand, exponent uint8) { + owner := systemConfigOwnerEOA(t, sys) + // Build a minimal binding with SetMinBaseFee + type sysCfgMinBaseFee struct { + SetMinBaseFee func(sig uint8, exp uint8) bindings.TypedCall[any] `sol:"setMinBaseFee"` + } + syscfg := bindings.NewBindings[sysCfgMinBaseFee]( + bindings.WithTest(t), + bindings.WithClient(sys.L1EL.EthClient()), + bindings.WithTo(sys.L2Chain.Escape().Deployment().SystemConfigProxyAddr()), ) + _, err := contractio.Write(syscfg.SetMinBaseFee(significand, exponent), t.Ctx(), owner.Plan()) + t.Require().NoError(err, "SetMinBaseFee transaction failed") } -// configurableMinBaseFeeOffTestScenario creates a test scenario for when minBaseFee is 0 (disabled) -func configurableMinBaseFeeOffTestScenario( - walletGetter validators.WalletGetter, - chainIdx uint64, -) systest.SystemTestFunc { - return func(t systest.T, sys system.System) { - ctx := t.Context() - l2Client, chainConfig := getL2ClientAndConfig(t, sys, chainIdx) - - // Wait for at least block 1 to avoid genesis block edge cases - initialHeader, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) - require.NoError(t, err) - - // Verify that we're on Jovian fork - require.True(t, chainConfig.IsJovian(initialHeader.Time), "Chain must be running on Jovian fork for this test") - - // Verify Jovian extra data encoding (should be 10 bytes) - require.Len(t, initialHeader.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - - // Ensure minBaseFeeFactors is 0 (disabled) - initialMinBaseFeeFactors := uint8(initialHeader.Extra[9]) - if initialMinBaseFeeFactors != 0 { - // Set it to 0 to test the "off" state - setMinBaseFeeFactors(t, ctx, sys, chainIdx, 0) - time.Sleep(3 * time.Second) - } - - // Collect headers from multiple blocks - headers := collectBlockHeaders(t, ctx, l2Client, initialHeader, 5) - - // With minBaseFee disabled (0), base fees should be able to decrease - foundDecrease := checkForBaseFeeDecrease(t, headers) - require.True(t, foundDecrease, "Expected base fee to decrease when minBaseFee is disabled") - - // Verify minBaseFeeFactors remains 0 in all blocks - for _, h := range headers { - require.Len(t, h.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - minBaseFeeFactors := uint8(h.Extra[9]) - require.Equal(t, uint8(0), minBaseFeeFactors, "MinBaseFeeFactors should be 0 when disabled") - } - - t.Logf("Successfully verified that base fees can decrease when minBaseFee is disabled:") - t.Logf(" - Initial base fee: %s", headers[0].BaseFee.String()) - t.Logf(" - Final base fee: %s", headers[len(headers)-1].BaseFee.String()) - t.Logf(" - Found decreasing base fee trend") - } +// systemConfigOwnerEOA derives the SystemConfigOwner role key and binds it to L1 EL. +func systemConfigOwnerEOA(t devtest.T, sys *presets.Minimal) *dsl.EOA { + priv := sys.L2Chain.Escape().Keys().Secret(devkeys.SystemConfigOwner.Key(sys.L2Chain.ChainID().ToBig())) + return dsl.NewKey(t, priv).User(sys.L1EL) } -// configurableMinBaseFeeOnTestScenario creates a test scenario for verifying configurable minimum base fee when enabled -func configurableMinBaseFeeOnTestScenario( - walletGetter validators.WalletGetter, - chainIdx uint64, -) systest.SystemTestFunc { - return func(t systest.T, sys system.System) { - ctx := t.Context() - l2Client, chainConfig := getL2ClientAndConfig(t, sys, chainIdx) - require.NotNil(t, chainConfig.JovianTime, "Jovian fork must be configured") - - // Wait for at least block 1 to avoid genesis block edge cases - initialHeader, err := l2Client.HeaderByNumber(ctx, big.NewInt(1)) - require.NoError(t, err) - - // Verify that we're on Jovian fork - require.True(t, chainConfig.IsJovian(initialHeader.Time), "Chain must be running on Jovian fork for this test") - - // Verify initial state: minBaseFeeFactors default value is zero - require.Len(t, initialHeader.Extra, 10, "Jovian blocks should have 10 bytes of extra data") - initialMinBaseFeeFactors := uint8(initialHeader.Extra[9]) - require.Equal(t, uint8(0), initialMinBaseFeeFactors, "MinBaseFee should initially be zero") - - // Set minBaseFeeFactors via SystemConfig contract - minBaseFeeFactors := eip1559.EncodeMinBaseFeeFactors(1, 9) // 1 * 10^9 = 1 gwei minimum base fee - setMinBaseFeeFactors(t, ctx, sys, chainIdx, minBaseFeeFactors) - - // Wait a bit for the L2 to process the L1 change - time.Sleep(3 * time.Second) - - // Get a header after the configuration - configuredHeader, err := l2Client.HeaderByNumber(ctx, nil) - require.NoError(t, err) - - // Convert significand and exponent to actual minimum base fee (significand * 10^exponent) - significand, exponent := eip1559.DecodeMinBaseFeeFactors(minBaseFeeFactors) - minBaseFee := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(exponent)), nil) - minBaseFee.Mul(minBaseFee, big.NewInt(int64(significand))) - - // Verify the minimum base fee constraint is enforced from this point forward - remainingHeaders := collectBlockHeaders(t, ctx, l2Client, configuredHeader, 5) - for _, h := range remainingHeaders { - require.True(t, h.BaseFee.Cmp(minBaseFee) >= 0, - "Block %d base fee (%s) should be >= minimum base fee (%s)", - h.Number.Uint64(), h.BaseFee.String(), minBaseFee.String()) +// waitForMinBaseFeeFactors waits until the L2 latest payload extra-data encodes the expected factors. +func waitForMinBaseFeeFactors(t devtest.T, sys *presets.Minimal, expected uint8, timeout time.Duration) { + deadline := time.Now().Add(timeout) + client := sys.L2EL.Escape().L2EthClient() + ext, ok := client.(apis.L2EthExtendedClient) + t.Require().True(ok, "L2 client does not support extended payload API") + for time.Now().Before(deadline) { + payload, err := ext.PayloadByLabel(t.Ctx(), "latest") + if err == nil && len(payload.ExecutionPayload.ExtraData) == 10 { + got := uint8(payload.ExecutionPayload.ExtraData[9]) + if got == expected { + return + } } - - finalHeader := remainingHeaders[len(remainingHeaders)-1] - t.Logf("Successfully verified configurable minimum base fee feature:") - t.Logf(" - Initial minBaseFeeFactors: 0x%02x", initialMinBaseFeeFactors) - t.Logf(" - Configured minBaseFeeFactors: 0x%02x", minBaseFeeFactors) - t.Logf(" - Minimum base fee: %s", minBaseFee.String()) - t.Logf(" - Final base fee: %s", finalHeader.BaseFee.String()) + time.Sleep(time.Second) } + t.Require().Failf("timeout", "timeout waiting for L2 to reflect minBaseFeeFactors (want=0x%02x)", expected) } -// Helper functions - -// getL2ClientAndConfig returns the L2 client and chain config for the specified chain -func getL2ClientAndConfig(t systest.T, sys system.System, chainIdx uint64) (*ethclient.Client, *params.ChainConfig) { - l2Chain := sys.L2s()[chainIdx] - l2Client, err := l2Chain.Nodes()[0].GethClient() - require.NoError(t, err) - - chainConfig, err := l2Chain.Config() - require.NoError(t, err) - - return l2Client, chainConfig -} - -// collectBlockHeaders collects headers from multiple consecutive blocks -func collectBlockHeaders(t systest.T, ctx context.Context, l2Client *ethclient.Client, initialHeader *gethTypes.Header, numBlocks int) []*gethTypes.Header { - if initialHeader == nil { - require.Fail(t, "initialHeader cannot be nil") - return nil +// checkBaseFeeCanDecrease collects a few blocks and verifies base-fee can decrease. + +func checkBaseFeeCanDecrease(t devtest.T, sys *presets.Minimal) { + // Ensure we are past genesis and collect a small sample across advancing blocks + _ = sys.L2EL.WaitForBlock() + el := sys.L2EL.Escape().EthClient() + bases := make([]*big.Int, 0, 6) + info, err := el.InfoByLabel(t.Ctx(), "latest") + t.Require().NoError(err) + bases = append(bases, info.BaseFee()) + for i := 0; i < 5; i++ { + _ = sys.L2EL.WaitForBlock() + next, err := el.InfoByLabel(t.Ctx(), "latest") + t.Require().NoError(err) + bases = append(bases, next.BaseFee()) } - - var headers []*gethTypes.Header - headers = append(headers, initialHeader) - - for i := 0; i < numBlocks; i++ { - if len(headers) == 0 { - require.Fail(t, "headers slice is empty, cannot continue") - return nil + decreased := false + for i := 1; i < len(bases); i++ { + if bases[i].Cmp(bases[i-1]) < 0 { + decreased = true + break } - nextBlockNum := new(big.Int).Add(headers[len(headers)-1].Number, big.NewInt(1)) - - // Poll for the next block (simple polling) - var nextHeader *gethTypes.Header - var err error - for attempts := 0; attempts < 20; attempts++ { // Wait up to 20 seconds - nextHeader, err = l2Client.HeaderByNumber(ctx, nextBlockNum) - if err == nil { - break - } - // Wait 1 second before trying again - select { - case <-ctx.Done(): - require.NoError(t, ctx.Err()) - case <-time.After(time.Second): - } - } - require.NoError(t, err, "Should be able to get next block header") - headers = append(headers, nextHeader) } - - return headers + t.Require().True(decreased, "expected base-fee to decrease when minBaseFee=0") } -// checkForBaseFeeDecrease checks if any base fee decreased between consecutive blocks -func checkForBaseFeeDecrease(t systest.T, headers []*gethTypes.Header) bool { - for i := 1; i < len(headers); i++ { - if headers[i].BaseFee.Cmp(headers[i-1].BaseFee) < 0 { - t.Logf("Base fee decreased from %s to %s between blocks %d and %d", - headers[i-1].BaseFee.String(), headers[i].BaseFee.String(), - headers[i-1].Number.Uint64(), headers[i].Number.Uint64()) - return true - } +// verifyMinBaseFeeClamp verifies that subsequent blocks respect the minimum base fee. +func verifyMinBaseFeeClamp(t devtest.T, sys *presets.Minimal, minBase *big.Int) { + // Give the sequencer one more block, then check a few consecutive blocks + _ = sys.L2EL.WaitForBlock() + el := sys.L2EL.Escape().EthClient() + head, err := el.InfoByLabel(t.Ctx(), "latest") + t.Require().NoError(err) + start := head.NumberU64() + // Skip the first block, as the minBaseFeeFactors are not yet applied. + for i := 1; i < 5; i++ { + target := start + uint64(i) + waitUntilL2BlockAvailable(t, sys, target, 10*time.Second) + info, err := el.InfoByNumber(t.Ctx(), target) + t.Require().NoError(err) + t.Require().True(info.BaseFee().Cmp(minBase) >= 0, "block %d base-fee %s should be >= %s", target, info.BaseFee(), minBase) } - return false } -// setMinBaseFeeFactors configures the minimum base fee via SystemConfig contract -func setMinBaseFeeFactors(t systest.T, ctx context.Context, sys system.System, chainIdx uint64, minBaseFeeFactors uint8) { - // Get L1 client - l1Client, err := sys.L1().Nodes()[0].GethClient() - require.NoError(t, err) - - // Get L2 chain for L1 addresses - l2Chain := sys.L2s()[chainIdx] - l1Addresses := l2Chain.L1Addresses() - - // Get SystemConfig proxy address - systemConfigAddr, exists := l1Addresses["SystemConfigProxy"] - require.True(t, exists, "SystemConfigProxy address must exist") - - // Get L1 wallet for transactions - l1Wallets := l2Chain.L1Wallets() - - // Try different wallet names - var wallet system.Wallet - for name, w := range l1Wallets { - wallet = w - t.Logf("Found L1 wallet: %s", name) - break +// waitUntilL2BlockAvailable waits until the given L2 block number exists and is queryable. +func waitUntilL2BlockAvailable(t devtest.T, sys *presets.Minimal, target uint64, timeout time.Duration) { + el := sys.L2EL.Escape().EthClient() + deadline := time.Now().Add(timeout) + for time.Now().Before(deadline) { + head, err := el.InfoByLabel(t.Ctx(), "latest") + t.Require().NoError(err) + if head.NumberU64() >= target { + if info, err := el.InfoByNumber(t.Ctx(), target); err == nil && info != nil { + return + } + } + time.Sleep(time.Second) } - require.NotNil(t, wallet, "Must have at least one L1 wallet") - - // Get chain ID - chainID, err := l1Client.ChainID(ctx) - require.NoError(t, err) - - // Create transactor using the wallet's private key - privKey := wallet.PrivateKey() - // types.Key is actually *ecdsa.PrivateKey - ecdsaKey := (*ecdsa.PrivateKey)(privKey) - opts, err := bind.NewKeyedTransactorWithChainID(ecdsaKey, chainID) - require.NoError(t, err) - - // Bind to SystemConfig contract - sysconfig, err := bindings.NewSystemConfig(systemConfigAddr, l1Client) - require.NoError(t, err) - - // Set the minBaseFeeFactors value - significand, exponent := eip1559.DecodeMinBaseFeeFactors(minBaseFeeFactors) - tx, err := sysconfig.SetMinBaseFee(opts, significand, exponent) - require.NoError(t, err, "SetMinBaseFee transaction") - - // Wait for transaction to be mined - receipt, err := bind.WaitMined(ctx, l1Client, tx) - require.NoError(t, err, "waiting for SetMinBaseFee transaction") - require.Equal(t, uint64(1), receipt.Status, "SetMinBaseFee transaction should succeed") - - t.Logf("Successfully set minBaseFee to %d * 10^%d in tx %s", significand, exponent, tx.Hash().Hex()) + t.Require().Failf("timeout", "timeout waiting for L2 block %d to be available", target) } diff --git a/op-devstack/presets/jovian.go b/op-devstack/presets/jovian.go new file mode 100644 index 0000000000000..b0a96d763201b --- /dev/null +++ b/op-devstack/presets/jovian.go @@ -0,0 +1,21 @@ +package presets + +import ( + "github.com/ethereum-optimism/optimism/op-chain-ops/devkeys" + "github.com/ethereum-optimism/optimism/op-devstack/devtest" + "github.com/ethereum-optimism/optimism/op-devstack/stack" + "github.com/ethereum-optimism/optimism/op-devstack/sysgo" + "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/intentbuilder" + "github.com/ethereum-optimism/optimism/op-node/rollup" +) + +// WithJovianAtGenesis configures all L2s to activate the Jovian fork at genesis in sysgo mode. +func WithJovianAtGenesis() stack.CommonOption { + return stack.MakeCommon(sysgo.WithDeployerOptions( + func(p devtest.P, _ devkeys.Keys, builder intentbuilder.Builder) { + for _, l2Cfg := range builder.L2s() { + l2Cfg.WithForkAtGenesis(rollup.Jovian) + } + }, + )) +} From cfb75697da7eb4fd184b666f76dad97fd3e2e8cd Mon Sep 17 00:00:00 2001 From: Niran Babalola Date: Fri, 15 Aug 2025 00:35:28 -0500 Subject: [PATCH 39/56] Rename test --- op-e2e/system/fees/{minbasefeelog2_test.go => minbasefee_test.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename op-e2e/system/fees/{minbasefeelog2_test.go => minbasefee_test.go} (100%) diff --git a/op-e2e/system/fees/minbasefeelog2_test.go b/op-e2e/system/fees/minbasefee_test.go similarity index 100% rename from op-e2e/system/fees/minbasefeelog2_test.go rename to op-e2e/system/fees/minbasefee_test.go From 743b9adf5e96a113d6d5889ad16de2a8b9debd56 Mon Sep 17 00:00:00 2001 From: Niran Babalola Date: Mon, 18 Aug 2025 19:16:42 -0500 Subject: [PATCH 40/56] Extract testing utilities into dsl functions like the operator fee tests --- .../tests/jovian/min_base_fee_test.go | 161 ++++-------------- op-devstack/dsl/min_base_fee.go | 157 +++++++++++++++++ 2 files changed, 194 insertions(+), 124 deletions(-) create mode 100644 op-devstack/dsl/min_base_fee.go diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index bef967e07ec45..66077ad88551f 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -3,148 +3,61 @@ package jovian import ( "math/big" "testing" - "time" - "github.com/ethereum-optimism/optimism/op-chain-ops/devkeys" "github.com/ethereum-optimism/optimism/op-devstack/devtest" "github.com/ethereum-optimism/optimism/op-devstack/dsl" "github.com/ethereum-optimism/optimism/op-devstack/presets" "github.com/ethereum-optimism/optimism/op-node/rollup" - "github.com/ethereum-optimism/optimism/op-service/apis" - "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" - "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" - "github.com/ethereum/go-ethereum/consensus/misc/eip1559" + "github.com/ethereum-optimism/optimism/op-service/eth" ) -// TestConfigurableMinBaseFee verifies configurable minimum base fee using devstack presets (sysgo). +// TestConfigurableMinBaseFee verifies configurable minimum base fee using devstack presets. func TestConfigurableMinBaseFee(gt *testing.T) { t := devtest.SerialT(gt) sys := presets.NewMinimal(t) - if err := dsl.RequiresL2Fork(t.Ctx(), sys, 0, rollup.Jovian); err != nil { - t.Skipf("precondition not met: %v", err) - } + require := t.Require() - t.Run("MinBaseFeeOff", func(tt devtest.T) { - // Ensure minBaseFee factors are 0 and base-fee can decrease. - ensureMinBaseFeeFactors(tt, sys, 0, 0) - // Wait for L2 to reflect factors=0 - waitForMinBaseFeeFactors(tt, sys, eip1559.EncodeMinBaseFeeFactors(0, 0), 1*time.Minute) - checkBaseFeeCanDecrease(tt, sys) - }) + err := dsl.RequiresL2Fork(t.Ctx(), sys, 0, rollup.Jovian) + require.NoError(err, "Jovian fork must be active for this test") - t.Run("MinBaseFeeOn", func(tt devtest.T) { - // Configure 1 gwei minimum base fee and verify it clamps base-fee - significand := uint8(1) - exponent := uint8(9) - minBase := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(exponent)), nil) - minBase.Mul(minBase, big.NewInt(int64(significand))) + minBaseFee := dsl.NewMinBaseFee(t, sys.L2Chain, sys.L1EL, sys.L2EL) - ensureMinBaseFeeFactors(tt, sys, significand, exponent) - // Wait until extra-data reflects new factors - waitForMinBaseFeeFactors(tt, sys, eip1559.EncodeMinBaseFeeFactors(significand, exponent), 2*time.Minute) - // Verify subsequent blocks respect the minimum - verifyMinBaseFeeClamp(tt, sys, minBase) - }) -} + minBaseFee.CheckCompatibility() + systemOwner := minBaseFee.GetSystemOwner() + sys.FunderL1.FundAtLeast(systemOwner, eth.OneTenthEther) -// ensureMinBaseFeeFactors sets the minBaseFee factors via SystemConfig on L1. -func ensureMinBaseFeeFactors(t devtest.T, sys *presets.Minimal, significand, exponent uint8) { - owner := systemConfigOwnerEOA(t, sys) - // Build a minimal binding with SetMinBaseFee - type sysCfgMinBaseFee struct { - SetMinBaseFee func(sig uint8, exp uint8) bindings.TypedCall[any] `sol:"setMinBaseFee"` + testCases := []struct { + name string + significand uint8 + exponent uint8 + shouldClamp bool + }{ + {"MinBaseFeeOff", 0, 0, false}, + {"MinBaseFeeOn", 1, 9, true}, } - syscfg := bindings.NewBindings[sysCfgMinBaseFee]( - bindings.WithTest(t), - bindings.WithClient(sys.L1EL.EthClient()), - bindings.WithTo(sys.L2Chain.Escape().Deployment().SystemConfigProxyAddr()), - ) - _, err := contractio.Write(syscfg.SetMinBaseFee(significand, exponent), t.Ctx(), owner.Plan()) - t.Require().NoError(err, "SetMinBaseFee transaction failed") -} - -// systemConfigOwnerEOA derives the SystemConfigOwner role key and binds it to L1 EL. -func systemConfigOwnerEOA(t devtest.T, sys *presets.Minimal) *dsl.EOA { - priv := sys.L2Chain.Escape().Keys().Secret(devkeys.SystemConfigOwner.Key(sys.L2Chain.ChainID().ToBig())) - return dsl.NewKey(t, priv).User(sys.L1EL) -} -// waitForMinBaseFeeFactors waits until the L2 latest payload extra-data encodes the expected factors. -func waitForMinBaseFeeFactors(t devtest.T, sys *presets.Minimal, expected uint8, timeout time.Duration) { - deadline := time.Now().Add(timeout) - client := sys.L2EL.Escape().L2EthClient() - ext, ok := client.(apis.L2EthExtendedClient) - t.Require().True(ok, "L2 client does not support extended payload API") - for time.Now().Before(deadline) { - payload, err := ext.PayloadByLabel(t.Ctx(), "latest") - if err == nil && len(payload.ExecutionPayload.ExtraData) == 10 { - got := uint8(payload.ExecutionPayload.ExtraData[9]) - if got == expected { - return + for _, tc := range testCases { + t.Run(tc.name, func(t devtest.T) { + minBaseFee.SetMinBaseFeeFactors(tc.significand, tc.exponent) + minBaseFee.WaitForL2Sync(tc.significand, tc.exponent) + minBaseFee.VerifyL2Config(tc.significand, tc.exponent) + + if tc.shouldClamp { + // Calculate minimum base fee: significand * 10^exponent + minBase := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(tc.exponent)), nil) + minBase.Mul(minBase, big.NewInt(int64(tc.significand))) + minBaseFee.VerifyMinBaseFeeClamp(minBase) + } else { + minBaseFee.CheckBaseFeeCanDecrease() } - } - time.Sleep(time.Second) - } - t.Require().Failf("timeout", "timeout waiting for L2 to reflect minBaseFeeFactors (want=0x%02x)", expected) -} - -// checkBaseFeeCanDecrease collects a few blocks and verifies base-fee can decrease. -func checkBaseFeeCanDecrease(t devtest.T, sys *presets.Minimal) { - // Ensure we are past genesis and collect a small sample across advancing blocks - _ = sys.L2EL.WaitForBlock() - el := sys.L2EL.Escape().EthClient() - bases := make([]*big.Int, 0, 6) - info, err := el.InfoByLabel(t.Ctx(), "latest") - t.Require().NoError(err) - bases = append(bases, info.BaseFee()) - for i := 0; i < 5; i++ { - _ = sys.L2EL.WaitForBlock() - next, err := el.InfoByLabel(t.Ctx(), "latest") - t.Require().NoError(err) - bases = append(bases, next.BaseFee()) + t.Log("Test completed successfully:", + "testCase", tc.name, + "significand", tc.significand, + "exponent", tc.exponent, + "shouldClamp", tc.shouldClamp) + }) } - decreased := false - for i := 1; i < len(bases); i++ { - if bases[i].Cmp(bases[i-1]) < 0 { - decreased = true - break - } - } - t.Require().True(decreased, "expected base-fee to decrease when minBaseFee=0") -} -// verifyMinBaseFeeClamp verifies that subsequent blocks respect the minimum base fee. -func verifyMinBaseFeeClamp(t devtest.T, sys *presets.Minimal, minBase *big.Int) { - // Give the sequencer one more block, then check a few consecutive blocks - _ = sys.L2EL.WaitForBlock() - el := sys.L2EL.Escape().EthClient() - head, err := el.InfoByLabel(t.Ctx(), "latest") - t.Require().NoError(err) - start := head.NumberU64() - // Skip the first block, as the minBaseFeeFactors are not yet applied. - for i := 1; i < 5; i++ { - target := start + uint64(i) - waitUntilL2BlockAvailable(t, sys, target, 10*time.Second) - info, err := el.InfoByNumber(t.Ctx(), target) - t.Require().NoError(err) - t.Require().True(info.BaseFee().Cmp(minBase) >= 0, "block %d base-fee %s should be >= %s", target, info.BaseFee(), minBase) - } -} - -// waitUntilL2BlockAvailable waits until the given L2 block number exists and is queryable. -func waitUntilL2BlockAvailable(t devtest.T, sys *presets.Minimal, target uint64, timeout time.Duration) { - el := sys.L2EL.Escape().EthClient() - deadline := time.Now().Add(timeout) - for time.Now().Before(deadline) { - head, err := el.InfoByLabel(t.Ctx(), "latest") - t.Require().NoError(err) - if head.NumberU64() >= target { - if info, err := el.InfoByNumber(t.Ctx(), target); err == nil && info != nil { - return - } - } - time.Sleep(time.Second) - } - t.Require().Failf("timeout", "timeout waiting for L2 block %d to be available", target) + minBaseFee.RestoreOriginalConfig() } diff --git a/op-devstack/dsl/min_base_fee.go b/op-devstack/dsl/min_base_fee.go new file mode 100644 index 0000000000000..7588bf6cafda7 --- /dev/null +++ b/op-devstack/dsl/min_base_fee.go @@ -0,0 +1,157 @@ +package dsl + +import ( + "math/big" + "time" + + "github.com/ethereum-optimism/optimism/op-chain-ops/devkeys" + "github.com/ethereum-optimism/optimism/op-devstack/devtest" + "github.com/ethereum-optimism/optimism/op-service/apis" + "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" + "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" +) + +type MinBaseFee struct { + commonImpl + + l1Client *L1ELNode + l2Network *L2Network + l2EL *L2ELNode + systemConfig minBaseFeeSystemConfig + + originalSignificand uint8 + originalExponent uint8 +} + +type minBaseFeeSystemConfig struct { + SetMinBaseFee func(sig uint8, exp uint8) bindings.TypedCall[any] `sol:"setMinBaseFee"` + MinBaseFeeSignificand func() bindings.TypedCall[uint8] `sol:"minBaseFeeSignificand"` + MinBaseFeeExponent func() bindings.TypedCall[uint8] `sol:"minBaseFeeExponent"` +} + +func NewMinBaseFee(t devtest.T, l2Network *L2Network, l1EL *L1ELNode, l2EL *L2ELNode) *MinBaseFee { + systemConfig := bindings.NewBindings[minBaseFeeSystemConfig]( + bindings.WithClient(l1EL.EthClient()), + bindings.WithTo(l2Network.Escape().Deployment().SystemConfigProxyAddr()), + bindings.WithTest(t)) + + originalSig, err := contractio.Read(systemConfig.MinBaseFeeSignificand(), t.Ctx()) + t.Require().NoError(err, "reading original minBaseFeeSignificand") + originalExp, err := contractio.Read(systemConfig.MinBaseFeeExponent(), t.Ctx()) + t.Require().NoError(err, "reading original minBaseFeeExponent") + + return &MinBaseFee{ + commonImpl: commonFromT(t), + l1Client: l1EL, + l2Network: l2Network, + l2EL: l2EL, + systemConfig: systemConfig, + originalSignificand: originalSig, + originalExponent: originalExp, + } +} + +func (mbf *MinBaseFee) CheckCompatibility() bool { + _, err := contractio.Read(mbf.systemConfig.MinBaseFeeSignificand(), mbf.ctx) + if err != nil { + mbf.t.Skipf("MinBaseFee methods not available in devstack: %v", err) + return false + } + return true +} + +func (mbf *MinBaseFee) GetSystemOwner() *EOA { + priv := mbf.l2Network.Escape().Keys().Secret(devkeys.SystemConfigOwner.Key(mbf.l2Network.ChainID().ToBig())) + return NewKey(mbf.t, priv).User(mbf.l1Client) +} + +func (mbf *MinBaseFee) SetMinBaseFeeFactors(significand, exponent uint8) { + owner := mbf.GetSystemOwner() + + _, err := contractio.Write(mbf.systemConfig.SetMinBaseFee(significand, exponent), mbf.ctx, owner.Plan()) + mbf.require.NoError(err, "SetMinBaseFee transaction failed") + + mbf.t.Logf("Set min base fee factors on L1: significand=%d, exponent=%d", significand, exponent) +} + +func (mbf *MinBaseFee) WaitForL2Sync(expectedSignificand, expectedExponent uint8) { + expected := eip1559.EncodeMinBaseFeeFactors(expectedSignificand, expectedExponent) + mbf.waitForMinBaseFeeFactors(expected) +} + +func (mbf *MinBaseFee) VerifyL2Config(expectedSignificand, expectedExponent uint8) { + expected := eip1559.EncodeMinBaseFeeFactors(expectedSignificand, expectedExponent) + client := mbf.l2EL.Escape().L2EthClient() + ext, ok := client.(apis.L2EthExtendedClient) + mbf.require.True(ok, "L2 client does not support extended payload API") + + payload, err := ext.PayloadByLabel(mbf.ctx, "latest") + mbf.require.NoError(err, "failed to get latest payload") + mbf.require.True(len(payload.ExecutionPayload.ExtraData) == 10, "payload extra data should be 10 bytes") + + got := uint8(payload.ExecutionPayload.ExtraData[9]) + mbf.require.Equal(expected, got, "L2 min base fee factors do not match expected") +} + +func (mbf *MinBaseFee) CheckBaseFeeCanDecrease() { + // Ensure we are past genesis and collect a small sample across advancing blocks + _ = mbf.l2EL.WaitForBlock() + el := mbf.l2EL.Escape().EthClient() + bases := make([]*big.Int, 0, 6) + info, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.NoError(err) + bases = append(bases, info.BaseFee()) + for i := 0; i < 5; i++ { + _ = mbf.l2EL.WaitForBlock() + next, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.NoError(err) + bases = append(bases, next.BaseFee()) + } + decreased := false + for i := 1; i < len(bases); i++ { + if bases[i].Cmp(bases[i-1]) < 0 { + decreased = true + break + } + } + mbf.require.True(decreased, "expected base-fee to decrease when minBaseFee=0") +} + +func (mbf *MinBaseFee) VerifyMinBaseFeeClamp(minBase *big.Int) { + // Give the sequencer one more block, then check 5 consecutive blocks + _ = mbf.l2EL.WaitForBlock() + el := mbf.l2EL.Escape().EthClient() + + // Check 5 consecutive blocks to ensure min base fee is consistently applied + for i := 1; i <= 5; i++ { + _ = mbf.l2EL.WaitForBlock() + info, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.NoError(err) + mbf.require.True(info.BaseFee().Cmp(minBase) >= 0, "block %d base-fee %s should be >= %s", info.NumberU64(), info.BaseFee(), minBase) + } +} + +func (mbf *MinBaseFee) RestoreOriginalConfig() { + mbf.SetMinBaseFeeFactors(mbf.originalSignificand, mbf.originalExponent) + mbf.WaitForL2Sync(mbf.originalSignificand, mbf.originalExponent) +} + +// waitForMinBaseFeeFactors waits until the L2 latest payload extra-data encodes the expected factors. +func (mbf *MinBaseFee) waitForMinBaseFeeFactors(expected uint8) { + client := mbf.l2EL.Escape().L2EthClient() + ext, ok := client.(apis.L2EthExtendedClient) + mbf.require.True(ok, "L2 client does not support extended payload API") + + mbf.require.Eventually(func() bool { + payload, err := ext.PayloadByLabel(mbf.ctx, "latest") + if err != nil { + return false + } + if len(payload.ExecutionPayload.ExtraData) != 10 { + return false + } + got := uint8(payload.ExecutionPayload.ExtraData[9]) + return got == expected + }, 2*time.Minute, 5*time.Second, "L2 min base fee factors did not sync within timeout") +} From 48d2b44cebf759daddfb6ee9d5f41a0b7c95c4a1 Mon Sep 17 00:00:00 2001 From: Niran Babalola Date: Tue, 19 Aug 2025 17:14:01 -0500 Subject: [PATCH 41/56] Bump op-geth to the latest version where the tests pass --- go.sum | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 0efbc88dd5d24..733e0926c3cc3 100644 --- a/go.sum +++ b/go.sum @@ -648,8 +648,8 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcou github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/niran/op-geth v0.0.0-20250814071708-b7e36e810609 h1:pcEJy0+vTPH2HboasU/BVkMQfV3rUS1WBp0/Dtr5Grc= -github.com/niran/op-geth v0.0.0-20250814071708-b7e36e810609/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= +github.com/niran/op-geth v0.0.0-20250819212846-6ef3f693c865 h1:T9Td2A29oaV+EW+BcTgeXZxU/ah22zoIQwxzhveqvY0= +github.com/niran/op-geth v0.0.0-20250819212846-6ef3f693c865/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= From 9d311f373402e9bf28962d52cc1619c4755b0970 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 21 Aug 2025 11:44:31 -0400 Subject: [PATCH 42/56] Use u64 approach (#12) * use u64 * fix system/fees/minbasefee_test --- go.sum | 4 +- .../tests/jovian/min_base_fee_test.go | 21 ++--- op-devstack/dsl/min_base_fee.go | 65 +++++++------- op-e2e/bindings/systemconfig.go | 87 ++++++------------- op-e2e/opgeth/op_geth.go | 2 +- op-e2e/system/fees/minbasefee_test.go | 75 ++++++++-------- op-node/rollup/derive/attributes_test.go | 14 +-- op-node/rollup/derive/system_config.go | 11 ++- op-node/rollup/derive/system_config_test.go | 18 ++-- op-node/rollup/interop/indexing/attributes.go | 1 - .../client/l2/engineapi/block_processor.go | 2 +- op-program/client/l2/test/miner.go | 4 +- op-service/eth/types.go | 4 +- .../interfaces/L1/ISystemConfig.sol | 7 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 23 +++-- 15 files changed, 142 insertions(+), 196 deletions(-) diff --git a/go.sum b/go.sum index 733e0926c3cc3..25f89fd3a3a19 100644 --- a/go.sum +++ b/go.sum @@ -648,8 +648,6 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcou github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/niran/op-geth v0.0.0-20250819212846-6ef3f693c865 h1:T9Td2A29oaV+EW+BcTgeXZxU/ah22zoIQwxzhveqvY0= -github.com/niran/op-geth v0.0.0-20250819212846-6ef3f693c865/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -906,6 +904,8 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= +github.com/wlawt/op-geth v0.0.0-20250821143546-00d507960140 h1:8PbCHVtn0dWPsywpzQ6iB75zdsbSu1tX66ZogkoiPTw= +github.com/wlawt/op-geth v0.0.0-20250821143546-00d507960140/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 66077ad88551f..abcc564adffb1 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -28,33 +28,28 @@ func TestConfigurableMinBaseFee(gt *testing.T) { testCases := []struct { name string - significand uint8 - exponent uint8 + minBaseFee uint64 shouldClamp bool }{ - {"MinBaseFeeOff", 0, 0, false}, - {"MinBaseFeeOn", 1, 9, true}, + {"MinBaseFeeOff", 0, false}, + {"MinBaseFeeOn", 1_000_000_000, true}, } for _, tc := range testCases { t.Run(tc.name, func(t devtest.T) { - minBaseFee.SetMinBaseFeeFactors(tc.significand, tc.exponent) - minBaseFee.WaitForL2Sync(tc.significand, tc.exponent) - minBaseFee.VerifyL2Config(tc.significand, tc.exponent) + minBaseFee.SetMinBaseFee(tc.minBaseFee) + minBaseFee.WaitForL2Sync(tc.minBaseFee) + minBaseFee.VerifyL2Config(tc.minBaseFee) if tc.shouldClamp { - // Calculate minimum base fee: significand * 10^exponent - minBase := new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(tc.exponent)), nil) - minBase.Mul(minBase, big.NewInt(int64(tc.significand))) - minBaseFee.VerifyMinBaseFeeClamp(minBase) + minBaseFee.VerifyMinBaseFeeClamp(big.NewInt(int64(tc.minBaseFee))) } else { minBaseFee.CheckBaseFeeCanDecrease() } t.Log("Test completed successfully:", "testCase", tc.name, - "significand", tc.significand, - "exponent", tc.exponent, + "minBaseFee", tc.minBaseFee, "shouldClamp", tc.shouldClamp) }) } diff --git a/op-devstack/dsl/min_base_fee.go b/op-devstack/dsl/min_base_fee.go index 7588bf6cafda7..94296c3d1b1f0 100644 --- a/op-devstack/dsl/min_base_fee.go +++ b/op-devstack/dsl/min_base_fee.go @@ -1,6 +1,7 @@ package dsl import ( + "encoding/binary" "math/big" "time" @@ -9,7 +10,6 @@ import ( "github.com/ethereum-optimism/optimism/op-service/apis" "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" - "github.com/ethereum/go-ethereum/consensus/misc/eip1559" ) type MinBaseFee struct { @@ -20,14 +20,12 @@ type MinBaseFee struct { l2EL *L2ELNode systemConfig minBaseFeeSystemConfig - originalSignificand uint8 - originalExponent uint8 + originalMinBaseFee uint64 } type minBaseFeeSystemConfig struct { - SetMinBaseFee func(sig uint8, exp uint8) bindings.TypedCall[any] `sol:"setMinBaseFee"` - MinBaseFeeSignificand func() bindings.TypedCall[uint8] `sol:"minBaseFeeSignificand"` - MinBaseFeeExponent func() bindings.TypedCall[uint8] `sol:"minBaseFeeExponent"` + SetMinBaseFee func(minBaseFee uint64) bindings.TypedCall[any] `sol:"setMinBaseFee"` + MinBaseFee func() bindings.TypedCall[uint64] `sol:"minBaseFee"` } func NewMinBaseFee(t devtest.T, l2Network *L2Network, l1EL *L1ELNode, l2EL *L2ELNode) *MinBaseFee { @@ -36,24 +34,21 @@ func NewMinBaseFee(t devtest.T, l2Network *L2Network, l1EL *L1ELNode, l2EL *L2EL bindings.WithTo(l2Network.Escape().Deployment().SystemConfigProxyAddr()), bindings.WithTest(t)) - originalSig, err := contractio.Read(systemConfig.MinBaseFeeSignificand(), t.Ctx()) - t.Require().NoError(err, "reading original minBaseFeeSignificand") - originalExp, err := contractio.Read(systemConfig.MinBaseFeeExponent(), t.Ctx()) - t.Require().NoError(err, "reading original minBaseFeeExponent") + originalMinBaseFee, err := contractio.Read(systemConfig.MinBaseFee(), t.Ctx()) + t.Require().NoError(err, "reading original minBaseFee") return &MinBaseFee{ - commonImpl: commonFromT(t), - l1Client: l1EL, - l2Network: l2Network, - l2EL: l2EL, - systemConfig: systemConfig, - originalSignificand: originalSig, - originalExponent: originalExp, + commonImpl: commonFromT(t), + l1Client: l1EL, + l2Network: l2Network, + l2EL: l2EL, + systemConfig: systemConfig, + originalMinBaseFee: originalMinBaseFee, } } func (mbf *MinBaseFee) CheckCompatibility() bool { - _, err := contractio.Read(mbf.systemConfig.MinBaseFeeSignificand(), mbf.ctx) + _, err := contractio.Read(mbf.systemConfig.MinBaseFee(), mbf.ctx) if err != nil { mbf.t.Skipf("MinBaseFee methods not available in devstack: %v", err) return false @@ -66,32 +61,30 @@ func (mbf *MinBaseFee) GetSystemOwner() *EOA { return NewKey(mbf.t, priv).User(mbf.l1Client) } -func (mbf *MinBaseFee) SetMinBaseFeeFactors(significand, exponent uint8) { +func (mbf *MinBaseFee) SetMinBaseFee(minBaseFee uint64) { owner := mbf.GetSystemOwner() - _, err := contractio.Write(mbf.systemConfig.SetMinBaseFee(significand, exponent), mbf.ctx, owner.Plan()) + _, err := contractio.Write(mbf.systemConfig.SetMinBaseFee(minBaseFee), mbf.ctx, owner.Plan()) mbf.require.NoError(err, "SetMinBaseFee transaction failed") - mbf.t.Logf("Set min base fee factors on L1: significand=%d, exponent=%d", significand, exponent) + mbf.t.Logf("Set min base fee on L1: minBaseFee=%d", minBaseFee) } -func (mbf *MinBaseFee) WaitForL2Sync(expectedSignificand, expectedExponent uint8) { - expected := eip1559.EncodeMinBaseFeeFactors(expectedSignificand, expectedExponent) - mbf.waitForMinBaseFeeFactors(expected) +func (mbf *MinBaseFee) WaitForL2Sync(expectedMinBaseFee uint64) { + mbf.waitForMinBaseFee(expectedMinBaseFee) } -func (mbf *MinBaseFee) VerifyL2Config(expectedSignificand, expectedExponent uint8) { - expected := eip1559.EncodeMinBaseFeeFactors(expectedSignificand, expectedExponent) +func (mbf *MinBaseFee) VerifyL2Config(expectedMinBaseFee uint64) { client := mbf.l2EL.Escape().L2EthClient() ext, ok := client.(apis.L2EthExtendedClient) mbf.require.True(ok, "L2 client does not support extended payload API") payload, err := ext.PayloadByLabel(mbf.ctx, "latest") mbf.require.NoError(err, "failed to get latest payload") - mbf.require.True(len(payload.ExecutionPayload.ExtraData) == 10, "payload extra data should be 10 bytes") + mbf.require.True(len(payload.ExecutionPayload.ExtraData) == 17, "payload extra data should be 17 bytes") - got := uint8(payload.ExecutionPayload.ExtraData[9]) - mbf.require.Equal(expected, got, "L2 min base fee factors do not match expected") + got := binary.BigEndian.Uint64(payload.ExecutionPayload.ExtraData[9:]) + mbf.require.Equal(expectedMinBaseFee, got, "L2 min base fee did not match expected") } func (mbf *MinBaseFee) CheckBaseFeeCanDecrease() { @@ -133,12 +126,12 @@ func (mbf *MinBaseFee) VerifyMinBaseFeeClamp(minBase *big.Int) { } func (mbf *MinBaseFee) RestoreOriginalConfig() { - mbf.SetMinBaseFeeFactors(mbf.originalSignificand, mbf.originalExponent) - mbf.WaitForL2Sync(mbf.originalSignificand, mbf.originalExponent) + mbf.SetMinBaseFee(mbf.originalMinBaseFee) + mbf.WaitForL2Sync(mbf.originalMinBaseFee) } -// waitForMinBaseFeeFactors waits until the L2 latest payload extra-data encodes the expected factors. -func (mbf *MinBaseFee) waitForMinBaseFeeFactors(expected uint8) { +// waitForMinBaseFee waits until the L2 latest payload extra-data encodes the expected min base fee. +func (mbf *MinBaseFee) waitForMinBaseFee(expected uint64) { client := mbf.l2EL.Escape().L2EthClient() ext, ok := client.(apis.L2EthExtendedClient) mbf.require.True(ok, "L2 client does not support extended payload API") @@ -148,10 +141,10 @@ func (mbf *MinBaseFee) waitForMinBaseFeeFactors(expected uint8) { if err != nil { return false } - if len(payload.ExecutionPayload.ExtraData) != 10 { + if len(payload.ExecutionPayload.ExtraData) != 17 { return false } - got := uint8(payload.ExecutionPayload.ExtraData[9]) + got := binary.BigEndian.Uint64(payload.ExecutionPayload.ExtraData[9:]) return got == expected - }, 2*time.Minute, 5*time.Second, "L2 min base fee factors did not sync within timeout") + }, 2*time.Minute, 5*time.Second, "L2 min base fee did not sync within timeout") } diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 6e98aea26628f..90a2a5c6573dc 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -50,8 +50,8 @@ type SystemConfigAddresses struct { // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFeeExponent\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minBaseFeeSignificand\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_significand\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"_exponent\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b6200188f1760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612e6962000185600039600081816104a1015281816109120152610c770152612e696000f3fe608060405234801561001057600080fd5b506004361061036d5760003560e01c8063798d2635116101d3578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108e4578063f8c68de0146108f8578063fd32aa0f14610900578063ffa1ad741461090857600080fd5b8063f2b4e617146108c0578063f2fde38b146108c8578063f45e65d8146108db57600080fd5b8063dad544e0116100de578063dad544e014610887578063e0e2016d1461088f578063e81b2c6d14610897578063ec707517146108a057600080fd5b8063d220a9e014610866578063d6ae3cd514610876578063dac6e63a1461087f57600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106ff578063c9b26f6114610707578063c9ff2d161461071a578063cc731b021461073257600080fd5b8063bc49ce5f146106c8578063bfb14fb7146106d0578063c0fd4b41146106ec57600080fd5b80639b7d7f0a116101ad5780639b7d7f0a14610641578063a39fac1214610649578063a7119869146106ad578063b40a817c146106b557600080fd5b8063798d2635146105eb5780638da5cb5b14610610578063935f029e1461062e57600080fd5b806335e80ab3116102ad5780634f16540b1161024b5780635d73369c116102255780635d73369c146105a257806360c9e576146105aa5780636e89a6ac146105d0578063715018a6146105e357600080fd5b80634f16540b1461052457806354fd4d501461054b5780635c975abb1461058a57600080fd5b8063452a932011610287578063452a9320146104db57806348cd4cb1146104e35780634add321d146104eb5780634d5d9a2a146104f357600080fd5b806335e80ab31461047f57806338d38c971461049f5780633e47158c146104d357600080fd5b80630c18c1621161031a57806318d13918116102f457806318d139181461044957806319f5cea81461045c5780631fd19ee11461046457806321d7fde51461046c57600080fd5b80630c18c16214610409578063155b6c6f1461041257806316d3bc7f1461042557600080fd5b8063078f29cf1161034b578063078f29cf146103b55780630a49cb03146103e25780630ae14b1b146103ea57600080fd5b80630104582914610372578063028f4e471461038757806306c926571461039a575b600080fd5b6103856103803660046129ba565b610910565b005b610385610395366004612b2a565b610c75565b6103a2610e56565b6040519081526020015b60405180910390f35b6103bd610e84565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103ac565b6103bd610ebd565b631dcd65005b60405167ffffffffffffffff90911681526020016103ac565b6103a260655481565b610385610420366004612b5a565b610eed565b606a546103f0906c01000000000000000000000000900467ffffffffffffffff1681565b610385610457366004612b8d565b610f03565b6103a2610f17565b6103bd610f42565b61038561047a366004612bb1565b610f6c565b606c546103bd9073ffffffffffffffffffffffffffffffffffffffff1681565b7f00000000000000000000000000000000000000000000000000000000000000005b60405160ff90911681526020016103ac565b6103bd610f7e565b6103bd611189565b6103a261121d565b6103f061124d565b606a5461050f9068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103ac565b6103a27f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103ac9190612c46565b610592611273565b60405190151581526020016103ac565b6103a2611421565b606c546104c1907501000000000000000000000000000000000000000000900460ff1681565b6103856105de366004612c59565b61144c565b61038561145e565b606c546104c19074010000000000000000000000000000000000000000900460ff1681565b60335473ffffffffffffffffffffffffffffffffffffffff166103bd565b61038561063c366004612c83565b611472565b6103bd611484565b6106516114b4565b6040516103ac9190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b6103bd61159b565b6103856106c3366004612ca5565b6115cb565b6103a26115dc565b60685461050f9068010000000000000000900463ffffffff1681565b6103856106fa366004612bb1565b611607565b6103bd611619565b610385610715366004612cc0565b611649565b606a5461050f90640100000000900463ffffffff1681565b6107f66040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103ac9190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a5461050f9063ffffffff1681565b6103a2606b5481565b6103bd61165a565b6103bd61168a565b6103a26116de565b6103a260675481565b60685461050f906c01000000000000000000000000900463ffffffff1681565b6103bd611709565b6103856108d6366004612b8d565b611785565b6103a260665481565b6068546103f09067ffffffffffffffff1681565b6103a2611839565b6103a2611864565b6103a2600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610950575060005460ff8083169116105b6109e1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610a1a611893565b610a22611914565b610a2b8c611785565b610a34896119b3565b610a3e8b8b611a14565b610a4788611b53565b610a707f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610aa3610a9e60017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d08565b869055565b610ad7610ad160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d08565b85519055565b610b0e610b0560017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d08565b60208601519055565b610b45610b3c60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d08565b60408601519055565b610b7c610b7360017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d08565b60608601519055565b610bb3610baa60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d08565b60808601519055565b610bbb611ca9565b610bc486611d11565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610cb5575060005460ff8083169116105b610d41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109d8565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d7a611893565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610dec60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612d08565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e8160017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d08565b81565b6000610eb8610eb460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d08565b5490565b905090565b6000610eb8610eb460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d08565b610ef5612185565b610eff8282612206565b5050565b610f0b612185565b610f14816122dc565b50565b610e8160017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d08565b6000610eb87f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f74612185565b610eff8282611a14565b600080610fa97fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610fcc57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e67657200000000000081525051600261100f9190612d1f565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061106a906060015b604051602081830303815290604052805190602001205490565b146110a1576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080513060208201526001918101919091526000906110c390606001611050565b905073ffffffffffffffffffffffffffffffffffffffff811615611157578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111509190612d5c565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111f9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb89190612d5c565b6000610eb8610eb460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b606954600090610eb89063ffffffff6a0100000000000000000000820481169116612d79565b60008061127e610ebd565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ec9190612d5c565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa15801561135e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113829190612da5565b8061141b5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190612da5565b91505090565b610e8160017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d08565b611454612185565b610eff8282612360565b611466612185565b6114706000612479565b565b61147a612185565b610eff82826124f0565b6000610eb8610eb460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612d08565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114f261159b565b73ffffffffffffffffffffffffffffffffffffffff168152602001611515611619565b73ffffffffffffffffffffffffffffffffffffffff168152602001611538610e84565b73ffffffffffffffffffffffffffffffffffffffff16815260200161155b610ebd565b73ffffffffffffffffffffffffffffffffffffffff16815260200161157e611484565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610eb8610eb460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612d08565b6115d3612185565b610f1481611b53565b610e8160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d08565b61160f612185565b610eff82826125c6565b6000610eb8610eb460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612d08565b611651612185565b610f14816119b3565b6000610eb8610eb460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612d08565b6000611694610f7e565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f9573d6000803e3d6000fd5b610e8160017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b600080611714610ebd565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611761573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141b9190612d5c565b61178d612185565b73ffffffffffffffffffffffffffffffffffffffff8116611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109d8565b610f1481612479565b610e8160017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612d08565b610e8160017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612d08565b9055565b3361189c610f7e565b73ffffffffffffffffffffffffffffffffffffffff16141580156118dd5750336118c461168a565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611470576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff166119ab576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109d8565b611470612798565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611a089190612c46565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b469190612c46565b60405180910390a3505050565b611b5b61124d565b67ffffffffffffffff168167ffffffffffffffff161015611bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109d8565b631dcd650067ffffffffffffffff82161115611c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109d8565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119d7565b611cd7610eb460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b60000361147057611470611d0c60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612d08565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611dc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109d8565b6001816040015160ff1611611e58576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109d8565b6068546080820151825167ffffffffffffffff90921691611e799190612dc7565b63ffffffff161115611ee7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109d8565b6000816020015160ff1611611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109d8565b8051602082015163ffffffff82169160ff90911690611f9e908290612de6565b611fa89190612e30565b63ffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109d8565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109d8565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611b15565b6123057f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119d7565b606c805460ff8381167501000000000000000000000000000000000000000000027fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff9186167401000000000000000000000000000000000000000002919091167fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff909216919091171790556040805160f0600485901b16600f841617602082018190529160009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190529050600660007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be8360405161246b9190612c46565b60405180910390a350505050565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b7fff000000000000000000000000000000000000000000000000000000000000008116156125a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109d8565b606582905560668190556040805160208101849052908101829052600090606001611ae2565b60018263ffffffff16101561265d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109d8565b60018163ffffffff1610156126f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109d8565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161276191602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611b15565b600054610100900460ff1661282f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109d8565b61147033612479565b73ffffffffffffffffffffffffffffffffffffffff81168114610f1457600080fd5b803561286581612838565b919050565b803563ffffffff8116811461286557600080fd5b803567ffffffffffffffff8116811461286557600080fd5b60405160c0810167ffffffffffffffff811182821017156128e0577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461286557600080fd5b600060a0828403121561290957600080fd5b60405160a0810181811067ffffffffffffffff82111715612953577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561296481612838565b8152602083013561297481612838565b6020820152604083013561298781612838565b6040820152606083013561299a81612838565b606082015260808301356129ad81612838565b6080919091015292915050565b60008060008060008060008060008060008b8d036102808112156129dd57600080fd5b8c356129e881612838565b9b506129f660208e0161286a565b9a50612a0460408e0161286a565b995060608d01359850612a1960808e0161287e565b975060a08d0135612a2981612838565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4082011215612a5b57600080fd5b50612a64612896565b612a7060c08e0161286a565b8152612a7e60e08e016128e6565b6020820152612a906101008e016128e6565b6040820152612aa26101208e0161286a565b6060820152612ab46101408e0161286a565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612add57600080fd5b60a08201529450612af16101808d0161285a565b9350612b018d6101a08e016128f7565b92506102408c01359150612b186102608d0161285a565b90509295989b509295989b9093969950565b60008060408385031215612b3d57600080fd5b823591506020830135612b4f81612838565b809150509250929050565b60008060408385031215612b6d57600080fd5b612b768361286a565b9150612b846020840161287e565b90509250929050565b600060208284031215612b9f57600080fd5b8135612baa81612838565b9392505050565b60008060408385031215612bc457600080fd5b612bcd8361286a565b9150612b846020840161286a565b6000815180845260005b81811015612c0157602081850181015186830182015201612be5565b81811115612c13576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612baa6020830184612bdb565b60008060408385031215612c6c57600080fd5b612c75836128e6565b9150612b84602084016128e6565b60008060408385031215612c9657600080fd5b50508035926020909101359150565b600060208284031215612cb757600080fd5b612baa8261287e565b600060208284031215612cd257600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612d1a57612d1a612cd9565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612d5757612d57612cd9565b500290565b600060208284031215612d6e57600080fd5b8151612baa81612838565b600067ffffffffffffffff808316818516808303821115612d9c57612d9c612cd9565b01949350505050565b600060208284031215612db757600080fd5b81518015158114612baa57600080fd5b600063ffffffff808316818516808303821115612d9c57612d9c612cd9565b600063ffffffff80841680612e24577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612e5357612e53612cd9565b0294935050505056fea164736f6c634300080f000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_minBaseFee\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", + Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018611760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612d6b620001856000396000818161049b015281816108e50152610c4a0152612d6b6000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b7578063f8c68de0146108cb578063fd32aa0f146108d3578063ffa1ad74146108db57600080fd5b8063f2b4e61714610893578063f2fde38b1461089b578063f45e65d8146108ae57600080fd5b8063dad544e0116100de578063dad544e01461085a578063e0e2016d14610862578063e81b2c6d1461086a578063ec7075171461087357600080fd5b8063d220a9e014610839578063d6ae3cd514610849578063dac6e63a1461085257600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106d2578063c9b26f61146106da578063c9ff2d16146106ed578063cc731b021461070557600080fd5b8063bc49ce5f1461069b578063bfb14fb7146106a3578063c0fd4b41146106bf57600080fd5b8063a62611a2116101a2578063a62611a214610654578063a711986914610680578063b40a817c1461068857600080fd5b8063935f029e146105d55780639b7d7f0a146105e8578063a39fac12146105f057600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610594578063715018a61461059c5780637616f0e8146105a45780638da5cb5b146105b757600080fd5b80634f16540b1461051657806354fd4d501461053d5780635c975abb1461057c57600080fd5b8063452a93201161027c578063452a9320146104cd57806348cd4cb1146104d55780634add321d146104dd5780634d5d9a2a146104e557600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c557600080fd5b80630c18c1621161030f57806318d13918116102e957806318d139181461043e57806319f5cea8146104515780631fd19ee11461045957806321d7fde51461046157600080fd5b80630c18c162146103fe578063155b6c6f1461040757806316d3bc7f1461041a57600080fd5b8063078f29cf11610340578063078f29cf146103aa5780630a49cb03146103d75780630ae14b1b146103df57600080fd5b80630104582914610367578063028f4e471461037c57806306c926571461038f575b600080fd5b61037a6103753660046128e6565b6108e3565b005b61037a61038a366004612a56565b610c48565b610397610e29565b6040519081526020015b60405180910390f35b6103b2610e57565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a1565b6103b2610e90565b631dcd65005b60405167ffffffffffffffff90911681526020016103a1565b61039760655481565b61037a610415366004612a86565b610ec0565b606a546103e5906c01000000000000000000000000900467ffffffffffffffff1681565b61037a61044c366004612ab9565b610ed6565b610397610eea565b6103b2610f15565b61037a61046f366004612add565b610f3f565b606c546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103a1565b6103b2610f51565b6103b261115c565b6103976111f0565b6103e5611220565b606a546105019068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a1565b6103977f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103a19190612b72565b610584611246565b60405190151581526020016103a1565b6103976113f4565b61037a61141f565b61037a6105b2366004612b85565b611433565b60335473ffffffffffffffffffffffffffffffffffffffff166103b2565b61037a6105e3366004612ba0565b611444565b6103b2611456565b6105f8611486565b6040516103a19190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b606c546103e59074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103b261156d565b61037a610696366004612b85565b61159d565b6103976115ae565b6068546105019068010000000000000000900463ffffffff1681565b61037a6106cd366004612add565b6115d9565b6103b26115eb565b61037a6106e8366004612bc2565b61161b565b606a5461050190640100000000900463ffffffff1681565b6107c96040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103a19190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105019063ffffffff1681565b610397606b5481565b6103b261162c565b6103b261165c565b6103976116b0565b61039760675481565b606854610501906c01000000000000000000000000900463ffffffff1681565b6103b26116db565b61037a6108a9366004612ab9565b611757565b61039760665481565b6068546103e59067ffffffffffffffff1681565b61039761180b565b610397611836565b610397600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610923575060005460ff8083169116105b6109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109ed611865565b6109f56118e6565b6109fe8c611757565b610a0789611985565b610a118b8b6119e6565b610a1a88611b25565b610a437f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610a76610a7160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c0a565b869055565b610aaa610aa460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c0a565b85519055565b610ae1610ad860017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c0a565b60208601519055565b610b18610b0f60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c0a565b60408601519055565b610b4f610b4660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c0a565b60608601519055565b610b86610b7d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c0a565b60808601519055565b610b8e611c7b565b610b9786611ce3565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c88575060005460ff8083169116105b610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ab565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d4d611865565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610dbf60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c0a565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e5460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c0a565b81565b6000610e8b610e8760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c0a565b5490565b905090565b6000610e8b610e8760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c0a565b610ec8612157565b610ed282826121d8565b5050565b610ede612157565b610ee7816122ae565b50565b610e5460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c0a565b6000610e8b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f47612157565b610ed282826119e6565b600080610f7c7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610f9f57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe29190612c21565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061103d906060015b604051602081830303815290604052805190602001205490565b14611074576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109690606001611023565b905073ffffffffffffffffffffffffffffffffffffffff81161561112a578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190612c5e565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b9190612c5e565b6000610e8b610e8760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b606954600090610e8b9063ffffffff6a0100000000000000000000820481169116612c7b565b600080611251610e90565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190612c5e565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612ca7565b806113ee5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190612ca7565b91505090565b610e5460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c0a565b611427612157565b6114316000612332565b565b61143b612157565b610ee7816123a9565b61144c612157565b610ed2828261241c565b6000610e8b610e8760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c0a565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114c461156d565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114e76115eb565b73ffffffffffffffffffffffffffffffffffffffff16815260200161150a610e57565b73ffffffffffffffffffffffffffffffffffffffff16815260200161152d610e90565b73ffffffffffffffffffffffffffffffffffffffff168152602001611550611456565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610e8b610e8760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c0a565b6115a5612157565b610ee781611b25565b610e5460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c0a565b6115e1612157565b610ed282826124f2565b6000610e8b610e8760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c0a565b611623612157565b610ee781611985565b6000610e8b610e8760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c0a565b6000611666610f51565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cc573d6000803e3d6000fd5b610e5460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b6000806116e6610e90565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190612c5e565b61175f612157565b73ffffffffffffffffffffffffffffffffffffffff8116611802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109ab565b610ee781612332565b610e5460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c0a565b610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c0a565b9055565b3361186e610f51565b73ffffffffffffffffffffffffffffffffffffffff16141580156118af57503361189661165c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611431576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b6114316126c4565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516119da9190612b72565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b189190612b72565b60405180910390a3505050565b611b2d611220565b67ffffffffffffffff168167ffffffffffffffff161015611baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109ab565b631dcd650067ffffffffffffffff82161115611c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109ab565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119a9565b611ca9610e8760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b60000361143157611431611cde60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109ab565b6001816040015160ff1611611e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109ab565b6068546080820151825167ffffffffffffffff90921691611e4b9190612cc9565b63ffffffff161115611eb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109ab565b6000816020015160ff1611611f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109ab565b8051602082015163ffffffff82169160ff90911690611f70908290612ce8565b611f7a9190612d32565b63ffffffff161461200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109ab565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ab565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611ae7565b6122d77f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119a9565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff84169081029190911790915560408051602080820193909352815180820390930183528101905260066119a9565b7fff000000000000000000000000000000000000000000000000000000000000008116156124cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109ab565b606582905560668190556040805160208101849052908101829052600090606001611ab4565b60018263ffffffff161015612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109ab565b60018163ffffffff161015612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109ab565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161268d91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611ae7565b600054610100900460ff1661275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b61143133612332565b73ffffffffffffffffffffffffffffffffffffffff81168114610ee757600080fd5b803561279181612764565b919050565b803563ffffffff8116811461279157600080fd5b803567ffffffffffffffff8116811461279157600080fd5b60405160c0810167ffffffffffffffff8111828210171561280c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461279157600080fd5b600060a0828403121561283557600080fd5b60405160a0810181811067ffffffffffffffff8211171561287f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561289081612764565b815260208301356128a081612764565b602082015260408301356128b381612764565b604082015260608301356128c681612764565b606082015260808301356128d981612764565b6080919091015292915050565b60008060008060008060008060008060008b8d0361028081121561290957600080fd5b8c3561291481612764565b9b5061292260208e01612796565b9a5061293060408e01612796565b995060608d0135985061294560808e016127aa565b975060a08d013561295581612764565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561298757600080fd5b506129906127c2565b61299c60c08e01612796565b81526129aa60e08e01612812565b60208201526129bc6101008e01612812565b60408201526129ce6101208e01612796565b60608201526129e06101408e01612796565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612a0957600080fd5b60a08201529450612a1d6101808d01612786565b9350612a2d8d6101a08e01612823565b92506102408c01359150612a446102608d01612786565b90509295989b509295989b9093969950565b60008060408385031215612a6957600080fd5b823591506020830135612a7b81612764565b809150509250929050565b60008060408385031215612a9957600080fd5b612aa283612796565b9150612ab0602084016127aa565b90509250929050565b600060208284031215612acb57600080fd5b8135612ad681612764565b9392505050565b60008060408385031215612af057600080fd5b612af983612796565b9150612ab060208401612796565b6000815180845260005b81811015612b2d57602081850181015186830182015201612b11565b81811115612b3f576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ad66020830184612b07565b600060208284031215612b9757600080fd5b612ad6826127aa565b60008060408385031215612bb357600080fd5b50508035926020909101359150565b600060208284031215612bd457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c1c57612c1c612bdb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5957612c59612bdb565b500290565b600060208284031215612c7057600080fd5b8151612ad681612764565b600067ffffffffffffffff808316818516808303821115612c9e57612c9e612bdb565b01949350505050565b600060208284031215612cb957600080fd5b81518015158114612ad657600080fd5b600063ffffffff808316818516808303821115612c9e57612c9e612bdb565b600063ffffffff80841680612d26577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612d5557612d55612bdb565b0294935050505056fea164736f6c634300080f000a", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -996,66 +996,35 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } -// MinBaseFeeExponent is a free data retrieval call binding the contract method 0x60c9e576. +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. // -// Solidity: function minBaseFeeExponent() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) MinBaseFeeExponent(opts *bind.CallOpts) (uint8, error) { +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) MinBaseFee(opts *bind.CallOpts) (uint64, error) { var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBaseFeeExponent") + err := _SystemConfig.contract.Call(opts, &out, "minBaseFee") if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// MinBaseFeeExponent is a free data retrieval call binding the contract method 0x60c9e576. -// -// Solidity: function minBaseFeeExponent() view returns(uint8) -func (_SystemConfig *SystemConfigSession) MinBaseFeeExponent() (uint8, error) { - return _SystemConfig.Contract.MinBaseFeeExponent(&_SystemConfig.CallOpts) -} - -// MinBaseFeeExponent is a free data retrieval call binding the contract method 0x60c9e576. -// -// Solidity: function minBaseFeeExponent() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) MinBaseFeeExponent() (uint8, error) { - return _SystemConfig.Contract.MinBaseFeeExponent(&_SystemConfig.CallOpts) -} - -// MinBaseFeeSignificand is a free data retrieval call binding the contract method 0x798d2635. -// -// Solidity: function minBaseFeeSignificand() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) MinBaseFeeSignificand(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBaseFeeSignificand") - - if err != nil { - return *new(uint8), err + return *new(uint64), err } - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) return out0, err } -// MinBaseFeeSignificand is a free data retrieval call binding the contract method 0x798d2635. +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. // -// Solidity: function minBaseFeeSignificand() view returns(uint8) -func (_SystemConfig *SystemConfigSession) MinBaseFeeSignificand() (uint8, error) { - return _SystemConfig.Contract.MinBaseFeeSignificand(&_SystemConfig.CallOpts) +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigSession) MinBaseFee() (uint64, error) { + return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) } -// MinBaseFeeSignificand is a free data retrieval call binding the contract method 0x798d2635. +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. // -// Solidity: function minBaseFeeSignificand() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) MinBaseFeeSignificand() (uint8, error) { - return _SystemConfig.Contract.MinBaseFeeSignificand(&_SystemConfig.CallOpts) +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MinBaseFee() (uint64, error) { + return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) } // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. @@ -1701,25 +1670,25 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x6e89a6ac. +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. // -// Solidity: function setMinBaseFee(uint8 _significand, uint8 _exponent) returns() -func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _significand uint8, _exponent uint8) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _significand, _exponent) +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _minBaseFee) } -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x6e89a6ac. +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. // -// Solidity: function setMinBaseFee(uint8 _significand, uint8 _exponent) returns() -func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_significand uint8, _exponent uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _significand, _exponent) +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) } -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x6e89a6ac. +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. // -// Solidity: function setMinBaseFee(uint8 _significand, uint8 _exponent) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_significand uint8, _exponent uint8) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _significand, _exponent) +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) } // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. diff --git a/op-e2e/opgeth/op_geth.go b/op-e2e/opgeth/op_geth.go index a941740f5c6fb..6553bcefc7a5e 100644 --- a/op-e2e/opgeth/op_geth.go +++ b/op-e2e/opgeth/op_geth.go @@ -240,7 +240,7 @@ func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.Payloa ParentBeaconBlockRoot: parentBeaconBlockRoot, } if d.L2ChainConfig.IsConfigurableMinBaseFee(uint64(timestamp)) { - attrs.MinBaseFeeFactors = d.SystemConfig.MinBaseFeeFactors + attrs.MinBaseFee = d.SystemConfig.MinBaseFee } if d.L2ChainConfig.IsHolocene(uint64(timestamp)) { attrs.EIP1559Params = new(eth.Bytes8) diff --git a/op-e2e/system/fees/minbasefee_test.go b/op-e2e/system/fees/minbasefee_test.go index 0650fa5d5fc23..dff927ed338e9 100644 --- a/op-e2e/system/fees/minbasefee_test.go +++ b/op-e2e/system/fees/minbasefee_test.go @@ -18,9 +18,9 @@ import ( "github.com/stretchr/testify/require" ) -// TestMinBaseFeeFactors checks that we can successfully change minBaseFeeFactors parameter via SystemConfig +// TestMinBaseFee checks that we can successfully change minBaseFee parameter via SystemConfig // with the Jovian upgrade and that it's properly encoded in block extra data. -func TestMinBaseFeeFactors(t *testing.T) { +func TestMinBaseFee(t *testing.T) { op_e2e.InitParallel(t) ctx, ctxCancel := context.WithCancel(context.Background()) @@ -53,22 +53,16 @@ func TestMinBaseFeeFactors(t *testing.T) { var cancel context.CancelFunc - // Confirm minBaseFeeSignificand and minBaseFeeExponent are initialized to 0 - minBaseFeeSignificand, err := sysconfig.MinBaseFeeSignificand(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFeeSignificand") - require.Equal(t, uint8(0), minBaseFeeSignificand) - minBaseFeeExponent, err := sysconfig.MinBaseFeeExponent(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFeeExponent") - require.Equal(t, uint8(0), minBaseFeeExponent) + // Confirm minBaseFee is initialized to 0 + minBaseFee, err := sysconfig.MinBaseFee(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFee") + require.Equal(t, uint64(0), minBaseFee) - // Set both EIP-1559 parameters and minBaseFeeFactors in a single transaction sequence + // Set both EIP-1559 parameters and minBaseFee in a single transaction sequence // This matches how they would be used in production expectedDenom := uint32(10) expectedElasticity := uint32(2) // Set the minimum base fee to 1 gwei. - expectedMinBaseFeeSignificand := uint8(1) - expectedMinBaseFeeExponent := uint8(9) - expectedMinBaseFeeFactors := eip1559.EncodeMinBaseFeeFactors(expectedMinBaseFeeSignificand, expectedMinBaseFeeExponent) expectedMinBaseFee := big.NewInt(1_000_000_000) // Set EIP-1559 parameters first @@ -80,21 +74,18 @@ func TestMinBaseFeeFactors(t *testing.T) { _, err = wait.ForReceiptOK(ctx, l1Client, tx.Hash()) require.NoError(t, err, "Waiting for sysconfig set EIP1559Params update tx") - // Then set MinBaseFeeFactors + // Then set MinBaseFee opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) - tx, err = sysconfig.SetMinBaseFee(opts, expectedMinBaseFeeSignificand, expectedMinBaseFeeExponent) + tx, err = sysconfig.SetMinBaseFee(opts, expectedMinBaseFee.Uint64()) cancel() require.NoError(t, err, "SetMinBaseFee update tx") receipt, err := wait.ForReceiptOK(ctx, l1Client, tx.Hash()) require.NoError(t, err, "Waiting for sysconfig set minBaseFee update tx") - minBaseFeeSignificand, err = sysconfig.MinBaseFeeSignificand(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFeeSignificand") - require.Equal(t, expectedMinBaseFeeSignificand, minBaseFeeSignificand) - minBaseFeeExponent, err = sysconfig.MinBaseFeeExponent(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFeeExponent") - require.Equal(t, expectedMinBaseFeeExponent, minBaseFeeExponent) + minBaseFee, err = sysconfig.MinBaseFee(&bind.CallOpts{}) + require.NoError(t, err, "reading minBaseFee") + require.Equal(t, expectedMinBaseFee.Uint64(), minBaseFee) _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) require.NoError(t, err, "waiting for L2 block to include the sysconfig update") @@ -104,32 +95,40 @@ func TestMinBaseFeeFactors(t *testing.T) { // Debug: print the actual ExtraData t.Logf("Actual ExtraData: %x", h.Extra) - t.Logf("Expected MinBaseFee: %d * 10^%d = %d", expectedMinBaseFeeSignificand, expectedMinBaseFeeExponent, expectedMinBaseFee) + t.Logf("Expected MinBaseFee: %d", expectedMinBaseFee) // Decode and check what we actually got - if len(h.Extra) == 10 { - actualDenom, actualElasticity, actualMinBaseFeeSignificand, actualMinBaseFeeExponent := eip1559.DecodeMinBaseFeeExtraData(h.Extra) - t.Logf("Decoded - Denom: %d, Elasticity: %d, MinBaseFee: %d * 10^%d", actualDenom, actualElasticity, actualMinBaseFeeSignificand, actualMinBaseFeeExponent) + if len(h.Extra) == 17 { + actualDenom, actualElasticity, actualMinBaseFee := eip1559.DecodeMinBaseFeeExtraData(h.Extra) + t.Logf("Decoded - Denom: %d, Elasticity: %d, MinBaseFee: %d", actualDenom, actualElasticity, actualMinBaseFee) + + require.Equal(t, expectedMinBaseFee.Uint64(), actualMinBaseFee) } // Confirm the extraData is being set as expected with Jovian encoding - expectedExtraData := eip1559.EncodeMinBaseFeeExtraData(uint64(expectedDenom), uint64(expectedElasticity), expectedMinBaseFeeFactors) - require.Equal(t, expectedExtraData, h.Extra, "Extra data should match Jovian encoding with minBaseFeeFactors") - - // Verify the minimum base fee is enforced - require.True(t, h.BaseFee.Cmp(expectedMinBaseFee) >= 0, - "Current base fee (%s) should be >= minimum base fee (%s)", - h.BaseFee.String(), expectedMinBaseFee.String()) + expectedExtraData := eip1559.EncodeMinBaseFeeExtraData(uint64(expectedDenom), uint64(expectedElasticity), expectedMinBaseFee.Uint64()) + require.Equal(t, expectedExtraData, h.Extra, "Extra data should match Jovian encoding with minBaseFee") - // Wait for the next block to confirm the constraint is maintained - b, err := geth.WaitForBlock(big.NewInt(h.Number.Int64()+1), l2Seq) + // The first block with the minimum base fee encoded in ExtraData had its base fee + // calculated before the minimum was available. Wait for the next block where + // the base fee calculation can use the minimum base fee from the previous block's ExtraData. + nextBlock, err := geth.WaitForBlock(big.NewInt(h.Number.Int64()+1), l2Seq) require.NoError(t, err, "waiting for next L2 block") // Confirm the extraData is still being set as expected in the next block - require.Equal(t, expectedExtraData, b.Header().Extra, "Extra data should still match Jovian encoding with minBaseFeeFactors") + require.Equal(t, expectedExtraData, nextBlock.Header().Extra, "Extra data should still match Jovian encoding with minBaseFee") - // Verify the minimum base fee constraint is still enforced - require.True(t, b.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, + // Now verify the minimum base fee constraint is enforced in this block + require.True(t, nextBlock.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, "Next block base fee (%s) should be >= minimum base fee (%s)", - b.Header().BaseFee.String(), expectedMinBaseFee.String()) + nextBlock.Header().BaseFee.String(), expectedMinBaseFee.String()) + + // Wait for one more block to confirm the constraint is consistently maintained + finalBlock, err := geth.WaitForBlock(big.NewInt(nextBlock.Header().Number.Int64()+1), l2Seq) + require.NoError(t, err, "waiting for final L2 block") + + // Verify the minimum base fee constraint is still enforced + require.True(t, finalBlock.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, + "Final block base fee (%s) should be >= minimum base fee (%s)", + finalBlock.Header().BaseFee.String(), expectedMinBaseFee.String()) } diff --git a/op-node/rollup/derive/attributes_test.go b/op-node/rollup/derive/attributes_test.go index 4e379d0ad16e2..a071c2356706c 100644 --- a/op-node/rollup/derive/attributes_test.go +++ b/op-node/rollup/derive/attributes_test.go @@ -451,13 +451,13 @@ func TestPreparePayloadAttributes(t *testing.T) { l2Parent := testutils.RandomL2BlockRef(rng) l1CfgFetcher := &testutils.MockL2Client{} eip1559Params := eth.Bytes8([]byte{0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8}) - minBaseFeeFactors := uint8(1<<4 | 9) + minBaseFee := uint64(1e9) testSysCfg := eth.SystemConfig{ - BatcherAddr: common.Address{42}, - Overhead: [32]byte{}, - Scalar: [32]byte{}, - EIP1559Params: eip1559Params, - MinBaseFeeFactors: minBaseFeeFactors, + BatcherAddr: common.Address{42}, + Overhead: [32]byte{}, + Scalar: [32]byte{}, + EIP1559Params: eip1559Params, + MinBaseFee: minBaseFee, } l1CfgFetcher.ExpectSystemConfigByL2Hash(l2Parent.Hash, testSysCfg, nil) defer l1CfgFetcher.AssertExpectations(t) @@ -476,7 +476,7 @@ func TestPreparePayloadAttributes(t *testing.T) { attrs, err := attrBuilder.PreparePayloadAttributes(context.Background(), l2Parent, epoch) require.NoError(t, err) require.Equal(t, eip1559Params, *attrs.EIP1559Params) - require.Equal(t, minBaseFeeFactors, attrs.MinBaseFeeFactors) + require.Equal(t, minBaseFee, attrs.MinBaseFee) require.Equal(t, l1InfoTx, []byte(attrs.Transactions[0])) }) } diff --git a/op-node/rollup/derive/system_config.go b/op-node/rollup/derive/system_config.go index 3655ae954c327..bcb2a33b13145 100644 --- a/op-node/rollup/derive/system_config.go +++ b/op-node/rollup/derive/system_config.go @@ -23,7 +23,7 @@ var ( SystemConfigUpdateUnsafeBlockSigner = common.Hash{31: 3} SystemConfigUpdateEIP1559Params = common.Hash{31: 4} SystemConfigUpdateOperatorFeeParams = common.Hash{31: 5} - SystemConfigUpdateMinBaseFeeFactors = common.Hash{31: 6} + SystemConfigUpdateMinBaseFee = common.Hash{31: 6} ) var ( @@ -178,22 +178,21 @@ func ProcessSystemConfigUpdateLogEvent(destSysCfg *eth.SystemConfig, ev *types.L case SystemConfigUpdateUnsafeBlockSigner: // Ignored in derivation. This configurable applies to runtime configuration outside of the derivation. return nil - case SystemConfigUpdateMinBaseFeeFactors: + case SystemConfigUpdateMinBaseFee: if pointer, err := solabi.ReadUint64(reader); err != nil || pointer != 32 { return NewCriticalError(errors.New("invalid pointer field")) } if length, err := solabi.ReadUint64(reader); err != nil || length != 32 { return NewCriticalError(errors.New("invalid length field")) } - minBaseFeeFactorsData, err := solabi.ReadEthBytes32(reader) + minBaseFee, err := solabi.ReadUint64(reader) if err != nil { - return NewCriticalError(errors.New("could not read minBaseFeeFactors")) + return NewCriticalError(errors.New("could not read minBaseFee")) } if !solabi.EmptyReader(reader) { return NewCriticalError(errors.New("too many bytes")) } - // abi.encode(uint256(factors)) left-pads the value, so we need the last byte - destSysCfg.MinBaseFeeFactors = minBaseFeeFactorsData[31] + destSysCfg.MinBaseFee = minBaseFee return nil default: return fmt.Errorf("unrecognized L1 sysCfg update type: %s", updateType) diff --git a/op-node/rollup/derive/system_config_test.go b/op-node/rollup/derive/system_config_test.go index cc28c12b89e50..6639635ab9593 100644 --- a/op-node/rollup/derive/system_config_test.go +++ b/op-node/rollup/derive/system_config_test.go @@ -232,22 +232,18 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { err: false, }, { - name: "SystemConfigUpdateMinBaseFeeFactors", + name: "SystemConfigUpdateMinBaseFee", log: &types.Log{ Topics: []common.Hash{ ConfigUpdateEventABIHash, ConfigUpdateEventVersion0, - SystemConfigUpdateMinBaseFeeFactors, + SystemConfigUpdateMinBaseFee, }, }, hook: func(t *testing.T, log *types.Log) *types.Log { - // Set minBaseFeeFactors to 1e9 (uint8 value) at the first byte - significand := uint8(1) - exponent := uint8(9) - minBaseFeeFactorsBytes := make([]byte, 32) - minBaseFeeFactorsBytes[31] = significand<<4 | exponent - minBaseFeeFactorsValue := new(big.Int).SetBytes(minBaseFeeFactorsBytes) - numberData, err := oneUint256.Pack(minBaseFeeFactorsValue) + // Set minBaseFee to 1e9 + minBaseFee := uint64(1e9) + numberData, err := oneUint256.Pack(new(big.Int).SetUint64(minBaseFee)) require.NoError(t, err) data, err := bytesArgs.Pack(numberData) require.NoError(t, err) @@ -255,8 +251,8 @@ func TestProcessSystemConfigUpdateLogEvent(t *testing.T) { return log }, config: eth.SystemConfig{ - EIP1559Params: eth.Bytes8{0, 0, 0, 0, 0, 0, 0, 0}, - MinBaseFeeFactors: uint8(1)<<4 | uint8(9), + EIP1559Params: eth.Bytes8{0, 0, 0, 0, 0, 0, 0, 0}, + MinBaseFee: uint64(1e9), }, err: false, }, diff --git a/op-node/rollup/interop/indexing/attributes.go b/op-node/rollup/interop/indexing/attributes.go index 9dbeb373b2148..b0feb4348963d 100644 --- a/op-node/rollup/interop/indexing/attributes.go +++ b/op-node/rollup/interop/indexing/attributes.go @@ -56,7 +56,6 @@ func AttributesToReplaceInvalidBlock(invalidatedBlock *eth.ExecutionPayloadEnvel extraData := invalidatedBlock.ExecutionPayload.ExtraData denominator, elasticity, minBaseFee := eip1559.DecodeJovianExtraData(extraData) eip1559Params := eth.Bytes8(eip1559.EncodeHolocene1559Params(denominator, elasticity)) - minBaseFeeFactors := eip1559.EncodeMinBaseFeeFactors(significand, exponent) attrs := ð.PayloadAttributes{ Timestamp: invalidatedBlock.ExecutionPayload.Timestamp, diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index 4d321820d708a..55de00dc53fd5 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -62,7 +62,7 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c e = provider.Config().ElasticityMultiplier() } if provider.Config().IsConfigurableMinBaseFee(header.Time) { - header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFeeFactors) + header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFee) } else { header.Extra = eip1559.EncodeHoloceneExtraData(d, e) } diff --git a/op-program/client/l2/test/miner.go b/op-program/client/l2/test/miner.go index 3cdb5765e5a50..51a9660894fba 100644 --- a/op-program/client/l2/test/miner.go +++ b/op-program/client/l2/test/miner.go @@ -121,7 +121,7 @@ func (m *Miner) Fork(t *testing.T, blockNumber uint64, attrs *eth.PayloadAttribu NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, - MinBaseFeeFactors: 0, + MinBaseFee: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) @@ -146,7 +146,7 @@ func (m *Miner) MineAt(t *testing.T, head *types.Header, attrs *eth.PayloadAttri NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, - MinBaseFeeFactors: 0, + MinBaseFee: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) diff --git a/op-service/eth/types.go b/op-service/eth/types.go index 8a85d977d0ad2..90becd24a9e13 100644 --- a/op-service/eth/types.go +++ b/op-service/eth/types.go @@ -611,8 +611,8 @@ type SystemConfig struct { // value will be 0 if Holocene is not active, or if derivation has yet to // process any EIP_1559_PARAMS system config update events. EIP1559Params Bytes8 `json:"eip1559Params"` - // MinBaseFeeFactors is the minimum base fee significand and exponent. - MinBaseFeeFactors uint8 `json:"minBaseFeeFactors"` + // MinBaseFee is the minimum base fee. + MinBaseFee uint64 `json:"minBaseFee"` // OperatorFeeParams identifies the operator fee parameters. OperatorFeeParams Bytes32 `json:"operatorFeeParams"` // More fields can be added for future SystemConfig versions. diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 6cd2ca39c0310..1b1acfff48448 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -13,7 +13,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, OPERATOR_FEE_PARAMS, - MIN_BASE_FEE_FACTORS + MIN_BASE_FEE } struct Addresses { @@ -73,8 +73,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function minimumGasLimit() external view returns (uint64); function operatorFeeConstant() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); - function minBaseFeeSignificand() external view returns (uint8); - function minBaseFeeExponent() external view returns (uint8); + function minBaseFee() external view returns (uint64); function optimismMintableERC20Factory() external view returns (address addr_); function optimismPortal() external view returns (address addr_); function overhead() external view returns (uint256); @@ -89,7 +88,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external; function setUnsafeBlockSigner(address _unsafeBlockSigner) external; function setEIP1559Params(uint32 _denominator, uint32 _elasticity) external; - function setMinBaseFee(uint8 _significand, uint8 _exponent) external; + function setMinBaseFee(uint64 _minBaseFee) external; function startBlock() external view returns (uint256 startBlock_); function transferOwnership(address newOwner) external; // nosemgrep function unsafeBlockSigner() external view returns (address addr_); diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 7d53bb46fb5ac..4d6b1e4e64d61 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -35,7 +35,7 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, OPERATOR_FEE_PARAMS, - MIN_BASE_FEE_FACTORS + MIN_BASE_FEE } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -432,21 +432,18 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.EIP_1559_PARAMS, data); } - /// @notice Updates the minimum base fee significand and exponent. Can only be called by the owner. - /// @param _significand New significand. - /// @param _exponent New exponent. - function setMinBaseFee(uint8 _significand, uint8 _exponent) external onlyOwner { - _setMinBaseFee(_significand, _exponent); + /// @notice Updates the minimum base fee. Can only be called by the owner. + /// @param _minBaseFee New minimum base fee. + function setMinBaseFee(uint64 _minBaseFee) external onlyOwner { + _setMinBaseFee(_minBaseFee); } - /// @notice Internal function for updating the minimum base fee significand and exponent. - function _setMinBaseFee(uint8 _significand, uint8 _exponent) internal { - minBaseFeeSignificand = _significand; - minBaseFeeExponent = _exponent; + /// @notice Internal function for updating the minimum base fee. + function _setMinBaseFee(uint64 _minBaseFee) internal { + minBaseFee = _minBaseFee; - uint8 packed = (_significand & 0x0f) << 4 | (_exponent & 0x0f); - bytes memory data = abi.encode(packed); - emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE_FACTORS, data); + bytes memory data = abi.encode(_minBaseFee); + emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE, data); } /// @notice Updates the operator fee parameters. Can only be called by the owner. From c448ee827fcae5601df17b19568bf5ea5f88edc9 Mon Sep 17 00:00:00 2001 From: William Law Date: Tue, 2 Sep 2025 11:22:03 -0400 Subject: [PATCH 43/56] feedback on contracts + remove diff on derive --- .../results.html | 872 ++++++++++++++++++ .../static/results.js | 299 ++++++ .../results.html | 872 ++++++++++++++++++ .../static/results.js | 299 ++++++ op-node/rollup/derive/batch_mux.go | 34 +- op-node/rollup/derive/channel_mux.go | 28 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 3 + .../test/L1/SystemConfig.t.sol | 20 + 8 files changed, 2373 insertions(+), 54 deletions(-) create mode 100644 op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html create mode 100644 op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js create mode 100644 op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html create mode 100644 op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js diff --git a/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html b/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html new file mode 100644 index 0000000000000..23653e3a48622 --- /dev/null +++ b/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html @@ -0,0 +1,872 @@ + + + + + + Acceptance Test Results + + + +

Acceptance Test Results

+ +
+

Test Results

+

Network: simple-devnet

+

Run ID: 295d3abd-93cf-4e79-9260-fbb9c2faaccf

+

Total Duration: 5m56.476s

+

Started: 2025-09-02 10:58:04 UTC

+ +
+ pass +
+ +
+
+
11
+
Total Tests
+
+
+
11
+
Passed
+
+
+
0
+
Failed
+
+ +
+
0
+
Errors
+
+
+
100.0%
+
Pass Rate
+
+
+
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 1m10.991s + #9 + View Log +
+
+ + + + + +
+ pass +
TestCLAdvance
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 5.805s + #10 + View Log +
+
+ + + + + + +
+ pass +
TestFaucetFund
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 12.118s + #11 + View Log +
+
+ + + + + + +
+ pass +
TestPublicRpcAdvance
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 12.815s + #12 + View Log +
+
+ + + + + + +
+ pass +
TestRPCConnectivity
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 2.664s + #13 + View Log +
+
+ + + + + + +
+ pass +
TestTransfer
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 14.038s + #14 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain + Gate: jovian + + 8.024s + #19 + View Log +
+
+ + + + + +
+ pass +
TestChainFork
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain + Gate: jovian + + 3.3s + #20 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit + Gate: jovian + + 47.153s + #16 + View Log +
+
+ + + + + +
+ pass +
TestL1ToL2Deposit
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit + Gate: jovian + + 42.361s + #17 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone + Gate: jovian + + 18.915s + #22 + View Log +
+
+ + + + + +
+ pass +
TestFees
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone + Gate: jovian + + 13.929s + #23 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: jovian + + 1m18.179s + #26 + View Log +
+
+ + + + + +
+ pass +
TestFees
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: jovian + + 41.461s + #27 + View Log +
+
+ + + + + + +
+ pass +
TestCheckFjordScript
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: jovian + + 27.421s + #28 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian + Gate: jovian + + 2m13.212s + #2 + View Log +
+
+ + + + + +
+ pass +
TestConfigurableMinBaseFee
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian + Gate: jovian + + 1m46.345s + #3 + View Log +
+
+ + + + + + + + +
+ + + + \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js b/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js new file mode 100644 index 0000000000000..9d97eaef853fd --- /dev/null +++ b/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js @@ -0,0 +1,299 @@ +function filterTests() { + const query = document.getElementById('searchInput').value.toLowerCase(); + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + const text = item.textContent.toLowerCase(); + if (text.includes(query)) { + item.classList.remove('hidden'); + } else { + item.classList.add('hidden'); + } + }); + + // Show/hide package sections based on whether they have visible tests + packageSections.forEach(section => { + const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); + if (visibleTests.length > 0) { + section.classList.remove('hidden'); + } else { + section.classList.add('hidden'); + } + }); +} + +function showOnlyFailed() { + document.getElementById('searchInput').value = ''; + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + const status = item.dataset.status; + if (status === 'fail' || status === 'error') { + item.classList.remove('hidden'); + } else { + item.classList.add('hidden'); + } + }); + + // Show/hide package sections based on whether they have visible failed tests + packageSections.forEach(section => { + const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); + if (visibleTests.length > 0) { + section.classList.remove('hidden'); + } else { + section.classList.add('hidden'); + } + }); + + // Update button states + document.getElementById('showAllBtn').classList.remove('active'); + document.getElementById('showFailedBtn').classList.add('active'); +} + +function showAll() { + document.getElementById('searchInput').value = ''; + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + item.classList.remove('hidden'); + }); + + packageSections.forEach(section => { + section.classList.remove('hidden'); + }); + + // Update button states + document.getElementById('showFailedBtn').classList.remove('active'); + document.getElementById('showAllBtn').classList.add('active'); +} + +// Organize tests into proper hierarchy after page load +document.addEventListener('DOMContentLoaded', function() { + organizeTestHierarchy(); +}); + +function organizeTestHierarchy() { + const hierarchy = document.getElementById('testHierarchy'); + const testItems = Array.from(hierarchy.querySelectorAll('.test-item')); + + // If no tests, nothing to organize + if (testItems.length === 0) { + return; + } + + // Sort test items by execution order to maintain proper ordering + testItems.sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + + // Group tests by package and organize by type + const packageGroups = {}; + + testItems.forEach(item => { + const packageName = item.dataset.package || 'unknown'; + const isSubTest = item.dataset.isSubtest === 'true'; + const parentTest = item.dataset.parentTest || ''; + const testName = item.dataset.name; + + if (!packageGroups[packageName]) { + packageGroups[packageName] = { + packageTests: [], // Package-level test runners + individualTests: [], // Individual function tests + subtests: {}, // Subtests grouped by parent + orphanSubtests: [] // Subtests without a parent in this package + }; + } + + const group = packageGroups[packageName]; + + if (isSubTest && parentTest) { + // This is a subtest - group under its parent + if (!group.subtests[parentTest]) { + group.subtests[parentTest] = []; + } + group.subtests[parentTest].push(item); + // Add subtest styling + item.classList.add('subtest-item'); + } else if (testName && testName.includes('(package)')) { + // This is a package-level test runner + group.packageTests.push(item); + } else { + // This is an individual test + group.individualTests.push(item); + } + }); + + // Clear hierarchy and rebuild with proper organization + hierarchy.innerHTML = ''; + + // Iterate through packages in a consistent order (alphabetical) + const sortedPackages = Object.keys(packageGroups).sort(); + + sortedPackages.forEach(packageName => { + const group = packageGroups[packageName]; + + // Skip empty groups + if (group.packageTests.length === 0 && group.individualTests.length === 0 && Object.keys(group.subtests).length === 0) { + return; + } + + // Find the package-level test log path for this specific package + let packageLogPath = ''; + group.packageTests.forEach(packageTest => { + const logLink = packageTest.querySelector('.log-link'); + if (logLink) { + packageLogPath = logLink.getAttribute('href'); + } + }); + + // Create package section + const packageSection = document.createElement('div'); + packageSection.className = 'package-section'; + + // Determine package status based on contained tests + let hasFailures = false; + let hasSkipped = false; + [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { + if (item.classList.contains('fail') || item.classList.contains('error')) { + hasFailures = true; + } + if (item.classList.contains('skip')) { + hasSkipped = true; + } + }); + + if (hasFailures) { + packageSection.classList.add('fail'); + } else if (hasSkipped) { + packageSection.classList.add('skip'); + } + + // Create package header + const packageHeader = document.createElement('div'); + packageHeader.className = 'package-header'; + if (hasFailures) { + packageHeader.classList.add('fail'); + } else if (hasSkipped) { + packageHeader.classList.add('skip'); + } + + // Count stats for this package + let totalTests = group.packageTests.length + group.individualTests.length + Object.values(group.subtests).flat().length; + let passedTests = 0; + let failedTests = 0; + let skippedTests = 0; + + [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { + if (item.classList.contains('pass')) passedTests++; + else if (item.classList.contains('fail') || item.classList.contains('error')) failedTests++; + else if (item.classList.contains('skip')) skippedTests++; + }); + + packageHeader.innerHTML = ` +
${packageName}
+
+ ${totalTests} tests • + ${passedTests} passed • + ${failedTests} failed • + ${skippedTests} skipped + ${packageLogPath ? `View Package Log` : ''} +
+ `; + + packageSection.appendChild(packageHeader); + + // Add package-level test runners first + group.packageTests.forEach(test => { + packageSection.appendChild(test); + }); + + // Add individual tests and their subtests + group.individualTests.forEach(test => { + packageSection.appendChild(test); + const testName = test.dataset.name; + + // Add any subtests for this test + if (group.subtests[testName]) { + group.subtests[testName].sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + group.subtests[testName].forEach(subtest => { + packageSection.appendChild(subtest); + }); + // Mark these subtests as processed + delete group.subtests[testName]; + } + }); + + // Handle orphaned subtests (whose parents aren't in the individual tests list) + Object.keys(group.subtests).forEach(parentName => { + const subtests = group.subtests[parentName]; + if (subtests.length === 0) return; + + // Sort subtests by execution order + subtests.sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + + // Create a virtual parent test header for these orphaned subtests + const parentHeader = document.createElement('div'); + parentHeader.className = 'test-item virtual-parent'; + + // Determine the status of the parent based on subtests + let parentHasFailures = false; + let parentHasSkipped = false; + let parentAllPassed = true; + + subtests.forEach(subtest => { + if (subtest.classList.contains('fail') || subtest.classList.contains('error')) { + parentHasFailures = true; + parentAllPassed = false; + } + if (subtest.classList.contains('skip')) { + parentHasSkipped = true; + parentAllPassed = false; + } + }); + + let parentStatusClass = 'pass'; + let parentStatusText = 'PASS'; + if (parentHasFailures) { + parentStatusClass = 'fail'; + parentStatusText = 'FAIL'; + } else if (parentHasSkipped) { + parentStatusClass = 'skip'; + parentStatusText = 'SKIP'; + } + + parentHeader.classList.add(parentStatusClass); + parentHeader.innerHTML = ` + ${parentStatusText} +
${parentName}
+
+ ${packageName} + Gate: ${subtests[0].dataset.gate || ''} + - +
+ `; + + // Add the virtual parent header + packageSection.appendChild(parentHeader); + + // Add all subtests under this parent + subtests.forEach(subtest => { + packageSection.appendChild(subtest); + }); + }); + + hierarchy.appendChild(packageSection); + }); +} \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html b/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html new file mode 100644 index 0000000000000..eed5504429b8f --- /dev/null +++ b/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html @@ -0,0 +1,872 @@ + + + + + + Acceptance Test Results + + + +

Acceptance Test Results

+ +
+

Test Results

+

Network: simple-devnet

+

Run ID: f8cea13d-1c9d-4388-8746-04a5f0e11ff1

+

Total Duration: 5m42.772s

+

Started: 2025-09-02 11:14:33 UTC

+ +
+ pass +
+ +
+
+
11
+
Total Tests
+
+
+
11
+
Passed
+
+
+
0
+
Failed
+
+ +
+
0
+
Errors
+
+
+
100.0%
+
Pass Rate
+
+
+
+ +
+ + + +
+ +
+ + + + + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 1m17.867s + #9 + View Log +
+
+ + + + + +
+ pass +
TestFaucetFund
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 13.622s + #10 + View Log +
+
+ + + + + + +
+ pass +
TestPublicRpcAdvance
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 12.899s + #11 + View Log +
+
+ + + + + + +
+ pass +
TestRPCConnectivity
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 2.848s + #12 + View Log +
+
+ + + + + + +
+ pass +
TestTransfer
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 14.418s + #13 + View Log +
+
+ + + + + + +
+ pass +
TestCLAdvance
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base + Gate: jovian + + 5.805s + #14 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain + Gate: jovian + + 9.769s + #19 + View Log +
+
+ + + + + +
+ pass +
TestChainFork
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain + Gate: jovian + + 4.185s + #20 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit + Gate: jovian + + 40.982s + #16 + View Log +
+
+ + + + + +
+ pass +
TestL1ToL2Deposit
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit + Gate: jovian + + 35.291s + #17 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone + Gate: jovian + + 19.339s + #22 + View Log +
+
+ + + + + +
+ pass +
TestFees
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone + Gate: jovian + + 14.178s + #23 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: jovian + + 1m23.703s + #26 + View Log +
+
+ + + + + +
+ pass +
TestCheckFjordScript
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: jovian + + 32.328s + #27 + View Log +
+
+ + + + + + +
+ pass +
TestFees
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord + Gate: jovian + + 40.769s + #28 + View Log +
+
+ + + + + + + + + + + + +
+ pass +
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian (package)
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian + Gate: jovian + + 1m51.109s + #2 + View Log +
+
+ + + + + +
+ pass +
TestConfigurableMinBaseFee
+
+ github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian + Gate: jovian + + 1m38.35s + #3 + View Log +
+
+ + + + + + + + +
+ + + + \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js b/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js new file mode 100644 index 0000000000000..9d97eaef853fd --- /dev/null +++ b/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js @@ -0,0 +1,299 @@ +function filterTests() { + const query = document.getElementById('searchInput').value.toLowerCase(); + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + const text = item.textContent.toLowerCase(); + if (text.includes(query)) { + item.classList.remove('hidden'); + } else { + item.classList.add('hidden'); + } + }); + + // Show/hide package sections based on whether they have visible tests + packageSections.forEach(section => { + const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); + if (visibleTests.length > 0) { + section.classList.remove('hidden'); + } else { + section.classList.add('hidden'); + } + }); +} + +function showOnlyFailed() { + document.getElementById('searchInput').value = ''; + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + const status = item.dataset.status; + if (status === 'fail' || status === 'error') { + item.classList.remove('hidden'); + } else { + item.classList.add('hidden'); + } + }); + + // Show/hide package sections based on whether they have visible failed tests + packageSections.forEach(section => { + const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); + if (visibleTests.length > 0) { + section.classList.remove('hidden'); + } else { + section.classList.add('hidden'); + } + }); + + // Update button states + document.getElementById('showAllBtn').classList.remove('active'); + document.getElementById('showFailedBtn').classList.add('active'); +} + +function showAll() { + document.getElementById('searchInput').value = ''; + const testItems = document.querySelectorAll('.test-item'); + const packageSections = document.querySelectorAll('.package-section'); + + testItems.forEach(item => { + item.classList.remove('hidden'); + }); + + packageSections.forEach(section => { + section.classList.remove('hidden'); + }); + + // Update button states + document.getElementById('showFailedBtn').classList.remove('active'); + document.getElementById('showAllBtn').classList.add('active'); +} + +// Organize tests into proper hierarchy after page load +document.addEventListener('DOMContentLoaded', function() { + organizeTestHierarchy(); +}); + +function organizeTestHierarchy() { + const hierarchy = document.getElementById('testHierarchy'); + const testItems = Array.from(hierarchy.querySelectorAll('.test-item')); + + // If no tests, nothing to organize + if (testItems.length === 0) { + return; + } + + // Sort test items by execution order to maintain proper ordering + testItems.sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + + // Group tests by package and organize by type + const packageGroups = {}; + + testItems.forEach(item => { + const packageName = item.dataset.package || 'unknown'; + const isSubTest = item.dataset.isSubtest === 'true'; + const parentTest = item.dataset.parentTest || ''; + const testName = item.dataset.name; + + if (!packageGroups[packageName]) { + packageGroups[packageName] = { + packageTests: [], // Package-level test runners + individualTests: [], // Individual function tests + subtests: {}, // Subtests grouped by parent + orphanSubtests: [] // Subtests without a parent in this package + }; + } + + const group = packageGroups[packageName]; + + if (isSubTest && parentTest) { + // This is a subtest - group under its parent + if (!group.subtests[parentTest]) { + group.subtests[parentTest] = []; + } + group.subtests[parentTest].push(item); + // Add subtest styling + item.classList.add('subtest-item'); + } else if (testName && testName.includes('(package)')) { + // This is a package-level test runner + group.packageTests.push(item); + } else { + // This is an individual test + group.individualTests.push(item); + } + }); + + // Clear hierarchy and rebuild with proper organization + hierarchy.innerHTML = ''; + + // Iterate through packages in a consistent order (alphabetical) + const sortedPackages = Object.keys(packageGroups).sort(); + + sortedPackages.forEach(packageName => { + const group = packageGroups[packageName]; + + // Skip empty groups + if (group.packageTests.length === 0 && group.individualTests.length === 0 && Object.keys(group.subtests).length === 0) { + return; + } + + // Find the package-level test log path for this specific package + let packageLogPath = ''; + group.packageTests.forEach(packageTest => { + const logLink = packageTest.querySelector('.log-link'); + if (logLink) { + packageLogPath = logLink.getAttribute('href'); + } + }); + + // Create package section + const packageSection = document.createElement('div'); + packageSection.className = 'package-section'; + + // Determine package status based on contained tests + let hasFailures = false; + let hasSkipped = false; + [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { + if (item.classList.contains('fail') || item.classList.contains('error')) { + hasFailures = true; + } + if (item.classList.contains('skip')) { + hasSkipped = true; + } + }); + + if (hasFailures) { + packageSection.classList.add('fail'); + } else if (hasSkipped) { + packageSection.classList.add('skip'); + } + + // Create package header + const packageHeader = document.createElement('div'); + packageHeader.className = 'package-header'; + if (hasFailures) { + packageHeader.classList.add('fail'); + } else if (hasSkipped) { + packageHeader.classList.add('skip'); + } + + // Count stats for this package + let totalTests = group.packageTests.length + group.individualTests.length + Object.values(group.subtests).flat().length; + let passedTests = 0; + let failedTests = 0; + let skippedTests = 0; + + [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { + if (item.classList.contains('pass')) passedTests++; + else if (item.classList.contains('fail') || item.classList.contains('error')) failedTests++; + else if (item.classList.contains('skip')) skippedTests++; + }); + + packageHeader.innerHTML = ` +
${packageName}
+
+ ${totalTests} tests • + ${passedTests} passed • + ${failedTests} failed • + ${skippedTests} skipped + ${packageLogPath ? `View Package Log` : ''} +
+ `; + + packageSection.appendChild(packageHeader); + + // Add package-level test runners first + group.packageTests.forEach(test => { + packageSection.appendChild(test); + }); + + // Add individual tests and their subtests + group.individualTests.forEach(test => { + packageSection.appendChild(test); + const testName = test.dataset.name; + + // Add any subtests for this test + if (group.subtests[testName]) { + group.subtests[testName].sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + group.subtests[testName].forEach(subtest => { + packageSection.appendChild(subtest); + }); + // Mark these subtests as processed + delete group.subtests[testName]; + } + }); + + // Handle orphaned subtests (whose parents aren't in the individual tests list) + Object.keys(group.subtests).forEach(parentName => { + const subtests = group.subtests[parentName]; + if (subtests.length === 0) return; + + // Sort subtests by execution order + subtests.sort((a, b) => { + const orderA = parseInt(a.dataset.executionOrder) || 0; + const orderB = parseInt(b.dataset.executionOrder) || 0; + return orderA - orderB; + }); + + // Create a virtual parent test header for these orphaned subtests + const parentHeader = document.createElement('div'); + parentHeader.className = 'test-item virtual-parent'; + + // Determine the status of the parent based on subtests + let parentHasFailures = false; + let parentHasSkipped = false; + let parentAllPassed = true; + + subtests.forEach(subtest => { + if (subtest.classList.contains('fail') || subtest.classList.contains('error')) { + parentHasFailures = true; + parentAllPassed = false; + } + if (subtest.classList.contains('skip')) { + parentHasSkipped = true; + parentAllPassed = false; + } + }); + + let parentStatusClass = 'pass'; + let parentStatusText = 'PASS'; + if (parentHasFailures) { + parentStatusClass = 'fail'; + parentStatusText = 'FAIL'; + } else if (parentHasSkipped) { + parentStatusClass = 'skip'; + parentStatusText = 'SKIP'; + } + + parentHeader.classList.add(parentStatusClass); + parentHeader.innerHTML = ` + ${parentStatusText} +
${parentName}
+
+ ${packageName} + Gate: ${subtests[0].dataset.gate || ''} + - +
+ `; + + // Add the virtual parent header + packageSection.appendChild(parentHeader); + + // Add all subtests under this parent + subtests.forEach(subtest => { + packageSection.appendChild(subtest); + }); + }); + + hierarchy.appendChild(packageSection); + }); +} \ No newline at end of file diff --git a/op-node/rollup/derive/batch_mux.go b/op-node/rollup/derive/batch_mux.go index f2229e9041644..f5eeb95613ce9 100644 --- a/op-node/rollup/derive/batch_mux.go +++ b/op-node/rollup/derive/batch_mux.go @@ -34,21 +34,16 @@ func NewBatchMux(lgr log.Logger, cfg *rollup.Config, prev NextBatchProvider, l2 func (b *BatchMux) Reset(ctx context.Context, base eth.L1BlockRef, sysCfg eth.SystemConfig) error { // TODO(12490): change to a switch over b.cfg.ActiveFork(base.Time) switch { - case b.cfg.IsJovian(base.Time): - if _, ok := b.SingularBatchProvider.(*BatchStage); !ok { - b.log.Info("BatchMux: activating Jovian stage during reset", "origin", base) - b.SingularBatchProvider = NewBatchStage(b.log, b.cfg, b.prev, b.l2) + default: + if _, ok := b.SingularBatchProvider.(*BatchQueue); !ok { + b.log.Info("BatchMux: activating pre-Holocene stage during reset", "origin", base) + b.SingularBatchProvider = NewBatchQueue(b.log, b.cfg, b.prev, b.l2) } case b.cfg.IsHolocene(base.Time): if _, ok := b.SingularBatchProvider.(*BatchStage); !ok { b.log.Info("BatchMux: activating Holocene stage during reset", "origin", base) b.SingularBatchProvider = NewBatchStage(b.log, b.cfg, b.prev, b.l2) } - default: - if _, ok := b.SingularBatchProvider.(*BatchQueue); !ok { - b.log.Info("BatchMux: activating pre-Holocene stage during reset", "origin", base) - b.SingularBatchProvider = NewBatchQueue(b.log, b.cfg, b.prev, b.l2) - } } return b.SingularBatchProvider.Reset(ctx, base, sysCfg) } @@ -57,8 +52,6 @@ func (b *BatchMux) Transform(f rollup.ForkName) { switch f { case rollup.Holocene: b.TransformHolocene() - case rollup.Jovian: - b.TransformJovian() } } @@ -81,22 +74,3 @@ func (b *BatchMux) TransformHolocene() { panic(fmt.Sprintf("unknown batch stage type: %T", bp)) } } - -func (b *BatchMux) TransformJovian() { - switch bp := b.SingularBatchProvider.(type) { - case *BatchQueue: - b.log.Info("BatchMux: transforming to Jovian stage") - bs := NewBatchStage(b.log, b.cfg, b.prev, b.l2) - // Even though any ongoing span batch or queued batches are dropped at Jovian activation, the - // post-Jovian batch stage still needs access to the collected l1Blocks pre-Jovian because - // the first Jovian channel will contain pre-Jovian batches. - bs.l1Blocks = slices.Clone(bp.l1Blocks) - bs.origin = bp.origin - b.SingularBatchProvider = bs - case *BatchStage: - // Jovian BatchStage already active - this can happen during reorgs or multiple pipeline steps - b.log.Debug("BatchMux: Jovian BatchStage already active", "origin", bp.Origin()) - default: - panic(fmt.Sprintf("unknown batch stage type: %T", bp)) - } -} diff --git a/op-node/rollup/derive/channel_mux.go b/op-node/rollup/derive/channel_mux.go index 69ae26e5acc08..44246eeae397d 100644 --- a/op-node/rollup/derive/channel_mux.go +++ b/op-node/rollup/derive/channel_mux.go @@ -38,21 +38,16 @@ func NewChannelMux(log log.Logger, spec *rollup.ChainSpec, prev NextFrameProvide func (c *ChannelMux) Reset(ctx context.Context, base eth.L1BlockRef, sysCfg eth.SystemConfig) error { // TODO(12490): change to a switch over c.cfg.ActiveFork(base.Time) switch { - case c.spec.IsJovian(base.Time): - if _, ok := c.RawChannelProvider.(*ChannelAssembler); !ok { - c.log.Info("ChannelMux: activating Jovian stage during reset", "origin", base) - c.RawChannelProvider = NewChannelAssembler(c.log, c.spec, c.prev, c.m) + default: + if _, ok := c.RawChannelProvider.(*ChannelBank); !ok { + c.log.Info("ChannelMux: activating pre-Holocene stage during reset", "origin", base) + c.RawChannelProvider = NewChannelBank(c.log, c.spec, c.prev, c.m) } case c.spec.IsHolocene(base.Time): if _, ok := c.RawChannelProvider.(*ChannelAssembler); !ok { c.log.Info("ChannelMux: activating Holocene stage during reset", "origin", base) c.RawChannelProvider = NewChannelAssembler(c.log, c.spec, c.prev, c.m) } - default: - if _, ok := c.RawChannelProvider.(*ChannelBank); !ok { - c.log.Info("ChannelMux: activating pre-Holocene stage during reset", "origin", base) - c.RawChannelProvider = NewChannelBank(c.log, c.spec, c.prev, c.m) - } } return c.RawChannelProvider.Reset(ctx, base, sysCfg) } @@ -61,8 +56,6 @@ func (c *ChannelMux) Transform(f rollup.ForkName) { switch f { case rollup.Holocene: c.TransformHolocene() - case rollup.Jovian: - c.TransformJovian() } } @@ -79,16 +72,3 @@ func (c *ChannelMux) TransformHolocene() { panic(fmt.Sprintf("unknown channel stage type: %T", cp)) } } - -func (c *ChannelMux) TransformJovian() { - switch cp := c.RawChannelProvider.(type) { - case *ChannelBank: - c.log.Info("ChannelMux: transforming to Jovian stage") - c.RawChannelProvider = NewChannelAssembler(c.log, c.spec, c.prev, c.m) - case *ChannelAssembler: - // Jovian ChannelAssembler already active - this can happen during reorgs or multiple pipeline steps - c.log.Debug("ChannelMux: Jovian ChannelAssembler already active", "origin", cp.Origin()) - default: - panic(fmt.Sprintf("unknown channel stage type: %T", cp)) - } -} diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 4d6b1e4e64d61..729e6498e438f 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -28,6 +28,9 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @custom:value GAS_LIMIT Represents an update to gas limit on L2. /// @custom:value UNSAFE_BLOCK_SIGNER Represents an update to the signer key for unsafe /// block distrubution. + /// @custom:value EIP_1559_PARAMS Represents an update to EIP-1559 parameters. + /// @custom:value OPERATOR_FEE_PARAMS Represents an update to operator fee parameters. + /// @custom:value MIN_BASE_FEE Represents an update to the minimum base fee. enum UpdateType { BATCHER, FEE_SCALARS, diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 84c56d3597c08..1c2200345c3a3 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -916,3 +916,23 @@ contract SystemConfig_SuperchainConfig_Test is SystemConfig_TestInit { assertEq(address(systemConfig.superchainConfig()), address(superchainConfig)); } } + +/// @title SystemConfig_SetMinBaseFee_Test +/// @notice Test contract for SystemConfig `setMinBaseFee` function. +contract SystemConfig_SetMinBaseFee_Test is SystemConfig_TestInit { + /// @notice Tests that `setMinBaseFee` reverts if the caller is not the owner. + function test_setMinBaseFee_notOwner_reverts() external { + vm.expectRevert("Ownable: caller is not the owner"); + systemConfig.setMinBaseFee(0); + } + + /// @notice Tests that `setMinBaseFee` updates the min base fee successfully. + function testFuzz_setMinBaseFee_succeeds(uint64 newMinBaseFee) external { + vm.expectEmit(address(systemConfig)); + emit ConfigUpdate(0, ISystemConfig.UpdateType.MIN_BASE_FEE, abi.encode(newMinBaseFee)); + + vm.prank(systemConfig.owner()); + systemConfig.setMinBaseFee(newMinBaseFee); + assertEq(systemConfig.minBaseFee(), newMinBaseFee); + } +} From fbfb146d2ed2cc9536373b93480de42f517688d9 Mon Sep 17 00:00:00 2001 From: William Law Date: Tue, 2 Sep 2025 12:24:45 -0400 Subject: [PATCH 44/56] fix ci --- .../results.html | 872 ------------------ .../static/results.js | 299 ------ .../results.html | 821 ----------------- .../static/results.js | 299 ------ .../results.html | 872 ------------------ .../static/results.js | 299 ------ .../actions/proofs/jovian_activation_test.go | 2 +- op-e2e/actions/upgrades/jovian_fork_test.go | 6 - op-service/eth/types_test.go | 3 +- 9 files changed, 3 insertions(+), 3470 deletions(-) delete mode 100644 op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html delete mode 100644 op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js delete mode 100644 op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html delete mode 100644 op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js delete mode 100644 op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html delete mode 100644 op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js diff --git a/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html b/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html deleted file mode 100644 index 23653e3a48622..0000000000000 --- a/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/results.html +++ /dev/null @@ -1,872 +0,0 @@ - - - - - - Acceptance Test Results - - - -

Acceptance Test Results

- -
-

Test Results

-

Network: simple-devnet

-

Run ID: 295d3abd-93cf-4e79-9260-fbb9c2faaccf

-

Total Duration: 5m56.476s

-

Started: 2025-09-02 10:58:04 UTC

- -
- pass -
- -
-
-
11
-
Total Tests
-
-
-
11
-
Passed
-
-
-
0
-
Failed
-
- -
-
0
-
Errors
-
-
-
100.0%
-
Pass Rate
-
-
-
- -
- - - -
- -
- - - - - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 1m10.991s - #9 - View Log -
-
- - - - - -
- pass -
TestCLAdvance
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 5.805s - #10 - View Log -
-
- - - - - - -
- pass -
TestFaucetFund
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 12.118s - #11 - View Log -
-
- - - - - - -
- pass -
TestPublicRpcAdvance
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 12.815s - #12 - View Log -
-
- - - - - - -
- pass -
TestRPCConnectivity
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 2.664s - #13 - View Log -
-
- - - - - - -
- pass -
TestTransfer
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 14.038s - #14 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain - Gate: jovian - - 8.024s - #19 - View Log -
-
- - - - - -
- pass -
TestChainFork
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain - Gate: jovian - - 3.3s - #20 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit - Gate: jovian - - 47.153s - #16 - View Log -
-
- - - - - -
- pass -
TestL1ToL2Deposit
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit - Gate: jovian - - 42.361s - #17 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone - Gate: jovian - - 18.915s - #22 - View Log -
-
- - - - - -
- pass -
TestFees
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone - Gate: jovian - - 13.929s - #23 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: jovian - - 1m18.179s - #26 - View Log -
-
- - - - - -
- pass -
TestFees
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: jovian - - 41.461s - #27 - View Log -
-
- - - - - - -
- pass -
TestCheckFjordScript
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: jovian - - 27.421s - #28 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian - Gate: jovian - - 2m13.212s - #2 - View Log -
-
- - - - - -
- pass -
TestConfigurableMinBaseFee
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian - Gate: jovian - - 1m46.345s - #3 - View Log -
-
- - - - - - - - -
- - - - \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js b/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js deleted file mode 100644 index 9d97eaef853fd..0000000000000 --- a/op-acceptance-tests/logs/testrun-295d3abd-93cf-4e79-9260-fbb9c2faaccf/static/results.js +++ /dev/null @@ -1,299 +0,0 @@ -function filterTests() { - const query = document.getElementById('searchInput').value.toLowerCase(); - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - const text = item.textContent.toLowerCase(); - if (text.includes(query)) { - item.classList.remove('hidden'); - } else { - item.classList.add('hidden'); - } - }); - - // Show/hide package sections based on whether they have visible tests - packageSections.forEach(section => { - const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); - if (visibleTests.length > 0) { - section.classList.remove('hidden'); - } else { - section.classList.add('hidden'); - } - }); -} - -function showOnlyFailed() { - document.getElementById('searchInput').value = ''; - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - const status = item.dataset.status; - if (status === 'fail' || status === 'error') { - item.classList.remove('hidden'); - } else { - item.classList.add('hidden'); - } - }); - - // Show/hide package sections based on whether they have visible failed tests - packageSections.forEach(section => { - const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); - if (visibleTests.length > 0) { - section.classList.remove('hidden'); - } else { - section.classList.add('hidden'); - } - }); - - // Update button states - document.getElementById('showAllBtn').classList.remove('active'); - document.getElementById('showFailedBtn').classList.add('active'); -} - -function showAll() { - document.getElementById('searchInput').value = ''; - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - item.classList.remove('hidden'); - }); - - packageSections.forEach(section => { - section.classList.remove('hidden'); - }); - - // Update button states - document.getElementById('showFailedBtn').classList.remove('active'); - document.getElementById('showAllBtn').classList.add('active'); -} - -// Organize tests into proper hierarchy after page load -document.addEventListener('DOMContentLoaded', function() { - organizeTestHierarchy(); -}); - -function organizeTestHierarchy() { - const hierarchy = document.getElementById('testHierarchy'); - const testItems = Array.from(hierarchy.querySelectorAll('.test-item')); - - // If no tests, nothing to organize - if (testItems.length === 0) { - return; - } - - // Sort test items by execution order to maintain proper ordering - testItems.sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - - // Group tests by package and organize by type - const packageGroups = {}; - - testItems.forEach(item => { - const packageName = item.dataset.package || 'unknown'; - const isSubTest = item.dataset.isSubtest === 'true'; - const parentTest = item.dataset.parentTest || ''; - const testName = item.dataset.name; - - if (!packageGroups[packageName]) { - packageGroups[packageName] = { - packageTests: [], // Package-level test runners - individualTests: [], // Individual function tests - subtests: {}, // Subtests grouped by parent - orphanSubtests: [] // Subtests without a parent in this package - }; - } - - const group = packageGroups[packageName]; - - if (isSubTest && parentTest) { - // This is a subtest - group under its parent - if (!group.subtests[parentTest]) { - group.subtests[parentTest] = []; - } - group.subtests[parentTest].push(item); - // Add subtest styling - item.classList.add('subtest-item'); - } else if (testName && testName.includes('(package)')) { - // This is a package-level test runner - group.packageTests.push(item); - } else { - // This is an individual test - group.individualTests.push(item); - } - }); - - // Clear hierarchy and rebuild with proper organization - hierarchy.innerHTML = ''; - - // Iterate through packages in a consistent order (alphabetical) - const sortedPackages = Object.keys(packageGroups).sort(); - - sortedPackages.forEach(packageName => { - const group = packageGroups[packageName]; - - // Skip empty groups - if (group.packageTests.length === 0 && group.individualTests.length === 0 && Object.keys(group.subtests).length === 0) { - return; - } - - // Find the package-level test log path for this specific package - let packageLogPath = ''; - group.packageTests.forEach(packageTest => { - const logLink = packageTest.querySelector('.log-link'); - if (logLink) { - packageLogPath = logLink.getAttribute('href'); - } - }); - - // Create package section - const packageSection = document.createElement('div'); - packageSection.className = 'package-section'; - - // Determine package status based on contained tests - let hasFailures = false; - let hasSkipped = false; - [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { - if (item.classList.contains('fail') || item.classList.contains('error')) { - hasFailures = true; - } - if (item.classList.contains('skip')) { - hasSkipped = true; - } - }); - - if (hasFailures) { - packageSection.classList.add('fail'); - } else if (hasSkipped) { - packageSection.classList.add('skip'); - } - - // Create package header - const packageHeader = document.createElement('div'); - packageHeader.className = 'package-header'; - if (hasFailures) { - packageHeader.classList.add('fail'); - } else if (hasSkipped) { - packageHeader.classList.add('skip'); - } - - // Count stats for this package - let totalTests = group.packageTests.length + group.individualTests.length + Object.values(group.subtests).flat().length; - let passedTests = 0; - let failedTests = 0; - let skippedTests = 0; - - [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { - if (item.classList.contains('pass')) passedTests++; - else if (item.classList.contains('fail') || item.classList.contains('error')) failedTests++; - else if (item.classList.contains('skip')) skippedTests++; - }); - - packageHeader.innerHTML = ` -
${packageName}
-
- ${totalTests} tests • - ${passedTests} passed • - ${failedTests} failed • - ${skippedTests} skipped - ${packageLogPath ? `View Package Log` : ''} -
- `; - - packageSection.appendChild(packageHeader); - - // Add package-level test runners first - group.packageTests.forEach(test => { - packageSection.appendChild(test); - }); - - // Add individual tests and their subtests - group.individualTests.forEach(test => { - packageSection.appendChild(test); - const testName = test.dataset.name; - - // Add any subtests for this test - if (group.subtests[testName]) { - group.subtests[testName].sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - group.subtests[testName].forEach(subtest => { - packageSection.appendChild(subtest); - }); - // Mark these subtests as processed - delete group.subtests[testName]; - } - }); - - // Handle orphaned subtests (whose parents aren't in the individual tests list) - Object.keys(group.subtests).forEach(parentName => { - const subtests = group.subtests[parentName]; - if (subtests.length === 0) return; - - // Sort subtests by execution order - subtests.sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - - // Create a virtual parent test header for these orphaned subtests - const parentHeader = document.createElement('div'); - parentHeader.className = 'test-item virtual-parent'; - - // Determine the status of the parent based on subtests - let parentHasFailures = false; - let parentHasSkipped = false; - let parentAllPassed = true; - - subtests.forEach(subtest => { - if (subtest.classList.contains('fail') || subtest.classList.contains('error')) { - parentHasFailures = true; - parentAllPassed = false; - } - if (subtest.classList.contains('skip')) { - parentHasSkipped = true; - parentAllPassed = false; - } - }); - - let parentStatusClass = 'pass'; - let parentStatusText = 'PASS'; - if (parentHasFailures) { - parentStatusClass = 'fail'; - parentStatusText = 'FAIL'; - } else if (parentHasSkipped) { - parentStatusClass = 'skip'; - parentStatusText = 'SKIP'; - } - - parentHeader.classList.add(parentStatusClass); - parentHeader.innerHTML = ` - ${parentStatusText} -
${parentName}
-
- ${packageName} - Gate: ${subtests[0].dataset.gate || ''} - - -
- `; - - // Add the virtual parent header - packageSection.appendChild(parentHeader); - - // Add all subtests under this parent - subtests.forEach(subtest => { - packageSection.appendChild(subtest); - }); - }); - - hierarchy.appendChild(packageSection); - }); -} \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html b/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html deleted file mode 100644 index 8ab45c0b22f37..0000000000000 --- a/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/results.html +++ /dev/null @@ -1,821 +0,0 @@ - - - - - - Acceptance Test Results - - - -

Acceptance Test Results

- -
-

Test Results

-

Network: simple-devnet

-

Run ID: e5c29011-c7cd-4080-8c42-b7f2d5b68d8e

-

Total Duration: 3m47.944s

-

Started: 2025-09-02 13:13:56 UTC

- -
- pass -
- -
-
-
10
-
Total Tests
-
-
-
10
-
Passed
-
-
-
0
-
Failed
-
- -
-
0
-
Errors
-
-
-
100.0%
-
Pass Rate
-
-
-
- -
- - - -
- -
- - - - - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: base - - 1m14.022s - #6 - View Log -
-
- - - - - -
- pass -
TestCLAdvance
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: base - - 5.799s - #7 - View Log -
-
- - - - - - -
- pass -
TestFaucetFund
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: base - - 12.109s - #8 - View Log -
-
- - - - - - -
- pass -
TestPublicRpcAdvance
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: base - - 12.756s - #9 - View Log -
-
- - - - - - -
- pass -
TestRPCConnectivity
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: base - - 2.662s - #10 - View Log -
-
- - - - - - -
- pass -
TestTransfer
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: base - - 15.163s - #11 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain - Gate: base - - 7.658s - #16 - View Log -
-
- - - - - -
- pass -
TestChainFork
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain - Gate: base - - 3.313s - #17 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit - Gate: base - - 47.15s - #13 - View Log -
-
- - - - - -
- pass -
TestL1ToL2Deposit
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit - Gate: base - - 42.681s - #14 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone - Gate: base - - 17.124s - #19 - View Log -
-
- - - - - -
- pass -
TestFees
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone - Gate: base - - 12.595s - #20 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: base - - 1m21.987s - #23 - View Log -
-
- - - - - -
- pass -
TestCheckFjordScript
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: base - - 27.801s - #24 - View Log -
-
- - - - - - -
- pass -
TestFees
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: base - - 45.107s - #25 - View Log -
-
- - - - - - - - -
- - - - \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js b/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js deleted file mode 100644 index 9d97eaef853fd..0000000000000 --- a/op-acceptance-tests/logs/testrun-e5c29011-c7cd-4080-8c42-b7f2d5b68d8e/static/results.js +++ /dev/null @@ -1,299 +0,0 @@ -function filterTests() { - const query = document.getElementById('searchInput').value.toLowerCase(); - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - const text = item.textContent.toLowerCase(); - if (text.includes(query)) { - item.classList.remove('hidden'); - } else { - item.classList.add('hidden'); - } - }); - - // Show/hide package sections based on whether they have visible tests - packageSections.forEach(section => { - const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); - if (visibleTests.length > 0) { - section.classList.remove('hidden'); - } else { - section.classList.add('hidden'); - } - }); -} - -function showOnlyFailed() { - document.getElementById('searchInput').value = ''; - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - const status = item.dataset.status; - if (status === 'fail' || status === 'error') { - item.classList.remove('hidden'); - } else { - item.classList.add('hidden'); - } - }); - - // Show/hide package sections based on whether they have visible failed tests - packageSections.forEach(section => { - const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); - if (visibleTests.length > 0) { - section.classList.remove('hidden'); - } else { - section.classList.add('hidden'); - } - }); - - // Update button states - document.getElementById('showAllBtn').classList.remove('active'); - document.getElementById('showFailedBtn').classList.add('active'); -} - -function showAll() { - document.getElementById('searchInput').value = ''; - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - item.classList.remove('hidden'); - }); - - packageSections.forEach(section => { - section.classList.remove('hidden'); - }); - - // Update button states - document.getElementById('showFailedBtn').classList.remove('active'); - document.getElementById('showAllBtn').classList.add('active'); -} - -// Organize tests into proper hierarchy after page load -document.addEventListener('DOMContentLoaded', function() { - organizeTestHierarchy(); -}); - -function organizeTestHierarchy() { - const hierarchy = document.getElementById('testHierarchy'); - const testItems = Array.from(hierarchy.querySelectorAll('.test-item')); - - // If no tests, nothing to organize - if (testItems.length === 0) { - return; - } - - // Sort test items by execution order to maintain proper ordering - testItems.sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - - // Group tests by package and organize by type - const packageGroups = {}; - - testItems.forEach(item => { - const packageName = item.dataset.package || 'unknown'; - const isSubTest = item.dataset.isSubtest === 'true'; - const parentTest = item.dataset.parentTest || ''; - const testName = item.dataset.name; - - if (!packageGroups[packageName]) { - packageGroups[packageName] = { - packageTests: [], // Package-level test runners - individualTests: [], // Individual function tests - subtests: {}, // Subtests grouped by parent - orphanSubtests: [] // Subtests without a parent in this package - }; - } - - const group = packageGroups[packageName]; - - if (isSubTest && parentTest) { - // This is a subtest - group under its parent - if (!group.subtests[parentTest]) { - group.subtests[parentTest] = []; - } - group.subtests[parentTest].push(item); - // Add subtest styling - item.classList.add('subtest-item'); - } else if (testName && testName.includes('(package)')) { - // This is a package-level test runner - group.packageTests.push(item); - } else { - // This is an individual test - group.individualTests.push(item); - } - }); - - // Clear hierarchy and rebuild with proper organization - hierarchy.innerHTML = ''; - - // Iterate through packages in a consistent order (alphabetical) - const sortedPackages = Object.keys(packageGroups).sort(); - - sortedPackages.forEach(packageName => { - const group = packageGroups[packageName]; - - // Skip empty groups - if (group.packageTests.length === 0 && group.individualTests.length === 0 && Object.keys(group.subtests).length === 0) { - return; - } - - // Find the package-level test log path for this specific package - let packageLogPath = ''; - group.packageTests.forEach(packageTest => { - const logLink = packageTest.querySelector('.log-link'); - if (logLink) { - packageLogPath = logLink.getAttribute('href'); - } - }); - - // Create package section - const packageSection = document.createElement('div'); - packageSection.className = 'package-section'; - - // Determine package status based on contained tests - let hasFailures = false; - let hasSkipped = false; - [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { - if (item.classList.contains('fail') || item.classList.contains('error')) { - hasFailures = true; - } - if (item.classList.contains('skip')) { - hasSkipped = true; - } - }); - - if (hasFailures) { - packageSection.classList.add('fail'); - } else if (hasSkipped) { - packageSection.classList.add('skip'); - } - - // Create package header - const packageHeader = document.createElement('div'); - packageHeader.className = 'package-header'; - if (hasFailures) { - packageHeader.classList.add('fail'); - } else if (hasSkipped) { - packageHeader.classList.add('skip'); - } - - // Count stats for this package - let totalTests = group.packageTests.length + group.individualTests.length + Object.values(group.subtests).flat().length; - let passedTests = 0; - let failedTests = 0; - let skippedTests = 0; - - [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { - if (item.classList.contains('pass')) passedTests++; - else if (item.classList.contains('fail') || item.classList.contains('error')) failedTests++; - else if (item.classList.contains('skip')) skippedTests++; - }); - - packageHeader.innerHTML = ` -
${packageName}
-
- ${totalTests} tests • - ${passedTests} passed • - ${failedTests} failed • - ${skippedTests} skipped - ${packageLogPath ? `View Package Log` : ''} -
- `; - - packageSection.appendChild(packageHeader); - - // Add package-level test runners first - group.packageTests.forEach(test => { - packageSection.appendChild(test); - }); - - // Add individual tests and their subtests - group.individualTests.forEach(test => { - packageSection.appendChild(test); - const testName = test.dataset.name; - - // Add any subtests for this test - if (group.subtests[testName]) { - group.subtests[testName].sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - group.subtests[testName].forEach(subtest => { - packageSection.appendChild(subtest); - }); - // Mark these subtests as processed - delete group.subtests[testName]; - } - }); - - // Handle orphaned subtests (whose parents aren't in the individual tests list) - Object.keys(group.subtests).forEach(parentName => { - const subtests = group.subtests[parentName]; - if (subtests.length === 0) return; - - // Sort subtests by execution order - subtests.sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - - // Create a virtual parent test header for these orphaned subtests - const parentHeader = document.createElement('div'); - parentHeader.className = 'test-item virtual-parent'; - - // Determine the status of the parent based on subtests - let parentHasFailures = false; - let parentHasSkipped = false; - let parentAllPassed = true; - - subtests.forEach(subtest => { - if (subtest.classList.contains('fail') || subtest.classList.contains('error')) { - parentHasFailures = true; - parentAllPassed = false; - } - if (subtest.classList.contains('skip')) { - parentHasSkipped = true; - parentAllPassed = false; - } - }); - - let parentStatusClass = 'pass'; - let parentStatusText = 'PASS'; - if (parentHasFailures) { - parentStatusClass = 'fail'; - parentStatusText = 'FAIL'; - } else if (parentHasSkipped) { - parentStatusClass = 'skip'; - parentStatusText = 'SKIP'; - } - - parentHeader.classList.add(parentStatusClass); - parentHeader.innerHTML = ` - ${parentStatusText} -
${parentName}
-
- ${packageName} - Gate: ${subtests[0].dataset.gate || ''} - - -
- `; - - // Add the virtual parent header - packageSection.appendChild(parentHeader); - - // Add all subtests under this parent - subtests.forEach(subtest => { - packageSection.appendChild(subtest); - }); - }); - - hierarchy.appendChild(packageSection); - }); -} \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html b/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html deleted file mode 100644 index eed5504429b8f..0000000000000 --- a/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/results.html +++ /dev/null @@ -1,872 +0,0 @@ - - - - - - Acceptance Test Results - - - -

Acceptance Test Results

- -
-

Test Results

-

Network: simple-devnet

-

Run ID: f8cea13d-1c9d-4388-8746-04a5f0e11ff1

-

Total Duration: 5m42.772s

-

Started: 2025-09-02 11:14:33 UTC

- -
- pass -
- -
-
-
11
-
Total Tests
-
-
-
11
-
Passed
-
-
-
0
-
Failed
-
- -
-
0
-
Errors
-
-
-
100.0%
-
Pass Rate
-
-
-
- -
- - - -
- -
- - - - - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 1m17.867s - #9 - View Log -
-
- - - - - -
- pass -
TestFaucetFund
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 13.622s - #10 - View Log -
-
- - - - - - -
- pass -
TestPublicRpcAdvance
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 12.899s - #11 - View Log -
-
- - - - - - -
- pass -
TestRPCConnectivity
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 2.848s - #12 - View Log -
-
- - - - - - -
- pass -
TestTransfer
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 14.418s - #13 - View Log -
-
- - - - - - -
- pass -
TestCLAdvance
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base - Gate: jovian - - 5.805s - #14 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain - Gate: jovian - - 9.769s - #19 - View Log -
-
- - - - - -
- pass -
TestChainFork
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/chain - Gate: jovian - - 4.185s - #20 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit - Gate: jovian - - 40.982s - #16 - View Log -
-
- - - - - -
- pass -
TestL1ToL2Deposit
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/base/deposit - Gate: jovian - - 35.291s - #17 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone - Gate: jovian - - 19.339s - #22 - View Log -
-
- - - - - -
- pass -
TestFees
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/ecotone - Gate: jovian - - 14.178s - #23 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: jovian - - 1m23.703s - #26 - View Log -
-
- - - - - -
- pass -
TestCheckFjordScript
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: jovian - - 32.328s - #27 - View Log -
-
- - - - - - -
- pass -
TestFees
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/fjord - Gate: jovian - - 40.769s - #28 - View Log -
-
- - - - - - - - - - - - -
- pass -
github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian (package)
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian - Gate: jovian - - 1m51.109s - #2 - View Log -
-
- - - - - -
- pass -
TestConfigurableMinBaseFee
-
- github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian - Gate: jovian - - 1m38.35s - #3 - View Log -
-
- - - - - - - - -
- - - - \ No newline at end of file diff --git a/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js b/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js deleted file mode 100644 index 9d97eaef853fd..0000000000000 --- a/op-acceptance-tests/logs/testrun-f8cea13d-1c9d-4388-8746-04a5f0e11ff1/static/results.js +++ /dev/null @@ -1,299 +0,0 @@ -function filterTests() { - const query = document.getElementById('searchInput').value.toLowerCase(); - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - const text = item.textContent.toLowerCase(); - if (text.includes(query)) { - item.classList.remove('hidden'); - } else { - item.classList.add('hidden'); - } - }); - - // Show/hide package sections based on whether they have visible tests - packageSections.forEach(section => { - const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); - if (visibleTests.length > 0) { - section.classList.remove('hidden'); - } else { - section.classList.add('hidden'); - } - }); -} - -function showOnlyFailed() { - document.getElementById('searchInput').value = ''; - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - const status = item.dataset.status; - if (status === 'fail' || status === 'error') { - item.classList.remove('hidden'); - } else { - item.classList.add('hidden'); - } - }); - - // Show/hide package sections based on whether they have visible failed tests - packageSections.forEach(section => { - const visibleTests = section.querySelectorAll('.test-item:not(.hidden)'); - if (visibleTests.length > 0) { - section.classList.remove('hidden'); - } else { - section.classList.add('hidden'); - } - }); - - // Update button states - document.getElementById('showAllBtn').classList.remove('active'); - document.getElementById('showFailedBtn').classList.add('active'); -} - -function showAll() { - document.getElementById('searchInput').value = ''; - const testItems = document.querySelectorAll('.test-item'); - const packageSections = document.querySelectorAll('.package-section'); - - testItems.forEach(item => { - item.classList.remove('hidden'); - }); - - packageSections.forEach(section => { - section.classList.remove('hidden'); - }); - - // Update button states - document.getElementById('showFailedBtn').classList.remove('active'); - document.getElementById('showAllBtn').classList.add('active'); -} - -// Organize tests into proper hierarchy after page load -document.addEventListener('DOMContentLoaded', function() { - organizeTestHierarchy(); -}); - -function organizeTestHierarchy() { - const hierarchy = document.getElementById('testHierarchy'); - const testItems = Array.from(hierarchy.querySelectorAll('.test-item')); - - // If no tests, nothing to organize - if (testItems.length === 0) { - return; - } - - // Sort test items by execution order to maintain proper ordering - testItems.sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - - // Group tests by package and organize by type - const packageGroups = {}; - - testItems.forEach(item => { - const packageName = item.dataset.package || 'unknown'; - const isSubTest = item.dataset.isSubtest === 'true'; - const parentTest = item.dataset.parentTest || ''; - const testName = item.dataset.name; - - if (!packageGroups[packageName]) { - packageGroups[packageName] = { - packageTests: [], // Package-level test runners - individualTests: [], // Individual function tests - subtests: {}, // Subtests grouped by parent - orphanSubtests: [] // Subtests without a parent in this package - }; - } - - const group = packageGroups[packageName]; - - if (isSubTest && parentTest) { - // This is a subtest - group under its parent - if (!group.subtests[parentTest]) { - group.subtests[parentTest] = []; - } - group.subtests[parentTest].push(item); - // Add subtest styling - item.classList.add('subtest-item'); - } else if (testName && testName.includes('(package)')) { - // This is a package-level test runner - group.packageTests.push(item); - } else { - // This is an individual test - group.individualTests.push(item); - } - }); - - // Clear hierarchy and rebuild with proper organization - hierarchy.innerHTML = ''; - - // Iterate through packages in a consistent order (alphabetical) - const sortedPackages = Object.keys(packageGroups).sort(); - - sortedPackages.forEach(packageName => { - const group = packageGroups[packageName]; - - // Skip empty groups - if (group.packageTests.length === 0 && group.individualTests.length === 0 && Object.keys(group.subtests).length === 0) { - return; - } - - // Find the package-level test log path for this specific package - let packageLogPath = ''; - group.packageTests.forEach(packageTest => { - const logLink = packageTest.querySelector('.log-link'); - if (logLink) { - packageLogPath = logLink.getAttribute('href'); - } - }); - - // Create package section - const packageSection = document.createElement('div'); - packageSection.className = 'package-section'; - - // Determine package status based on contained tests - let hasFailures = false; - let hasSkipped = false; - [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { - if (item.classList.contains('fail') || item.classList.contains('error')) { - hasFailures = true; - } - if (item.classList.contains('skip')) { - hasSkipped = true; - } - }); - - if (hasFailures) { - packageSection.classList.add('fail'); - } else if (hasSkipped) { - packageSection.classList.add('skip'); - } - - // Create package header - const packageHeader = document.createElement('div'); - packageHeader.className = 'package-header'; - if (hasFailures) { - packageHeader.classList.add('fail'); - } else if (hasSkipped) { - packageHeader.classList.add('skip'); - } - - // Count stats for this package - let totalTests = group.packageTests.length + group.individualTests.length + Object.values(group.subtests).flat().length; - let passedTests = 0; - let failedTests = 0; - let skippedTests = 0; - - [...group.packageTests, ...group.individualTests, ...Object.values(group.subtests).flat()].forEach(item => { - if (item.classList.contains('pass')) passedTests++; - else if (item.classList.contains('fail') || item.classList.contains('error')) failedTests++; - else if (item.classList.contains('skip')) skippedTests++; - }); - - packageHeader.innerHTML = ` -
${packageName}
-
- ${totalTests} tests • - ${passedTests} passed • - ${failedTests} failed • - ${skippedTests} skipped - ${packageLogPath ? `View Package Log` : ''} -
- `; - - packageSection.appendChild(packageHeader); - - // Add package-level test runners first - group.packageTests.forEach(test => { - packageSection.appendChild(test); - }); - - // Add individual tests and their subtests - group.individualTests.forEach(test => { - packageSection.appendChild(test); - const testName = test.dataset.name; - - // Add any subtests for this test - if (group.subtests[testName]) { - group.subtests[testName].sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - group.subtests[testName].forEach(subtest => { - packageSection.appendChild(subtest); - }); - // Mark these subtests as processed - delete group.subtests[testName]; - } - }); - - // Handle orphaned subtests (whose parents aren't in the individual tests list) - Object.keys(group.subtests).forEach(parentName => { - const subtests = group.subtests[parentName]; - if (subtests.length === 0) return; - - // Sort subtests by execution order - subtests.sort((a, b) => { - const orderA = parseInt(a.dataset.executionOrder) || 0; - const orderB = parseInt(b.dataset.executionOrder) || 0; - return orderA - orderB; - }); - - // Create a virtual parent test header for these orphaned subtests - const parentHeader = document.createElement('div'); - parentHeader.className = 'test-item virtual-parent'; - - // Determine the status of the parent based on subtests - let parentHasFailures = false; - let parentHasSkipped = false; - let parentAllPassed = true; - - subtests.forEach(subtest => { - if (subtest.classList.contains('fail') || subtest.classList.contains('error')) { - parentHasFailures = true; - parentAllPassed = false; - } - if (subtest.classList.contains('skip')) { - parentHasSkipped = true; - parentAllPassed = false; - } - }); - - let parentStatusClass = 'pass'; - let parentStatusText = 'PASS'; - if (parentHasFailures) { - parentStatusClass = 'fail'; - parentStatusText = 'FAIL'; - } else if (parentHasSkipped) { - parentStatusClass = 'skip'; - parentStatusText = 'SKIP'; - } - - parentHeader.classList.add(parentStatusClass); - parentHeader.innerHTML = ` - ${parentStatusText} -
${parentName}
-
- ${packageName} - Gate: ${subtests[0].dataset.gate || ''} - - -
- `; - - // Add the virtual parent header - packageSection.appendChild(parentHeader); - - // Add all subtests under this parent - subtests.forEach(subtest => { - packageSection.appendChild(subtest); - }); - }); - - hierarchy.appendChild(packageSection); - }); -} \ No newline at end of file diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go index 36bdefc45f0f2..92fdf547e9e54 100644 --- a/op-e2e/actions/proofs/jovian_activation_test.go +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -51,7 +51,7 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { t.Log("Unsafe block with timestamp %d", b.Time) } b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) - require.Len(t, b.Extra(), 10, "extra data should be 10 bytes after Jovian activation (adds minBaseFee)") + require.Len(t, b.Extra(), 17, "extra data should be 17 bytes after Jovian activation (adds minBaseFee)") env.BatchMineAndSync(t) diff --git a/op-e2e/actions/upgrades/jovian_fork_test.go b/op-e2e/actions/upgrades/jovian_fork_test.go index 7aefafce8c173..c911e6ee58ab7 100644 --- a/op-e2e/actions/upgrades/jovian_fork_test.go +++ b/op-e2e/actions/upgrades/jovian_fork_test.go @@ -35,12 +35,6 @@ func TestJovianActivationAtGenesis(gt *testing.T) { env.Seq.ActL1HeadSignal(t) env.Seq.ActBuildToL1Head(t) - // verify in logs that correct stage got activated - recs := env.Logs.FindLogs(testlog.NewMessageContainsFilter("activating Jovian stage during reset"), testlog.NewAttributesFilter("role", e2esys.RoleSeq)) - require.Len(t, recs, 2) - recs = env.Logs.FindLogs(testlog.NewMessageContainsFilter("activating Jovian stage during reset"), testlog.NewAttributesFilter("role", e2esys.RoleVerif)) - require.Len(t, recs, 2) - env.ActBatchSubmitAllAndMine(t) // verifier picks up the L2 chain that was submitted diff --git a/op-service/eth/types_test.go b/op-service/eth/types_test.go index ea1d40d930fb8..7c358cf361671 100644 --- a/op-service/eth/types_test.go +++ b/op-service/eth/types_test.go @@ -100,12 +100,13 @@ func TestSystemConfigMarshaling(t *testing.T) { Scalar: Bytes32{0x7, 0x8, 0x9}, OperatorFeeParams: Bytes32{0x1, 0x2, 0x3}, GasLimit: 1234, + MinBaseFee: 0, // Leave EIP1559 params empty to prove that the // zero value is sent. } j, err := json.Marshal(sysConfig) require.NoError(t, err) - require.Equal(t, `{"batcherAddr":"0x4100000000000000000000000000000000000000","overhead":"0x0405060000000000000000000000000000000000000000000000000000000000","scalar":"0x0708090000000000000000000000000000000000000000000000000000000000","gasLimit":1234,"eip1559Params":"0x0000000000000000","operatorFeeParams":"0x0102030000000000000000000000000000000000000000000000000000000000"}`, string(j)) + require.Equal(t, `{"batcherAddr":"0x4100000000000000000000000000000000000000","overhead":"0x0405060000000000000000000000000000000000000000000000000000000000","scalar":"0x0708090000000000000000000000000000000000000000000000000000000000","gasLimit":1234,"eip1559Params":"0x0000000000000000","minBaseFee":0,"operatorFeeParams":"0x0102030000000000000000000000000000000000000000000000000000000000"}`, string(j)) sysConfig.MarshalPreHolocene = true j, err = json.Marshal(sysConfig) require.NoError(t, err) From 4b2a48cad0f4e8955b9773095254fa0362091cf0 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 10:53:11 -0400 Subject: [PATCH 45/56] remove bindings and solidity diffs --- op-e2e/bindings/systemconfig.go | 381 +++--------------- .../interfaces/L1/ISystemConfig.sol | 5 +- .../scripts/deploy/DeployConfig.s.sol | 6 +- .../contracts-bedrock/src/L1/SystemConfig.sol | 20 +- .../test/L1/SystemConfig.t.sol | 20 - 5 files changed, 53 insertions(+), 379 deletions(-) diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 90a2a5c6573dc..05d74beadbeb5 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -26,7 +26,6 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription - _ = abi.ConvertType ) // IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. @@ -44,41 +43,20 @@ type SystemConfigAddresses struct { L1CrossDomainMessenger common.Address L1ERC721Bridge common.Address L1StandardBridge common.Address + DisputeGameFactory common.Address OptimismPortal common.Address OptimismMintableERC20Factory common.Address } // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_minBaseFee\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]}]", - Bin: "0x60a06040523480156200001157600080fd5b5060026080526200005f6200004860017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a062000135565b60001b6000196200006f60201b620018611760201c565b6200006962000073565b6200015b565b9055565b600054610100900460ff1615620000e05760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff908116101562000133576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6000828210156200015657634e487b7160e01b600052601160045260246000fd5b500390565b608051612d6b620001856000396000818161049b015281816108e50152610c4a0152612d6b6000f3fe608060405234801561001057600080fd5b50600436106103625760003560e01c8063935f029e116101c8578063d220a9e011610104578063f2b4e617116100a2578063f68016b71161007c578063f68016b7146108b7578063f8c68de0146108cb578063fd32aa0f146108d3578063ffa1ad74146108db57600080fd5b8063f2b4e61714610893578063f2fde38b1461089b578063f45e65d8146108ae57600080fd5b8063dad544e0116100de578063dad544e01461085a578063e0e2016d14610862578063e81b2c6d1461086a578063ec7075171461087357600080fd5b8063d220a9e014610839578063d6ae3cd514610849578063dac6e63a1461085257600080fd5b8063bc49ce5f11610171578063c4e8ddfa1161014b578063c4e8ddfa146106d2578063c9b26f61146106da578063c9ff2d16146106ed578063cc731b021461070557600080fd5b8063bc49ce5f1461069b578063bfb14fb7146106a3578063c0fd4b41146106bf57600080fd5b8063a62611a2116101a2578063a62611a214610654578063a711986914610680578063b40a817c1461068857600080fd5b8063935f029e146105d55780639b7d7f0a146105e8578063a39fac12146105f057600080fd5b806335e80ab3116102a25780634f16540b116102405780635d73369c1161021a5780635d73369c14610594578063715018a61461059c5780637616f0e8146105a45780638da5cb5b146105b757600080fd5b80634f16540b1461051657806354fd4d501461053d5780635c975abb1461057c57600080fd5b8063452a93201161027c578063452a9320146104cd57806348cd4cb1146104d55780634add321d146104dd5780634d5d9a2a146104e557600080fd5b806335e80ab31461047457806338d38c97146104945780633e47158c146104c557600080fd5b80630c18c1621161030f57806318d13918116102e957806318d139181461043e57806319f5cea8146104515780631fd19ee11461045957806321d7fde51461046157600080fd5b80630c18c162146103fe578063155b6c6f1461040757806316d3bc7f1461041a57600080fd5b8063078f29cf11610340578063078f29cf146103aa5780630a49cb03146103d75780630ae14b1b146103df57600080fd5b80630104582914610367578063028f4e471461037c57806306c926571461038f575b600080fd5b61037a6103753660046128e6565b6108e3565b005b61037a61038a366004612a56565b610c48565b610397610e29565b6040519081526020015b60405180910390f35b6103b2610e57565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103a1565b6103b2610e90565b631dcd65005b60405167ffffffffffffffff90911681526020016103a1565b61039760655481565b61037a610415366004612a86565b610ec0565b606a546103e5906c01000000000000000000000000900467ffffffffffffffff1681565b61037a61044c366004612ab9565b610ed6565b610397610eea565b6103b2610f15565b61037a61046f366004612add565b610f3f565b606c546103b29073ffffffffffffffffffffffffffffffffffffffff1681565b60405160ff7f00000000000000000000000000000000000000000000000000000000000000001681526020016103a1565b6103b2610f51565b6103b261115c565b6103976111f0565b6103e5611220565b606a546105019068010000000000000000900463ffffffff1681565b60405163ffffffff90911681526020016103a1565b6103977f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c0881565b604080518082018252600581527f332e342e30000000000000000000000000000000000000000000000000000000602082015290516103a19190612b72565b610584611246565b60405190151581526020016103a1565b6103976113f4565b61037a61141f565b61037a6105b2366004612b85565b611433565b60335473ffffffffffffffffffffffffffffffffffffffff166103b2565b61037a6105e3366004612ba0565b611444565b6103b2611456565b6105f8611486565b6040516103a19190815173ffffffffffffffffffffffffffffffffffffffff9081168252602080840151821690830152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b606c546103e59074010000000000000000000000000000000000000000900467ffffffffffffffff1681565b6103b261156d565b61037a610696366004612b85565b61159d565b6103976115ae565b6068546105019068010000000000000000900463ffffffff1681565b61037a6106cd366004612add565b6115d9565b6103b26115eb565b61037a6106e8366004612bc2565b61161b565b606a5461050190640100000000900463ffffffff1681565b6107c96040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a0810191909152506040805160c08101825260695463ffffffff8082168352640100000000820460ff9081166020850152650100000000008304169383019390935266010000000000008104831660608301526a0100000000000000000000810490921660808201526e0100000000000000000000000000009091046fffffffffffffffffffffffffffffffff1660a082015290565b6040516103a19190600060c08201905063ffffffff80845116835260ff602085015116602084015260ff6040850151166040840152806060850151166060840152806080850151166080840152506fffffffffffffffffffffffffffffffff60a08401511660a083015292915050565b606a546105019063ffffffff1681565b610397606b5481565b6103b261162c565b6103b261165c565b6103976116b0565b61039760675481565b606854610501906c01000000000000000000000000900463ffffffff1681565b6103b26116db565b61037a6108a9366004612ab9565b611757565b61039760665481565b6068546103e59067ffffffffffffffff1681565b61039761180b565b610397611836565b610397600081565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610923575060005460ff8083169116105b6109b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084015b60405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff8316176101001790556109ed611865565b6109f56118e6565b6109fe8c611757565b610a0789611985565b610a118b8b6119e6565b610a1a88611b25565b610a437f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08889055565b610a76610a7160017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c0a565b869055565b610aaa610aa460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c0a565b85519055565b610ae1610ad860017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c0a565b60208601519055565b610b18610b0f60017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c0a565b60408601519055565b610b4f610b4660017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c0a565b60608601519055565b610b86610b7d60017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c0a565b60808601519055565b610b8e611c7b565b610b9786611ce3565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050505050505050565b7f0000000000000000000000000000000000000000000000000000000000000000600054610100900460ff16158015610c88575060005460ff8083169116105b610d14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016109ab565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100179055610d4d611865565b606b839055606c80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84161790556000610dbf60017f52322a25d9f59ea17656545543306b7aef62bc0cc53a0e65ccfa0c75b97aa907612c0a565b60008155905050600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b610e5460017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c0a565b81565b6000610e8b610e8760017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c0a565b5490565b905090565b6000610e8b610e8760017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c0a565b610ec8612157565b610ed282826121d8565b5050565b610ede612157565b610ee7816122ae565b50565b610e5460017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c0a565b6000610e8b7f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c085490565b610f47612157565b610ed282826119e6565b600080610f7c7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035490565b905073ffffffffffffffffffffffffffffffffffffffff811615610f9f57919050565b6040518060400160405280601a81526020017f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000815250516002610fe29190612c21565b604080513060208201526000918101919091527f4f564d5f4c3143726f7373446f6d61696e4d657373656e676572000000000000919091179061103d906060015b604051602081830303815290604052805190602001205490565b14611074576040517f54e433cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805130602082015260019181019190915260009061109690606001611023565b905073ffffffffffffffffffffffffffffffffffffffff81161561112a578073ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111239190612c5e565b9250505090565b6040517f332144db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606c54604080517f452a9320000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff169163452a93209160048083019260209291908290030181865afa1580156111cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e8b9190612c5e565b6000610e8b610e8760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b606954600090610e8b9063ffffffff6a0100000000000000000000820481169116612c7b565b600080611251610e90565b73ffffffffffffffffffffffffffffffffffffffff1663b682c4446040518163ffffffff1660e01b8152600401602060405180830381865afa15801561129b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112bf9190612c5e565b606c546040517f2e48152c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8084166004830152929350911690632e48152c90602401602060405180830381865afa158015611331573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113559190612ca7565b806113ee5750606c546040517f2e48152c0000000000000000000000000000000000000000000000000000000081526000600482015273ffffffffffffffffffffffffffffffffffffffff90911690632e48152c90602401602060405180830381865afa1580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190612ca7565b91505090565b610e5460017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c0a565b611427612157565b6114316000612332565b565b61143b612157565b610ee7816123a9565b61144c612157565b610ed2828261241c565b6000610e8b610e8760017fa04c5bb938ca6fc46d95553abf0a76345ce3e722a30bf4f74928b8e7d852320d612c0a565b6040805160a0810182526000808252602082018190529181018290526060810182905260808101919091526040518060a001604052806114c461156d565b73ffffffffffffffffffffffffffffffffffffffff1681526020016114e76115eb565b73ffffffffffffffffffffffffffffffffffffffff16815260200161150a610e57565b73ffffffffffffffffffffffffffffffffffffffff16815260200161152d610e90565b73ffffffffffffffffffffffffffffffffffffffff168152602001611550611456565b73ffffffffffffffffffffffffffffffffffffffff169052919050565b6000610e8b610e8760017f383f291819e6d54073bc9a648251d97421076bdd101933c0c022219ce9580637612c0a565b6115a5612157565b610ee781611b25565b610e5460017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c0a565b6115e1612157565b610ed282826124f2565b6000610e8b610e8760017f46adcbebc6be8ce551740c29c47c8798210f23f7f4086c41752944352568d5a8612c0a565b611623612157565b610ee781611985565b6000610e8b610e8760017f71ac12829d66ee73d8d95bff50b3589745ce57edae70a3fb111a2342464dc598612c0a565b6000611666610f51565b73ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cc573d6000803e3d6000fd5b610e5460017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b6000806116e6610e90565b90508073ffffffffffffffffffffffffffffffffffffffff1663f2b4e6176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee9190612c5e565b61175f612157565b73ffffffffffffffffffffffffffffffffffffffff8116611802576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016109ab565b610ee781612332565b610e5460017f9904ba90dde5696cda05c9e0dab5cbaa0fea005ace4d11218a02ac668dad6377612c0a565b610e5460017f4b6c74f9e688cb39801f2112c14a8c57232a3fc5202e1444126d4bce86eb19ad612c0a565b9055565b3361186e610f51565b73ffffffffffffffffffffffffffffffffffffffff16141580156118af57503361189661165c565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611431576040517fc4050a2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900460ff1661197d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b6114316126c4565b60678190556040805160208082018490528251808303909101815290820190915260005b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be836040516119da9190612b72565b60405180910390a35050565b606880547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff166801000000000000000063ffffffff8581169182027fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff16929092176c0100000000000000000000000092851692909202919091179091557f0100000000000000000000000000000000000000000000000000000000000000602083811b67ffffffff000000001690921717606681905560655460408051938401919091528201526000906060015b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060015b60007f1d2b0bda21d56b8bd12d4f94ebacffdfb35f5e226f84b461103bb8beab6353be83604051611b189190612b72565b60405180910390a3505050565b611b2d611220565b67ffffffffffffffff168167ffffffffffffffff161015611baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109ab565b631dcd650067ffffffffffffffff82161115611c22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206869676860448201526064016109ab565b606880547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff831690811790915560408051602080820193909352815180820390930183528101905260026119a9565b611ca9610e8760017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b60000361143157611431611cde60017fa11ee3ab75b40e88a0105e935d17cd36c8faee0138320d776c411291bdbbb1a0612c0a565b439055565b8060a001516fffffffffffffffffffffffffffffffff16816060015163ffffffff161115611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f53797374656d436f6e6669673a206d696e206261736520666565206d7573742060448201527f6265206c657373207468616e206d61782062617365000000000000000000000060648201526084016109ab565b6001816040015160ff1611611e2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65206c6172676572207468616e2031000000000000000000000000000000000060648201526084016109ab565b6068546080820151825167ffffffffffffffff90921691611e4b9190612cc9565b63ffffffff161115611eb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f53797374656d436f6e6669673a20676173206c696d697420746f6f206c6f770060448201526064016109ab565b6000816020015160ff1611611f50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f53797374656d436f6e6669673a20656c6173746963697479206d756c7469706c60448201527f6965722063616e6e6f742062652030000000000000000000000000000000000060648201526084016109ab565b8051602082015163ffffffff82169160ff90911690611f70908290612ce8565b611f7a9190612d32565b63ffffffff161461200d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f53797374656d436f6e6669673a20707265636973696f6e206c6f73732077697460448201527f6820746172676574207265736f75726365206c696d697400000000000000000060648201526084016109ab565b805160698054602084015160408501516060860151608087015160a09097015163ffffffff9687167fffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000009095169490941764010000000060ff94851602177fffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffffff166501000000000093909216929092027fffffffffffffffffffffffffffffffffffffffffffff00000000ffffffffffff1617660100000000000091851691909102177fffff0000000000000000000000000000000000000000ffffffffffffffffffff166a010000000000000000000093909416929092027fffff00000000000000000000000000000000ffffffffffffffffffffffffffff16929092176e0100000000000000000000000000006fffffffffffffffffffffffffffffffff90921691909102179055565b60335473ffffffffffffffffffffffffffffffffffffffff163314611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016109ab565b606a80547fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff166801000000000000000063ffffffff8516027fffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffff16176c0100000000000000000000000067ffffffffffffffff841690810291909117909155604080516bffffffff000000000000000085831b16909217602083015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506005611ae7565b6122d77f65a7ed542fb37fe237fdfbdd70b31598523fe5b32879e307bae27a0bd9581c08829055565b6040805173ffffffffffffffffffffffffffffffffffffffff8316602082015260009101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152919052905060036119a9565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b606c80547fffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000067ffffffffffffffff84169081029190911790915560408051602080820193909352815180820390930183528101905260066119a9565b7fff000000000000000000000000000000000000000000000000000000000000008116156124cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f53797374656d436f6e6669673a207363616c61722065786365656473206d617860448201527f2e0000000000000000000000000000000000000000000000000000000000000060648201526084016109ab565b606582905560668190556040805160208101849052908101829052600090606001611ab4565b60018263ffffffff161015612589576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53797374656d436f6e6669673a2064656e6f6d696e61746f72206d757374206260448201527f65203e3d2031000000000000000000000000000000000000000000000000000060648201526084016109ab565b60018163ffffffff161015612620576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53797374656d436f6e6669673a20656c6173746963697479206d75737420626560448201527f203e3d203100000000000000000000000000000000000000000000000000000060648201526084016109ab565b606a805463ffffffff83811664010000000081027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909316918616919091179190911790915560405160009161268d91602086811b67ffffffff0000000016909217910190815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815291905290506004611ae7565b600054610100900460ff1661275b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016109ab565b61143133612332565b73ffffffffffffffffffffffffffffffffffffffff81168114610ee757600080fd5b803561279181612764565b919050565b803563ffffffff8116811461279157600080fd5b803567ffffffffffffffff8116811461279157600080fd5b60405160c0810167ffffffffffffffff8111828210171561280c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405290565b803560ff8116811461279157600080fd5b600060a0828403121561283557600080fd5b60405160a0810181811067ffffffffffffffff8211171561287f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052905080823561289081612764565b815260208301356128a081612764565b602082015260408301356128b381612764565b604082015260608301356128c681612764565b606082015260808301356128d981612764565b6080919091015292915050565b60008060008060008060008060008060008b8d0361028081121561290957600080fd5b8c3561291481612764565b9b5061292260208e01612796565b9a5061293060408e01612796565b995060608d0135985061294560808e016127aa565b975060a08d013561295581612764565b965060c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff408201121561298757600080fd5b506129906127c2565b61299c60c08e01612796565b81526129aa60e08e01612812565b60208201526129bc6101008e01612812565b60408201526129ce6101208e01612796565b60608201526129e06101408e01612796565b60808201526101608d01356fffffffffffffffffffffffffffffffff81168114612a0957600080fd5b60a08201529450612a1d6101808d01612786565b9350612a2d8d6101a08e01612823565b92506102408c01359150612a446102608d01612786565b90509295989b509295989b9093969950565b60008060408385031215612a6957600080fd5b823591506020830135612a7b81612764565b809150509250929050565b60008060408385031215612a9957600080fd5b612aa283612796565b9150612ab0602084016127aa565b90509250929050565b600060208284031215612acb57600080fd5b8135612ad681612764565b9392505050565b60008060408385031215612af057600080fd5b612af983612796565b9150612ab060208401612796565b6000815180845260005b81811015612b2d57602081850181015186830182015201612b11565b81811115612b3f576000602083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ad66020830184612b07565b600060208284031215612b9757600080fd5b612ad6826127aa565b60008060408385031215612bb357600080fd5b50508035926020909101359150565b600060208284031215612bd457600080fd5b5035919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015612c1c57612c1c612bdb565b500390565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612c5957612c59612bdb565b500290565b600060208284031215612c7057600080fd5b8151612ad681612764565b600067ffffffffffffffff808316818516808303821115612c9e57612c9e612bdb565b01949350505050565b600060208284031215612cb957600080fd5b81518015158114612ad657600080fd5b600063ffffffff808316818516808303821115612c9e57612c9e612bdb565b600063ffffffff80841680612d26577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b92169190910492915050565b600063ffffffff80831681851681830481118215151615612d5557612d55612bdb565b0294935050505056fea164736f6c634300080f000a", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISPUTE_GAME_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"START_BLOCK_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobbasefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Denominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Elasticity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddresses\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_denominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_elasticity\",\"type\":\"uint32\"}],\"name\":\"setEIP1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"}],\"name\":\"setGasConfigEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\"}],\"name\":\"setOperatorFeeScalars\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startBlock_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", } // SystemConfigABI is the input ABI used to generate the binding from. // Deprecated: Use SystemConfigMetaData.ABI instead. var SystemConfigABI = SystemConfigMetaData.ABI -// SystemConfigBin is the compiled bytecode used for deploying new contracts. -// Deprecated: Use SystemConfigMetaData.Bin instead. -var SystemConfigBin = SystemConfigMetaData.Bin - -// DeploySystemConfig deploys a new Ethereum contract, binding an instance of SystemConfig to it. -func DeploySystemConfig(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *SystemConfig, error) { - parsed, err := SystemConfigMetaData.GetAbi() - if err != nil { - return common.Address{}, nil, nil, err - } - if parsed == nil { - return common.Address{}, nil, nil, errors.New("GetABI returned nil") - } - - address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(SystemConfigBin), backend) - if err != nil { - return common.Address{}, nil, nil, err - } - return address, tx, &SystemConfig{SystemConfigCaller: SystemConfigCaller{contract: contract}, SystemConfigTransactor: SystemConfigTransactor{contract: contract}, SystemConfigFilterer: SystemConfigFilterer{contract: contract}}, nil -} - // SystemConfig is an auto generated Go binding around an Ethereum contract. type SystemConfig struct { SystemConfigCaller // Read-only binding to the contract @@ -176,11 +154,11 @@ func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilte // bindSystemConfig binds a generic wrapper to an already deployed contract. func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := SystemConfigMetaData.GetAbi() + parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) if err != nil { return nil, err } - return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -252,6 +230,37 @@ func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, erro return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) } +// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. +// +// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCaller) DISPUTEGAMEFACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "DISPUTE_GAME_FACTORY_SLOT") + + if err != nil { + return *new([32]byte), err + } + + out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) + + return out0, err + +} + +// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. +// +// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) +} + +// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. +// +// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) +func (_SystemConfig *SystemConfigCallerSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { + return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) +} + // L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. // // Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) @@ -750,7 +759,7 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { var out []interface{} err := _SystemConfig.contract.Call(opts, &out, "getAddresses") @@ -767,80 +776,18 @@ func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (Syst // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigCaller) Guardian(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "guardian") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigSession) Guardian() (common.Address, error) { - return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) -} - -// Guardian is a free data retrieval call binding the contract method 0x452a9320. -// -// Solidity: function guardian() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) Guardian() (common.Address, error) { - return _SystemConfig.Contract.Guardian(&_SystemConfig.CallOpts) -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigCaller) InitVersion(opts *bind.CallOpts) (uint8, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "initVersion") - - if err != nil { - return *new(uint8), err - } - - out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8) - - return out0, err - -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigSession) InitVersion() (uint8, error) { - return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) -} - -// InitVersion is a free data retrieval call binding the contract method 0x38d38c97. -// -// Solidity: function initVersion() view returns(uint8) -func (_SystemConfig *SystemConfigCallerSession) InitVersion() (uint8, error) { - return _SystemConfig.Contract.InitVersion(&_SystemConfig.CallOpts) -} - // L1CrossDomainMessenger is a free data retrieval call binding the contract method 0xa7119869. // // Solidity: function l1CrossDomainMessenger() view returns(address addr_) @@ -934,37 +881,6 @@ func (_SystemConfig *SystemConfigCallerSession) L1StandardBridge() (common.Addre return _SystemConfig.Contract.L1StandardBridge(&_SystemConfig.CallOpts) } -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigCaller) L2ChainId(opts *bind.CallOpts) (*big.Int, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "l2ChainId") - - if err != nil { - return *new(*big.Int), err - } - - out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int) - - return out0, err - -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigSession) L2ChainId() (*big.Int, error) { - return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) -} - -// L2ChainId is a free data retrieval call binding the contract method 0xd6ae3cd5. -// -// Solidity: function l2ChainId() view returns(uint256) -func (_SystemConfig *SystemConfigCallerSession) L2ChainId() (*big.Int, error) { - return _SystemConfig.Contract.L2ChainId(&_SystemConfig.CallOpts) -} - // MaximumGasLimit is a free data retrieval call binding the contract method 0x0ae14b1b. // // Solidity: function maximumGasLimit() pure returns(uint64) @@ -996,37 +912,6 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } -// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. -// -// Solidity: function minBaseFee() view returns(uint64) -func (_SystemConfig *SystemConfigCaller) MinBaseFee(opts *bind.CallOpts) (uint64, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "minBaseFee") - - if err != nil { - return *new(uint64), err - } - - out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) - - return out0, err - -} - -// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. -// -// Solidity: function minBaseFee() view returns(uint64) -func (_SystemConfig *SystemConfigSession) MinBaseFee() (uint64, error) { - return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) -} - -// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. -// -// Solidity: function minBaseFee() view returns(uint64) -func (_SystemConfig *SystemConfigCallerSession) MinBaseFee() (uint64, error) { - return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) -} - // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // // Solidity: function minimumGasLimit() view returns(uint64) @@ -1244,99 +1129,6 @@ func (_SystemConfig *SystemConfigCallerSession) Owner() (common.Address, error) return _SystemConfig.Contract.Owner(&_SystemConfig.CallOpts) } -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigCaller) Paused(opts *bind.CallOpts) (bool, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "paused") - - if err != nil { - return *new(bool), err - } - - out0 := *abi.ConvertType(out[0], new(bool)).(*bool) - - return out0, err - -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigSession) Paused() (bool, error) { - return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) -} - -// Paused is a free data retrieval call binding the contract method 0x5c975abb. -// -// Solidity: function paused() view returns(bool) -func (_SystemConfig *SystemConfigCallerSession) Paused() (bool, error) { - return _SystemConfig.Contract.Paused(&_SystemConfig.CallOpts) -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigCaller) ProxyAdmin(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "proxyAdmin") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigSession) ProxyAdmin() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) -} - -// ProxyAdmin is a free data retrieval call binding the contract method 0x3e47158c. -// -// Solidity: function proxyAdmin() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) ProxyAdmin() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdmin(&_SystemConfig.CallOpts) -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigCaller) ProxyAdminOwner(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "proxyAdminOwner") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigSession) ProxyAdminOwner() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) -} - -// ProxyAdminOwner is a free data retrieval call binding the contract method 0xdad544e0. -// -// Solidity: function proxyAdminOwner() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) ProxyAdminOwner() (common.Address, error) { - return _SystemConfig.Contract.ProxyAdminOwner(&_SystemConfig.CallOpts) -} - // ResourceConfig is a free data retrieval call binding the contract method 0xcc731b02. // // Solidity: function resourceConfig() view returns((uint32,uint8,uint8,uint32,uint32,uint128)) @@ -1430,37 +1222,6 @@ func (_SystemConfig *SystemConfigCallerSession) StartBlock() (*big.Int, error) { return _SystemConfig.Contract.StartBlock(&_SystemConfig.CallOpts) } -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigCaller) SuperchainConfig(opts *bind.CallOpts) (common.Address, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "superchainConfig") - - if err != nil { - return *new(common.Address), err - } - - out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) - - return out0, err - -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigSession) SuperchainConfig() (common.Address, error) { - return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) -} - -// SuperchainConfig is a free data retrieval call binding the contract method 0x35e80ab3. -// -// Solidity: function superchainConfig() view returns(address) -func (_SystemConfig *SystemConfigCallerSession) SuperchainConfig() (common.Address, error) { - return _SystemConfig.Contract.SuperchainConfig(&_SystemConfig.CallOpts) -} - // UnsafeBlockSigner is a free data retrieval call binding the contract method 0x1fd19ee1. // // Solidity: function unsafeBlockSigner() view returns(address addr_) @@ -1523,25 +1284,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0x01045829. +// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0x01045829. +// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } -// Initialize is a paid mutator transaction binding the contract method 0x01045829. +// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1670,27 +1431,6 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. -// -// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() -func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _minBaseFee uint64) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _minBaseFee) -} - -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. -// -// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() -func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) -} - -// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. -// -// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() -func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { - return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) -} - // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. // // Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns() @@ -1754,27 +1494,6 @@ func (_SystemConfig *SystemConfigTransactorSession) TransferOwnership(newOwner c return _SystemConfig.Contract.TransferOwnership(&_SystemConfig.TransactOpts, newOwner) } -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactor) Upgrade(opts *bind.TransactOpts, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "upgrade", _l2ChainId, _superchainConfig) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) -} - -// Upgrade is a paid mutator transaction binding the contract method 0x028f4e47. -// -// Solidity: function upgrade(uint256 _l2ChainId, address _superchainConfig) returns() -func (_SystemConfig *SystemConfigTransactorSession) Upgrade(_l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { - return _SystemConfig.Contract.Upgrade(&_SystemConfig.TransactOpts, _l2ChainId, _superchainConfig) -} - // SystemConfigConfigUpdateIterator is returned from FilterConfigUpdate and is used to iterate over the raw logs and unpacked data for ConfigUpdate events raised by the SystemConfig contract. type SystemConfigConfigUpdateIterator struct { Event *SystemConfigConfigUpdate // Event containing the contract specifics and raw log diff --git a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol index 1b1acfff48448..81c5f554f2d8c 100644 --- a/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol +++ b/packages/contracts-bedrock/interfaces/L1/ISystemConfig.sol @@ -12,8 +12,7 @@ interface ISystemConfig is IProxyAdminOwnedBase { GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS, - MIN_BASE_FEE + OPERATOR_FEE_PARAMS } struct Addresses { @@ -73,7 +72,6 @@ interface ISystemConfig is IProxyAdminOwnedBase { function minimumGasLimit() external view returns (uint64); function operatorFeeConstant() external view returns (uint64); function operatorFeeScalar() external view returns (uint32); - function minBaseFee() external view returns (uint64); function optimismMintableERC20Factory() external view returns (address addr_); function optimismPortal() external view returns (address addr_); function overhead() external view returns (uint256); @@ -88,7 +86,6 @@ interface ISystemConfig is IProxyAdminOwnedBase { function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) external; function setUnsafeBlockSigner(address _unsafeBlockSigner) external; function setEIP1559Params(uint32 _denominator, uint32 _elasticity) external; - function setMinBaseFee(uint64 _minBaseFee) external; function startBlock() external view returns (uint256 startBlock_); function transferOwnership(address newOwner) external; // nosemgrep function unsafeBlockSigner() external view returns (address addr_); diff --git a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol index 0a35c6ddff841..4588b60cf65fd 100644 --- a/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol +++ b/packages/contracts-bedrock/scripts/deploy/DeployConfig.s.sol @@ -29,7 +29,6 @@ contract DeployConfig is Script { uint256 public l2GenesisFjordTimeOffset; uint256 public l2GenesisGraniteTimeOffset; uint256 public l2GenesisHoloceneTimeOffset; - uint256 public l2GenesisJovianTimeOffset; address public p2pSequencerAddress; address public batchInboxAddress; address public batchSenderAddress; @@ -98,7 +97,6 @@ contract DeployConfig is Script { l2GenesisFjordTimeOffset = _readOr(_json, "$.l2GenesisFjordTimeOffset", NULL_OFFSET); l2GenesisGraniteTimeOffset = _readOr(_json, "$.l2GenesisGraniteTimeOffset", NULL_OFFSET); l2GenesisHoloceneTimeOffset = _readOr(_json, "$.l2GenesisHoloceneTimeOffset", NULL_OFFSET); - l2GenesisJovianTimeOffset = _readOr(_json, "$.l2GenesisJovianTimeOffset", NULL_OFFSET); p2pSequencerAddress = stdJson.readAddress(_json, "$.p2pSequencerAddress"); batchInboxAddress = stdJson.readAddress(_json, "$.batchInboxAddress"); @@ -227,9 +225,7 @@ contract DeployConfig is Script { } function latestGenesisFork() internal view returns (Fork) { - if (l2GenesisJovianTimeOffset == 0) { - return Fork.JOVIAN; - } else if (l2GenesisHoloceneTimeOffset == 0) { + if (l2GenesisHoloceneTimeOffset == 0) { return Fork.HOLOCENE; } else if (l2GenesisGraniteTimeOffset == 0) { return Fork.GRANITE; diff --git a/packages/contracts-bedrock/src/L1/SystemConfig.sol b/packages/contracts-bedrock/src/L1/SystemConfig.sol index 729e6498e438f..7910e6f9d073f 100644 --- a/packages/contracts-bedrock/src/L1/SystemConfig.sol +++ b/packages/contracts-bedrock/src/L1/SystemConfig.sol @@ -28,17 +28,13 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl /// @custom:value GAS_LIMIT Represents an update to gas limit on L2. /// @custom:value UNSAFE_BLOCK_SIGNER Represents an update to the signer key for unsafe /// block distrubution. - /// @custom:value EIP_1559_PARAMS Represents an update to EIP-1559 parameters. - /// @custom:value OPERATOR_FEE_PARAMS Represents an update to operator fee parameters. - /// @custom:value MIN_BASE_FEE Represents an update to the minimum base fee. enum UpdateType { BATCHER, FEE_SCALARS, GAS_LIMIT, UNSAFE_BLOCK_SIGNER, EIP_1559_PARAMS, - OPERATOR_FEE_PARAMS, - MIN_BASE_FEE + OPERATOR_FEE_PARAMS } /// @notice Struct representing the addresses of L1 system contracts. These should be the @@ -435,20 +431,6 @@ contract SystemConfig is ProxyAdminOwnedBase, OwnableUpgradeable, Reinitializabl emit ConfigUpdate(VERSION, UpdateType.EIP_1559_PARAMS, data); } - /// @notice Updates the minimum base fee. Can only be called by the owner. - /// @param _minBaseFee New minimum base fee. - function setMinBaseFee(uint64 _minBaseFee) external onlyOwner { - _setMinBaseFee(_minBaseFee); - } - - /// @notice Internal function for updating the minimum base fee. - function _setMinBaseFee(uint64 _minBaseFee) internal { - minBaseFee = _minBaseFee; - - bytes memory data = abi.encode(_minBaseFee); - emit ConfigUpdate(VERSION, UpdateType.MIN_BASE_FEE, data); - } - /// @notice Updates the operator fee parameters. Can only be called by the owner. /// @param _operatorFeeScalar operator fee scalar. /// @param _operatorFeeConstant operator fee constant. diff --git a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol index 1c2200345c3a3..84c56d3597c08 100644 --- a/packages/contracts-bedrock/test/L1/SystemConfig.t.sol +++ b/packages/contracts-bedrock/test/L1/SystemConfig.t.sol @@ -916,23 +916,3 @@ contract SystemConfig_SuperchainConfig_Test is SystemConfig_TestInit { assertEq(address(systemConfig.superchainConfig()), address(superchainConfig)); } } - -/// @title SystemConfig_SetMinBaseFee_Test -/// @notice Test contract for SystemConfig `setMinBaseFee` function. -contract SystemConfig_SetMinBaseFee_Test is SystemConfig_TestInit { - /// @notice Tests that `setMinBaseFee` reverts if the caller is not the owner. - function test_setMinBaseFee_notOwner_reverts() external { - vm.expectRevert("Ownable: caller is not the owner"); - systemConfig.setMinBaseFee(0); - } - - /// @notice Tests that `setMinBaseFee` updates the min base fee successfully. - function testFuzz_setMinBaseFee_succeeds(uint64 newMinBaseFee) external { - vm.expectEmit(address(systemConfig)); - emit ConfigUpdate(0, ISystemConfig.UpdateType.MIN_BASE_FEE, abi.encode(newMinBaseFee)); - - vm.prank(systemConfig.owner()); - systemConfig.setMinBaseFee(newMinBaseFee); - assertEq(systemConfig.minBaseFee(), newMinBaseFee); - } -} From 03893325e13ec931f57b257328b569f1cba90e49 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 11:03:26 -0400 Subject: [PATCH 46/56] use ActivateForkAtOffset --- op-e2e/actions/derivation/system_config_test.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/op-e2e/actions/derivation/system_config_test.go b/op-e2e/actions/derivation/system_config_test.go index d78ae0e481f4d..3adc9391cc442 100644 --- a/op-e2e/actions/derivation/system_config_test.go +++ b/op-e2e/actions/derivation/system_config_test.go @@ -16,6 +16,7 @@ import ( "github.com/ethereum-optimism/optimism/op-e2e/bindings" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/derive" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/eth" @@ -234,12 +235,7 @@ func GPOParamsChange(gt *testing.T, deltaTimeOffset *hexutil.Uint64) { // activating Delta only, not Ecotone and further: // the GPO change assertions here all apply only for the Delta transition. // Separate tests cover Ecotone GPO changes. - dp.DeployConfig.L2GenesisEcotoneTimeOffset = nil - dp.DeployConfig.L2GenesisFjordTimeOffset = nil - dp.DeployConfig.L2GenesisGraniteTimeOffset = nil - dp.DeployConfig.L2GenesisHoloceneTimeOffset = nil - dp.DeployConfig.L2GenesisIsthmusTimeOffset = nil - dp.DeployConfig.L2GenesisJovianTimeOffset = nil + dp.DeployConfig.ActivateForkAtOffset(rollup.Delta, uint64(*deltaTimeOffset)) sd := e2eutils.Setup(t, dp, actionsHelpers.DefaultAlloc) log := testlog.Logger(t, log.LevelDebug) From 0666c5f35a55881419b46c7cf8b0c674256b7a7e Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 11:08:21 -0400 Subject: [PATCH 47/56] restore to develop due to merge conflict errors + remove op-e2e/system diffs --- .../testing/testlib/validators/forks.go | 2 - op-devstack/dsl/validators.go | 2 - op-e2e/opgeth/op_geth.go | 3 - op-e2e/system/e2esys/setup.go | 3 +- op-e2e/system/fees/minbasefee_test.go | 134 ------------------ .../rollup/attributes/engine_consolidate.go | 13 -- .../attributes/engine_consolidate_test.go | 6 +- .../client/l2/engineapi/block_processor.go | 5 - .../client/l2/engineapi/l2_engine_api.go | 6 - .../client/l2/engineapi/l2_engine_api_test.go | 15 ++ op-program/client/l2/test/miner.go | 2 - 11 files changed, 22 insertions(+), 169 deletions(-) delete mode 100644 op-e2e/system/fees/minbasefee_test.go diff --git a/devnet-sdk/testing/testlib/validators/forks.go b/devnet-sdk/testing/testlib/validators/forks.go index b0c6ba1aafd6c..f60dcaa2e73e9 100644 --- a/devnet-sdk/testing/testlib/validators/forks.go +++ b/devnet-sdk/testing/testlib/validators/forks.go @@ -66,8 +66,6 @@ func IsForkActivated(c *params.ChainConfig, forkName rollup.ForkName, timestamp return c.IsOptimismJovian(timestamp), nil case rollup.Interop: return c.IsInterop(timestamp), nil - case rollup.Jovian: - return c.IsJovian(timestamp), nil default: return false, fmt.Errorf("unknown fork name: %s", forkName) } diff --git a/op-devstack/dsl/validators.go b/op-devstack/dsl/validators.go index 9e2ce7d2899fd..94328e4333670 100644 --- a/op-devstack/dsl/validators.go +++ b/op-devstack/dsl/validators.go @@ -43,8 +43,6 @@ func IsForkActivated(c *params.ChainConfig, forkName rollup.ForkName, timestamp return c.IsOptimismJovian(timestamp), nil case rollup.Interop: return c.IsInterop(timestamp), nil - case rollup.Jovian: - return c.IsJovian(timestamp), nil default: return false, fmt.Errorf("unknown fork name: %s", forkName) } diff --git a/op-e2e/opgeth/op_geth.go b/op-e2e/opgeth/op_geth.go index 6553bcefc7a5e..a8b57ff5a093e 100644 --- a/op-e2e/opgeth/op_geth.go +++ b/op-e2e/opgeth/op_geth.go @@ -239,9 +239,6 @@ func (d *OpGeth) CreatePayloadAttributes(txs ...*types.Transaction) (*eth.Payloa Withdrawals: withdrawals, ParentBeaconBlockRoot: parentBeaconBlockRoot, } - if d.L2ChainConfig.IsConfigurableMinBaseFee(uint64(timestamp)) { - attrs.MinBaseFee = d.SystemConfig.MinBaseFee - } if d.L2ChainConfig.IsHolocene(uint64(timestamp)) { attrs.EIP1559Params = new(eth.Bytes8) *attrs.EIP1559Params = d.SystemConfig.EIP1559Params diff --git a/op-e2e/system/e2esys/setup.go b/op-e2e/system/e2esys/setup.go index bd45299c4a982..3b4588065b3e6 100644 --- a/op-e2e/system/e2esys/setup.go +++ b/op-e2e/system/e2esys/setup.go @@ -115,7 +115,7 @@ func DefaultSystemConfig(t testing.TB, opts ...SystemConfigOpt) SystemConfig { secrets := secrets.DefaultSecrets deployConfig := config.DeployConfig(sco.AllocType) - + require.Nil(t, deployConfig.L2GenesisJovianTimeOffset, "jovian not supported yet") deployConfig.L1GenesisBlockTimestamp = hexutil.Uint64(time.Now().Unix()) e2eutils.ApplyDeployConfigForks(deployConfig) require.NoError(t, deployConfig.Check(testlog.Logger(t, log.LevelInfo)), @@ -614,6 +614,7 @@ func (cfg SystemConfig) Start(t *testing.T, startOpts ...StartOption) (*System, } // sanity-check the deploy config + require.Nil(t, cfg.DeployConfig.L2GenesisJovianTimeOffset, "Jovian is not supported in op-e2e tests yet") if err := cfg.DeployConfig.Check(testlog.Logger(t, log.LevelInfo)); err != nil { return nil, err diff --git a/op-e2e/system/fees/minbasefee_test.go b/op-e2e/system/fees/minbasefee_test.go deleted file mode 100644 index dff927ed338e9..0000000000000 --- a/op-e2e/system/fees/minbasefee_test.go +++ /dev/null @@ -1,134 +0,0 @@ -package fees - -import ( - "context" - "math/big" - "testing" - "time" - - op_e2e "github.com/ethereum-optimism/optimism/op-e2e" - - legacybindings "github.com/ethereum-optimism/optimism/op-e2e/bindings" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/geth" - "github.com/ethereum-optimism/optimism/op-e2e/e2eutils/wait" - "github.com/ethereum-optimism/optimism/op-e2e/system/e2esys" - "github.com/ethereum/go-ethereum/accounts/abi/bind" - "github.com/ethereum/go-ethereum/common/hexutil" - "github.com/ethereum/go-ethereum/consensus/misc/eip1559" - "github.com/stretchr/testify/require" -) - -// TestMinBaseFee checks that we can successfully change minBaseFee parameter via SystemConfig -// with the Jovian upgrade and that it's properly encoded in block extra data. -func TestMinBaseFee(t *testing.T) { - op_e2e.InitParallel(t) - - ctx, ctxCancel := context.WithCancel(context.Background()) - defer ctxCancel() - - // Create our system configuration for L1/L2 and start it - cfg := e2esys.JovianSystemConfig(t, new(hexutil.Uint64)) - cfg.DeployConfig.L2GenesisBlockBaseFeePerGas = (*hexutil.Big)(big.NewInt(100_000_000)) - sys, err := cfg.Start(t) - require.NoError(t, err, "Error starting up system") - - // Obtain our sequencer, verifier, and transactor keypair. - l1Client := sys.NodeClient("l1") - l2Seq := sys.NodeClient("sequencer") - ethPrivKey := cfg.Secrets.Deployer - - _, err = l2Seq.HeaderByNumber(context.Background(), big.NewInt(0)) - require.NoError(t, err) - - // Bind to the SystemConfig contract - sysconfig, err := legacybindings.NewSystemConfig(cfg.L1Deployments.SystemConfigProxy, l1Client) - require.NoError(t, err) - - // Obtain our signer. - opts, err := bind.NewKeyedTransactorWithChainID(ethPrivKey, cfg.L1ChainIDBig()) - require.NoError(t, err) - - // Define our L1 transaction timeout duration. - txTimeoutDuration := 10 * time.Duration(cfg.DeployConfig.L1BlockTime) * time.Second - - var cancel context.CancelFunc - - // Confirm minBaseFee is initialized to 0 - minBaseFee, err := sysconfig.MinBaseFee(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFee") - require.Equal(t, uint64(0), minBaseFee) - - // Set both EIP-1559 parameters and minBaseFee in a single transaction sequence - // This matches how they would be used in production - expectedDenom := uint32(10) - expectedElasticity := uint32(2) - // Set the minimum base fee to 1 gwei. - expectedMinBaseFee := big.NewInt(1_000_000_000) - - // Set EIP-1559 parameters first - opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) - tx, err := sysconfig.SetEIP1559Params(opts, expectedDenom, expectedElasticity) - cancel() - require.NoError(t, err, "SetEIP1559Params update tx") - - _, err = wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.NoError(t, err, "Waiting for sysconfig set EIP1559Params update tx") - - // Then set MinBaseFee - opts.Context, cancel = context.WithTimeout(ctx, txTimeoutDuration) - tx, err = sysconfig.SetMinBaseFee(opts, expectedMinBaseFee.Uint64()) - cancel() - require.NoError(t, err, "SetMinBaseFee update tx") - - receipt, err := wait.ForReceiptOK(ctx, l1Client, tx.Hash()) - require.NoError(t, err, "Waiting for sysconfig set minBaseFee update tx") - - minBaseFee, err = sysconfig.MinBaseFee(&bind.CallOpts{}) - require.NoError(t, err, "reading minBaseFee") - require.Equal(t, expectedMinBaseFee.Uint64(), minBaseFee) - - _, err = geth.WaitForL1OriginOnL2(sys.RollupConfig, receipt.BlockNumber.Uint64(), l2Seq, txTimeoutDuration) - require.NoError(t, err, "waiting for L2 block to include the sysconfig update") - - h, err := l2Seq.HeaderByNumber(context.Background(), nil) - require.NoError(t, err) - - // Debug: print the actual ExtraData - t.Logf("Actual ExtraData: %x", h.Extra) - t.Logf("Expected MinBaseFee: %d", expectedMinBaseFee) - - // Decode and check what we actually got - if len(h.Extra) == 17 { - actualDenom, actualElasticity, actualMinBaseFee := eip1559.DecodeMinBaseFeeExtraData(h.Extra) - t.Logf("Decoded - Denom: %d, Elasticity: %d, MinBaseFee: %d", actualDenom, actualElasticity, actualMinBaseFee) - - require.Equal(t, expectedMinBaseFee.Uint64(), actualMinBaseFee) - } - - // Confirm the extraData is being set as expected with Jovian encoding - expectedExtraData := eip1559.EncodeMinBaseFeeExtraData(uint64(expectedDenom), uint64(expectedElasticity), expectedMinBaseFee.Uint64()) - require.Equal(t, expectedExtraData, h.Extra, "Extra data should match Jovian encoding with minBaseFee") - - // The first block with the minimum base fee encoded in ExtraData had its base fee - // calculated before the minimum was available. Wait for the next block where - // the base fee calculation can use the minimum base fee from the previous block's ExtraData. - nextBlock, err := geth.WaitForBlock(big.NewInt(h.Number.Int64()+1), l2Seq) - require.NoError(t, err, "waiting for next L2 block") - - // Confirm the extraData is still being set as expected in the next block - require.Equal(t, expectedExtraData, nextBlock.Header().Extra, "Extra data should still match Jovian encoding with minBaseFee") - - // Now verify the minimum base fee constraint is enforced in this block - require.True(t, nextBlock.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, - "Next block base fee (%s) should be >= minimum base fee (%s)", - nextBlock.Header().BaseFee.String(), expectedMinBaseFee.String()) - - // Wait for one more block to confirm the constraint is consistently maintained - finalBlock, err := geth.WaitForBlock(big.NewInt(nextBlock.Header().Number.Int64()+1), l2Seq) - require.NoError(t, err, "waiting for final L2 block") - - // Verify the minimum base fee constraint is still enforced - require.True(t, finalBlock.Header().BaseFee.Cmp(expectedMinBaseFee) >= 0, - "Final block base fee (%s) should be >= minimum base fee (%s)", - finalBlock.Header().BaseFee.String(), expectedMinBaseFee.String()) -} diff --git a/op-node/rollup/attributes/engine_consolidate.go b/op-node/rollup/attributes/engine_consolidate.go index 0109a903fe4da..ce3597461147c 100644 --- a/op-node/rollup/attributes/engine_consolidate.go +++ b/op-node/rollup/attributes/engine_consolidate.go @@ -110,19 +110,6 @@ func checkExtraDataParamsMatch(cfg *rollup.Config, blockTimestamp uint64, attrPa return fmt.Errorf("invalid attributes EIP1559 parameters: %w", err) } - // Validate block extraData based on fork - if isConfigurableMinBaseFee { - if err := eip1559.ValidateMinBaseFeeExtraData(blockExtraData); err != nil { - return fmt.Errorf("invalid block extraData: %w", err) - } - } else { - if err := eip1559.ValidateHoloceneExtraData(blockExtraData); err != nil { - // This can happen if the unsafe chain contains invalid (in particular, empty) extraData while Holocene - // is active. The extraData field of blocks from sequencer gossip isn't currently checked during import. - return fmt.Errorf("invalid block extraData: %w", err) - } - } - ad, ae := eip1559.DecodeHolocene1559Params(params) var translated bool // Translate 0,0 to the pre-Holocene protocol constants, like the EL does too. diff --git a/op-node/rollup/attributes/engine_consolidate_test.go b/op-node/rollup/attributes/engine_consolidate_test.go index 0b541d01c7c67..2f9cef28a709a 100644 --- a/op-node/rollup/attributes/engine_consolidate_test.go +++ b/op-node/rollup/attributes/engine_consolidate_test.go @@ -39,7 +39,7 @@ type matchArgs struct { func jovianArgs() matchArgs { var ( validParentHash = common.HexToHash("0x123") - validTimestamp = eth.Uint64Quantity(150) + validTimestamp = eth.Uint64Quantity(50) validParentBeaconRoot = common.HexToHash("0x456") validPrevRandao = eth.Bytes32(common.HexToHash("0x789")) validGasLimit = eth.Uint64Quantity(1000) @@ -83,7 +83,11 @@ func jovianArgs() matchArgs { MinBaseFee: &minBaseFee, }, parentHash: validParentHash, + } } + +func jovianArgsMinBaseFeeMissingFromAttributes() matchArgs { + args := jovianArgs() args.attrs.MinBaseFee = nil return args } diff --git a/op-program/client/l2/engineapi/block_processor.go b/op-program/client/l2/engineapi/block_processor.go index 55de00dc53fd5..26906d970ec42 100644 --- a/op-program/client/l2/engineapi/block_processor.go +++ b/op-program/client/l2/engineapi/block_processor.go @@ -61,11 +61,6 @@ func NewBlockProcessorFromPayloadAttributes(provider BlockDataProvider, parent c d = provider.Config().BaseFeeChangeDenominator(header.Time) e = provider.Config().ElasticityMultiplier() } - if provider.Config().IsConfigurableMinBaseFee(header.Time) { - header.Extra = eip1559.EncodeMinBaseFeeExtraData(d, e, attrs.MinBaseFee) - } else { - header.Extra = eip1559.EncodeHoloceneExtraData(d, e) - } if provider.Config().IsOptimismHolocene(header.Time) { header.Extra = eip1559.EncodeOptimismExtraData(provider.Config(), header.Time, d, e, attrs.MinBaseFee) } diff --git a/op-program/client/l2/engineapi/l2_engine_api.go b/op-program/client/l2/engineapi/l2_engine_api.go index da4374ec3d45e..d3a42079391c1 100644 --- a/op-program/client/l2/engineapi/l2_engine_api.go +++ b/op-program/client/l2/engineapi/l2_engine_api.go @@ -410,12 +410,6 @@ func (ea *L2EngineAPI) NewPayloadV4(ctx context.Context, params *eth.ExecutionPa return ð.PayloadStatusV1{Status: eth.ExecutionInvalid}, engine.InvalidParams.With(errors.New("nil withdrawalsRoot post-isthmus")) } - if ea.config().IsConfigurableMinBaseFee(uint64(params.Timestamp)) { - if err := eip1559.ValidateMinBaseFeeExtraData(params.ExtraData); err != nil { - return ð.PayloadStatusV1{Status: eth.ExecutionInvalid}, engine.UnsupportedFork.With(errors.New("invalid jovian extraData post-jovian")) - } - } - requests := convertRequests(executionRequests) return ea.newPayload(ctx, params, versionedHashes, beaconRoot, requests) } diff --git a/op-program/client/l2/engineapi/l2_engine_api_test.go b/op-program/client/l2/engineapi/l2_engine_api_test.go index 339382a4d1f33..c717917f4f339 100644 --- a/op-program/client/l2/engineapi/l2_engine_api_test.go +++ b/op-program/client/l2/engineapi/l2_engine_api_test.go @@ -199,6 +199,21 @@ func createGenesisWithForkTimeOffset(forkTimeOffset uint64) *core.Genesis { deployConfig.L2GenesisGraniteTimeOffset = &ts deployConfig.L2GenesisHoloceneTimeOffset = &ts + // Set fork time for latest forks + offset := hexutil.Uint64(forkTimeOffset) + deployConfig.L2GenesisIsthmusTimeOffset = &offset + deployConfig.L2GenesisInteropTimeOffset = &offset + deployConfig.L2GenesisJovianTimeOffset = &offset + + l1Genesis, err := genesis.NewL1Genesis(deployConfig) + if err != nil { + panic(err) + } + l2Genesis, err := genesis.NewL2Genesis(deployConfig, eth.BlockRefFromHeader(l1Genesis.ToBlock().Header())) + if err != nil { + panic(err) + } + return l2Genesis } diff --git a/op-program/client/l2/test/miner.go b/op-program/client/l2/test/miner.go index 51a9660894fba..7c5247bc7f96e 100644 --- a/op-program/client/l2/test/miner.go +++ b/op-program/client/l2/test/miner.go @@ -121,7 +121,6 @@ func (m *Miner) Fork(t *testing.T, blockNumber uint64, attrs *eth.PayloadAttribu NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, - MinBaseFee: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) @@ -146,7 +145,6 @@ func (m *Miner) MineAt(t *testing.T, head *types.Header, attrs *eth.PayloadAttri NoTxPool: true, GasLimit: &gasLimit, EIP1559Params: &eip1559Params, - MinBaseFee: 0, } if m.backend.Config().IsJovian(head.Time) { stub := uint64(1e9) From 710bfc1f00b35a8a378d5ac31045870e24baca13 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 11:24:53 -0400 Subject: [PATCH 48/56] remove TestJovianInvalidPayload --- op-e2e/actions/upgrades/jovian_fork_test.go | 88 --------------------- 1 file changed, 88 deletions(-) diff --git a/op-e2e/actions/upgrades/jovian_fork_test.go b/op-e2e/actions/upgrades/jovian_fork_test.go index c911e6ee58ab7..11606105a4054 100644 --- a/op-e2e/actions/upgrades/jovian_fork_test.go +++ b/op-e2e/actions/upgrades/jovian_fork_test.go @@ -1,18 +1,12 @@ package upgrades import ( - "context" - "math/big" "testing" "github.com/stretchr/testify/require" - "github.com/ethereum/go-ethereum/core/types" - "github.com/ethereum-optimism/optimism/op-e2e/actions/helpers" - "github.com/ethereum-optimism/optimism/op-e2e/system/e2esys" "github.com/ethereum-optimism/optimism/op-node/rollup" - "github.com/ethereum-optimism/optimism/op-service/testlog" ) func TestJovianActivationAtGenesis(gt *testing.T) { @@ -43,85 +37,3 @@ func TestJovianActivationAtGenesis(gt *testing.T) { require.Equal(t, env.Verifier.L2Safe(), env.Seq.L2Unsafe(), "verifier syncs from sequencer via L1") require.NotEqual(t, env.Seq.L2Safe(), env.Seq.L2Unsafe(), "sequencer has not processed L1 yet") } - -func TestJovianInvalidPayload(gt *testing.T) { - t := helpers.NewDefaultTesting(gt) - env := helpers.SetupEnv(t, helpers.WithActiveGenesisFork(rollup.Jovian)) - ctx := context.Background() - - requireDepositOnlyLogs := func(role string, expNumLogs int) { - t.Helper() - recs := env.Logs.FindLogs(testlog.NewMessageContainsFilter("deposits-only attributes"), testlog.NewAttributesFilter("role", role)) - require.Len(t, recs, expNumLogs) - } - - // Start op-nodes - env.Seq.ActL2PipelineFull(t) - - // generate and batch buffer two empty blocks - env.Seq.ActL2EmptyBlock(t) // 1 - genesis is 0 - env.Batcher.ActL2BatchBuffer(t) - env.Seq.ActL2EmptyBlock(t) // 2 - env.Batcher.ActL2BatchBuffer(t) - - // send and include a single transaction - env.Alice.L2.ActResetTxOpts(t) - env.Alice.L2.ActSetTxToAddr(&env.DeployParams.Addresses.Bob) - env.Alice.L2.ActMakeTx(t) - - env.Seq.ActL2StartBlock(t) - env.SeqEngine.ActL2IncludeTx(env.Alice.Address())(t) - env.Seq.ActL2EndBlock(t) // 3 - env.Alice.L2.ActCheckReceiptStatusOfLastTx(true)(t) - l2Unsafe := env.Seq.L2Unsafe() - const invalidNum = 3 - require.EqualValues(t, invalidNum, l2Unsafe.Number) - b, err := env.SeqEngine.EthClient().BlockByNumber(ctx, big.NewInt(invalidNum)) - require.NoError(t, err) - require.Len(t, b.Transactions(), 2) - - // buffer into the batcher, invalidating the tx via signature zeroing - env.Batcher.ActL2BatchBuffer(t, helpers.WithBlockModifier(func(block *types.Block) *types.Block { - // Replace the tx with one that has a bad signature. - txs := block.Transactions() - newTx, err := txs[1].WithSignature(env.Alice.L2.Signer(), make([]byte, 65)) - require.NoError(t, err) - txs[1] = newTx - return block - })) - - // generate two more empty blocks - env.Seq.ActL2EmptyBlock(t) // 4 - env.Seq.ActL2EmptyBlock(t) // 5 - require.EqualValues(t, 5, env.Seq.L2Unsafe().Number) - - // submit it all - env.ActBatchSubmitAllAndMine(t) - - // derive chain on sequencer - env.Seq.ActL1HeadSignal(t) - env.Seq.ActL2PipelineFull(t) - - l2Safe := env.Seq.L2Safe() - require.EqualValues(t, invalidNum, l2Safe.Number) - require.NotEqual(t, l2Safe.Hash, l2Unsafe.Hash, // old L2Unsafe above - "block-3 should have been replaced by deposit-only version") - requireDepositOnlyLogs(e2esys.RoleSeq, 2) - require.Equal(t, l2Safe, env.Seq.L2Unsafe(), "unsafe chain should have reorg'd") - b, err = env.SeqEngine.EthClient().BlockByNumber(ctx, big.NewInt(invalidNum)) - require.NoError(t, err) - require.Len(t, b.Transactions(), 1) - - // test that building on top of reorg'd chain and deriving further works - - env.Seq.ActL2EmptyBlock(t) // 4 - env.Seq.ActL2EmptyBlock(t) // 5 - l2Unsafe = env.Seq.L2Unsafe() - require.EqualValues(t, 5, l2Unsafe.Number) - - env.Batcher.Reset() // need to reset batcher to become aware of reorg - env.ActBatchSubmitAllAndMine(t) - env.Seq.ActL1HeadSignal(t) - env.Seq.ActL2PipelineFull(t) - require.Equal(t, l2Unsafe, env.Seq.L2Safe()) -} From bbbf46458017294efc8584e333ac9f0fa4d6b7ee Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 12:04:58 -0400 Subject: [PATCH 49/56] jovian_action_test feedback --- .../actions/proofs/jovian_activation_test.go | 24 ++++++------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go index 92fdf547e9e54..f20cce064507f 100644 --- a/op-e2e/actions/proofs/jovian_activation_test.go +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -20,15 +20,12 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { // Define override to activate Jovian 14 seconds after genesis var setJovianTime = func(dc *genesis.DeployConfig) { - // Set all predecessor forks at genesis (0 offset) + // Activate Isthmus at genesis zero := hexutil.Uint64(0) - dc.L2GenesisHoloceneTimeOffset = &zero - // Set Isthmus at 10s (required predecessor fork for Jovian) + dc.L2GenesisIsthmusTimeOffset = &zero + // Then set Jovian at 10s ten := hexutil.Uint64(10) - dc.L2GenesisIsthmusTimeOffset = &ten - // Then set Jovian at 14s - fourteen := hexutil.Uint64(14) - dc.L2GenesisJovianTimeOffset = &fourteen + dc.L2GenesisJovianTimeOffset = &ten } env := helpers.NewL2FaultProofEnv(t, testCfg, helpers.NewTestParams(), helpers.NewBatcherCfg(), setJovianTime) @@ -41,13 +38,7 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) // Since Holocene is active at genesis, extra data is already 9 bytes require.Len(t, b.Extra(), 9, "extra data should be 9 bytes (Holocene active)") - env.Sequencer.ActL2StartBlock(t) - // Send an L2 tx - env.Alice.L2.ActResetTxOpts(t) - env.Alice.L2.ActSetTxToAddr(&env.Dp.Addresses.Bob) - env.Alice.L2.ActMakeTx(t) - env.Engine.ActL2IncludeTx(env.Alice.Address())(t) - env.Sequencer.ActL2EndBlock(t) + env.Sequencer.ActL2EmptyBlock(t) t.Log("Unsafe block with timestamp %d", b.Time) } b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) @@ -57,7 +48,6 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { l2SafeHead := env.Sequencer.L2Safe() t.Logf("Safe head block number: %d, timestamp: %d", l2SafeHead.Number, l2SafeHead.Time) - // For Jovian, we expect the safe head to progress (different from Holocene behavior) require.True(t, l2SafeHead.Number >= uint64(0), "safe head should progress") // Verify Jovian fork activation occurred by checking for the activation log @@ -76,14 +66,14 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { matrix.AddTestCase( "HonestClaim-JovianActivation", nil, - helpers.NewForkMatrix(helpers.Granite), + helpers.NewForkMatrix(helpers.Isthmus), runJovianDerivationTest, helpers.ExpectNoError(), ) matrix.AddTestCase( "JunkClaim-JovianActivation", nil, - helpers.NewForkMatrix(helpers.Granite), + helpers.NewForkMatrix(helpers.Isthmus), runJovianDerivationTest, helpers.ExpectError(claim.ErrClaimNotValid), helpers.WithL2Claim(common.HexToHash("0xdeadbeef")), From ec9db14790579f9f821bea821c1c563c1f9d9fa0 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 12:12:24 -0400 Subject: [PATCH 50/56] remove unused code/funcs in l2_sequencer and verifier --- op-e2e/actions/helpers/l2_sequencer.go | 7 ------- op-e2e/actions/helpers/l2_verifier.go | 5 +---- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/op-e2e/actions/helpers/l2_sequencer.go b/op-e2e/actions/helpers/l2_sequencer.go index 2e504f81dd3ab..23be8eaf8c940 100644 --- a/op-e2e/actions/helpers/l2_sequencer.go +++ b/op-e2e/actions/helpers/l2_sequencer.go @@ -256,10 +256,3 @@ func (s *L2Sequencer) ActBuildL2ToInterop(t Testing) { s.ActL2EmptyBlock(t) } } - -func (s *L2Sequencer) ActBuildL2ToJovian(t Testing) { - require.NotNil(t, s.RollupCfg.JovianTime, "cannot activate JovianTime when it is not scheduled") - for s.L2Unsafe().Time < *s.RollupCfg.JovianTime { - s.ActL2EmptyBlock(t) - } -} diff --git a/op-e2e/actions/helpers/l2_verifier.go b/op-e2e/actions/helpers/l2_verifier.go index fe08e8b798c07..82a125932ec56 100644 --- a/op-e2e/actions/helpers/l2_verifier.go +++ b/op-e2e/actions/helpers/l2_verifier.go @@ -133,10 +133,7 @@ func NewL2Verifier(t Testing, log log.Logger, l1 derive.L1Fetcher, ) var interopSys interop.SubSystem - // Only enable supervisor management for multi-chain setups - // For single-chain tests with interop/jovian, we provide the depSet but don't use supervisor management - enableSupervisorManagement := cfg.InteropTime != nil && depSet != nil && len(depSet.Chains()) > 1 - if enableSupervisorManagement { + if cfg.InteropTime != nil { mm := indexing.NewIndexingMode(log, cfg, "127.0.0.1", 0, interopJWTSecret, l1, eng, &opmetrics.NoopRPCMetrics{}) mm.TestDisableEventDeduplication() interopSys = mm From 3ccc15f8a3a00334bad1ba8b8c6220b317a78d00 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 12:24:08 -0400 Subject: [PATCH 51/56] move & combine TestJovianActivationAtGenesis to actions/proofs --- .../actions/proofs/jovian_activation_test.go | 131 ++++++++++++------ op-e2e/actions/upgrades/jovian_fork_test.go | 39 ------ 2 files changed, 87 insertions(+), 83 deletions(-) delete mode 100644 op-e2e/actions/upgrades/jovian_fork_test.go diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go index f20cce064507f..a89ba3eb990da 100644 --- a/op-e2e/actions/proofs/jovian_activation_test.go +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -10,39 +10,57 @@ import ( "github.com/ethereum-optimism/optimism/op-service/testlog" "github.com/ethereum/go-ethereum/common" "github.com/ethereum/go-ethereum/common/hexutil" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" "github.com/stretchr/testify/require" ) func Test_ProgramAction_JovianActivation(gt *testing.T) { - runJovianDerivationTest := func(gt *testing.T, testCfg *helpers.TestCfg[any]) { + runJovianDerivationTest := func(gt *testing.T, testCfg *helpers.TestCfg[any], genesisConfigFn func(*genesis.DeployConfig), jovianAtGenesis bool) { t := actionsHelpers.NewDefaultTesting(gt) - // Define override to activate Jovian 14 seconds after genesis - var setJovianTime = func(dc *genesis.DeployConfig) { - // Activate Isthmus at genesis - zero := hexutil.Uint64(0) - dc.L2GenesisIsthmusTimeOffset = &zero - // Then set Jovian at 10s - ten := hexutil.Uint64(10) - dc.L2GenesisJovianTimeOffset = &ten - } - - env := helpers.NewL2FaultProofEnv(t, testCfg, helpers.NewTestParams(), helpers.NewBatcherCfg(), setJovianTime) + env := helpers.NewL2FaultProofEnv(t, testCfg, helpers.NewTestParams(), helpers.NewBatcherCfg(), genesisConfigFn) t.Logf("L2 Genesis Time: %d, JovianTime: %d ", env.Sequencer.RollupCfg.Genesis.L2Time, *env.Sequencer.RollupCfg.JovianTime) - // Build the L2 chain until the Jovian activation time, - // which for the Execution Engine is an L2 block timestamp + if jovianAtGenesis { + // Verify Jovian is active at genesis + require.True(t, env.Sequencer.RollupCfg.IsJovian(env.Sequencer.RollupCfg.Genesis.L2Time), "Jovian should be active at genesis") + } + + // If Jovian is not activated at genesis, build some blocks up to the activation block + // and verify that the extra data is Holocene for env.Engine.L2Chain().CurrentBlock().Time < *env.Sequencer.RollupCfg.JovianTime { b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) - // Since Holocene is active at genesis, extra data is already 9 bytes - require.Len(t, b.Extra(), 9, "extra data should be 9 bytes (Holocene active)") + expectedHoloceneExtraData := eip1559.EncodeHoloceneExtraData(250, 6) + require.Equal(t, expectedHoloceneExtraData, b.Extra(), "extra data should match Holocene format") env.Sequencer.ActL2EmptyBlock(t) - t.Log("Unsafe block with timestamp %d", b.Time) } - b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) - require.Len(t, b.Extra(), 17, "extra data should be 17 bytes after Jovian activation (adds minBaseFee)") + + // Build the activation block + env.Sequencer.ActL2EmptyBlock(t) + activationBlock := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) + expectedJovianExtraData := eip1559.EncodeJovianExtraData(250, 6, 0) + require.Equal(t, expectedJovianExtraData, activationBlock.Extra(), "activation block should have Jovian extraData") + + // Build a few more blocks + for range 10 { + b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) + require.Equal(t, expectedJovianExtraData, b.Extra(), "subsequent blocks should have Jovian extraData") + // assert that the block's base fee is greater than the minimum + require.GreaterOrEqual(t, b.BaseFee().Uint64(), uint64(0), "base fee should be >= minimum") + env.Sequencer.ActL2EmptyBlock(t) + } + + if !jovianAtGenesis { + // Verify Jovian fork activation occurred by checking for the activation log + jovianRecs := env.Logs.FindLogs( + testlog.NewMessageContainsFilter("Detected hardfork activation block"), + testlog.NewAttributesFilter("role", "sequencer"), + testlog.NewAttributesFilter("forkName", "jovian"), + ) + require.Len(t, jovianRecs, 1, "Jovian fork should be detected and activated exactly once") + } env.BatchMineAndSync(t) @@ -50,32 +68,57 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { t.Logf("Safe head block number: %d, timestamp: %d", l2SafeHead.Number, l2SafeHead.Time) require.True(t, l2SafeHead.Number >= uint64(0), "safe head should progress") - // Verify Jovian fork activation occurred by checking for the activation log - jovianRecs := env.Logs.FindLogs( - testlog.NewMessageContainsFilter("Detected hardfork activation block"), - testlog.NewAttributesFilter("role", "sequencer"), - testlog.NewAttributesFilter("forkName", "jovian"), - ) - require.Len(t, jovianRecs, 1, "Jovian fork should be detected and activated exactly once") env.RunFaultProofProgramFromGenesis(t, l2SafeHead.Number, testCfg.CheckResult, testCfg.InputParams...) } - matrix := helpers.NewMatrix[any]() - defer matrix.Run(gt) - - matrix.AddTestCase( - "HonestClaim-JovianActivation", - nil, - helpers.NewForkMatrix(helpers.Isthmus), - runJovianDerivationTest, - helpers.ExpectNoError(), - ) - matrix.AddTestCase( - "JunkClaim-JovianActivation", - nil, - helpers.NewForkMatrix(helpers.Isthmus), - runJovianDerivationTest, - helpers.ExpectError(claim.ErrClaimNotValid), - helpers.WithL2Claim(common.HexToHash("0xdeadbeef")), - ) + tests := map[string]struct { + genesisConfigFn func(*genesis.DeployConfig) + jovianAtGenesis bool + }{ + "JovianActivationAfterGenesis": { + genesisConfigFn: func(dc *genesis.DeployConfig) { + // Activate Isthmus at genesis + zero := hexutil.Uint64(0) + dc.L2GenesisIsthmusTimeOffset = &zero + // Then set Jovian at 10s + ten := hexutil.Uint64(10) + dc.L2GenesisJovianTimeOffset = &ten + }, + jovianAtGenesis: false, + }, + "JovianActivationAtGenesis": { + genesisConfigFn: func(dc *genesis.DeployConfig) { + zero := hexutil.Uint64(0) + dc.L2GenesisJovianTimeOffset = &zero + }, + jovianAtGenesis: true, + }, + } + + for name, tt := range tests { + gt.Run(name, func(t *testing.T) { + matrix := helpers.NewMatrix[any]() + defer matrix.Run(t) + + matrix.AddTestCase( + "HonestClaim-"+name, + nil, + helpers.NewForkMatrix(helpers.Isthmus), + func(gt *testing.T, testCfg *helpers.TestCfg[any]) { + runJovianDerivationTest(gt, testCfg, tt.genesisConfigFn, tt.jovianAtGenesis) + }, + helpers.ExpectNoError(), + ) + matrix.AddTestCase( + "JunkClaim-"+name, + nil, + helpers.NewForkMatrix(helpers.Isthmus), + func(gt *testing.T, testCfg *helpers.TestCfg[any]) { + runJovianDerivationTest(gt, testCfg, tt.genesisConfigFn, tt.jovianAtGenesis) + }, + helpers.ExpectError(claim.ErrClaimNotValid), + helpers.WithL2Claim(common.HexToHash("0xdeadbeef")), + ) + }) + } } diff --git a/op-e2e/actions/upgrades/jovian_fork_test.go b/op-e2e/actions/upgrades/jovian_fork_test.go deleted file mode 100644 index 11606105a4054..0000000000000 --- a/op-e2e/actions/upgrades/jovian_fork_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package upgrades - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/ethereum-optimism/optimism/op-e2e/actions/helpers" - "github.com/ethereum-optimism/optimism/op-node/rollup" -) - -func TestJovianActivationAtGenesis(gt *testing.T) { - t := helpers.NewDefaultTesting(gt) - env := helpers.SetupEnv(t, helpers.WithActiveGenesisFork(rollup.Jovian)) - - // Start op-nodes - env.Seq.ActL2PipelineFull(t) - env.Verifier.ActL2PipelineFull(t) - - // Verify Jovian is active at genesis - l2Head := env.Seq.L2Unsafe() - require.NotZero(t, l2Head.Hash) - require.True(t, env.SetupData.RollupCfg.IsJovian(l2Head.Time), "Jovian should be active at genesis") - - // build empty L1 block - env.Miner.ActEmptyBlock(t) - - // Build L2 chain and advance safe head - env.Seq.ActL1HeadSignal(t) - env.Seq.ActBuildToL1Head(t) - - env.ActBatchSubmitAllAndMine(t) - - // verifier picks up the L2 chain that was submitted - env.Verifier.ActL1HeadSignal(t) - env.Verifier.ActL2PipelineFull(t) - require.Equal(t, env.Verifier.L2Safe(), env.Seq.L2Unsafe(), "verifier syncs from sequencer via L1") - require.NotEqual(t, env.Seq.L2Safe(), env.Seq.L2Unsafe(), "sequencer has not processed L1 yet") -} From 8d7b4279ba582d800e1fc35ec1e58200118852c2 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 14:21:25 -0400 Subject: [PATCH 52/56] devstack/acceptance test feedback --- kurtosis-devnet/simple.yaml | 2 +- .../tests/jovian/min_base_fee_test.go | 8 +-- op-devstack/dsl/min_base_fee.go | 56 ++++++++++--------- .../actions/proofs/jovian_activation_test.go | 2 +- 4 files changed, 37 insertions(+), 31 deletions(-) diff --git a/kurtosis-devnet/simple.yaml b/kurtosis-devnet/simple.yaml index 96aef9c35742e..c983246e4ec47 100644 --- a/kurtosis-devnet/simple.yaml +++ b/kurtosis-devnet/simple.yaml @@ -8,7 +8,7 @@ optimism_package: node0: el: type: op-geth - image: "op-geth:local" + image: "" log_level: "" extra_env_vars: {} extra_labels: {} diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index abcc564adffb1..0f889cbe9ba80 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -11,8 +11,8 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" ) -// TestConfigurableMinBaseFee verifies configurable minimum base fee using devstack presets. -func TestConfigurableMinBaseFee(gt *testing.T) { +// TestMinBaseFee verifies configurable minimum base fee using devstack presets. +func TestMinBaseFee(gt *testing.T) { t := devtest.SerialT(gt) sys := presets.NewMinimal(t) require := t.Require() @@ -33,13 +33,13 @@ func TestConfigurableMinBaseFee(gt *testing.T) { }{ {"MinBaseFeeOff", 0, false}, {"MinBaseFeeOn", 1_000_000_000, true}, + {"MinBaseFeeBackToOff", 0, false}, } for _, tc := range testCases { t.Run(tc.name, func(t devtest.T) { minBaseFee.SetMinBaseFee(tc.minBaseFee) - minBaseFee.WaitForL2Sync(tc.minBaseFee) - minBaseFee.VerifyL2Config(tc.minBaseFee) + minBaseFee.WaitForMinBaseFee(tc.minBaseFee) if tc.shouldClamp { minBaseFee.VerifyMinBaseFeeClamp(big.NewInt(int64(tc.minBaseFee))) diff --git a/op-devstack/dsl/min_base_fee.go b/op-devstack/dsl/min_base_fee.go index 94296c3d1b1f0..cf208c478b022 100644 --- a/op-devstack/dsl/min_base_fee.go +++ b/op-devstack/dsl/min_base_fee.go @@ -10,6 +10,7 @@ import ( "github.com/ethereum-optimism/optimism/op-service/apis" "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" ) type MinBaseFee struct { @@ -50,7 +51,7 @@ func NewMinBaseFee(t devtest.T, l2Network *L2Network, l1EL *L1ELNode, l2EL *L2EL func (mbf *MinBaseFee) CheckCompatibility() bool { _, err := contractio.Read(mbf.systemConfig.MinBaseFee(), mbf.ctx) if err != nil { - mbf.t.Skipf("MinBaseFee methods not available in devstack: %v", err) + mbf.t.Fail() return false } return true @@ -70,23 +71,6 @@ func (mbf *MinBaseFee) SetMinBaseFee(minBaseFee uint64) { mbf.t.Logf("Set min base fee on L1: minBaseFee=%d", minBaseFee) } -func (mbf *MinBaseFee) WaitForL2Sync(expectedMinBaseFee uint64) { - mbf.waitForMinBaseFee(expectedMinBaseFee) -} - -func (mbf *MinBaseFee) VerifyL2Config(expectedMinBaseFee uint64) { - client := mbf.l2EL.Escape().L2EthClient() - ext, ok := client.(apis.L2EthExtendedClient) - mbf.require.True(ok, "L2 client does not support extended payload API") - - payload, err := ext.PayloadByLabel(mbf.ctx, "latest") - mbf.require.NoError(err, "failed to get latest payload") - mbf.require.True(len(payload.ExecutionPayload.ExtraData) == 17, "payload extra data should be 17 bytes") - - got := binary.BigEndian.Uint64(payload.ExecutionPayload.ExtraData[9:]) - mbf.require.Equal(expectedMinBaseFee, got, "L2 min base fee did not match expected") -} - func (mbf *MinBaseFee) CheckBaseFeeCanDecrease() { // Ensure we are past genesis and collect a small sample across advancing blocks _ = mbf.l2EL.WaitForBlock() @@ -95,7 +79,7 @@ func (mbf *MinBaseFee) CheckBaseFeeCanDecrease() { info, err := el.InfoByLabel(mbf.ctx, "latest") mbf.require.NoError(err) bases = append(bases, info.BaseFee()) - for i := 0; i < 5; i++ { + for range 5 { _ = mbf.l2EL.WaitForBlock() next, err := el.InfoByLabel(mbf.ctx, "latest") mbf.require.NoError(err) @@ -127,24 +111,46 @@ func (mbf *MinBaseFee) VerifyMinBaseFeeClamp(minBase *big.Int) { func (mbf *MinBaseFee) RestoreOriginalConfig() { mbf.SetMinBaseFee(mbf.originalMinBaseFee) - mbf.WaitForL2Sync(mbf.originalMinBaseFee) + mbf.WaitForMinBaseFee(mbf.originalMinBaseFee) } -// waitForMinBaseFee waits until the L2 latest payload extra-data encodes the expected min base fee. -func (mbf *MinBaseFee) waitForMinBaseFee(expected uint64) { +// WaitForMinBaseFee waits until the L2 latest payload extra-data encodes the expected min base fee. +func (mbf *MinBaseFee) WaitForMinBaseFee(expected uint64) { client := mbf.l2EL.Escape().L2EthClient() ext, ok := client.(apis.L2EthExtendedClient) mbf.require.True(ok, "L2 client does not support extended payload API") + // Construct expected Jovian extraData with the expected min base fee + expectedExtraData := eip1559.EncodeJovianExtraData(250, 6, expected) + mbf.require.Eventually(func() bool { payload, err := ext.PayloadByLabel(mbf.ctx, "latest") if err != nil { + mbf.t.Logf("Failed to get latest payload: %v", err) + return false + } + + // Assert payload has Jovian extraData format (17 bytes) + actualExtraData := payload.ExecutionPayload.ExtraData + if len(actualExtraData) != 17 { + mbf.t.Logf("ExtraData length is %d, expected 17 bytes for Jovian format", len(actualExtraData)) return false } - if len(payload.ExecutionPayload.ExtraData) != 17 { + + // Assert extraData matches exactly what we expect for Jovian with the min base fee + mbf.require.Equal(expectedExtraData, actualExtraData, "ExtraData mismatch") + + // Extract and verify the encoded min base fee + encodedMinBaseFee := binary.BigEndian.Uint64(actualExtraData[9:]) + if encodedMinBaseFee != expected { + mbf.t.Logf("Encoded min base fee mismatch: expected %d, got %d", expected, encodedMinBaseFee) return false } - got := binary.BigEndian.Uint64(payload.ExecutionPayload.ExtraData[9:]) - return got == expected + mbf.require.Equal(encodedMinBaseFee, expected, "Encoded min base fee should be greater than expected") + + // Assert that the block's actual base fee is >= minBaseFee + mbf.require.GreaterOrEqual(payload.ExecutionPayload.BaseFeePerGas, expected, "Block base fee should be > 0") + + return true }, 2*time.Minute, 5*time.Second, "L2 min base fee did not sync within timeout") } diff --git a/op-e2e/actions/proofs/jovian_activation_test.go b/op-e2e/actions/proofs/jovian_activation_test.go index a89ba3eb990da..ce1e3beba2075 100644 --- a/op-e2e/actions/proofs/jovian_activation_test.go +++ b/op-e2e/actions/proofs/jovian_activation_test.go @@ -48,7 +48,7 @@ func Test_ProgramAction_JovianActivation(gt *testing.T) { b := env.Engine.L2Chain().GetBlockByHash(env.Sequencer.L2Unsafe().Hash) require.Equal(t, expectedJovianExtraData, b.Extra(), "subsequent blocks should have Jovian extraData") // assert that the block's base fee is greater than the minimum - require.GreaterOrEqual(t, b.BaseFee().Uint64(), uint64(0), "base fee should be >= minimum") + require.Greater(t, b.BaseFee().Uint64(), uint64(0), "base fee should be > minimum") env.Sequencer.ActL2EmptyBlock(t) } From 4749b16df5318694b1d4105769d1bd79b600819b Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 15:32:45 -0400 Subject: [PATCH 53/56] move mbf dsl into test file --- .../tests/jovian/min_base_fee_test.go | 176 +++++++++++++++++- op-devstack/dsl/min_base_fee.go | 156 ---------------- 2 files changed, 168 insertions(+), 164 deletions(-) delete mode 100644 op-devstack/dsl/min_base_fee.go diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 0f889cbe9ba80..0fc54d1cf9c36 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -1,8 +1,20 @@ package jovian import ( + "context" + "encoding/binary" "math/big" "testing" + "time" + + "github.com/ethereum-optimism/optimism/op-service/testreq" + "github.com/ethereum/go-ethereum/log" + + "github.com/ethereum-optimism/optimism/op-chain-ops/devkeys" + "github.com/ethereum-optimism/optimism/op-service/apis" + "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" + "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" + "github.com/ethereum/go-ethereum/consensus/misc/eip1559" "github.com/ethereum-optimism/optimism/op-devstack/devtest" "github.com/ethereum-optimism/optimism/op-devstack/dsl" @@ -11,6 +23,154 @@ import ( "github.com/ethereum-optimism/optimism/op-service/eth" ) +type minBaseFee struct { + ctx context.Context + log log.Logger + t devtest.T + require *testreq.Assertions + + l1Client *dsl.L1ELNode + l2Network *dsl.L2Network + l2EL *dsl.L2ELNode + systemConfig minBaseFeeSystemConfig + + originalMinBaseFee uint64 +} + +type minBaseFeeSystemConfig struct { + setMinBaseFee func(minBaseFee uint64) bindings.TypedCall[any] `sol:"setMinBaseFee"` + minBaseFee func() bindings.TypedCall[uint64] `sol:"minBaseFee"` +} + +func newMinBaseFee(t devtest.T, l2Network *dsl.L2Network, l1EL *dsl.L1ELNode, l2EL *dsl.L2ELNode) *minBaseFee { + systemConfig := bindings.NewBindings[minBaseFeeSystemConfig]( + bindings.WithClient(l1EL.EthClient()), + bindings.WithTo(l2Network.Escape().Deployment().SystemConfigProxyAddr()), + bindings.WithTest(t)) + + originalMinBaseFee, err := contractio.Read(systemConfig.minBaseFee(), t.Ctx()) + t.Require().NoError(err, "reading original minBaseFee") + + return &minBaseFee{ + ctx: t.Ctx(), + log: t.Logger(), + t: t, + require: t.Require(), + l1Client: l1EL, + l2Network: l2Network, + l2EL: l2EL, + systemConfig: systemConfig, + originalMinBaseFee: originalMinBaseFee, + } +} + +func (mbf *minBaseFee) checkCompatibility() bool { + _, err := contractio.Read(mbf.systemConfig.minBaseFee(), mbf.ctx) + if err != nil { + mbf.t.Fail() + return false + } + return true +} + +func (mbf *minBaseFee) getSystemOwner() *dsl.EOA { + priv := mbf.l2Network.Escape().Keys().Secret(devkeys.SystemConfigOwner.Key(mbf.l2Network.ChainID().ToBig())) + return dsl.NewKey(mbf.t, priv).User(mbf.l1Client) +} + +func (mbf *minBaseFee) setMinBaseFee(minBaseFee uint64) { + owner := mbf.getSystemOwner() + + _, err := contractio.Write(mbf.systemConfig.setMinBaseFee(minBaseFee), mbf.ctx, owner.Plan()) + mbf.require.NoError(err, "setMinBaseFee transaction failed") + + mbf.t.Logf("Set min base fee on L1: minBaseFee=%d", minBaseFee) +} + +func (mbf *minBaseFee) checkBaseFeeCanDecrease() { + // Ensure we are past genesis and collect a small sample across advancing blocks + _ = mbf.l2EL.WaitForBlock() + el := mbf.l2EL.Escape().EthClient() + bases := make([]*big.Int, 0, 6) + info, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.NoError(err) + bases = append(bases, info.BaseFee()) + for range 5 { + _ = mbf.l2EL.WaitForBlock() + next, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.NoError(err) + bases = append(bases, next.BaseFee()) + } + decreased := false + for i := 1; i < len(bases); i++ { + if bases[i].Cmp(bases[i-1]) < 0 { + decreased = true + break + } + } + mbf.require.True(decreased, "expected base-fee to decrease when minBaseFee=0") +} + +func (mbf *minBaseFee) verifyMinBaseFeeClamp(minBase *big.Int) { + // Give the sequencer one more block, then check 5 consecutive blocks + _ = mbf.l2EL.WaitForBlock() + el := mbf.l2EL.Escape().EthClient() + + // Check 5 consecutive blocks to ensure min base fee is consistently applied + for i := 1; i <= 5; i++ { + _ = mbf.l2EL.WaitForBlock() + info, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.NoError(err) + mbf.require.True(info.BaseFee().Cmp(minBase) >= 0, "block %d base-fee %s should be >= %s", info.NumberU64(), info.BaseFee(), minBase) + } +} + +func (mbf *minBaseFee) restoreOriginalConfig() { + mbf.setMinBaseFee(mbf.originalMinBaseFee) + mbf.waitForMinBaseFee(mbf.originalMinBaseFee) +} + +// waitForMinBaseFee waits until the L2 latest payload extra-data encodes the expected min base fee. +func (mbf *minBaseFee) waitForMinBaseFee(expected uint64) { + client := mbf.l2EL.Escape().L2EthClient() + ext, ok := client.(apis.L2EthExtendedClient) + mbf.require.True(ok, "L2 client does not support extended payload API") + + // Construct expected Jovian extraData with the expected min base fee + expectedExtraData := eip1559.EncodeJovianExtraData(250, 6, expected) + + mbf.require.Eventually(func() bool { + payload, err := ext.PayloadByLabel(mbf.ctx, "latest") + if err != nil { + mbf.t.Logf("Failed to get latest payload: %v", err) + return false + } + + // Assert payload has Jovian extraData format (17 bytes) + actualExtraData := payload.ExecutionPayload.ExtraData + if len(actualExtraData) != 17 { + mbf.t.Logf("ExtraData length is %d, expected 17 bytes for Jovian format", len(actualExtraData)) + return false + } + + // Assert extraData matches exactly what we expect for Jovian with the min base fee + mbf.require.Equal(expectedExtraData, actualExtraData, "ExtraData mismatch") + + // Extract and verify the encoded min base fee + encodedMinBaseFee := binary.BigEndian.Uint64(actualExtraData[9:]) + if encodedMinBaseFee != expected { + mbf.t.Logf("Encoded min base fee mismatch: expected %d, got %d", expected, encodedMinBaseFee) + return false + } + mbf.require.Equal(encodedMinBaseFee, expected, "Encoded min base fee should be greater than expected") + + // Assert that the block's actual base fee is >= minBaseFee + mbf.require.GreaterOrEqual(payload.ExecutionPayload.BaseFeePerGas, expected, "Block base fee should be > 0") + + return true + }, 2*time.Minute, 5*time.Second, "L2 min base fee did not sync within timeout") +} + // TestMinBaseFee verifies configurable minimum base fee using devstack presets. func TestMinBaseFee(gt *testing.T) { t := devtest.SerialT(gt) @@ -20,10 +180,10 @@ func TestMinBaseFee(gt *testing.T) { err := dsl.RequiresL2Fork(t.Ctx(), sys, 0, rollup.Jovian) require.NoError(err, "Jovian fork must be active for this test") - minBaseFee := dsl.NewMinBaseFee(t, sys.L2Chain, sys.L1EL, sys.L2EL) + minBaseFee := newMinBaseFee(t, sys.L2Chain, sys.L1EL, sys.L2EL) - minBaseFee.CheckCompatibility() - systemOwner := minBaseFee.GetSystemOwner() + minBaseFee.checkCompatibility() + systemOwner := minBaseFee.getSystemOwner() sys.FunderL1.FundAtLeast(systemOwner, eth.OneTenthEther) testCases := []struct { @@ -38,13 +198,13 @@ func TestMinBaseFee(gt *testing.T) { for _, tc := range testCases { t.Run(tc.name, func(t devtest.T) { - minBaseFee.SetMinBaseFee(tc.minBaseFee) - minBaseFee.WaitForMinBaseFee(tc.minBaseFee) + minBaseFee.setMinBaseFee(tc.minBaseFee) + minBaseFee.waitForMinBaseFee(tc.minBaseFee) if tc.shouldClamp { - minBaseFee.VerifyMinBaseFeeClamp(big.NewInt(int64(tc.minBaseFee))) + minBaseFee.verifyMinBaseFeeClamp(big.NewInt(int64(tc.minBaseFee))) } else { - minBaseFee.CheckBaseFeeCanDecrease() + minBaseFee.checkBaseFeeCanDecrease() } t.Log("Test completed successfully:", @@ -54,5 +214,5 @@ func TestMinBaseFee(gt *testing.T) { }) } - minBaseFee.RestoreOriginalConfig() + minBaseFee.restoreOriginalConfig() } diff --git a/op-devstack/dsl/min_base_fee.go b/op-devstack/dsl/min_base_fee.go deleted file mode 100644 index cf208c478b022..0000000000000 --- a/op-devstack/dsl/min_base_fee.go +++ /dev/null @@ -1,156 +0,0 @@ -package dsl - -import ( - "encoding/binary" - "math/big" - "time" - - "github.com/ethereum-optimism/optimism/op-chain-ops/devkeys" - "github.com/ethereum-optimism/optimism/op-devstack/devtest" - "github.com/ethereum-optimism/optimism/op-service/apis" - "github.com/ethereum-optimism/optimism/op-service/txintent/bindings" - "github.com/ethereum-optimism/optimism/op-service/txintent/contractio" - "github.com/ethereum/go-ethereum/consensus/misc/eip1559" -) - -type MinBaseFee struct { - commonImpl - - l1Client *L1ELNode - l2Network *L2Network - l2EL *L2ELNode - systemConfig minBaseFeeSystemConfig - - originalMinBaseFee uint64 -} - -type minBaseFeeSystemConfig struct { - SetMinBaseFee func(minBaseFee uint64) bindings.TypedCall[any] `sol:"setMinBaseFee"` - MinBaseFee func() bindings.TypedCall[uint64] `sol:"minBaseFee"` -} - -func NewMinBaseFee(t devtest.T, l2Network *L2Network, l1EL *L1ELNode, l2EL *L2ELNode) *MinBaseFee { - systemConfig := bindings.NewBindings[minBaseFeeSystemConfig]( - bindings.WithClient(l1EL.EthClient()), - bindings.WithTo(l2Network.Escape().Deployment().SystemConfigProxyAddr()), - bindings.WithTest(t)) - - originalMinBaseFee, err := contractio.Read(systemConfig.MinBaseFee(), t.Ctx()) - t.Require().NoError(err, "reading original minBaseFee") - - return &MinBaseFee{ - commonImpl: commonFromT(t), - l1Client: l1EL, - l2Network: l2Network, - l2EL: l2EL, - systemConfig: systemConfig, - originalMinBaseFee: originalMinBaseFee, - } -} - -func (mbf *MinBaseFee) CheckCompatibility() bool { - _, err := contractio.Read(mbf.systemConfig.MinBaseFee(), mbf.ctx) - if err != nil { - mbf.t.Fail() - return false - } - return true -} - -func (mbf *MinBaseFee) GetSystemOwner() *EOA { - priv := mbf.l2Network.Escape().Keys().Secret(devkeys.SystemConfigOwner.Key(mbf.l2Network.ChainID().ToBig())) - return NewKey(mbf.t, priv).User(mbf.l1Client) -} - -func (mbf *MinBaseFee) SetMinBaseFee(minBaseFee uint64) { - owner := mbf.GetSystemOwner() - - _, err := contractio.Write(mbf.systemConfig.SetMinBaseFee(minBaseFee), mbf.ctx, owner.Plan()) - mbf.require.NoError(err, "SetMinBaseFee transaction failed") - - mbf.t.Logf("Set min base fee on L1: minBaseFee=%d", minBaseFee) -} - -func (mbf *MinBaseFee) CheckBaseFeeCanDecrease() { - // Ensure we are past genesis and collect a small sample across advancing blocks - _ = mbf.l2EL.WaitForBlock() - el := mbf.l2EL.Escape().EthClient() - bases := make([]*big.Int, 0, 6) - info, err := el.InfoByLabel(mbf.ctx, "latest") - mbf.require.NoError(err) - bases = append(bases, info.BaseFee()) - for range 5 { - _ = mbf.l2EL.WaitForBlock() - next, err := el.InfoByLabel(mbf.ctx, "latest") - mbf.require.NoError(err) - bases = append(bases, next.BaseFee()) - } - decreased := false - for i := 1; i < len(bases); i++ { - if bases[i].Cmp(bases[i-1]) < 0 { - decreased = true - break - } - } - mbf.require.True(decreased, "expected base-fee to decrease when minBaseFee=0") -} - -func (mbf *MinBaseFee) VerifyMinBaseFeeClamp(minBase *big.Int) { - // Give the sequencer one more block, then check 5 consecutive blocks - _ = mbf.l2EL.WaitForBlock() - el := mbf.l2EL.Escape().EthClient() - - // Check 5 consecutive blocks to ensure min base fee is consistently applied - for i := 1; i <= 5; i++ { - _ = mbf.l2EL.WaitForBlock() - info, err := el.InfoByLabel(mbf.ctx, "latest") - mbf.require.NoError(err) - mbf.require.True(info.BaseFee().Cmp(minBase) >= 0, "block %d base-fee %s should be >= %s", info.NumberU64(), info.BaseFee(), minBase) - } -} - -func (mbf *MinBaseFee) RestoreOriginalConfig() { - mbf.SetMinBaseFee(mbf.originalMinBaseFee) - mbf.WaitForMinBaseFee(mbf.originalMinBaseFee) -} - -// WaitForMinBaseFee waits until the L2 latest payload extra-data encodes the expected min base fee. -func (mbf *MinBaseFee) WaitForMinBaseFee(expected uint64) { - client := mbf.l2EL.Escape().L2EthClient() - ext, ok := client.(apis.L2EthExtendedClient) - mbf.require.True(ok, "L2 client does not support extended payload API") - - // Construct expected Jovian extraData with the expected min base fee - expectedExtraData := eip1559.EncodeJovianExtraData(250, 6, expected) - - mbf.require.Eventually(func() bool { - payload, err := ext.PayloadByLabel(mbf.ctx, "latest") - if err != nil { - mbf.t.Logf("Failed to get latest payload: %v", err) - return false - } - - // Assert payload has Jovian extraData format (17 bytes) - actualExtraData := payload.ExecutionPayload.ExtraData - if len(actualExtraData) != 17 { - mbf.t.Logf("ExtraData length is %d, expected 17 bytes for Jovian format", len(actualExtraData)) - return false - } - - // Assert extraData matches exactly what we expect for Jovian with the min base fee - mbf.require.Equal(expectedExtraData, actualExtraData, "ExtraData mismatch") - - // Extract and verify the encoded min base fee - encodedMinBaseFee := binary.BigEndian.Uint64(actualExtraData[9:]) - if encodedMinBaseFee != expected { - mbf.t.Logf("Encoded min base fee mismatch: expected %d, got %d", expected, encodedMinBaseFee) - return false - } - mbf.require.Equal(encodedMinBaseFee, expected, "Encoded min base fee should be greater than expected") - - // Assert that the block's actual base fee is >= minBaseFee - mbf.require.GreaterOrEqual(payload.ExecutionPayload.BaseFeePerGas, expected, "Block base fee should be > 0") - - return true - }, 2*time.Minute, 5*time.Second, "L2 min base fee did not sync within timeout") -} From 0a0052a2cbc36bcd68d18678d02944ff4beda995 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 16:38:15 -0400 Subject: [PATCH 54/56] update kurtosis images --- kurtosis-devnet/jovian.yaml | 2 +- kurtosis-devnet/simple.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/kurtosis-devnet/jovian.yaml b/kurtosis-devnet/jovian.yaml index b73e3fd860dfb..a8e4f374715f3 100644 --- a/kurtosis-devnet/jovian.yaml +++ b/kurtosis-devnet/jovian.yaml @@ -8,7 +8,7 @@ optimism_package: node0: el: type: op-geth - image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101503.2-rc.3" + image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101602.1-rc.1" log_level: "" extra_env_vars: {} extra_labels: {} diff --git a/kurtosis-devnet/simple.yaml b/kurtosis-devnet/simple.yaml index c983246e4ec47..c394cf9d667eb 100644 --- a/kurtosis-devnet/simple.yaml +++ b/kurtosis-devnet/simple.yaml @@ -8,7 +8,7 @@ optimism_package: node0: el: type: op-geth - image: "" + image: "us-docker.pkg.dev/oplabs-tools-artifacts/images/op-geth:v1.101602.1-rc.1" log_level: "" extra_env_vars: {} extra_labels: {} From c26607e52941ac29f0aaad9768151839856f84c7 Mon Sep 17 00:00:00 2001 From: William Law Date: Thu, 11 Sep 2025 16:44:46 -0400 Subject: [PATCH 55/56] reduce diffs --- go.sum | 2 -- op-acceptance-tests/acceptance-tests.yaml | 2 +- op-e2e/actions/upgrades/span_batch_test.go | 8 ++------ op-node/rollup/types.go | 5 ----- 4 files changed, 3 insertions(+), 14 deletions(-) diff --git a/go.sum b/go.sum index 25f89fd3a3a19..c315ef604bc20 100644 --- a/go.sum +++ b/go.sum @@ -904,8 +904,6 @@ github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPU github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/wlawt/op-geth v0.0.0-20250821143546-00d507960140 h1:8PbCHVtn0dWPsywpzQ6iB75zdsbSu1tX66ZogkoiPTw= -github.com/wlawt/op-geth v0.0.0-20250821143546-00d507960140/go.mod h1:SkytozVEPtnUeBlquwl0Qv5JKvrN/Y5aqh+VkQo/EOI= github.com/wlynxg/anet v0.0.3/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= github.com/wlynxg/anet v0.0.4 h1:0de1OFQxnNqAu+x2FAKKCVIrnfGKQbs7FQz++tB0+Uw= github.com/wlynxg/anet v0.0.4/go.mod h1:eay5PRQr7fIVAMbTbchTnO9gG65Hg/uYGdc7mguHxoA= diff --git a/op-acceptance-tests/acceptance-tests.yaml b/op-acceptance-tests/acceptance-tests.yaml index 425214a9cb9fd..a0d677689bbdc 100644 --- a/op-acceptance-tests/acceptance-tests.yaml +++ b/op-acceptance-tests/acceptance-tests.yaml @@ -78,7 +78,7 @@ gates: tests: - package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/flashblocks timeout: 5m - + - id: flashblocks-with-isthmus inherits: - isthmus diff --git a/op-e2e/actions/upgrades/span_batch_test.go b/op-e2e/actions/upgrades/span_batch_test.go index 2c9bf39ac8f6c..d9dbc454e56e0 100644 --- a/op-e2e/actions/upgrades/span_batch_test.go +++ b/op-e2e/actions/upgrades/span_batch_test.go @@ -28,6 +28,7 @@ import ( batcherFlags "github.com/ethereum-optimism/optimism/op-batcher/flags" "github.com/ethereum-optimism/optimism/op-e2e/e2eutils" + "github.com/ethereum-optimism/optimism/op-node/rollup" "github.com/ethereum-optimism/optimism/op-node/rollup/sync" "github.com/ethereum-optimism/optimism/op-service/testlog" ) @@ -139,12 +140,7 @@ func TestHardforkMiddleOfSpanBatch(gt *testing.T) { deltaOffset := hexutil.Uint64(6) upgradesHelpers.ApplyDeltaTimeOffset(dp, &deltaOffset) // Applies to HF that goes into Delta. Otherwise we end up with more upgrade txs and things during this case. - dp.DeployConfig.L2GenesisEcotoneTimeOffset = nil - dp.DeployConfig.L2GenesisFjordTimeOffset = nil - dp.DeployConfig.L2GenesisGraniteTimeOffset = nil - dp.DeployConfig.L2GenesisHoloceneTimeOffset = nil - dp.DeployConfig.L2GenesisIsthmusTimeOffset = nil - dp.DeployConfig.L2GenesisJovianTimeOffset = nil + dp.DeployConfig.ActivateForkAtOffset(rollup.Delta, uint64(deltaOffset)) sd := e2eutils.Setup(t, dp, actionsHelpers.DefaultAlloc) log := testlog.Logger(t, log.LevelError) diff --git a/op-node/rollup/types.go b/op-node/rollup/types.go index 483c5f7f4ccf5..fafa6933b1f67 100644 --- a/op-node/rollup/types.go +++ b/op-node/rollup/types.go @@ -480,11 +480,6 @@ func (c *Config) IsInterop(timestamp uint64) bool { return c.IsForkActive(Interop, timestamp) } -// IsConfigurableMinBaseFee returns true if the configurable minBaseFee feature is enabled. -func (c *Config) IsConfigurableMinBaseFee(timestamp uint64) bool { - return c.IsJovian(timestamp) -} - func (c *Config) IsRegolithActivationBlock(l2BlockTime uint64) bool { return c.IsRegolith(l2BlockTime) && l2BlockTime >= c.BlockTime && From be98d00c7c2e843f0f45c430e157b29fc0edc973 Mon Sep 17 00:00:00 2001 From: William Law Date: Fri, 12 Sep 2025 09:57:48 -0400 Subject: [PATCH 56/56] add acceptance-test.yaml to get kurtosis to run --- op-acceptance-tests/acceptance-tests.yaml | 10 +- .../tests/jovian/min_base_fee_test.go | 20 ++- op-e2e/bindings/systemconfig.go | 121 ++++++++++-------- 3 files changed, 94 insertions(+), 57 deletions(-) diff --git a/op-acceptance-tests/acceptance-tests.yaml b/op-acceptance-tests/acceptance-tests.yaml index a0d677689bbdc..d2b476e0725e9 100644 --- a/op-acceptance-tests/acceptance-tests.yaml +++ b/op-acceptance-tests/acceptance-tests.yaml @@ -78,7 +78,7 @@ gates: tests: - package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/flashblocks timeout: 5m - + - id: flashblocks-with-isthmus inherits: - isthmus @@ -92,3 +92,11 @@ gates: tests: - package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/sync_tester/sync_tester_ext_el timeout: 30m + + - id: jovian + inherits: + - base + description: "Jovian network tests." + tests: + - package: github.com/ethereum-optimism/optimism/op-acceptance-tests/tests/jovian + timeout: 10m \ No newline at end of file diff --git a/op-acceptance-tests/tests/jovian/min_base_fee_test.go b/op-acceptance-tests/tests/jovian/min_base_fee_test.go index 0fc54d1cf9c36..415371dbc2de6 100644 --- a/op-acceptance-tests/tests/jovian/min_base_fee_test.go +++ b/op-acceptance-tests/tests/jovian/min_base_fee_test.go @@ -38,8 +38,8 @@ type minBaseFee struct { } type minBaseFeeSystemConfig struct { - setMinBaseFee func(minBaseFee uint64) bindings.TypedCall[any] `sol:"setMinBaseFee"` - minBaseFee func() bindings.TypedCall[uint64] `sol:"minBaseFee"` + SetMinBaseFee func(minBaseFee uint64) bindings.TypedCall[any] `sol:"setMinBaseFee"` + MinBaseFee func() bindings.TypedCall[uint64] `sol:"minBaseFee"` } func newMinBaseFee(t devtest.T, l2Network *dsl.L2Network, l1EL *dsl.L1ELNode, l2EL *dsl.L2ELNode) *minBaseFee { @@ -48,7 +48,7 @@ func newMinBaseFee(t devtest.T, l2Network *dsl.L2Network, l1EL *dsl.L1ELNode, l2 bindings.WithTo(l2Network.Escape().Deployment().SystemConfigProxyAddr()), bindings.WithTest(t)) - originalMinBaseFee, err := contractio.Read(systemConfig.minBaseFee(), t.Ctx()) + originalMinBaseFee, err := contractio.Read(systemConfig.MinBaseFee(), t.Ctx()) t.Require().NoError(err, "reading original minBaseFee") return &minBaseFee{ @@ -65,7 +65,7 @@ func newMinBaseFee(t devtest.T, l2Network *dsl.L2Network, l1EL *dsl.L1ELNode, l2 } func (mbf *minBaseFee) checkCompatibility() bool { - _, err := contractio.Read(mbf.systemConfig.minBaseFee(), mbf.ctx) + _, err := contractio.Read(mbf.systemConfig.MinBaseFee(), mbf.ctx) if err != nil { mbf.t.Fail() return false @@ -81,23 +81,27 @@ func (mbf *minBaseFee) getSystemOwner() *dsl.EOA { func (mbf *minBaseFee) setMinBaseFee(minBaseFee uint64) { owner := mbf.getSystemOwner() - _, err := contractio.Write(mbf.systemConfig.setMinBaseFee(minBaseFee), mbf.ctx, owner.Plan()) + _, err := contractio.Write(mbf.systemConfig.SetMinBaseFee(minBaseFee), mbf.ctx, owner.Plan()) mbf.require.NoError(err, "setMinBaseFee transaction failed") mbf.t.Logf("Set min base fee on L1: minBaseFee=%d", minBaseFee) } func (mbf *minBaseFee) checkBaseFeeCanDecrease() { + var prevBlockNum uint64 // Ensure we are past genesis and collect a small sample across advancing blocks _ = mbf.l2EL.WaitForBlock() el := mbf.l2EL.Escape().EthClient() bases := make([]*big.Int, 0, 6) info, err := el.InfoByLabel(mbf.ctx, "latest") + prevBlockNum = info.NumberU64() mbf.require.NoError(err) bases = append(bases, info.BaseFee()) for range 5 { _ = mbf.l2EL.WaitForBlock() next, err := el.InfoByLabel(mbf.ctx, "latest") + mbf.require.Greater(next.NumberU64(), prevBlockNum, "expected block number to increase") + prevBlockNum = next.NumberU64() mbf.require.NoError(err) bases = append(bases, next.BaseFee()) } @@ -147,7 +151,11 @@ func (mbf *minBaseFee) waitForMinBaseFee(expected uint64) { } // Assert payload has Jovian extraData format (17 bytes) - actualExtraData := payload.ExecutionPayload.ExtraData + actualExtraData, err := payload.ExecutionPayload.ExtraData.MarshalText() + if err != nil { + mbf.t.Logf("Failed to get extra data: %v", err) + return false + } if len(actualExtraData) != 17 { mbf.t.Logf("ExtraData length is %d, expected 17 bytes for Jovian format", len(actualExtraData)) return false diff --git a/op-e2e/bindings/systemconfig.go b/op-e2e/bindings/systemconfig.go index 05d74beadbeb5..49be8b70df402 100644 --- a/op-e2e/bindings/systemconfig.go +++ b/op-e2e/bindings/systemconfig.go @@ -26,6 +26,7 @@ var ( _ = common.Big1 _ = types.BloomLookup _ = event.NewSubscription + _ = abi.ConvertType ) // IResourceMeteringResourceConfig is an auto generated low-level Go binding around an user-defined struct. @@ -43,14 +44,13 @@ type SystemConfigAddresses struct { L1CrossDomainMessenger common.Address L1ERC721Bridge common.Address L1StandardBridge common.Address - DisputeGameFactory common.Address OptimismPortal common.Address OptimismMintableERC20Factory common.Address } // SystemConfigMetaData contains all meta data concerning the SystemConfig contract. var SystemConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BATCH_INBOX_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DISPUTE_GAME_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"OPTIMISM_PORTAL_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"START_BLOCK_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VERSION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"basefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batchInbox\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"batcherHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"blobbasefeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"disputeGameFactory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Denominator\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip1559Elasticity\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAddresses\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"_config\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_batchInbox\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1ERC721Bridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"l1StandardBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"disputeGameFactory\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismPortal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\"}],\"internalType\":\"structSystemConfig.Addresses\",\"name\":\"_addresses\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1CrossDomainMessenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1ERC721Bridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l1StandardBridge\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maximumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumGasLimit\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeConstant\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"operatorFeeScalar\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismMintableERC20Factory\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"optimismPortal\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"overhead\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resourceConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"maxResourceLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"elasticityMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\"},{\"internalType\":\"uint32\",\"name\":\"minimumBaseFee\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"systemTxMaxGas\",\"type\":\"uint32\"},{\"internalType\":\"uint128\",\"name\":\"maximumBaseFee\",\"type\":\"uint128\"}],\"internalType\":\"structIResourceMetering.ResourceConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"scalar\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_batcherHash\",\"type\":\"bytes32\"}],\"name\":\"setBatcherHash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_denominator\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_elasticity\",\"type\":\"uint32\"}],\"name\":\"setEIP1559Params\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_overhead\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_scalar\",\"type\":\"uint256\"}],\"name\":\"setGasConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_basefeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\"}],\"name\":\"setGasConfigEcotone\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"}],\"name\":\"setGasLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\"}],\"name\":\"setOperatorFeeScalars\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_unsafeBlockSigner\",\"type\":\"address\"}],\"name\":\"setUnsafeBlockSigner\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"startBlock\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"startBlock_\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unsafeBlockSigner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"addr_\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\",\"name\":\"updateType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ConfigUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"}]", + ABI: "[{\"type\":\"constructor\",\"inputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"BATCH_INBOX_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_CROSS_DOMAIN_MESSENGER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_ERC_721_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"L1_STANDARD_BRIDGE_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_MINTABLE_ERC20_FACTORY_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"OPTIMISM_PORTAL_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"START_BLOCK_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UNSAFE_BLOCK_SIGNER_SLOT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VERSION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"basefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batchInbox\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"batcherHash\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"blobbasefeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"disputeGameFactory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Denominator\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"eip1559Elasticity\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"gasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getAddresses\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"guardian\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initVersion\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"_owner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_config\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]},{\"name\":\"_batchInbox\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"_addresses\",\"type\":\"tuple\",\"internalType\":\"structSystemConfig.Addresses\",\"components\":[{\"name\":\"l1CrossDomainMessenger\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1ERC721Bridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"l1StandardBridge\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismPortal\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"optimismMintableERC20Factory\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"isFeatureEnabled\",\"inputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1CrossDomainMessenger\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1ERC721Bridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l1StandardBridge\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"l2ChainId\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"maximumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"minBaseFee\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"minimumGasLimit\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeConstant\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"operatorFeeScalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismMintableERC20Factory\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"optimismPortal\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"overhead\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"owner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"paused\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdmin\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIProxyAdmin\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"proxyAdminOwner\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"renounceOwnership\",\"inputs\":[],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resourceConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structIResourceMetering.ResourceConfig\",\"components\":[{\"name\":\"maxResourceLimit\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"elasticityMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"baseFeeMaxChangeDenominator\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"minimumBaseFee\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"systemTxMaxGas\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"maximumBaseFee\",\"type\":\"uint128\",\"internalType\":\"uint128\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"scalar\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"setBatcherHash\",\"inputs\":[{\"name\":\"_batcherHash\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setEIP1559Params\",\"inputs\":[{\"name\":\"_denominator\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_elasticity\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setFeature\",\"inputs\":[{\"name\":\"_feature\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"_enabled\",\"type\":\"bool\",\"internalType\":\"bool\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfig\",\"inputs\":[{\"name\":\"_overhead\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_scalar\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasConfigEcotone\",\"inputs\":[{\"name\":\"_basefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_blobbasefeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setGasLimit\",\"inputs\":[{\"name\":\"_gasLimit\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setMinBaseFee\",\"inputs\":[{\"name\":\"_minBaseFee\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setOperatorFeeScalars\",\"inputs\":[{\"name\":\"_operatorFeeScalar\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"_operatorFeeConstant\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"setUnsafeBlockSigner\",\"inputs\":[{\"name\":\"_unsafeBlockSigner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"startBlock\",\"inputs\":[],\"outputs\":[{\"name\":\"startBlock_\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"superchainConfig\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"transferOwnership\",\"inputs\":[{\"name\":\"newOwner\",\"type\":\"address\",\"internalType\":\"address\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"unsafeBlockSigner\",\"inputs\":[],\"outputs\":[{\"name\":\"addr_\",\"type\":\"address\",\"internalType\":\"address\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"upgrade\",\"inputs\":[{\"name\":\"_l2ChainId\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"_superchainConfig\",\"type\":\"address\",\"internalType\":\"contractISuperchainConfig\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"version\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"string\",\"internalType\":\"string\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"ConfigUpdate\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint256\",\"indexed\":true,\"internalType\":\"uint256\"},{\"name\":\"updateType\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumSystemConfig.UpdateType\"},{\"name\":\"data\",\"type\":\"bytes\",\"indexed\":false,\"internalType\":\"bytes\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"FeatureSet\",\"inputs\":[{\"name\":\"feature\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"enabled\",\"type\":\"bool\",\"indexed\":true,\"internalType\":\"bool\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint8\",\"indexed\":false,\"internalType\":\"uint8\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"OwnershipTransferred\",\"inputs\":[{\"name\":\"previousOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"newOwner\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdmin\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOrProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotResolvedDelegateProxy\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_NotSharedProxyAdminOwner\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ProxyAdminOwnedBase_ProxyAdminNotFound\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReinitializableBase_ZeroInitVersion\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SystemConfig_InvalidFeatureState\",\"inputs\":[]}]", } // SystemConfigABI is the input ABI used to generate the binding from. @@ -154,11 +154,11 @@ func NewSystemConfigFilterer(address common.Address, filterer bind.ContractFilte // bindSystemConfig binds a generic wrapper to an already deployed contract. func bindSystemConfig(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) { - parsed, err := abi.JSON(strings.NewReader(SystemConfigABI)) + parsed, err := SystemConfigMetaData.GetAbi() if err != nil { return nil, err } - return bind.NewBoundContract(address, parsed, caller, transactor, filterer), nil + return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil } // Call invokes the (constant) contract method with params as input values and @@ -230,37 +230,6 @@ func (_SystemConfig *SystemConfigCallerSession) BATCHINBOXSLOT() ([32]byte, erro return _SystemConfig.Contract.BATCHINBOXSLOT(&_SystemConfig.CallOpts) } -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCaller) DISPUTEGAMEFACTORYSLOT(opts *bind.CallOpts) ([32]byte, error) { - var out []interface{} - err := _SystemConfig.contract.Call(opts, &out, "DISPUTE_GAME_FACTORY_SLOT") - - if err != nil { - return *new([32]byte), err - } - - out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte) - - return out0, err - -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - -// DISPUTEGAMEFACTORYSLOT is a free data retrieval call binding the contract method 0xe2a3285c. -// -// Solidity: function DISPUTE_GAME_FACTORY_SLOT() view returns(bytes32) -func (_SystemConfig *SystemConfigCallerSession) DISPUTEGAMEFACTORYSLOT() ([32]byte, error) { - return _SystemConfig.Contract.DISPUTEGAMEFACTORYSLOT(&_SystemConfig.CallOpts) -} - // L1CROSSDOMAINMESSENGERSLOT is a free data retrieval call binding the contract method 0x5d73369c. // // Solidity: function L1_CROSS_DOMAIN_MESSENGER_SLOT() view returns(bytes32) @@ -759,7 +728,7 @@ func (_SystemConfig *SystemConfigCallerSession) GasLimit() (uint64, error) { // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (SystemConfigAddresses, error) { var out []interface{} err := _SystemConfig.contract.Call(opts, &out, "getAddresses") @@ -776,14 +745,14 @@ func (_SystemConfig *SystemConfigCaller) GetAddresses(opts *bind.CallOpts) (Syst // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } // GetAddresses is a free data retrieval call binding the contract method 0xa39fac12. // -// Solidity: function getAddresses() view returns((address,address,address,address,address,address)) +// Solidity: function getAddresses() view returns((address,address,address,address,address)) func (_SystemConfig *SystemConfigCallerSession) GetAddresses() (SystemConfigAddresses, error) { return _SystemConfig.Contract.GetAddresses(&_SystemConfig.CallOpts) } @@ -912,6 +881,37 @@ func (_SystemConfig *SystemConfigCallerSession) MaximumGasLimit() (uint64, error return _SystemConfig.Contract.MaximumGasLimit(&_SystemConfig.CallOpts) } +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. +// +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigCaller) MinBaseFee(opts *bind.CallOpts) (uint64, error) { + var out []interface{} + err := _SystemConfig.contract.Call(opts, &out, "minBaseFee") + + if err != nil { + return *new(uint64), err + } + + out0 := *abi.ConvertType(out[0], new(uint64)).(*uint64) + + return out0, err + +} + +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. +// +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigSession) MinBaseFee() (uint64, error) { + return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) +} + +// MinBaseFee is a free data retrieval call binding the contract method 0xa62611a2. +// +// Solidity: function minBaseFee() view returns(uint64) +func (_SystemConfig *SystemConfigCallerSession) MinBaseFee() (uint64, error) { + return _SystemConfig.Contract.MinBaseFee(&_SystemConfig.CallOpts) +} + // MinimumGasLimit is a free data retrieval call binding the contract method 0x4add321d. // // Solidity: function minimumGasLimit() view returns(uint64) @@ -1284,25 +1284,25 @@ func (_SystemConfig *SystemConfigCallerSession) Version() (string, error) { return _SystemConfig.Contract.Version(&_SystemConfig.CallOpts) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactor) Initialize(opts *bind.TransactOpts, _owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "initialize", _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } -// Initialize is a paid mutator transaction binding the contract method 0xca407f0c. +// Initialize is a paid mutator transaction binding the contract method 0x01045829. // -// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address,address) _addresses) returns() -func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses) (*types.Transaction, error) { - return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses) +// Solidity: function initialize(address _owner, uint32 _basefeeScalar, uint32 _blobbasefeeScalar, bytes32 _batcherHash, uint64 _gasLimit, address _unsafeBlockSigner, (uint32,uint8,uint8,uint32,uint32,uint128) _config, address _batchInbox, (address,address,address,address,address) _addresses, uint256 _l2ChainId, address _superchainConfig) returns() +func (_SystemConfig *SystemConfigTransactorSession) Initialize(_owner common.Address, _basefeeScalar uint32, _blobbasefeeScalar uint32, _batcherHash [32]byte, _gasLimit uint64, _unsafeBlockSigner common.Address, _config IResourceMeteringResourceConfig, _batchInbox common.Address, _addresses SystemConfigAddresses, _l2ChainId *big.Int, _superchainConfig common.Address) (*types.Transaction, error) { + return _SystemConfig.Contract.Initialize(&_SystemConfig.TransactOpts, _owner, _basefeeScalar, _blobbasefeeScalar, _batcherHash, _gasLimit, _unsafeBlockSigner, _config, _batchInbox, _addresses, _l2ChainId, _superchainConfig) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -1431,6 +1431,27 @@ func (_SystemConfig *SystemConfigTransactorSession) SetGasLimit(_gasLimit uint64 return _SystemConfig.Contract.SetGasLimit(&_SystemConfig.TransactOpts, _gasLimit) } +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. +// +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigTransactor) SetMinBaseFee(opts *bind.TransactOpts, _minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.contract.Transact(opts, "setMinBaseFee", _minBaseFee) +} + +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. +// +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) +} + +// SetMinBaseFee is a paid mutator transaction binding the contract method 0x7616f0e8. +// +// Solidity: function setMinBaseFee(uint64 _minBaseFee) returns() +func (_SystemConfig *SystemConfigTransactorSession) SetMinBaseFee(_minBaseFee uint64) (*types.Transaction, error) { + return _SystemConfig.Contract.SetMinBaseFee(&_SystemConfig.TransactOpts, _minBaseFee) +} + // SetOperatorFeeScalars is a paid mutator transaction binding the contract method 0x155b6c6f. // // Solidity: function setOperatorFeeScalars(uint32 _operatorFeeScalar, uint64 _operatorFeeConstant) returns()